Cacti是一個廣泛應(yīng)用于監(jiān)控網(wǎng)絡(luò)設(shè)備和服務(wù)器的開源工具,而PHP Zombie則是Cacti中一個十分重要的組件。PHP Zombie能夠讓監(jiān)控器直接訪問被監(jiān)測設(shè)備的數(shù)據(jù),同時還能夠?qū)υO(shè)備的狀態(tài)進行提醒,這樣就可以在設(shè)備故障出現(xiàn)時,盡快采取措施解決問題,并避免影響到生產(chǎn)環(huán)境。
Cacti在使用時,必須在服務(wù)器上安裝PHP和SNMP擴展。這樣,Cacti中的PHP文件才能夠與SNMP服務(wù)通信,獲得設(shè)備的相關(guān)信息并進行監(jiān)控。PHP Zombie是Cacti的核心組件之一,負(fù)責(zé)處理SNMP代理的信息,并將結(jié)果緩存到Cacti的數(shù)據(jù)庫中。通常來說,PHP Zombie運行在后臺,對于設(shè)備的監(jiān)測不需要用戶進行操作。
我們來看一下PHP Zombie組件的源碼:
$returnValue = db_fetch_cell("SELECT COUNT(*) FROM snmp_query WHERE hostname = '" . mysql_real_escape_string($hostname) . "'");
if (!$returnValue) {
snmp_query_add($hostname, $host["snmp_community"]);
}
大家可以看到,這段代碼判斷了數(shù)據(jù)庫中是否記錄了 $hostname 這個設(shè)備名,如果沒有記錄,就添加到 snmp_query 表中。這樣,當(dāng)這個設(shè)備未被監(jiān)測時,就可以自動添加到監(jiān)測列表中。同時,在每個設(shè)備的監(jiān)測頁面上,PHP Zombie會根據(jù)設(shè)備的SNMP協(xié)議版本信息,選擇不同的函數(shù)進行數(shù)據(jù)的獲取。
當(dāng)然,在一些復(fù)雜的環(huán)境下,PHP Zombie可能會導(dǎo)致一些問題。那么如何避免這些問題呢?
首先,當(dāng)出現(xiàn)無法訪問SNMP設(shè)備的情況時,我們可以嘗試使用 snmpget 指令來查看設(shè)備是否可以使用SNMP協(xié)議進行訪問。如果這仍然不能解決問題,則可以嘗試在Web服務(wù)器和目標(biāo)設(shè)備之間進行網(wǎng)絡(luò)連接跟蹤,排查網(wǎng)絡(luò)故障。
其次,PHP Zombie的版本更新也是非常重要的。在低版本的Cacti中,PHP Zombie可能會占用大量內(nèi)存、CPU和磁盤資源,從而導(dǎo)致系統(tǒng)緩慢、宕機等問題。如果您的Cacti系統(tǒng)有這種情況,建議使用高版本Cacti軟件。
最后,當(dāng)我們遇到PHP Zombie無法自動運行時,應(yīng)該立即檢查火墻是否關(guān)閉了TCP端口161。這是因為snmpd需要這個端口來接收SNMP的請求。如果沒有打開這個端口,PHP Zombie就不能檢測到設(shè)備并添加到監(jiān)測列表中。
總之,只有正確的運行PHP Zombie才能使Cacti具有高效的網(wǎng)絡(luò)設(shè)備監(jiān)測能力,從而使整個運維工作變得更加便捷、高效。希望這篇文章能夠幫助您更好地使用Cacti和PHP Zombie。