最終更新: vanillalab 2011年10月27日(木) 01:17:40履歴
ubuntu server 11.04 状態監視 のつづき
"cfgmaker"コマンドで"mrtg.cfg"ファイルを出力し、"/etc/mrtg.cfg"と置き換える。
"/etc/mrtg.cfg"ファイルに以下を追加した。
$ sudo /usr/bin/cfgmaker --no-down private@localhost > /tmp/mrtg.cfg
- 監視対象のマシンがリモートにある場合は、localhostをIPにして、SNMPのコミュニティ名をpublicに指定する。
- mrtgが生成した結果ファイルは/var/www/mrtgに出力される。ディレクトリを作成する。
"/etc/mrtg.cfg"ファイルに以下を追加した。
## add 2011-10-22 # MaxBytes[]: 100 #データの最大値(100%) # Unscaled[]: dwmy #データに合わせて拡大縮小しない(100%まで縦軸を表示) # Options[cpu]: gauge, absolute, growright, noinfo, nopercent # gauge :データの値の差をとらない(取得情報は既に平均値) # absolute :gauge同様データの値の差をとらず、計測時間間隔で割った値 # growright:グラフの横軸(時間)を左が過去になるよう指定 # noinfo :HTMLの先頭にデバイス名等を表示しない # nopercent:パーセント表示しない(取得情報は既に%値) # withzeroes:0であるデータを無視しない ## CPU USED Target[cpu]: .1.3.6.1.4.1.2021.11.50.0&.1.3.6.1.4.1.2021.11.52.0:public@192.168.0.29 MaxBytes[cpu]: 100 Options[cpu]: growright,noinfo,nopercent YLegend[cpu]: CPU usage(%) ShortLegend[cpu]: (%) LegendI[cpu]: user LegendO[cpu]: system Legend1[cpu]: CPU usage(user)(%) Legend2[cpu]: CPU usage(system)(%) Title[cpu]: CPU usage PageTop[cpu]: <h1>CPU usage</h1> # MEM Free Target[mem]: .1.3.6.1.4.1.2021.4.6.0&.1.3.6.1.4.1.2021.4.4.0:public@192.168.0.29 MaxBytes1[mem]: 3972044 MaxBytes2[mem]: 3972044 Unscaled[mem]: dwmy Options[mem]: gauge, absolute, growright,withzeroes YLegend[mem]: Memory Free (MB) ShortLegend[mem]:Bytes kilo[mem]: 1024 kMG[mem]: k,M LegendI[mem]: Rea LegendO[mem]: Swap Legend1[mem]: Physics Memory(MB) Legend2[mem]: Physice Swap(MB) Title[mem]: Memory Free PageTop[mem]: <h1>Memory Free</h1>
ubuntu server 11.04 は、 "/etc/apache2/sites-available/default"ファイル に Document Root の設定が記述されている。
4 DocumentRoot /var/www 5 <Directory /> 6 Options FollowSymLinks 7 AllowOverride None 8 </Directory> 9 <Directory /var/www/> 10 Options Indexes FollowSymLinks MultiViews 11 AllowOverride None 12 Order allow,deny 13 allow from all 14 </Directory>
ネットワーク監視のため"/etc/mrtg.cfg"ファイルに以下を追加した。
## eth0 Target[eth0]: \eth0:public@192.168.0.29: Options[eth0]: growright,noinfo,nopercent SetEnv[eth0]: MRTG_INT_IP="192.168.0.29" MRTG_INT_DESCR="eth0" MaxBytes[eth0]: 12500000 Title[eth0]: eth0 traffic PageTop[eth0]: <h1> eth0 traffic</h1>
HDDの温度監視は、MRTGから外部プログラムを使うことでHDDの温度が取得できる。その際に、外部プログラムは"hddtemp"パッケージを使う。
外部コマンドは、4行の文字列を返す必要がある。詳細は、MRTGのドキュメントを参照。3行目の稼働時間は、ドキュメントを見る限り特にフォーマットは決まっていないと思う。(1行目と2行目だけでも正常に機能した。)
1行目 最初の値の現在の状況。通常は「入力バイトのカウント」
2行目 2番目の値の現在の状況。通常は「出力バイトのカウント」
3行目 監視対象の稼働時間を示すストリング (人間が読めるフォーマットで)。
4行目 監視対象の名前を示すストリング
"/etc/mrtg.cfg"ファイルへ出力コマンドを記述したり、別途、出力するスクリプトを作成しMRTGがスクリプトを実行する方法が考えられる。ここでは、前者の出力コマンドを記述する。
出力コマンドの例
"/etc/mrtg.cfg"ファイルへ下記を追加した。
MRTGドキュメント ttp://www.mrtg.jp/doc/reference.html
外部コマンドは、4行の文字列を返す必要がある。詳細は、MRTGのドキュメントを参照。3行目の稼働時間は、ドキュメントを見る限り特にフォーマットは決まっていないと思う。(1行目と2行目だけでも正常に機能した。)
1行目 最初の値の現在の状況。通常は「入力バイトのカウント」
2行目 2番目の値の現在の状況。通常は「出力バイトのカウント」
3行目 監視対象の稼働時間を示すストリング (人間が読めるフォーマットで)。
4行目 監視対象の名前を示すストリング
"/etc/mrtg.cfg"ファイルへ出力コマンドを記述したり、別途、出力するスクリプトを作成しMRTGがスクリプトを実行する方法が考えられる。ここでは、前者の出力コマンドを記述する。
出力コマンドの例
$ sudo hddtemp -n /dev/sda /dev/sdb;uptime | awk '{print $3$4$5}' | sed -e "s/,//g";echo "HDD Temp" 29 31 1day3:02 HDD Temp(たぶん、このスクリプトは、再起動するとuptimeの"1day"部分が消えるからawkでおかしくなると思う。他のサイトを参考にしてください。)
"/etc/mrtg.cfg"ファイルへ下記を追加した。
## HDD Temp Target[hddtemp]: `/usr/sbin/hddtemp -n /dev/sda /dev/sdb;uptime | awk '{print $3$4$5}' | sed -e "s/,//g";echo "HDD Temp"` MaxBytes1[hddtemp]: 60 MaxBytes2[hddtemp]: 60 Options[hddtemp]: growright,absolute,gauge,nopercent,noinfo Unscaled[hddtemp]: dwmy YLegend[hddtemp]: HDD Temp(C) ShortLegend[hddtemp]: C LegendI[hddtemp]: /dev/sda LegendO[hddtemp]: /dev/sdb Legend1[hddtemp]: sda Temp(C) Legend2[hddtemp]: sdb Temp(C) Title[hddtemp]: HDD Temp PageTop[hddtemp]: <h1>HDD Temp</h1>参考
MRTGドキュメント ttp://www.mrtg.jp/doc/reference.html
"sensors"コマンドからCPU温度を取得。Celeron G530は2コアなので、それぞれ取得した。
メモ
sedコマンドの記述で"s/[^0-9+\.]//g"は、数字とピリオドではないものをnullに置換する。
メモ
sedコマンドの記述で"s/[^0-9+\.]//g"は、数字とピリオドではないものをnullに置換する。
## CPU Temp Target[cputemp]: `/usr/bin/sensors | grep Core | awk '{print $3}' | sed -e "s/+//" -e "s/[^0-9+\.]//g"` MaxBytes1[cputemp]: 60 MaxBytes2[cputemp]: 60 Options[cputemp]: growright,absolute,gauge,nopercent,noinfo Unscaled[cputemp]: dwmy YLegend[cputemp]: CPU Temp(C) ShortLegend[cputemp]: C LegendI[cputemp]: Core0 LegendO[cputemp]: Core1 Legend1[cputemp]: Core0 Temp(C) Legend2[cputemp]: Core1 Temp(C) Title[cputemp]: CPU Temp PageTop[cputemp]: <h1>CPU Temp</h1>
個人サーバのため、異常検知時は、"mdadm --monitor"のメールを通知する程じゃないので、MRTGを使った異常検知を検討する。案は以下の3つ。(ハードウェアRAIDカードの場合は、付属の監視パッケージにSNMP機能があるので、それを利用する)
簡単な3番目の"State : clean"を注目する。下記のスクリプトは、出力結果に"grep"コマンドを実行し、"wc"コマンドで行数をカウントする。これらの出力は、"0"異常、"1"正常と判定できる。
- mdadmコマンドの戻り値から状態を確認。
- "/proc/mdstat"ファイルの正常な状態をコピーし。コピー元とコピー先のdiffを確認。
- mdadm --detail の出力で、"State : clean"に注目。
簡単な3番目の"State : clean"を注目する。下記のスクリプトは、出力結果に"grep"コマンドを実行し、"wc"コマンドで行数をカウントする。これらの出力は、"0"異常、"1"正常と判定できる。
$ sudo /sbin/mdadm --detail /dev/md0 | grep clean | wc -l 1
## raid state Target[raidstat]: `/sbin/mdadm --detail /dev/md0 | grep clean | wc -l` MaxBytes[raidstat]: 1 Options[raidstat]: growright,absolute,gauge,noinfo,nopercent Unscaled[raidstat]: dwmy YLegend[raidstat]: raid(0=NG,1=OK) ShortLegend[raidstat]: state LegendI[raidstat]: raidstat LegendO[raidstat]: (0=NG, 1=OK) Legend1[raidstat]: 0=NG, 1=OK Legend2[raidstat]: Title[raidstat]: RAID state PageTop[raidstat]: <h1>RAID State</h1>
最新コメント