2016年6月8日水曜日

CentOSにMRTGをインストールする

お仕事で運用している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. 第1パラメータ値
  2. 第2パラメータ値
  3. 稼働時間
  4. ホスト名

を返してあげればいいらしいことが分かりました。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~ していた頃が懐かしい。

0 件のコメント:

コメントを投稿