MRTG とは二つの系列のデータのデータをグラフにしてブラウザで見られるようにする仕組み。 今回はトラフィックデータと CPU 負荷を snmp で取得し、mrtg で表示させるようにした。
会社のネットワーク管理者なんかやっていると、トラフィック量がドレくらいなのか知りたくなる。 なぜって?専用線は一定のトラフィックまでなら費用が固定だから。 利用者に「線が細いんじゃねーの?」とか言われても、「空いているよ」とか「その時間はちょっと混んでますな」とか言えるわけ。 専用線の契約をより太くしたり細くしたりの加減もトラフィック量がわかれば最適化が測れるハズなのだ。 で、このトラフィック量をグラフで可視化してくれるツールが MRTG だ。
あるいは、サーバを運用していると CPU の負荷やサーバのトラフィック量、使用メモリ量などなど見たいこともある。 下のような top コマンドの結果でもいいといえばいいのだが、履歴をとろうとおもったらソレはログとって解析してと面倒なことこの上ない。
そこで、 CPU 負荷を、あるいはディスク使用量を情報としてとってグラフにすれば「履歴として一丁あがり!」だし、サーバを増強するかどうかの目安にもなろう。 このCPU 負荷グラフ化ツールに本来ルータのトラフィック計測のツールの MRTG を使うことにした。09:22:44 up 94 days, 15:55, 2 users, load average: 0.07, 0.02, 0.00 41 processes: 40 sleeping, 1 running, 0 zombie, 0 stopped CPU states: 9.1% user, 9.1% system, 0.0% nice, 81.8% idle Mem: 513912K total, 494808K used, 19104K free, 28852K buffers Swap: 498004K total, 2472K used, 495532K free, 327340K cached PID USER PRI NI SIZE RSS SHARE STAT %CPU %MEM TIME COMMAND 21419 shibata 18 0 940 940 748 R 18.9 0.1 0:03 top 1 root 8 0 460 408 388 S 0.0 0.0 0:04 init 2 root 9 0 0 0 0 SW 0.0 0.0 0:00 keventd 3 root 19 19 0 0 0 SWN 0.0 0.0 0:00 ksoftirqd_CPU0 4 root 9 0 0 0 0 SW 0.0 0.0 1:54 kswapd 5 root 9 0 0 0 0 SW 0.0 0.0 0:00 bdflush 6 root 9 0 0 0 0 SW 0.0 0.0 0:22 kupdated 7 root 9 0 0 0 0 SW 0.0 0.0 0:00 scsi_eh_0 156 root 9 0 756 744 640 S 0.0 0.1 0:37 syslogd 159 root 9 0 1068 388 388 S 0.0 0.0 0:00 klogd 174 root 8 0 720 664 640 S 0.0 0.1 0:01 inetd
観測される装置について
観測装置について
Debian GNU/Linux で構築したのでチョー簡単、インストール作業はコマンド一発
ただし設定しないと動き出さないので、下のように /etc/snmp/snmpd.conf を$ sudo apt-get install snmpd
のように書き換えて、 snmpd を再起動する====================================================== インストール直後の状態 # sec.name source community com2sec paranoid default public #com2sec readonly default public #com2sec readwrite default private ====================================================== ↓ ====================================================== このように変えた # sec.name source community #com2sec paranoid default public ←コメントにした com2sec readonly 172.16.10.13 public ← 172.16.10.13 からだけアクセス許可した #com2sec readwrite default private ====================================================== ====================================================== インストール直後の状態 syslocation Unknown (configure /etc/snmp/snmp.local.conf) syscontact Root(configure /etc/snmp/snmp.local.conf) ====================================================== ↓ ====================================================== このように変えた syslocation Hoge (configure /etc/snmp/snmp.local.conf) ←こんな風に syscontact hoge ←こんな風に ======================================================
これで準備が整ったはず。$ sudo /etc/init.d/snmpd restart
今回専用ルータを設定したが CISCO だったので、こんな感じの追加をした。
access-list 1 permit 172.16.10.13 ← 1 の許可グループのなかに 172.16.10.13 を加えた snmp-server engineID local XXXXXXXXXXXXXXXXXXXXXXXX ← XXXX はマニュアル参照のこと snmp-server community public RO 1 ← 1 グループに public コミュニティで読み取り専用
Debian GNU/Linux で構築したのでチョー簡単、インストール作業はコマンド一発
うそじゃないよ、これだけで十分だからね。ま、後でツールを入れるけど最低限はこれだけ。$ sudo apt-get install mrtg
要は snmp を話してくれる装置に「コレコレの情報ちょうだいな」と請求するわけだ。
Debian GNU/Linux で構築したのでチョー簡単、インストール作業はコマンド一発で終了
$ sudo apt-get install snmp
snmp で情報取得がうまく行くとこんな風になるハズ(要するになんか沢山でてくる)。
$ snmpwalk -v 1 172.16.10.1 public system ← 172.16.10.1 の装置に対しての問い合わせ system.sysDescr.0 = Linux dolphin 2.4.18-bf2.4 #1 Son Apr 14 09:53:28 CEST 2002 i686 system.sysObjectID.0 = OID: enterprises.ucdavis.ucdSnmpAgent.linux system.sysUpTime.0 = Timeticks: (101949953) 11 days, 19:11:39.53 system.sysContact.0 = hogesystem.sysName.0 = dolphin system.sysLocation.0 = Hanno (configure /etc/snmp/snmp.local.conf) system.sysORLastChange.0 = Timeticks: (0) 0:00:00.00 system.sysORTable.sysOREntry.sysORID.1 = OID: ifMIB system.sysORTable.sysOREntry.sysORID.2 = OID: .iso.org.dod.internet.snmpV2.snmpModules.snmpMIB system.sysORTable.sysOREntry.sysORID.3 = OID: tcpMIB system.sysORTable.sysOREntry.sysORID.4 = OID: ip system.sysORTable.sysOREntry.sysORID.5 = OID: udpMIB system.sysORTable.sysOREntry.sysORID.6 = OID: .iso.org.dod.internet.snmpV2.snmpModules.snmpVacmMIB.vacmMIBConformance.vacmMIBGroups.vacmBasicGroup system.sysORTable.sysOREntry.sysORID.7 = OID: .iso.org.dod.internet.snmpV2.snmpModules.snmpFrameworkMIB.snmpFrameworkMIBConformance.snmpFrameworkMIBCompliances.snmpFrameworkMIBCompliance system.sysORTable.sysOREntry.sysORID.8 = OID: .iso.org.dod.internet.snmpV2.snmpModules.snmpMPDMIB.snmpMPDMIBConformance.snmpMPDMIBCompliances.snmpMPDCompliance system.sysORTable.sysOREntry.sysORID.9 = OID: .iso.org.dod.internet.snmpV2.snmpModules.snmpUsmMIB.usmMIBConformance.usmMIBCompliances.usmMIBCompliance system.sysORTable.sysOREntry.sysORDescr.1 = The MIB module to describe generic objects for network interface sub-layers system.sysORTable.sysOREntry.sysORDescr.2 = The MIB module for SNMPv2 entities system.sysORTable.sysOREntry.sysORDescr.3 = The MIB module for managing TCP implementations system.sysORTable.sysOREntry.sysORDescr.4 = The MIB module for managing IP and ICMP implementations system.sysORTable.sysOREntry.sysORDescr.5 = The MIB module for managing UDP implementations system.sysORTable.sysOREntry.sysORDescr.6 = View-based Access Control Model for SNMP. system.sysORTable.sysOREntry.sysORDescr.7 = The SNMP Management Architecture MIB. system.sysORTable.sysOREntry.sysORDescr.8 = The MIB for Message Processing and Dispatching. system.sysORTable.sysOREntry.sysORDescr.9 = The management information definitions for the SNMP User-based Security Model. system.sysORTable.sysOREntry.sysORUpTime.1 = Timeticks: (0) 0:00:00.00 system.sysORTable.sysOREntry.sysORUpTime.2 = Timeticks: (0) 0:00:00.00 system.sysORTable.sysOREntry.sysORUpTime.3 = Timeticks: (0) 0:00:00.00 system.sysORTable.sysOREntry.sysORUpTime.4 = Timeticks: (0) 0:00:00.00 system.sysORTable.sysOREntry.sysORUpTime.5 = Timeticks: (0) 0:00:00.00 system.sysORTable.sysOREntry.sysORUpTime.6 = Timeticks: (0) 0:00:00.00 system.sysORTable.sysOREntry.sysORUpTime.7 = Timeticks: (0) 0:00:00.00 system.sysORTable.sysOREntry.sysORUpTime.8 = Timeticks: (0) 0:00:00.00 system.sysORTable.sysOREntry.sysORUpTime.9 = Timeticks: (0) 0:00:00.00
失敗パターンはこんな感じ
こういうときは、観測される側の装置の snmpd の設定をよく確認しよう。 参考情報としては、こういうパターンにハマった。$ snmpwalk -v 1 172.16.10.1 public system Timeout: No Response from 172.16.10.1
まずは雛形を mrtg の設定ファイル作成ツールに吐いてもらおう
shibata@dolphin:~$ sudo cfgmaker public@172.16.10.1 --base: Get Device Info on public@172.16.10.1: --base: Vendor Id: --base: Populating confcache --snpo: confcache public@172.16.10.1: Descr lo --> 1 --snpo: confcache public@172.16.10.1: Descr eth0 --> 2 --snpo: confcache public@172.16.10.1: Ip 127.0.0.1 --> 1 --snpo: confcache public@172.16.10.1: Ip 172.16.10.1 --> 2 --snpo: confcache public@172.16.10.1: Type 24 --> 1 --snpo: confcache public@172.16.10.1: Type 6 --> 2 --snpo: confcache public@172.16.10.1: Eth --> 1 --snpo: confcache public@172.16.10.1: Eth 00-02-b3-39-af-56 --> 2 --base: Get Interface Info --base: Walking ifIndex --base: Walking ifType --base: Walking ifSpeed --base: Walking ifAdminStatus --base: Walking ifOperStatus # Created by # /usr/bin/cfgmaker public@172.16.10.1 ### Global Config Options # for Debian WorkDir: /var/www/mrtg # or for NT # WorkDir: c:\mrtgdata ### Global Defaults # to get bits instead of bytes and graphs growing to the right # Options[_]: growright, bits ###################################################################### # System: debian # Description: Linux debian 2.4.18-bf2.4 #1 Son Apr 14 09:53:28 CEST 2002 i686 # Contact: tv-hoge <info@example.com> # Location: hoge (configure /etc/snmp/snmp.local.conf) ###################################################################### ### Interface 1 >> Descr: 'lo' | Name: '' | Ip: '127.0.0.1' | Eth: '' ### ### The following interface is commented out because: ### * it is a Software Loopback interface # # Target[172.16.10.1_1]: 1:public@172.16.10.1: # SetEnv[172.16.10.1_1]: MRTG_INT_IP="127.0.0.1" MRTG_INT_DESCR="lo" # MaxBytes[172.16.10.1_1]: 1250000 # Title[172.16.10.1_1]: Traffic Analysis for 1 -- debian # PageTop[172.16.10.1_1]: <H1>Traffic Analysis for 1 -- debian</H1> # <TABLE> # <TR><TD>System:</TD> <TD>debian in hoge (configure /etc/snmp/snmp.local.conf)</TD></TR> # <TR><TD>Maintainer:</TD> <TD>tv-hoge <info@example.com></TD></TR> # <TR><TD>Description:</TD><TD>lo </TD></TR> # <TR><TD>ifType:</TD> <TD>softwareLoopback (24)</TD></TR> # <TR><TD>ifName:</TD> <TD></TD></TR> # <TR><TD>Max Speed:</TD> <TD>1250.0 kBytes/s</TD></TR> # <TR><TD>Ip:</TD> <TD>127.0.0.1 (localhost)</TD></TR> # </TABLE> ### Interface 2 >> Descr: 'eth0' | Name: '' | Ip: '172.16.10.1' | Eth: '00-02-b3-39-af-56' ### Target[172.16.10.1_2]: 2:public@172.16.10.1: SetEnv[172.16.10.1_2]: MRTG_INT_IP="172.16.10.1" MRTG_INT_DESCR="eth0" MaxBytes[172.16.10.1_2]: 1250000 Title[172.16.10.1_2]: Traffic Analysis for 2 -- debian PageTop[172.16.10.1_2]: <H1>Traffic Analysis for 2 -- debian</H1> <TABLE> <TR><TD>System:</TD> <TD>debian in hoge (configure /etc/snmp/snmp.local.conf)</TD></TR> <TR><TD>Maintainer:</TD> <TD>tv-hoge <info@example.com></TD></TR> <TR><TD>Description:</TD><TD>eth0 </TD></TR> <TR><TD>ifType:</TD> <TD>ethernetCsmacd (6)</TD></TR> <TR><TD>ifName:</TD> <TD></TD></TR> <TR><TD>Max Speed:</TD> <TD>1250.0 kBytes/s</TD></TR> <TR><TD>Ip:</TD> <TD>172.16.10.1 (proxy001.intra.example.com)</TD></TR> </TABLE>
まず、 # Created by の行の後ろから全部をコピーして設定ファイルとして /etc/mrtg ディレクトリの下にでも放り込んでおこう。
設定ファイルをそのままだと使いにくいので、下のように変えた。
====================================================== 設定ツールが吐いた状態 ### Global Config Options # for Debian WorkDir: /var/www/mrtg # or for NT # WorkDir: c:\mrtgdata ====================================================== ↓ ====================================================== このように変えた ### Global Config Options # for Debian WorkDir: /var/www/mrtg/status/proxy001-example-com/data/traffic WriteExpires: Yes Options[_]: growright, bits IconDir: http://dolphin.intra.example.com/mrtg # or for NT # WorkDir: c:\mrtgdata ======================================================
基本は同じなので、ファイルをコピーして CPU 負荷ように変更しよう。ポイントは「 Target[localhost_load]: 1.3.6.1.4.1.2021.10.1.5.2&1.3.6.1.4.1.2021.10.1.5.3:public@172.16.10.1 」 のところだ。なんだかよくわからんがコレで CPU 負荷が取れるらしい。(笑)…いやちゃんと書くと MIB で定義されているオブジェクト(自分でオリジナルな定義もできる)を指定しているわけで、ツリー構造をしているそのひとつを指定するわけ。上のトラフィック情報のファイルと一緒にできるがマズは基本に忠実に別ファイルで記述しておく。
# Created by # /usr/bin/cfgmaker public@localhost ### Global Config Options # for Debian WorkDir: /var/www/mrtg/status/proxy001-intra-example-com/data WriteExpires: Yes Options[_]: gauge,absolute,growright,nopercent IconDir: http://dolphin.intra.example.com/mrtg # or for NT # WorkDir: c:\mrtgdata ### Global Defaults # to get bits instead of bytes and graphs growing to the right # Options[_]: growright, bits ###################################################################### # System: proxy001.intra.example.com # Description: Linux dolphin 2.4.18-bf2.4 #1 Son Apr 14 09:53:28 CEST 2002 i686 # Contact: hoge <info@example.com> # Location: Hanno (configure /etc/snmp/snmp.local.conf) ###################################################################### Target[localhost_load]: 1.3.6.1.4.1.2021.10.1.5.2&1.3.6.1.4.1.2021.10.1.5.3:public@172.16.10.1 Directory[localhost_load]: cpu MaxBytes[localhost_load]: 100 #WithPeak[localhost_load]: mw YLegend[localhost_load]: Load Average (%) #LegendI[localhost_load]: #LegendO[localhost_load]: ShortLegend[localhost_load]: % #Unscaled[localhost_load]: dwmy Title[localhost_load]: CPU USAGE -- proxy001.intra.example.com PageTop[localhost_load]: <H1> CPU USAGE -- proxy001.intra.example.com</H1> <TABLE> <TR><TD>System:</TD> <TD>porxy001.intra.example.com in Hanno (configure /etc/snmp/snmp.local.conf)</TD></TR> <TR><TD>Maintainer:</TD> <TD>hoge <info@example.com></TD></TR> <TR><TD>Description:</TD><TD>proxy001.intra.example.com </TD></TR> </TABLE>
設定ファイルとして /etc/mrtg ディレクトリの下に cpu 負荷用ファイルとしてでも放り込んでおこう。
ではちゃんとファイルができるか確認してみよう。
とまぁ、エラーが出るわけだが、最初はエラーがでるものだから、気にせず二回実行しよう。shibata@dolphin:~$ sudo mrtg /etc/mrtg/status/proxysrv001-intra-example-com/cpu.cfg ← 一回目なので下にエラーがでる Rateup WARNING: /usr/bin/rateup could not read the primary log file for localhost_load Rateup WARNING: /usr/bin/rateup The backup log file for localhost_load was invalid as well Rateup WARNING: /usr/bin/rateup Can't remove localhost_load.old updating log file Rateup WARNING: /usr/bin/rateup Can't rename localhost_load.log to localhost_load.old updating log file shibata@dolphin:~$ sudo mrtg /etc/mrtg/status/proxysrv001-intra-example-com/cpu.cfg ← 二回目なので下にエラーがでる Rateup WARNING: /usr/bin/rateup Can't remove localhost_load.old updating log file shibata@dolphin:~$ sudo mrtg /etc/mrtg/status/proxysrv001-intra-example-com/cpu.cfg ← もう出ない shibata@dolphin:~$ sudo mrtg /etc/mrtg/status/proxysrv001-intra-example-com/cpu.cfg ← もう出ない shibata@dolphin:~$ sudo mrtg /etc/mrtg/status/proxysrv001-intra-example-com/cpu.cfg ← もう出ない shibata@dolphin:~$ sudo mrtg /etc/mrtg/status/proxysrv001-intra-example-com/traffic.cfg Rateup WARNING: /usr/bin/rateup could not read the primary log file for 172.16.10.1_2 ← 一回目なので下にエラーがでる Rateup WARNING: /usr/bin/rateup The backup log file for 172.16.10.1_2 was invalid as well Rateup WARNING: /usr/bin/rateup Can't remove 172.16.10.1_2.old updating log file Rateup WARNING: /usr/bin/rateup Can't rename 172.16.10.1_2.log to 172.16.10.1_2.old updating log file shibata@dolphin:~$ sudo mrtg /etc/mrtg/status/proxysrv001-intra-example-com/traffic.cfg ← 二回目なので下にエラーがでる Rateup WARNING: /usr/bin/rateup Can't remove 172.16.10.1_2.old updating log file shibata@dolphin:~$ sudo mrtg /etc/mrtg/status/proxysrv001-intra-example-com/traffic.cfg ← もう出ない shibata@dolphin:~$ sudo mrtg /etc/mrtg/status/proxysrv001-intra-example-com/traffic.cfg ← もう出ない shibata@dolphin:~$ sudo mrtg /etc/mrtg/status/proxysrv001-intra-example-com/traffic.cfg ← もう出ない
「WorkDir: /var/www/mrtg/status/proxy001-intra-example-com/data」と書いたらソコにファイルができてるか見てみよう。
ブラウザで該当のファイル(ここでは localhost_load.html )を見てみれば OK だ。shibata@dolphin:~$ ls -l /var/www/mrtg/status/proxy001-intra-example-com/data/cpu/ total 140 -rw-r--r-- 1 root root 3402 Aug 14 10:52 localhost_load-day.png -rw-r--r-- 1 root root 39 Aug 14 10:52 localhost_load-day.png.meta -rw-r--r-- 1 root root 2052 Aug 14 10:32 localhost_load-month.png -rw-r--r-- 1 root root 39 Aug 14 10:32 localhost_load-month.png.meta -rw-r--r-- 1 root root 2714 Aug 14 10:32 localhost_load-week.png -rw-r--r-- 1 root root 39 Aug 14 10:32 localhost_load-week.png.meta -rw-r--r-- 1 root root 1880 Aug 13 14:12 localhost_load-year.png -rw-r--r-- 1 root root 39 Aug 13 14:12 localhost_load-year.png.meta -rw-r--r-- 1 root root 7898 Aug 14 10:52 localhost_load.html -rw-r--r-- 1 root root 39 Aug 14 10:52 localhost_load.html.meta -rw-r--r-- 1 root root 48251 Aug 14 10:52 localhost_load.log -rw-r--r-- 1 root root 48251 Aug 14 10:47 localhost_load.old
MRTG はそのままでは定時運用されないので、 cron でまわそう。 Debian の場合は /etc/cron.d/mrtg ファイルができているのでソコに書き加えよう。
あとはグラフを見て悦に入る(笑)もよし、しっかり確認して上司に提言するもよし。2-57/5 * * * * root if [ -x /usr/bin/mrtg ] && [ -r /etc/mrtg/status/proxy001-intra-example-com/cpu.cfg ]; then /usr/bin/mrtg /etc/mrtg/status/proxy001-intra-example-com/cpu.cfg >> /var/log/mrtg/proxy001-intra-example-com-cpu.log 2>&1; fi 2-57/5 * * * * root if [ -x /usr/bin/mrtg ] && [ -r /etc/mrtg/status/proxy001-intra-example-com/traffic.cfg ]; then /usr/bin/mrtg /etc/mrtg/status/proxy001-intra-example-com/traffic.cfg >> /var/log/mrtg/proxy001-intra-example-com-traffic.log 2>&1; fi
グラフとしてはこんな感じになろう。 参考に CPU 稼働率とトラフィックのペイジの上の方を切り出して下に例示する。 暇なサーバ( CPU の稼動がすくない)ならもっと仕事させてもいいし、忙しいサーバなら台数増やして不可分散をしてもよいだろう。
CPU USAGE -- localhost
System: localhost (configure /etc/snmp/snmp.local.conf) Maintainer: hoge <hoge@example.com> Description: localhost
The statistics were last updated Monday, 29 November 2004 at 10:32,
at which time 'localhost' had been up for 13 days, 8:19:34.
`Daily' Graph (5 Minute Average)
![]()
Max In: 93.0 % Average In: 8.0 % Current In: 10.0 % Max Out: 54.0 % Average Out: 6.0 % Current Out: 2.0 %
Traffic Analysis for 2 -- Router
System: Router in Maintainer: hoge <hoge@example.com> Description: FastEthernet0/1 ifType: ethernetCsmacd (6) ifName: Fa0/1 Max Speed: 12.5 MBytes/s Ip: 192.168.1.1 ()
The statistics were last updated Monday, 29 November 2004 at 10:10,
at which time 'Router' had been up for 320 days, 2:12:41.
`Daily' Graph (5 Minute Average)
![]()
Max In: 9734.1 kb/s (9.7%) Average In: 4603.9 kb/s (4.6%) Current In: 5719.0 kb/s (5.7%) Max Out: 2028.9 kb/s (2.0%) Average Out: 889.6 kb/s (0.9%) Current Out: 763.5 kb/s (0.8%)
当方(SHIBATA Akira)は, 本サイトをご利用の際に起きるかもしれない不利益に対し, 一切責任を負いません.