お仕事で運用しているPalo AltoのCPU使用率を時系列で見たいため、MRTGをインストールして見ることにした。
前回の基本インストールで webサーバはインストール済み。snmp関連とMRTGのインストールを実行しました。(横着して –y オプションを指定しているが、確認しながらインストールするのだったら無しが吉。)
# yum -y install net-snmp net-snmp-utils mrtg |
snmp関連の設定は共通の設定を使い回しているので割愛します。
サービスの起動とシステム起動時に自動起動するよう設定を行います。(とうか、ターゲットが今回は自機ではないのでsnmpdは動いていなくてもいいんだけど。そのうち自機もMRTGで値を表示する予定なので、事前準備ということで。)
# serive snmpd start Starting snmpd: [ OK ]
# chkconfig snmpd on |
動作確認 (testcomはsnmpd.confで設定したコミュニティ名)
だらだらとMIBの表示されているので問題はなさそうです。
# snmpwalk -v2c -c testcom 192.168.17.1 system SNMPv2-MIB::sysDescr.0 = STRING: Palo Alto Networks PA-3000 series firewall SNMPv2-MIB::sysObjectID.0 = OID: SNMPv2-SMI::enterprises.25461.2.3.17 DISMAN-EVENT-MIB::sysUpTimeInstance = Timeticks: (2632929089) 304 days, 17:41:30.89 SNMPv2-MIB::sysContact.0 = STRING: Not Set SNMPv2-MIB::sysName.0 = STRING: fw01 SNMPv2-MIB::sysLocation.0 = STRING: Unknown SNMPv2-MIB::sysORLastChange.0 = Timeticks: (1) 0:00:00.01 |
mrtg.cfg の作成ですが cfgmaker ではなく直接作成してみました。
表示・集計用のファイルですが、デフォルトですとそれぞれ
/var/www/mrtg
/var/lib/mrtg
に作成されます。
今は1ファイルだけなのでデフォルト設定でもよいのですが、将来(あるのか?)色々とMRTGで表示をすることを鑑み、なんたらmrtg の下にディレクトリを作成し保存することにしました。Targetの下に記述してあるDirectoryなんちゃらで保存先を指定します。
HtmlDir: /var/www/mrtg ImageDir: /var/www/mrtg LogDir: /var/lib/mrtg ThreshDir: /var/lib/mrtg Options[_]: growright, bits Target[fw01_cpu]: .1.3.6.1.2.1.25.3.3.1.2.1&.1.3.6.1.2.1.25.3.3.1.2.2:testcom@192.168.17.1: Directory[fw01_cpu]: fw01_cpu MaxBytes[fw01_cpu]: 100 Unscaled[fw01_cpu]: dwmy Options[fw01_cpu]: gauge, absolute, growright, noinfo, nopercent YLegend[fw01_cpu]: CPU Load(%) ShortLegend[fw01_cpu]: (%) LegendI[fw01_cpu]: 1分間平均 LegendO[fw01_cpu]: 5分間平均 Legend1[fw01_cpu]: 1分間平均(%) Legend2[fw01_cpu]: 5分間平均(%) Title[fw01_cpu]: fw01_CPU使用率 PageTop[fw01_cpu]: <h1>Palo Alto_CPU使用率</h1>
|
さて、これでmrtgを 3回起動すれば(過去ファイルを処理するため初回は 2回目実行分まで警告が出るため) ok! と思ったのですがエラーで撃沈。
SNMP Error: no response received SNMPv1_Session (remote host: "192.168.17.1" [192.168.17.1].161) community: "testcom" request ID: 266603886 PDU bufsize: 8000 bytes timeout: 2s retries: 5 backoff: 1) at /usr/bin/../lib64/mrtg2/SNMP_util.pm line 492 SNMPGET Problem for .1.3.6.1.2.1.25.3.3.1.2.1 .1.3.6.1.2.1.25.3.3.1.2.2 sysUptime sysName on testcom@192.168.17.1::::::v4only at /usr/bin/mrtg line 2203 2016-06-08 13:25:11: WARNING: skipping because at least the query for .1.3.6.1.2.1.25.3.3.1.2.1 on 192.168.17.1 did not succeed 2016-06-08 13:25:11: WARNING: no data for .1.3.6.1.2.1.25.3.3.1.2&.1.3.6.1.2.1.25.3.3.1.2:testcom@192.168.17.1. Skipping further queries for Host 192.168.17.1 in this round. 2016-06-08 13:25:21: ERROR: Target[fw01_cpu][_IN_] ' $target->[0]{$mode} ' did not eval into defined data 2016-06-08 13:25:21: ERROR: Target[fw01_cpu][_OUT_] ' $target->[0]{$mode} ' did not eval into defined data |
どうもsnmpgetでの情報取得に失敗しているようです。snmpwalkは値が返ってくるのに、なんでsnmpgetで失敗するのか見当が付きません。試しに別の機器にsnmpwalkとsnmpgetを実行してみると問題なく値が返ってくる。
色々調べましたが、数時間で解決はしませんでした...
2016/06/08 16:52 追記
Tergetの記述で ipアドレス:::::2 とすれば問題が解決することが判明。
もう少々 MRTG の記述を勉強しないと駄目だな。→ ちょっとしました(2016/06/09)。
以下、やっつけスクリプトの手順を書いておく。snmpで値が取得できず、スクリプトを書く必要に迫られるケースもあるはずなので。
とはいうものの、
- 第1パラメータ値
- 第2パラメータ値
- 稼働時間
- ホスト名
を返してあげればいいらしいことが分かりました。snmpwalkで値が返ってくるので、スクリプトを作成することにしました。ファイル名はfw01-cpu.shとし、/etc/mrtg 配下に置くことにします。
#!/bin/sh LANG=C export LANG CPU1=`snmpwalk -v2c -c testcom 192.168.17.1 .1.3.6.1.2.1.25.3.3.1.2.1 | cut -d " " -f 4` CPU5=`snmpwalk -v2c -c testcom 192.168.17.1 .1.3.6.1.2.1.25.3.3.1.2.2 | cut -d " " -f 4` UPTIME=`snmpwalk -v2c -c testcom 192.168.17.1 .1.3.6.1.2.1.1.3 | cut -d " " -f 5-8` echo "$CPU1" echo "$CPU5" echo "$UPTIME" echo "CPU Load Average(fw01)" |
mrtg.cfg の Targetなんちゃら行を次のように書き換えました。
Target [fw01_cpu]: .1.3.6.1.2.1.25.3.3.1.2.1&.1.3.6.1.2.1.25.3.3.1.2.2:testcom@192.168.17.1:
|
Target [fw01_cpu]: `/etc/mrtg/fw01-cpu.sh` |
あとは mrtg.cfgを 3回実行し、crontabに5分ごとに実行するよう設定をすれば完成です。(実際にはインストール時に /etc/cron.d/mrtg が作成されているので、何もしなくてokだったりますが。)
indexmaker を使って監視対象機器ごとのHTMLファイルにリンクを張ったindex.htmlを作ってもよいのですが、自分は htmlエディタを使ってindex.htmlファイルを作成しました。
随分前に使ったときは、漢字は eucでないと上手く動かない気がしたんですが、いつも間にかそんな制約もなくなったようです。yum でサクッと入れられるし、随分便利になってきましたね。configure; make~ していた頃が懐かしい。