2011年1月9日日曜日

Cacti Data Query用 XMLファイルの作成方法


型落ちのSSLアクセラレータを手に入れた。

ネットワーク環境を構築したので、さっそくこの機器の検証を行い、動作状況を確認したい。
どうせならグラフ描画したいので、cactiでモニタリングさせることにする。

snmpwalkして機器の必要なステータスを一括で取得するのが賢明だろう。
となると、Data QueryのXMLファイルを使うべきだとひらめき、
その作成にとりかかるも、なかなかうまくいかず手こずってしまった。

というわけで、そのXMLファイル書き方をメモしておく。
アクセラレータの話ではないので、そっち方面の話を期待した方ごめんなさい。
それではさっそく。
まず、適当にsnmpwalkを実行し、XMLファイルの作成時に使えそうなものを確認する。

ポイントとしては、何をinputにし、何をoutputにするか、である。
input  :オブジェクトを識別するOIDや名前などの静的なデータ
output : グラフ化させる動的なデータ



【input情報】
◆ ディスクリプション
今回、HTTP、SMTP、POP通信の暗号・復号化処理を実施させるように構成しているのだが、
以下のmibで設定したディスクリプションが表示される。

% snmpwalk -v 2c -c $コミュニティ名 $ネットワーク機器 .1.3.6.1.4.1.1872.2.3.2.2.1.2.1.1.2
SNMPv2-SMI::enterprises.1872.2.3.2.2.1.2.1.1.2.101 = STRING: "HTTPS"
SNMPv2-SMI::enterprises.1872.2.3.2.2.1.2.1.1.2.102 = STRING: "SMTP over SSL"
SNMPv2-SMI::enterprises.1872.2.3.2.2.1.2.1.1.2.103 = STRING: "POP over SSL"


◆ ポート番号
HTTP、SMTP、POP通信をSSL化した場合のポート番号である。
これもinputデータとして利用できそうである。

% snmpwalk -v 2c -c $コミュニティ名 $ネットワーク機器 .1.3.6.1.4.1.1872.2.3.2.2.1.2.1.1.4
SNMPv2-SMI::enterprises.1872.2.3.2.2.1.2.1.1.4.101 = INTEGER: 443
SNMPv2-SMI::enterprises.1872.2.3.2.2.1.2.1.1.4.102 = INTEGER: 465
SNMPv2-SMI::enterprises.1872.2.3.2.2.1.2.1.1.4.103 = INTEGER: 995


◆ IPアドレス
各通信用に個別にIPアドレスを振ったのだが、これも利用できそうである。

% snmpwalk -v 2c -c $コミュニティ名 $ネットワーク機器 .1.3.6.1.4.1.1872.2.3.2.2.1.2.1.1.3
SNMPv2-SMI::enterprises.1872.2.3.2.2.1.2.1.1.3.101 = IpAddress: 192.168.1.1
SNMPv2-SMI::enterprises.1872.2.3.2.2.1.2.1.1.3.102 = IpAddress: 192.168.1.2
SNMPv2-SMI::enterprises.1872.2.3.2.2.1.2.1.1.3.103 = IpAddress: 192.168.1.3



【output情報】
◆ セッション数
検証する上でこれは必要であろう。
% snmpwalk -v 2c -c $コミュニティ名 $ネットワーク機器 .1.3.6.1.4.1.1872.2.3.2.2.1.3.1.1.1
SNMPv2-SMI::enterprises.1872.2.3.2.2.1.3.1.1.1.101 = Gauge32: 5
SNMPv2-SMI::enterprises.1872.2.3.2.2.1.3.1.1.1.102 = Gauge32: 10
SNMPv2-SMI::enterprises.1872.2.3.2.2.1.3.1.1.1.103 = Gauge32: 1


◆ TPS(Transaction Per Sec)
機器のボトルネックを見極める上でも、TPSは見ておきたい。
% snmpwalk -v 2c -c $コミュニティ名 $ネットワーク機器 .1.3.6.1.4.1.1872.2.3.2.2.1.3.1.1.2
SNMPv2-SMI::enterprises.1872.2.3.2.2.1.3.1.1.2.101 = Gauge32: 2
SNMPv2-SMI::enterprises.1872.2.3.2.2.1.3.1.1.2.102 = Gauge32: 3
SNMPv2-SMI::enterprises.1872.2.3.2.2.1.3.1.1.2.103 = Gauge32: 1




【XMLファイルの記載】
これは説明するよりもファイルを見てもらったほうが早いだろう。
<interface>
  <name>SSL Machine</name>

  <description>test</description>
  <oid_index>.1.3.6.1.4.1.1872.2.3.2.2.1.2.1.1.2</oid_index>
  <oid_index_parse>OID/REGEXP:.*\.([0-9]{1,3})$</oid_index_parse>
  <index_order>port:string:ipaddress</index_order>
  <index_order_type>numeric</index_order_type>
  <index_title_format>|chosen_order_field|</index_title_format>

  <fields>
    <string>
      <name>STRING</name>
      <method>walk</method>
      <source>value</source>
      <direction>input</direction>
      <oid>.1.3.6.1.4.1.1872.2.3.2.2.1.2.1.1.2</oid>
    </string>

    <port>
      <name>PORT</name>
      <method>walk</method>
      <source>value</source>
      <direction>input</direction>
      <oid>.1.3.6.1.4.1.1872.2.3.2.2.1.2.1.1.4</oid>
    </port>

    <ipaddress>
      <name>IPADDRESS</name>
      <method>walk</method>
      <source>value</source>
      <direction>input</direction>
      <oid>.1.3.6.1.4.1.1872.2.3.2.2.1.2.1.1.3</oid>
    </ipaddress>

    <session>
      <name>SESSION</name>
      <method>walk</method>
      <source>value</source>
      <direction>output</direction>
      <oid>.1.3.6.1.4.1.1872.2.3.2.2.1.3.1.1.1</oid>
    </session>

    <tps>
      <name>TPS</name>
      <method>walk</method>
      <source>value</source>
      <direction>output</direction>
      <oid>.1.3.6.1.4.1.1872.2.3.2.2.1.3.1.1.2</oid>
    </tps>

  </fields>

</interface>


oid_indexフィールド、oid_index_parseフィールドについては説明が必要だろうか。

すべてのSNMPクエリーはインデックスの値を表すOIDを指定しなければならない。
inputフィールドに先立ち、各行を一意に識別するインデックスを用いよ、ということである。

今回のネットワーク機器には使えそうな適切なインデックス値がなかった。

そこで、".1.3.6.1.4.1.1872.2.3.2.2.1.2.1.1.2"の
mibの末尾をインデックスとして使う、というわけである。
もう一度下記コマンドを実行してほしい。

% snmpwalk -v 2c -c $コミュニティ名 $ネットワーク機器 .1.3.6.1.4.1.1872.2.3.2.2.1.2.1.1.2
SNMPv2-SMI::enterprises.1872.2.3.2.2.1.2.1.1.2.101 = STRING: "HTTPS"
SNMPv2-SMI::enterprises.1872.2.3.2.2.1.2.1.1.2.102 = STRING: "SMTP over SSL"
SNMPv2-SMI::enterprises.1872.2.3.2.2.1.2.1.1.2.103 = STRING: "POP over SSL"

oid_index_parseフィールドで下記のような表現を使っている。
.*\.([0-9]{1,3})

最初の正規表現の".*"は任意の一文字が0または1以上を表す。
次の括弧で囲った部分がインデックスとして抜き出す箇所である。
[0-9]{1,3}はつまり、0から9が1個以上,3個以下ということである。
よってインデックスは101, 102, 103となる。