ZabbixでSNMP trapを受信する [SNMPTT] の構成手順 | SEの道標
zabbix

ZabbixでSNMP trapを受信する [SNMPTT] の構成手順

やりたいこと

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 起動、初期セットアップ手順については以下を参照下さい。

【VyOS】の基本設定,初期設定, Oracle VM での検証環境設定
VyOS (読み方:ヴィワイオーエス)とは VMware や KVM 等の仮想基...

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
}

コメント

タイトルとURLをコピーしました