« WordPress及外掛的升級 | Home | Snow Leopard的系統字 »
以Cacti監測OSX主機效能
最近迷上了Cacti,不只在公司裝了,在家裡也給弄了一套-雖然家裡只有一台主機需要監測。
安裝Cacti的過程就不用多提了,不外就是先把MySQL、Apache2、SNMP的設定先弄好,而RRDTool與Cacti都可以直接透過PORT來安裝。不過Cacti所內附與效能監測相關的script與template,都是給Linux用的,在OSX上多半會有問題,畢竟指令與所帶參數都有不小的差異。所幸OSX可用的script,已經有善心人士寫好了,下載與安裝可以參考這裡跟這裡。

唯一要注意的一點是關於啟動Cacti用來汲取資料的那支Poller.php程式,以及實際產生監測資料的script。一般的方法是在/etc/crontab裡加上:
*/5 * * * * cactiuser php /var/www/cacti/poller.php > /dev/null 2>&1
其中第一行是用來產生監測資料的script。但是就如同先前所發現的,crond已經是過時的設定方式,因此要化簡為繁地弄成這樣:
org.machx.snmp-data.plist
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> <plist version="1.0"> <dict> <key>Label</key> <string>org.machx.snmp-data</string> <key>ProgramArguments</key> <array> <string>/opt/net-snmp/scripts/cacti.bash</string> </array> <key>StartInterval</key> <integer>300</integer> <key>AbandonProcessGroup</key> <true/> <key>UserName</key> <string>root</string> </dict> </plist> |
這裡要特別注意的是第13、14行:lanuchd啟動/opt/net-snmp/scripts/cacti.bash後,/opt/net-snmp/scripts/cacti.bash裡有另外啟動了其他子程序;若不使用參數AbandonProcessGroup,則launchd會不管子程序是否執行完畢、一律garbage-collect掉,資料就收集不起來。
org.cacti.cactiPoller.plist
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> <plist version="1.0"> <dict> <key>Label</key> <string>org.cacti.cactiPoller</string> <key>ProgramArguments</key> <array> <string>/usr/bin/php</string> <string>/var/www/cacti/poller.php</string> </array> <key>RunAtLoad</key> <true/> <key>StartInterval</key> <integer>300</integer> <key>UserName</key> <string>cactiuser</string> <key>StandardOutPath</key> <string>/dev/null</string> <key>StandardErrorPath</key> <string>/dev/null</string> </dict> </plist> |
這裡要注意的是第18-21行。原本在crontab的寫法是php /var/www/cacti/poller.php > /dev/null 2>&1,也就是把stdout與stderr都導向到/dev/null。原先直覺的想法是這樣寫:
<array>
<string>/usr/bin/php</string>
<string>/var/www/cacti/poller.php</string>
<string>></string>
<string>/dev/null</string>
<string>2>&1></string>
</array>
也就是要執行的程式名稱、所帶參數凡是有空白的就當做一個string分割開來。不過這是錯誤的。在launchd的格式中,stdout與stderr的重導向,必須要用StandardOutPath與StandardErrorPath兩個參數來指定。




No comments
Jump to comment form | comments rss | trackback uri