忘却めも

ubuntu server 11.04 状態監視 のつづき

mrtgをインストール

設定ファイル"/etc/mrtg.cfg"が設置される。
$ sudo apt-get install mrtg

mrtg.cfgを作成

"cfgmaker"コマンドで"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>

index.html を作成

$ sudo su
# indexmaker /etc/mrtg.cfg > /var/www/mrtg/index.html
項目を追加した場合は、"indexmaker"コマンドを実行する。

ブラウザで、"ttp://IPアドレス/mrtg"にアクセスすると、以下の画面が表示される。

実行間隔

cronで変更する。初期は、5分間隔で取得するようになっている。
 /etc/cron.d/mrtg

その他

apache2のDocument Root

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>

NICのトラフィック

ネットワーク監視のため"/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 temp

HDDの温度監視は、MRTGから外部プログラムを使うことでHDDの温度が取得できる。その際に、外部プログラムは"hddtemp"パッケージを使う。
外部コマンドは、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

CPU temp

"sensors"コマンドからCPU温度を取得。Celeron G530は2コアなので、それぞれ取得した。
メモ
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>

Linux software raidの監視

個人サーバのため、異常検知時は、"mdadm --monitor"のメールを通知する程じゃないので、MRTGを使った異常検知を検討する。案は以下の3つ。(ハードウェアRAIDカードの場合は、付属の監視パッケージにSNMP機能があるので、それを利用する)
  1. mdadmコマンドの戻り値から状態を確認。
  2. "/proc/mdstat"ファイルの正常な状態をコピーし。コピー元とコピー先のdiffを確認。
  3. 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>

カウンタ

カウンター

管理人/副管理人のみ編集できます