やりたいこと
SNMPTT (SNMP Trap Translator) というフリーソフト (GNU GPL) を利用し、NW 機器などから上がった SNMP trap (162/udp) を受信し、Zabbix 上で確認できるように構成します。
具体的な構成例を以下に示します。
NW 機器は vyos (vyatta) とし、vyos から SNMP trap を上げ、snmptrapd が受信すると /usr/share/snmptt/snmptthandler-embedded コマンドを発行し /var/spool/snmptt/ 配下にキューとしてファイルを保存します。すると snmptt サービスがキューから trap 情報を取り出し、/var/log/snmptrap/snmptrap.log へ保存し、Zabbix はそのファイルを監視しているため新規のログ書き込みを検知し、監視データとして取り込みます。
vyos の設定
vyos では以下のように snmp trap 設定をします。
vyos@vyos1:~$ configure vyos@vyos1# set service snmp trap-target 192.168.0.211 community expublic
vyos の VM 起動、初期セットアップ手順については以下を参照下さい。
Zabbix (WebUI) の監視アイテム設定
WebUI にログインし、左ペインの [設定] ⇒ [ホスト] を辿り、画面右上にある「ホストの作成」から以下のように登録します。ホスト名、グループは任意、インターフェースは SNMP エージェントとして trap を受信する IP アドレスを指定します。
なお、SNMP コミュニティは {$SNMP_COMMUNITY} を書き換えても良いですが、マクロの設定 (左ペインの「管理」⇒「一般設定」の「マクロ」) から変更するのが良いです。
アイテムとして以下を登録します。名前は任意です。
- 名前: SNMP trap fallback
- タイプ: SNMP トラップ
- キー: snmptrap.fallback
- データ型: ログ
Zabbix (Linux) の設定
パッケージインストール
必要パッケージをインストールします。
[root@localhost ~]# dnf -y install perl epel-release net-snmp-utils net-snmp-perl [root@localhost ~]# dnf config-manager --set-enabled powertools [root@localhost ~]# dnf -y install https://dl.fedoraproject.org/pub/epel/7/x86_64/Packages/s/snmptt-1.4.2-1.el7.noarch.rpm
ログ保存先のディレクトリを作成します。
[root@localhost ~]# mkdir /var/log/snmptrap [root@localhost ~]# chown -R snmptt:snmptt /var/log/snmptrap/
SNMPtrapd の設定変更
/etc/sysconfig/snmptrapd の最終行に以下を追記します。
[root@localhost ~]# vi /etc/sysconfig/snmptrapd
~~~
OPTIONS="-On -Lsd -p /var/run/snmptrapd.pid -M /usr/share/snmp/mibs:/usr/share/snmp/venders -m all"
/etc/snmp/snmptrapd.conf について以下のように追記します。snmptrapd が snmptrap を受信した際に /usr/sbin/snmptthandler-embedded が実行されるようになります。
[root@localhost ~]# vi /etc/snmp/snmptrapd.conf
~~~
authCommunity log,execute,net expublic
perl do "/usr/share/snmptt/snmptthandler-embedded"
snmptrapd サービスを自動起動に設定しつつ、同時に起動します。
[root@localhost ~]# systemctl enable --now snmptrapd
SNMPTT の設定
/etc/snmp/snmptt.ini を以下のように設定変更します。
[root@localhost ~]# vi /etc/snmp/snmptt.ini
~~~
mode = daemon
date_format = %Y/%m/%d
time_format = %H:%M:%S
date_time_format = %Y/%m/%d %H:%M:%S
log_file = /var/log/snmptrap/snmptrap.log
syslog_enable = 0
~~~
次に、/etc/snmp/snmptt.conf をバックアップし、以下の2行のみに変更します。
[root@localhost ~]# cp -p /etc/snmp/snmptt.conf /etc/snmp/snmptt.conf.org [root@localhost ~]# vi /etc/snmp/snmptt.conf EVENT general .* "General event" Normal FORMAT ZBXTRAP $aA $*
snmptt サービスを自動起動に設定しつつ、同時に起動します。
[root@localhost ~]# systemctl enable --now snmptt
これにより snmptthandler から /var/log/snmptrap/snmptrap.log へ trap の内容がロギングされるようなります。
zabbix-server サービスの設定変更
Zabbix にて、SNMP Trap と連携する設定を追加します。#StartSNMPTrapper=0 の箇所をコメントインし、1 に変更します。また、SNMPTrapperFile として /var/log/snmptrap/snmptrap.log が指定されているか確認します。
[root@localhost ~]# vi /etc/zabbix/zabbix_server.conf
~~~
StartSNMPTrapper=1
~~~
SNMPTrapperFile=/var/log/snmptrap/snmptrap.log
~~~
Zabbix サーバを再起動します。これにより /var/log/snmptrap/snmptrap.log に記録されたログを都度 Zabbix に読み込むようになります。
[root@localhost ~]# systemctl restart zabbix-server
動作確認
まずはホスト上で動作確認します。
[root@localhost ~]# snmptrap -v2c -c expublic 127.0.0.1 "" .1.3.6.1.6.3.1.1.5.1 coldStart s "Start"
/var/log/snmptrap/snmptrap.log が生成されているか確認します。
[root@localhost ~]# cat /var/log/snmptrap/snmptrap.log
もし生成されていなかったら、/var/log/messages を見てどんな状況か確認しましょう。
次に、vyos から trap を受けてみます。が、その前に firewalld の設定を追加します。
[root@localhost ~]# firewall-cmd --permanent --add-port=162/udp [root@localhost ~]# firewall-cmd --reload
そして vyos を再起動し、trap を発信させてテストします。
vyos@vyos1:~$ shutdown -r now
/var/log/snmptrap/snmptrap.log に以下のように記録されていれば OK です。
2022/02/06 12:37:57 .1.3.6.1.4.1.8072.4.0.2 Normal "General event" UNKNOWN - ZBXTRAP 192.168.0.252 2022/02/06 12:38:23 .1.3.6.1.6.3.1.1.5.1 Normal "Status Events" UNKNOWN - Device reinitialized (coldStart) 2022/02/06 12:38:23 .1.3.6.1.6.3.1.1.5.4 Normal "Status Events" UNKNOWN - Link up on interface 1. Admin state: lo. Operational state: softwareLoopback 2022/02/06 12:38:23 .1.3.6.1.6.3.1.1.5.4 Normal "Status Events" UNKNOWN - Link up on interface 2. Admin state: Intel Corporation 82540EM Gigabit Ethernet Controller. Operational state: ethernet-csmacd
なお、UNKNOWN については送信元 IP の逆引きができない場合に表示されます。/etc/hosts に定義するか DNS 逆引き設定を入れることにより、ホスト名を表示させることができます。
Zabbix (WebUI) 上での確認
左ペイン「監視データ」⇒「最新データ」をクリックし、該当ホストの「ヒストリ」をクリックします。
以下のように表示されていれば OK です。
ログローテート
最後の仕上げに、/var/log/snmptrap/snmptrap.log のログローテート設定をします。/etc/logrotate.d/snmptt があるのでこれを流用します。/var/log/snmptt/snmptt*.log となっているところを /var/log/snmptrap/snmptrap.log に修正します。
[root@localhost ~]# vi /etc/logrotate.d/snmptt /var/log/snmptrap/snmptrap.log /var/log/snmptt/snmptthandler.debug { weekly notifempty missingok } /var/log/snmptt/snmptt.debug { weekly notifempty missingok postrotate /etc/init.d/snmptt reload >/dev/null 2>/dev/null || true endscript }
コメント