SNMP + MRTGについて

  • SNMP(Simple Network Management Protocol)は、ネットワークに接続されて機器類を監視するために
    作成されたプロトコルで、このプロトコルを使用することによってハードウエアが物理的に壊れたとか、
    ネットワーク回線が不調である等々をソフトウエアから見る(監視)することができる。
  • MRTG(Multi Router Traffic Grapher)は、その名の通りルーターを流れるデータ量を起点単位に数値の
    統計を取りグラフ化してくれるツールです。MRTGは、SNMPマネージャの機能をもっているため、SNMPが
    組み込まれているハードウエアなりソフトウエアに対しエージェント機能を使用し、数値の統計を
    取り込む事が可能です。使用例としては、ネットワーク監視、ディスク監視、CPU負荷監視等の用途に
    使用することができます。
前提条件
net-snmp, mrtgパッケージがインストール*1されていることが条件。
パッケージの確認は、rpm -q net-snmpコマンドで確認できるよ。

snmp.conf を編集する

  • オリジナルの設定ファイルを必ずバックアップしておく。
    # cd /etc/snmp
    # cp snmpd.conf snmpd.conf.org
  • /etc/snmp/snmpd.conf ファイルを編集する。
    ####
    # First, map the community name "public" into a "security name"
    
    #       sec.name  source          community
    #com2sec notConfigUser  default       public
    com2sec local localhost private
    com2sec mynetwork 192.168.0.0/24 public
    
    ####
    # Third, create a view for us to let the group have rights to:
    
    # Make at least  snmpwalk -v 1 localhost -c public system fast again.
    #       name           incl/excl     subtree         mask(optional)
    #view    systemview    included   .1.3.6.1.2.1.1
    #view    systemview    included   .1.3.6.1.2.1.25.1.1
    view all included .1 80
    
    ####
    # Finally, grant the group read-only access to the systemview view.
    
    #       group          context sec.model sec.level prefix read   write  notif
    #access  notConfigGroup ""      any       noauth    exact  systemview none none
    access MyROGroup "" any noauth exact all none none
    access MyRWGroup "" any noauth exact all all none
    
    ####
    # Second, map the security name into a group name:
    
    #       groupName      securityModel securityName
    #group   notConfigGroup v1           notConfigUser
    #group   notConfigGroup v2c           notConfigUser
    group MyROGroup v1 mynetwork
    group MyROGroup v2c mynetwork
    group MyROGroup usm mynetwork
    
    # Check the / partition and make sure it contains at least 10 megs.
    
    disk / 10000
  • SNMPを起動する。(ついでに起動時に自動的になるようにも設定)
    # /etc/init.d/snmpd start
    # /sbin/chkconfig snmpd on

mrtg.cfg を編集する

  • 通常は、/usr/bin/cfgmaker コマンドで mrtg.cfg ファイルを作成するが、
    大部分を修正&追加するのでここでは1から作成してみる。基本定義部分は必ず必要だがそれ以外は
    適時必要に応じて定義する。
  • /etc/mrtg/mrtg.cfg ファイルを編集する。
  • 基本定義部分
    WorkDir: /var/www/mrtg
    Options[_]: growright, noinfo
    EnableIPv6: no
    Language:eucjp
  • ネットワークトラフィック情報
    ### Interface eth0 / ns ###
    Target[eth0]: \eth0:public@192.168.0.xxx:
    SetEnv[eth0]: MRTG_INT_IP="192.168.0.xxx" MRTG_INT_DESCR="eth0"
    MaxBytes[eth0]: 12500000
    Title[eth0]: eth0 -- ns
    PageTop[eth0]: <H1>eth0 -- ns</H1>
  • CPU使用率情報
    ### CPU Load Average / ns ###
    Target[cpu]: .1.3.6.1.4.1.2021.10.1.5.1&.1.3.6.1.4.1.2021.10.1.5.2:public@192.168.0.xxx
    MaxBytes[cpu]: 100
    Unscaled[cpu]: dwmy
    Options[cpu]: gauge, absolute, growright, noinfo, nopercent
    YLegend[cpu]: CPU Load(%)
    ShortLegend[cpu]: (%)
    LegendI[cpu]: 1分間平均
    LegendO[cpu]: 5分間平均
    Legend1[cpu]: 1分間平均(%)
    Legend2[cpu]: 5分間平均(%)
    Title[cpu]: CPU使用率 -- ns
    PageTop[cpu]: <H1>CPU使用率 -- ns</H1>
  • メモリ使用率情報
    ### Memory Free / ns ####
    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.xxx
    MaxBytes1[mem]: 483228     ← freeコマンドによる実メモリ合計値
    MaxBytes2[mem]: 983032     ← freeコマンドによるスワップ合計値
    Unscaled[mem]: dwmy
    Options[mem]: gauge, absolute, growright, noinfo
    YLegend[mem]: Mem Free(Bytes)
    ShortLegend[mem]: Bytes
    kilo[mem]: 1024
    kMG[mem]: k,M,G,T,P
    LegendI[mem]: Real
    LegendO[mem]: Swap
    Legend1[mem]: 空き物理メモリ[MBytes]
    Legend2[mem]: 空きスワップメモリ[MBytes]
    Title[mem]: 空きメモリ量 -- ns
    PageTop[mem]: <H1>空きメモリ量 -- ns</H1>
  • ディスク使用率情報
    ### Disk Used / ns ####
    Target[disk]: .1.3.6.1.4.1.2021.9.1.9.1&.1.3.6.1.4.1.2021.9.1.9.1:public@192.168.0.xxx
    MaxBytes[disk]: 100
    Unscaled[disk]: dwmy
    Options[disk]: gauge, absolute, growright, nopercent, noinfo
    YLegend[disk]: Disk Used(%)
    ShortLegend[disk]: (%)
    LegendI[disk]: / Disk used
    LegendO[disk]: / Disk Used
    Legend1[disk]: / Disk used
    Legend2[disk]: / Disk used
    Title[disk]: ディスク使用率 -- ns
    PageTop[disk]: <H1>ディスク使用率 -- ns</H1>

MRTGを実行する

  • MRTGで参照したい情報(上記の設定)を /etc/mrtg/mrtg.cfg ファイルに定義を行ったら
    必ず下記のコマンドを実行してください。このコマンドは3回実行しないとエラー表示が消えませんので
    注意してください。※3回実行するのは、統計情報を更新するファイルが正しく作成されないからです。
    # mrtg /etc/mrtg/mrtg.cfg
    # mrtg /etc/mrtg/mrtg.cfg
    # mrtg /etc/mrtg/mrtg.cfg
  • 統計情報は、Web(Apache)から参照するのを前提としています。
    そのため /etc/httpd/conf.d/mrtg.conf ファイルを編集しディレクティブ、アクセス権などを設定する必要があります。
    # vi /etc/httpd/conf.d/mrtg.conf
  • 設定が終了したら、Apacheの再起動を行います。
    # /etc/init.d/httpd restart
  • Web上から統計情報を確認してみます。
    http://サーバIPアドレス/mrtg/eth0.html
    http://サーバIPアドレス/mrtg/cpu.html
    http://サーバIPアドレス/mrtg/mem.html
    http://サーバIPアドレス/mrtg/disk.html

mrtg.cfg の定義内容について

  • 統計情報をグラフ化するための情報は、snmpエージェントより取得するか、自分で同じ書式にて
    値を作成しMRTGでその情報をグラフ加工するのの2通りあります。
  • Target セクション(snmpエージェントより取得する方法)
    Target[xxx]: .1.3.6.1.4.1.2021.9.1.9.1&.1.3.6.1.4.1.2021.9.1.9.1:public@192.168.0.xxx
    
    xxx には、mrtgで管理する単位を指定します。この xxx がmrtgコマンドによって、xxx.htmlと作成されます。
    .1.3.6.1.4.1.2021.9.1.9.1 は、snmpのMIB情報を指定します。
    :public@192.168.0.xxx は、どのアドレス、コミニティを指定します。
  • Target セクション(自分で作成したプログラムから取得する方法)
    Target[xxx]: `/home/script/hoge.pl``
    
    グラフ化に使用するのは、第1,2パラメタしか実際は使用しないので下記のような
    プログラムでグラフ化することができます。実際には処理結果の値を設定しますよね(w
    
    #!/usr/bin/perl
    printf "20\n5\n\n\n";
  • Title セクション
    Title[xxx]: ディスク使用率 -- ns
    
    xxx には、mrtgで管理する単位を指定します。この xxx がmrtgコマンドによって、xxx.htmlと作成されます。
    ディスク使用率 -- ns は、タイトルです。

MRTG のトップインデックスを作成する

  • 個別に作成した統計情報をトップインデックスにて一覧でみることができます。
    indexmaker --columns=1 \
    --addhead="<META HTTP-EQUIV=\"Content-Type\" CONTENT=\"text/html; charset=euc-jp\">" \
    /etc/mrtg/mrtg.cfg > /var/www/mrtg/index.html
  • 上記で作成されると下記URLで一覧化された全ての情報を参照できるはずです。
    http://サーバIPアドレス/mrtg

snmp を使用したシステム監視

  • 自分で作成したshやプログラムなどを定期的に実行し、その情報を外部から簡単に参照したいと
    いう要望はどのシステムでもあります。snmp では、そういう要件を簡単にできます。
  • サンプルにも書かれていますが、snmpd.conf の exec セクションに以下の様に定義します。
    snmpwalk コマンドを実行すると、そのホストでコマンドが実行され結果が mib に格納されます。
    ※snmpwalk コマンドを連打してもある一定の時間以上は、複数回実行されないみたいです。
  • snmpd.conf
    exec .1.3.6.1.4.1.2021.50 shelltest /bin/sh /tmp/shtest
  • 値の参照と実行
    % snmpwalk -v 1 localhost public .1.3.6.1.4.1.2021.50
    enterprises.ucdavis.50.1.1 = 1
    enterprises.ucdavis.50.2.1 = "shelltest"
    enterprises.ucdavis.50.3.1 = "/bin/sh /tmp/shtest"
    enterprises.ucdavis.50.100.1 = 35
    enterprises.ucdavis.50.101.1 = "hello world."
    enterprises.ucdavis.50.101.2 = "hi there."
    enterprises.ucdavis.50.102.1 = 0
  • MRTG で、上記の結果の値を取得しグラフ化する場合は、以下のような Target セクションになります。
    Target[xxx]: .1.3.6.1.4.1.2021.50.101.1&.1.3.6.1.4.1.2021.50.101.2:public@192.168.0.xxx
こうすると
たとえば /tmp/shtest で値を返すだけではなく、snmptrap コマンドも併用して
使うとかなり強固なシステム監視ができるかもしれません。

その他

  • snmpwalk コマンドは、net-snmp-utils パッケージに含まれます。

参考にさせて頂いたサイト様


*1 パーケッジのインストール方法はこちらを参照

トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2006-03-28 (火) 17:24:47 (2132d)