mrtgのインストール

 このmrtgのインストールについては試行錯誤の連続であった。何とか動いたので経緯を書いておくが、これが正攻法かどうかは全く自信が無い。
  1. mrtgのインストール
  2. snmpとsnmpdのインストール
  3. /etc/snmp/snmpd.confの作成
  4. /etc/mrtg/mrtg.cfg の作成
  5. LS−GLの温度監視
  6. リモートホストの温度とCPU稼働率の監視
1.mrtgのインストール
# apt-get install mrtg
パッケージリストを読み込んでいます... 完了
依存関係ツリーを作成しています... 完了
以下の特別パッケージがインストールされます:
  libsnmp-session-perl
提案パッケージ:
  mrtg-contrib
推奨パッケージ:
  libsocket6-perl libio-socket-inet6-perl
以下のパッケージが新たにインストールされます:
  libsnmp-session-perl mrtg
アップグレード: 0 個、新規インストール: 2 個、削除: 0 個、保留: 30 個。
589kB のアーカイブを取得する必要があります。
展開後に追加で 1679kB のディスク容量が消費されます。
続行しますか [Y/n]?
取得:1 http://ftp2.jp.debian.org etch/main libsnmp-session-perl 1.08-1 [69.6kB]
取得:2 http://ftp2.jp.debian.org etch/main mrtg 2.14.7-2 [520kB]
589kB を 4s で取得しました (119kB/s)
パッケージを事前設定しています ...
未選択パッケージ libsnmp-session-perl を選択しています。
(データベースを読み込んでいます ... 現在 18997 個のファイルとディレクトリがイン ストールされています。)
(.../libsnmp-session-perl_1.08-1_all.deb から) libsnmp-session-perl を展開しています...
未選択パッケージ mrtg を選択しています。
(.../archives/mrtg_2.14.7-2_arm.deb から) mrtg を展開しています...
libsnmp-session-perl (1.08-1) を設定しています ...

mrtg (2.14.7-2) を設定しています ...


2.snmpとsnmpdのインストール
# apt-get install snmpd snmp
パッケージリストを読み込んでいます... 完了
依存関係ツリーを作成しています... 完了
以下の特別パッケージがインストールされます:
  libsensors3 libsnmp-base libsnmp9 libsysfs2
提案パッケージ:
  lm-sensors
以下のパッケージが新たにインストールされます:
  libsensors3 libsnmp-base libsnmp9 libsysfs2 snmp snmpd
アップグレード: 0 個、新規インストール: 6 個、削除: 0 個、保留: 30 個。
4863kB のアーカイブを取得する必要があります。
展開後に追加で 9064kB のディスク容量が消費されます。
続行しますか [Y/n]?
取得:1 http://ftp2.jp.debian.org etch/main libsysfs2 2.1.0-1 [24.8kB]
取得:2 http://ftp2.jp.debian.org etch/main libsensors3 1:2.10.1-3 [82.5kB]
取得:3 http://ftp2.jp.debian.org etch/main libsnmp-base 5.2.3-7etch2 [1215kB]
取得:4 http://ftp2.jp.debian.org etch/main libsnmp9 5.2.3-7etch2 [1778kB]
取得:5 http://ftp2.jp.debian.org etch/main snmp 5.2.3-7etch2 [928kB]
取得:6 http://ftp2.jp.debian.org etch/main snmpd 5.2.3-7etch2 [835kB]
4863kB を 41s で取得しました (117kB/s)
パッケージを事前設定しています ...
未選択パッケージ libsysfs2 を選択しています。
(データベースを読み込んでいます ... 現在 19116 個のファイルとディレクトリがイン ストールされています。)
(.../libsysfs2_2.1.0-1_arm.deb から) libsysfs2 を展開しています...
未選択パッケージ libsensors3 を選択しています。
(.../libsensors3_1%3a2.10.1-3_arm.deb から) libsensors3 を展開しています...
未選択パッケージ libsnmp-base を選択しています。
(.../libsnmp-base_5.2.3-7etch2_all.deb から) libsnmp-base を展開しています...
未選択パッケージ libsnmp9 を選択しています。
(.../libsnmp9_5.2.3-7etch2_arm.deb から) libsnmp9 を展開しています...
未選択パッケージ snmp を選択しています。
(.../snmp_5.2.3-7etch2_arm.deb から) snmp を展開しています...
未選択パッケージ snmpd を選択しています。
(.../snmpd_5.2.3-7etch2_arm.deb から) snmpd を展開しています...
libsysfs2 (2.1.0-1) を設定しています ...

libsensors3 (2.10.1-3) を設定しています ...

libsnmp-base (5.2.3-7etch2) を設定しています ...

libsnmp9 (5.2.3-7etch2) を設定しています ...

snmp (5.2.3-7etch2) を設定しています ...
snmpd (5.2.3-7etch2) を設定しています ...
chage: the shadow password file is not present
/usr/bin/chage failed with return code 15, shadow not enabled, password aging cannot be set. Continuing.
Starting network management services: snmpd.

3./etc/snmp/snmpd.confの作成
 最初デフォルトでは上手くアクセスできなかったため、ネットを参考に以下のとおり設定した。

 この設定の目的は、自ホストへのアクセスにはcommunity に localcom を使い、リモートホストに対するアクセスには securecom を使うことである。
 なお、この設定は、mrtg 稼働ホストと被監視リモートホストと共用のものである。

####
# First, map the community name (COMMUNITY) into a security name
# (local and mynetwork, depending on where the request is coming
# from):

#       sec.name  source          community
com2sec local     localhost       localcom
com2sec securenet 192.168.0.0/24  securecom
#com2sec readonly  default         public
#com2sec readwrite default         private

####
# Second, map the security names into group names:

#               sec.model  sec.name
group local_group v1       local
group local_group v2c      local
group local_group usm      local
group secure_group v1      securenet
group secure_group v2c     securenet
group secure_group usm     securenet

####
# Third, create a view for us to let the groups have rights to:

#           incl/excl subtree                          mask
#view all    included  .1                               80
#view system included  .iso.org.dod.internet.mgmt.mib-2.system
view view_all included .1
view view_mib2 included .1.3.6.1.2.1
view view_ucdavis included .1.3.6.1.4.1.2021

####
# Finally, grant the 2 groups access to the 1 view with different
# write permissions:

#                context sec.model sec.level match  read   write  notif
access local_group ""     any       noauth    exact  view_all none   none
access secure_group ""      any       noauth    exact  view_ucdavis    none   none
#access MyRWGroup ""      any       noauth    exact  all    all    none

 今回は、リモートホストに対する監視は .1.3.6.1.4.1.2021 で包含できるのでこの設定としている。

 
変更後は、/etc/init.d/snmpd restart で設定を反映することを忘れないこと。

 また、設定が有効かどうかは
 # snmpwalk -v 1 -c localcom localhost

 でmibの中身が大量に出てくれば成功である。今回の設定では個別のIPアドレスを指定する場合はsecurecomを使う必要があり、
 # snmpwalk -v 1 -c securecom 192.168.0.62 .1.3.6.1.4.1.2021
 とするが、この場合は.1.3.6.1.4.1.2021 まで指定しないと中身は出てこない。

4./etc/mrtg/mrtg.cfg の作成
  デフォルトでは/etc/mrtg.cfg となっているが、/etc/mrtg/mrtg.cfg に作成した。特に意味は無い。
  この/etc/mrtg/mrtg.cfgの作成は、ツールが用意されており、

  # /usr/bin/cfgmaker --output=/etc/mrtg/mrtg.cfg localcom@localhost

 これで、本体のネットワークインタフェースの稼働状況についての設定が自動作成される。
 LANの速度をかんしするだけであればこれで良いが、今回のテーマである温度とかCPUの稼働率のようなものは手入力する必要がある。
 mrtg.cfg 作成後は
 # env LANG=C /usr/bin/mrtg /etc/mrtg/mrtg.cfg

  で起動するが、最初は関連ファイルが無いため、色々エラーが出る。3回目にエラーが無くなれば正常である。エラーが無くならない場合は、内容に誤りがある のでエラーメッセージを良く見ながら修正する必要がある。正常に動作すれば、/var/www/mrtg/ に xxxx.html なるhtmlファイルが作成される。
 この操作は、監視項目を追加する度に実施する必要がある。

 これが終われば、定期的な起動 設定をする必要があり、デフォルトで /etc/cron.d/mrtg が用意されている。しかし今回は、mrtg.cfg の在処を変更しているので /etc/mrtg.cfg を /etc/mrtg/mrtg.cfg に修正する必要がある。ブラウザから http://192.168.0.70/mrtg/localhost_1.html でうまくいけばこのようなものが作成される。

トラフイック状況

 監視項目が増えてくると、一々URLで指定するのも面倒なので全監視項目が一望できるページがあれば便利である。そのような時のためにインデックスページを作成するツールも用意されており、

# /usr/bin/indexmaker /etc/mrtg/mrtg.cfg > /var/www/mrtg/index.html

 で以下の様なページか作成され、該当部分をクリックすることで詳細ページに進むことができる。

インデックスページ

5.LS−GLの温度監視

  温度はMIBには無いので、自前で取得して mrtg に渡してやる必要がある。
  フォーマットは、
      1行目 : 値1(整数・必須)
      2行目 : 値2(整数・必須)
      3行目 : システムが起動してから経過した時間(uptime)
      4行目 : 値の説明
  であり、ここを参考に温度監視のスクリプトを書いたが、何故か動かない。状況は、コマンドラインで実行するとちゃんと画面には表示されるが、cron で実行すると一行目の値が0になったり別の値になったりで正常に取得でき無い。
  色々コマンドの指定方法を変えてみたりしたが改善しない。どうも miconapl のコマンド自体で値の取得が出来ていないことに気がつき、以前このコマンドの代替ものを公開しているページかあったことを思いだし、それを使ってみた。それはmicon20070818.tar.gzであり tar zxvf で解凍するとソースと micon というバイナリーが出てくる。私の環境ではそのまま動いたので再コンパイルせずに使っている。

 使用方法は、miconapl と同じである。

 このようになった原因は良く分からないが、以前あったEABIとOABIの問題のようで、Debian化を山下氏の方法で miconapl はジェイルという別環境をもってくる方法で構築したため、これが影響しているのかも知れない。

 何分、理屈を理解しないまま闇雲に試しているだけなので、原因の究明は望べくもなく、ただ動いたということで済ましている。

 以下に今回使用したスクリプトを示しておく。55 は目安の値で特に無くても支障はないが値の比較には便利である。
 /usr/local/mrtg/bin なるディレクトリーを作成してそこにスクリプトを入れている。
 また、micon も同じディレクトリーにコピーした。

/usr/local/mrtg/bin/mon_temp.pl 
#!/usr/bin/perl --

$temp = `/usr/local/mrtg/bin/micon -a temp_get`;
$temp =~ s/temp=//;
print "$temp" . "55\n\nlocalhost\n";

 また、 /etc/mrtg/mrtg.cfg にも以下の内容を追記した。

####### temp_get
Options[temp]: gauge,growright,nopercent,unknaszero
MaxBytes[temp]: 75
YLegend[temp]: Temperature
ShortLegend[temp]: C-deg
LegendI[temp]:TEMP
LegendO[temp]:borderline
Unscaled[temp]: ymwd

Target[temp]: `/usr/local/mrtg/bin/mon_temp.pl`
Title[temp]: Temperature Infomation
PageTop[temp]: <H1>Temperature Information on localhost</H1>


6.リモートホストの温度とCPU稼働率の監視

  mrtg におけるリモートホストの監視も snmp を使う。従って監視したいホストにも snmp と anmpd をインストールする。
  /etc/snmp/snmpd.conf の設定は上で示した方法で、コミュニティとしてIPアドレスでの呼び出しとなるので securecom を使用する。

   また、呼出についてはCPUの稼働率についてはMIBコードがあるのでそれを指定すれば良いが、温度についてはそれがないので、上で作った mon_temp.pl と関係の micon を被監視ホストにコピーするとともに /etc/snmp/snmpd.conf の中にある Executables/scripts の最後あたりに以下のものを追記する。
###############################################################################
# Executables/scripts

exec mon_fan /usr/bin/perl /usr/local/mrtg/bin/mon_temp.pl

 この追加した項目のMIBコードは、.1.3.6.1.4.1.2021.8.1.101.1 のようである。
 さらに監視側ホストの /etc/mrtg/mrtg.cfg については以下の内容を追記する。

#### CPU HomeServer ###
Options[cpu-62]: gauge,absolute,integer,growright,nopercent
MaxBytes[cpu-62]: 100
Ylegend[cpu-62]: CPU Load Avelage
Legend1[cpu-62]: 1 min CPU Load Average
Legend2[cpu-62]: 5 min CPU Load Average
LegendI[cpu-62]: 1min
LegendO[cpu-62]: 5min
ShortLegend[cpu-62]: percent (%)
Unscaled[cpu-62]: ymwd

Target[cpu-62]: `/usr/local/mrtg/bin/cpu-62.pl`
Title[cpu-62]: CPU Load Average for HomeServer(62)
PageTop[cpu-62]: <H1>CPU Load Average for HomeServer(62)</H1>

### temp (HomeServer) ###
Options[temp-62]: gauge,growright,nopercent,unknaszero
MaxBytes[temp-62]: 75
Ylegend[temp-62]: Temperature
ShortLegend[temp-62]: C-deg
LegendI[temp-62]:TEMP
LegendO[temp-62]:borderline
Unscaled[temp-62]: ymwd

Target[temp-62]: `snmpwalk -v 1 -c securecom 192.168.0.62 .1.3.6.1.4.1.2021.8.1.101.1 | awk '{print $4} {print "55"} {print "HomeServer(62)"}'`
Title[temp-62]: Temperature Infomation HomeServer(62)
PageTop[temp-62]: <H1>Temperature Homeserver(62)</H1>

 リモートホストからのデータ取得には snmpwalk を用いるが、このコマンドは一度に値を一つしか取得できないため、今回のCPUについては2値の取得が必要なため、以下のcpu-62.pl なるスクリプトを使用する。
  不要文字の削除用に awk を使ったものを多く見受けたが、私の環境では上手く機能せず結局、以下のようなもので対応している。

/usr/local/mrtg/bin/cpu-62.pl
#!/usr/bin/perl  --
$data1 = `/usr/bin/snmpwalk -v 1 -c securecom 192.168.0.62 .1.3.6.1.4.1.2021.10.1.5.1`;
$data1 =~ s/UCD-SNMP-MIB::laLoadInt.1 = INTEGER: //;
$data2 = `/usr/bin/snmpwalk -v 1 -c securecom 192.168.0.62 .1.3.6.1.4.1.2021.10.1.5.2`;
$data2 =~ s/UCD-SNMP-MIB::laLoadInt.2 = INTEGER: //;
print "$data1";
print "$data2";
print "\n";
print "HomeServer";


ホームページトップ  LinkStationトップ