« | Home | »

以Cacti監測OSX主機效能

最近迷上了Cacti,不只在公司裝了,在家裡也給弄了一套-雖然家裡只有一台主機需要監測。

安裝Cacti的過程就不用多提了,不外就是先把MySQL、Apache2、SNMP的設定先弄好,而RRDTool與Cacti都可以直接透過PORT來安裝。不過Cacti所內附與效能監測相關的script與template,都是給Linux用的,在OSX上多半會有問題,畢竟指令與所帶參數都有不小的差異。所幸OSX可用的script,已經有善心人士寫好了,下載與安裝可以參考這裡這裡
Cacti監測圖
唯一要注意的一點是關於啟動Cacti用來汲取資料的那支Poller.php程式,以及實際產生監測資料的script。一般的方法是在/etc/crontab裡加上:

*/5 * * * * root    /opt/net-snmp/scripts/cacti.bash
*/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。原先直覺的想法是這樣寫:

    <key>ProgramArguments</key>
    <array>
        <string>/usr/bin/php</string>
        <string>/var/www/cacti/poller.php</string>
                <string>&gt;</string>
                <string>/dev/null</string>
                <string>2&gt;&1></string>
    </array>

也就是要執行的程式名稱、所帶參數凡是有空白的就當做一個string分割開來。不過這是錯誤的。在launchd的格式中,stdout與stderr的重導向,必須要用StandardOutPath與StandardErrorPath兩個參數來指定。

貼標籤:


About this entry