こんにちは、SCSK株式会社の小寺崇仁です。
ZabbixでSyslogサーバの監視についてお問い合わせ頂くことがございます。
シンプルな監視方法を検証しましたのでご紹介いたします。
まだ、実績のない方式のため、設定してみた問題点などあれば、イベント等でお声掛けください。
いままでの課題
NW機器等の監視で、Syslogサーバを構築している方は多いかと思います。
ZabbixでSyslogを監視する場合、Syslogサーサーバの「/var/log/syslog.log」のようなファイルをテキストログ監視する事になります。
この場合、ZabbixでErrorなどの文字列で、障害を検知すると、障害の発生ホストがSyslogサーバになります。
実際に問題が発生しているのは、NW機器のため、障害の発生しているホストがすぐに判断できない状態となっておりました。
そのため次の方式で、ホスト名の変換処理を行っておりました。
いままでの方式
弊社では、NW機器が障害の発生ホストになるように、一度Syslogサーバのログとして収集をしたのち、ホスト名を変換して、Zabbix_Senderコマンドで再送する事をしていました。
1.NW機器からSyslogサーバにログを転送
2.Syslogサーバからログを受信
3.Zabbixサーバで障害として検知(障害の発生ホストはSyslogサーバ)
4.アクションを使って、Senderコマンドを実行(ホストにNW機器を指定する)
5.Zabbixサーバで障害として検知(障害の発生ホストはNW機器)
新方式
Syslogサーバの機能で、ログの受信後にコマンドを実行することができるため、Syslogサーバ上でZabbix_Senderコマンドを実行します。
1.NW機器からSyslogサーバにログを転送
2.Zabbix_Senderを使用してZabbixに送信
3.Zabbixサーバで障害として検知(障害の発生ホストはNW機器)
アクションを使った再送がなくなるため、すごくシンプルな構成になります。
設定方法
「/etc/rsyslog.conf 」に以下を追記します。
Syslogのフォーマットと受信時にシェルと実行するように定義します。
template(name="syslog" type="list") { property(name="fromhost") constant(value="@") property(name="timereported") constant(value=" ") property(name="hostname") constant(value=" ") property(name="syslogtag") constant(value=" ") property(name="msg") constant(value="\n") } if $fromhost-ip != '127.0.0.1' and $fromhost-ip != '::1' then { action(type="omprog" binary="/tmp/s.sh -i" template="syslog") }
※先頭の「fromhost」がZabbixに登録しているhost名と一致する必要があります。
「/tmp/s.sh」を配置します。
・1行ずつループして処理を行います。
・@で分割を行います。var1はホスト名が入ります。var2はログの内容です。
#!/bin/bash while read LINE; do IFS='@' read -r var1 var2 <<< "$LINE" zabbix_sender -z localhost -s "$var1" -k syslog -o "$var2" done
注意点
・Zabbixに登録したhost名と、DNSやhostsで名前解決したホスト名が一致する必要があります。
・弊社検証環境では、30行/秒のログを処理できました。それぞれの環境で負荷状況をご確認ください。
・常駐するシェルのため、シェルの変更時はrsyslogサービスの再起動が必要です。
・SyslogはZabbixサポートの対象範囲外となるため、Redhat等のOSサポートをご利用ください。
・本方式は実績がありませんので、自己責任でのご利用をお願いします。実用できた方おりましたら、イベント等でお声掛けください。
最後に
弊社ではZabbix関連サービスを展開しています。以下ページもご参照ください。
SCSK Plus サポート for Zabbix
★YouTubeに、SCSK Zabbixチャンネルを開設しました!★
★X(旧Twitter)に、SCSK Zabbixアカウントを開設しました!★