VyOSのEvent_Handlerとzabbix_senderで独自監視を実装する

f:id:komeiy:20141203144036p:plain

この記事VyOS AdventCalendar2014の3日目の記事です。

以前にZabbix Agentをインストールしたエントリを書いたのですが、ずっとzabbix senderがうまく使えないか気になっていたところでEvent Handlerという機能を見つけたので、今回はEvent_Handlerとzabbix_senderがVyOSでしっかり動くかを確認してみます。

VyOS Event Handlerとは

Event HundlerはVyOSの機能で、ログファイルなどのテキストを監視し正規表現を用いてマッチした場合に任意のスクリプトを実行する機能です。

zabbix senderとは

監視対象から任意の値をZabbix Serverに送信できる仕組みです。Agentを常時起動させる必要もなく、また、定期的にポーリング監視を受け付けることもありません。

概要

Authentication Failureとbgp errorを検知してZabbixに任意のステータスを送信してみました。流れは以下の通りです。

  • VyOSへzabbix senderをインストールする
  • Zabbix Server側へアイテムを登録する
  • VyOSにEvent Handlerを設定する
  • 動作確認

自由度が高いので色々なことに応用できそうです。

VyOSへzabbix senderをインストールする

前回のエントリと同様の手順です。レポジトリの追加手順は省略します。zabbixでサーチするとzabbix-senderが見つかりますので、インストールします。

vyos@vyos:/tmp$ sudo apt-cache search zabbix
zabbix-agent - network monitoring solution - agent
zabbix-frontend-php - network monitoring solution - PHP front-end
zabbix-get - network monitoring solution - get
zabbix-java-gateway - network monitoring solution - java-gateway
zabbix-proxy-mysql - network monitoring solution - proxy (using MySQL)
zabbix-proxy-pgsql - network monitoring solution - proxy (using PostgreSQL)
zabbix-proxy-sqlite3 - network monitoring solution - proxy (using SQLite3)
zabbix-release - Zabbix official repository configuration
zabbix-sender - network monitoring solution - sender
zabbix-server-mysql - network monitoring solution - server (using MySQL)
zabbix-server-pgsql - network monitoring solution - server (using PostgreSQL)

vyos@vyos:~$ sudo apt-get install zabbix-sender
Reading package lists... Done
Building dependency tree
Reading state information... Done
The following NEW packages will be installed:
  zabbix-sender
0 upgraded, 1 newly installed, 0 to remove and 19 not upgraded.
Need to get 207 kB of archives.
After this operation, 319 kB of additional disk space will be used.
Get:1 http://repo.zabbix.com/zabbix/2.2/debian/ squeeze/main zabbix-sender amd64 1:2.2.7-1+squeeze [207 kB]
Fetched 207 kB in 2s (87.0 kB/s)
Selecting previously deselected package zabbix-sender.
(Reading database ... 38970 files and directories currently installed.)
Unpacking zabbix-sender (from .../zabbix-sender_1%3a2.2.7-1+squeeze_amd64.deb) ...
Processing triggers for man-db ...
Setting up zabbix-sender (1:2.2.7-1+squeeze) ...

Zabbix Server側へアイテムを登録する

zabbix server側でsenderのデータを受信する設定が必要です。 タイプをzabbixトラッパーに設定したアイテムを設定します。キーは任意の値で問題ございませんが、後々使用しますので覚えておいてください。

今回はデータ型を「数値」で設定していますが、「文字列」で設定することで任意の文字を監視データとして扱うことが可能です。

前回のエントリで記載しましたが、Zabbix Server側の復習です。

  • ホストVyOS-devを作成
  • zabbix agent / snmpIPアドレス記入
  • 任意のテンプレートを適用
  • 上記のアイテムを作成

VyOSにEvent Handlerを設定する

Event Hundlerの設定ですが、MyPolicyを作成しsourceとevent patternを紐付け、それに対応したrun(action)を設定します。

設定にすると以下の通りです。syslogを監視し"authentication failure"か"bgp_read_packet error"が出てきたら/tmp/zabbix.shを実行します。

system {
    event-handler {
        feed Syslog {
            policy MyPolicy
            source {
                preset syslog
            }
        }
        policy MyPolicy {
            event Arert-zabbix {
                pattern "authentication failure"
                pattern "bgp_read_packet error"
                run /tmp/zabbix.sh
            }
        }
    }
}

zabbix.shの中身は以下の通りです。

vyos@vyos:/tmp$ cat zabbix.sh
#!/bin/bash

zabbix_sender -z 192.168.1.1 -s VyOS-dev -k vyos_sender -o 1

動作確認

上記のzabbix_senderは特に引数を受け取っているわけではないので、以下の通りプロンプトで直接実行しても動作します。

vyos@vyos:~$ zabbix_sender -z 192.168.1.1 -s VyOS-dev -k vyos_sender -o 1
info from server: "processed: 1; failed: 0; total: 1; seconds spent: 0.000070"
sent: 1; skipped: 0; total: 1

設定すべきパラメータは以下の通りです。使い方さえわかっていれば簡単です。

-z : zabbix server -s : host -k : key -o : value

sshでauthentication failureを起こしてみた時のログです。

Dec  2 23:23:38 vyos sshd[5836]: pam_unix(sshd:auth): authentication failure; logname= uid=0 euid=0 tty=ssh ruser= rhost=172.19.1.1
Dec  2 23:23:38 vyos eventwatchd: Event "Arert-zabbix" caught in feed "Syslog", command "/tmp/zabbix.sh" executed"

neighbor側の設定を意図的に消してみた時のログです。

Dec  2 23:45:05 vyos bgpd[2420]: 172.19.1.1 [Error] bgp_read_packet error: Connection refused
Dec  2 23:45:05 vyos eventwatchd: Event "Arert-zabbix" caught in feed "Syslog", command "/tmp/zabbix.sh" executed"

Zabbix Server側のGUIで確認してみます。最新データを見るとしっかりとvalue 1が反映されているのがわかります。※横に長くなってしまったので必要な部分だけ切り出しています。

f:id:komeiy:20141203011248p:plain

まとめ

今回、値を単純に1にして動作させてましたが、実際の運用時は任意の文字列やZabbix側のvalue mappingを使うなどして見やすくすると良いと思います。また、トリガー設定も入れるとより良いです。

ユーザによってやりたいことは違うと思いますが、Trapだけでは足りない点を補えるものとして紹介しておきます。Syslog飛ばしてrsyslogからZabbixへ投げてもいいのですが、こっちを使ってみました。

VyOS(Vyatta)をSNMPとZabbix Agent経由で監視してみる - ぽぽぽぽーんのネットワークとOSS


シェアして頂けると嬉しいです。
参考になったという方がいれば是非お願いしますm(_ _ )m
モチベーション維持の観点で非常に励みになります。

このエントリーをはてなブックマークに追加

Vyatta仮想ルータ活用ガイド

Vyatta仮想ルータ活用ガイド