ZABBIXでAsterisk-SNMPの監視をする

ZABBIXでAsteriskを監視する方法としてsnmpを使用した監視をすることにします。
覚書的な内容も含め、書いておきます。日本語の情報も少ないし ・・・
実は、昨年取りかかって、ちゃんと整理できてなく、今回画像を取る機会があったので、整理し直したものです。
時間差とかあるので、おかしなところがあれば教えてね。


ZABBIXおよびAsteriskの構築は下記を参照いただき、済ませてください。
ZABBIX本家
ZABBIX-JP

Asterisk本家
VoIP-Info.jp Wiki


構築の注意点
ZABBIXについては、snmpを使用できるようにコンパイルする必要があります。
net-snmp関連のライブラリをインストールした上で、configureの際に「--with-net-snmp」を必ずつけてください。
例:
> ./configure --enable-server --enable-agent --with-mysql --with-net-snmp
など
今回snmpdについての設定内容も省きますが、世の中に情報はいっぱいあるから大丈夫でしょう!


Asteriskについてもsnmpが使用できるようにコンパイルする必要があります。
CentOSでAsterisk-SNMPを使うために...でも書いてますが、snmpの関連ライブラリを使用するため、場合によってはパッケージ管理の標準では入らない可能性があります。
上記当Blogでは「CentOSでは入らない」っと書いてますが、最近のCentOSでは、問題無く入りました。
初期のインストールの状態にも影響されると思います。
僕は基本的に可能な限り最小構成で初期インストールするんですけどね。
ライブラリなど後に出るサイトの情報が良いと思います。

で、make menuselsect を実行すると下のようにres_snmpに「*」が付いていれば問題無いです。
configureで強制的に指定もできる様ですが、ライブラリが入っていないと上手く作ってくれません。

Asterisk-SNMPを動かす

多くの情報は下記を参照させていただきました。先に書いたライブラリについても書かれてます。
How To: Monitor Asterisk with SNMP

まず、AsteriskをSNMPで管理でも書いている通り、Asteriskとsnmpdを連携するためにAgentXを使用します。
AgentXとはsnmpエージェントのためのプロトコルで、マスターエージェントとサブエージェントとの通信に使用されます。
今回で言えばマスターエージェントであるNet-SNMPのsnmpdとサブエージェントであるAsteriskのres_snmpとの通信をAgentXプロトコルで行います。

ちなみにAgentXについて詳しい内容は下記で調べてください。
http://www.ietf.org/rfc/rfc2741.txt

動作確認が取れている(snmpwalkなどで情報を得ることができる状態になっている)snmpdの設定ファイルにAgentXの情報を追記します。
パッケージ管理ツールなどで、バイナリをインストールされる場合など、一般的には/etc/snmp/snmpd.confと思います。
ソースからコンパイルされる方は違う場所になりますよね。

snmpd.confの最下行に下記を追記します。

master agentx
agentXSocket /var/agentx/master
agentXPerms 0660 0550 nobody asterisk

多分(弱気w)この意味は、

AgentXを有効にする。
AgentXのソケットの場所指定
ソケットとディレクトリのアクセス権および所有者、所有グループ

が指定されています。
所有グループとしてasteriskを指定していますが、asteriskを違うグループで起動している場合はそれに合わせてください。

設定変更の後、snmpdを(再)起動してください。
snmpd起動後、/var/agentxのパーミッションを確認します。
おそらくは、550で出来上がっていると思います。

asteriskがアクセスする必要があるので、/var/agentxのパーミッションを755に変更します。

(時刻が逆なのはホストが違うからです。気にしない気にしないw)

Asteriskを起動します。
AsteriskCLIで起動した場合は、パーミッションなどの問題でsnmpdに接続できない場合、メッセージが表示されます。
起動時の詳細モード(v)を増やした場合は、問題なく接続された場合もメッセージが出ます。

ここまでが問題無ければ、ほぼ出来上がりです。
snmpwalkで確認が出きるはずです。
> snmpwalk -v X -c XXXXX localhost .1.3.6.1.4.1.22736.1.1.1.0
(-v の後のsnmpバージョンと-c の後のコミュニティは環境に合わせてください)
上記のコマンドでAsteriskのバージョンが表示されるはずです。


snmpwalkの表示がOID表記で寂しい場合はMIBファイルを読み込みます。
> cp [Asteriskソースファイルディレクトリ]/doc/digium-mib.txt /usr/share/snmp/mibs/
> cp [Asteriskソースファイルディレクトリ]/doc/asterisk-mib.txt /usr/share/snmp/mibs/

snmpwalk実行の際のMIB変数にこれらを読み込む用に変数を追加します。
> export MIBS=+ASTERISK-MIB

これで上記と同じsnmpwalkの実行でAsteriskのMIBシンボル名で表示されます。


あとはこれをZABBIXで見るようにするだけです。
通常のsnmp監視と代わりありません。

ZABBIXでAsteriskのバージョンを見る

上記のsnmpwalkの実行と同じように登録するだけです。
ZABBIXに管理アカウントでログインし、「設定」タブから「アイテム」を選択します。
(ZABBIX 1.8ではちょっと選択方法が違いますけどね)
対象のホストを選んでアイテムの追加をします。
登録内容は、次のような感じです。

OIDは.1.3.6.1.4.1.22736.1.1.1.0です。
「監視データ」タブから「最新データ」を選んで対象のホストの情報を見ると下記の用に表示されているはずです。
(※字がちっちゃくてゴメンなさい。一番下の項目です。)

通話中のチャンネル数を見る

OIDが違うだけですので、MIBファイルを見ればわかりやすいと思います。
OIDは.1.3.6.1.4.1.22736.1.5.1.0です。


1台通話状態であれば、

1台も通話状態で無ければ、

のように表示されます。


AsteriskのMIBは以前のものからあまり変わっていない様です。
残念ながら、レジスト状態の端末数などの情報は取れない様です。

とはいえAsteriskのプロセス監視に追加して、こんな監視も有効なのではと思っています。