zabbixのログ監視では正規表現での検索抽出も出来るのですが、数値としては扱われないのでグラフ作成のアイテムに使用出来ません。
そこでfluentdを経由してログから数値化したカウント値をzabbixへ送信してグラフ作成してみます。
今回の例では、ルーターでフィルターしているポートスキャン状況をsyslog出力してグラフ化します。
外部からの攻撃傾向を見える化して監視する事はセキュリティ向上に繋がります。
前提条件
zabbixサーバー、zabbixエージェント、rsyslogの準備が出来ている事とします。
ルーターはYAMAHA RTXシリーズのsyslogファイルになります。
パスは、/var/log/rsyslog/rtx1200/syslog.txt
fluentd準備
ログ収集加工のフレームワークとも言えるfluentdを利用します。
プラグイン機能を追加する事で、様々な入出力が可能になります。
http://www.fluentd.org/
rsyslog自体からの置き換えも可能ですが、今回はrsyslogを流用します。
インストール方法は公式サイトが分かりやすいです。
http://docs.fluentd.org/v0.12/categories/installation
ubuntu Trustyの場合
# curl -L https://toolbelt.treasuredata.com/sh/install-ubuntu-trusty-td-agent2.sh | sh
使用するプラグインをインストールします。
zabbixプラグイン
# sudo /opt/td-agent/embedded/bin/fluent-gem install fluent-plugin-zabbix
zabbixへ出力するプラグインでfluentdとzabbixが連携出来ます。
datacounterプラグイン
# sudo /opt/td-agent/embedded/bin/fluent-gem install fluent-plugin-datacounter
検索一致した数をカウントした数値を出力します。
fluentdでログファイルから検索一致した数のカウント値を求める
まずは入力側を設定します。
<source>
type tail
format none
path /var/log/rsyslog/rtx1200/syslog.txt
pos_file /var/log/td-agent/rtx1200syslog.txt.pos
tag rtx1200-syslog
</source>
typeはtailでformatをnone設定することで、RTX1200ルーター出力ファイルのtailを入力出来ます。
状況に合わせてformatを設定します。
apache等のよくあるログ形式には既存のformat形式があります。また、正規表現でformatを自作する事も可能です。
tagに指定した名前で入出力設定を連携出来ます。
次に出力側を設定します。ここでは2回に分けて設定しています。
tag指定の名前が一致するのが条件になります。また、最初に一致したものしか有効になりません。
以下の順にtag連携して処理されます。
source「rtx1200-syslog」 → match「rtx1200-syslog」 → match「rtx1200-syslog.filter」
<match rtx1200-syslog>
type datacounter
unit minute
count_key message
tag rtx1200-syslog.filter
pattern1 ssh ^.*filter: TCP.*>.*:22.*$
pattern2 telnet ^.*filter: TCP.*>.*:23.*$
</match>
<match rtx1200-syslog.filter>
type zabbix
zabbix_server 127.0.0.1
host localhost
name_key_pattern rtx1200-syslog_(unmatched|ssh|telnet)_.*
</match>
最初(rtx1200-syslog)は、typeにプラグインのdatacounterを設定。
ログファイルから一致する正規表現のパターンに応じてカウントします。
ここでは、TCPの22番と23番を検索しています。最大20パターンが指定出来るようです。
次(rtx1200-syslog.filter)は、typeにプラグインのzabbixを設定。
zabbixサーバーのIPアドレスとホスト名を指定します。
キーのパターンは、datacounterでパターン設定した名称を正規表現で抽出します。
設定したパターンに合わない場合は、unmatchedの名前が付きます。
ただしformatをnoneにした場合にはすべての行が対象になるので注意。
fluentdの再起動
設定ファイルが出来たらサービスを再起動します。
# service td-agent restart
zabbixのアイテム設定
以下の様にアイテムを作成します。
名称:任意の名前
タイプ:Zabbixトラッパー
キー:fluentdでzabbixプラグインに設定したキーのパターン
データ型:数値(整数)
データの形式:10進数
キーのパターン指定方法は今回の場合は以下の通り。
sshのカウント値:rtx1200-syslog_ssh_count
telnetのカウント値:rtx1200-syslog_telnet_count
パターン以外のカウント値:rtx1200-syslog_unmatched_count
カウント(count)以外にパーセンテージ(percentage)とレート(rate)のキーがあります。
それぞれアイテムとして作成が可能です。
これらのアイテムは数値として扱われるので、グラフ作成のアイテムに使用が出来ます。