ZabbixでSNMP Trap監視を始めよう(SNMPv2c & SNMPv3対応)

zabbix Linux
スポンサーリンク
スポンサーリンク

はじめに

ZabbixではデフォルトではSNMPポーリングを使った機器の監視をすることは可能ですが、SNMP Trapの監視を行うことはできません。今回はこの機能を実現する方法を記事にしました。

前回の記事

今回使用するzabbixの構築手順は以下の記事で紹介しています。

zabbixサーバの情報

OS:AlmaLinux 8.9 (Midnight Oncilla)
カーネル:Linux 4.18.0-513.24.1.el8_9.x86_64
Zabbixのバージョン:6.4
DB:MySQL

なぜ構築が難しいのか

まず、どのようにzabbixでSNMP Trapが処理されるのか確認します。

・NW機器からSNMP Trapが発信
・zabbix serverのsnmptrapdで受信
・snmp trapperで受信したトラップを成形、ログファイルに保存
・ログをzabbixが監視
・監視結果をアイテムとして保存
・設定に応じてトリガー判定を実施

参考:https://www.ashisuto.co.jp/enishi/system_management/zabbix_snmp.html

3つ目のプロセスである「snmp trapper」が厄介です。
実は同じ機能でありながら3種類存在していて、それぞれで微妙に仕様などが異なります。
もちろん、設定方法も異なります。
そして、検索しても整理された記事がありません。情報が散在しているのが現状です。

今回は、この中でもperlスクリプトを用いた方法を紹介します。

手順

必要なパッケージのインストール

snmpやperl関連のパッケージをインストールします。

yum install net-snmp net-snmp-utils net-snmp-libs net-snmp-devel net-snmp-perl -y

確認します。

[root@zabbix ~]# yum list installed | grep snmp
SNMP Trapperプロセスを起動

/etc/zabbix/zabbix_server.confを修正します。
StartSNMPTrapperで、0を1に変更します。コメントも外します。

[root@zabbix ~]# vi /etc/zabbix/zabbix_server.conf
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
### Option: StartSNMPTrapper
# StartSNMPTrapper=0

※viのビューモードで / を入力後、StartSNMPTrapper= を入力しエンターキーを押すと検索できます。
 続いてnを押すと、次の検索候補に飛びます。

修正後は次のようになります。

[root@zabbix ~]# cat /etc/zabbix/zabbix_server.conf | grep StartSNMPTrapper
### Option: StartSNMPTrapper
StartSNMPTrapper=1
SNMPTrapperファイルの指定(ログの出力先の指定)

こちらはデフォルトのものを使用します。

[root@zabbix ~]# cat /etc/zabbix/zabbix_server.conf | grep trap
#       Listen port for trapper.
#       Number of pre-forked instances of trappers.
#       At least one trapper process must be running to display server availability and view queue
#       Temporary file used for passing data from SNMP trap daemon to the server.
#       Must be the same as in zabbix_trap_receiver.pl or SNMPTT configuration file.
# SNMPTrapperFile=/tmp/zabbix_traps.tmp
SNMPTrapperFile=/var/log/snmptrap/snmptrap.log
#       If 1, SNMP trapper process is started.
#       List of comma delimited IP addresses that the trapper should listen on.
#       Specifies how many seconds trapper may spend processing new data.
ログ出力用のディレクトリとログファイルを作成

ログ用のディレクトリやファイルがデフォルトでは存在しないので作成します。

[root@zabbix ~]# mkdir /var/log/snmptrap/
[root@zabbix ~]# touch /var/log/snmptrap/snmptrap.log
[root@zabbix ~]# ll /var/log/snmptrap/
total 0
-rw-r--r-- 1 root root 0 5月 21 04:57 snmptrap.log
[root@zabbix ~]#
ログファイルのアクセス権限の変更

システムユーザーであるzabbixでアクセスできるように変更します。

[root@zabbix ~]# chown zabbix.zabbix /var/log/snmptrap/snmptrap.log
[root@zabbix ~]# ll /var/log/snmptrap/
total 0
-rw-r--r-- 1 zabbix zabbix 0 5月 21 04:57 snmptrap.log
[root@zabbix ~]#
rsyslogの設定変更

rsyslog.confに次の文字を追加します。

[追加]
# SNMPTrap
local6.* /var/log/snmptrap/snmptrap.log

[root@zabbix ~]# vi /etc/rsyslog.conf

確認します。

[root@zabbix ~]# cat /etc/rsyslog.conf
# SNMPTrap
local6.* /var/log/snmptrap/snmptrap.log

設定を反映させるためにサービスの再起動を行います。

[root@zabbix ~]# systemctl restart rsyslog.service

確認します。

[root@zabbix ~]# systemctl list-unit-files --type=service | grep rsyslog
rsyslog.service enabled
snmptrapdの設定変更

snmptrapd.confに次の文字を追加します。
[追加]
authCommunity log,execute,net test ※testはCommunity名です。
perl do “/usr/local/bin/zabbix_trap_receiver.pl”; ※perlスクリプトの配置場所を指定
OPTIONS=”-Ls6 -p /var/run/snmptrapd.pid”
※起動パラメータの設定。ファシリティは6で設定。引数が正しいか確認中です。

[root@zabbix ~]# vi /etc/snmp/snmptrapd.conf

確認します。

[root@zabbix ~]# cat /etc/snmp/snmptrapd.conf
# Example configuration file for snmptrapd
#
# No traps are handled by default, you must edit this file!
#
# authCommunity log,execute,net public
# traphandle SNMPv2-MIB::coldStart /usr/bin/bin/my_great_script cold
authCommunity log,execute,net test
perl do "/usr/local/bin/zabbix_trap_receiver.pl";
OPTIONS="-Ls6 -On -p /var/run/snmptrapd.pid"

また、次のファイルも修正します。

[追加]
OPTIONS=”-Ls6 -p /var/run/snmptrapd.pid”

[root@zabbix ~]# vi /etc/sysconfig/snmptrapd

確認します。

[root@zabbix ~]# cat /etc/sysconfig/snmptrapd
i# snmptrapd command line options
# '-f' is implicitly added by snmptrapd systemd unit file
# OPTIONS="-Lsd"
OPTIONS="-m ALL -M /usr/share/snmp/mibs -Ls6 -On -p /var/run/snmptrapd.pid"
※Ls6:ファシリティは6とする
snmptrapdの有効化
[root@zabbix ~]# systemctl enable snmptrapd.service --now
Created symlink /etc/systemd/system/multi-user.target.wants/snmptrapd.service → /usr/lib/systemd/system/snmptrapd.service.

確認します。

[root@zabbix ~]# systemctl list-unit-files --type=service | grep snmp
snmpd.service disabled
snmptrapd.service enabled
snmptrapdの起動(再起動)
[root@zabbix ~]# systemctl (re)start snmptrapd.service

確認します。

[root@zabbix ~]# ps -aux | grep snmp
root 2836 0.0 0.2 106900 16316 ? Ss 06:34 0:00 /usr/sbin/snmptrapd -Lsd -f
perlスクリプトの入手

次のURLにブラウザからアクセスします。

https://github.com/zabbix/zabbix/blob/master/misc/snmptrap/zabbix_trap_receiver.pl

右側の方にダウンロードボタンがあるのでraw fileをローカルにダウンロードします。
その後、teratermのSSH SCP機能などを用いてzabbixサーバに送信します。

perlスクリプトの権限の変更

デフォルトではumaskが0022で設定されているため、ファイルの権限が0644となります。
実行権限を与えるため権限を755に変更します。

[root@zabbix ~]# chmod 755 zabbix_trap_receiver.pl
[root@zabbix ~]# ll
total 24
-rw-r--r--. 1 root root 279 5月 18 15:09 anaconda-post_nochroot.log
-rw-r--r-- 1 root root 3854 5月 18 19:51 old_index.html
-rw-------. 1 root root 9997 5月 18 15:09 original-ks.cfg
-rwxr-xr-x 1 root root 3717 5月 21 04:26 zabbix_trap_receiver.pl
perlスクリプトの修正

perlスクリプトを次のように修正します。

[root@zabbix ~]# vi zabbix_trap_receiver.pl

$SNMPTrapperFile = '/tmp/zabbix_traps.tmp';
→ $SNMPTrapperFile = '/var/log/snmptrap/snmptrap.log';

確認します。

[root@zabbix ~]# cat zabbix_trap_receiver.pl | grep SNMPTrapperFile
### Option: SNMPTrapperFile
$SNMPTrapperFile = '/var/log/snmptrap/snmptrap.log';
unless (sysopen(OUTPUT_FILE, $SNMPTrapperFile, O_WRONLY|O_APPEND|O_CREAT, 0666))
print STDERR "Cannot open [$SNMPTrapperFile]: $!\n";
[root@zabbix ~]#
スクリプトファイルの移動

rootユーザーのカレントディレクトリにあるので、snmptrapd.confで指定したディレクトリに移動します。

[root@zabbix ~]# mv zabbix_trap_receiver.pl /usr/local/bin/

確認します。

[root@zabbix ~]# ll
total 20
-rw-r--r--. 1 root root 279 5月 18 15:09 anaconda-post_nochroot.log
-rw-r--r-- 1 root root 3854 5月 18 19:51 old_index.html
-rw-------. 1 root root 9997 5月 18 15:09 original-ks.cfg

[root@zabbix ~]# ls /usr/local/bin/
zabbix_trap_receiver.pl
[root@zabbix ~]#

動作確認

次のコマンドで確認します。コミュニティ名は必要に応じて変更してください。

[root@zabbix ~]# snmptrap -v 2c -c test 127.0.0.1 8640000 .1.3.6.1.6.3.1.1.5.3

確認します。ログに出力されていれば成功です。

[root@zabbix ~]# cat /var/log/snmptrap/snmptrap.log
2024-05-21T05:03:37+0900 ZBXTRAP 127.0.0.1
PDU INFO:
requestid 1206601597
errorstatus 0
messageid 0
version 1
errorindex 0
transactionid 1
notificationtype TRAP
community test
receivedfrom UDP: [127.0.0.1]:47867->[127.0.0.1]:162
VARBINDS:
DISMAN-EVENT-MIB::sysUpTimeInstance type=67 value=Timeticks: (8640000) 1 day, 0:00:00.00
SNMPv2-MIB::snmpTrapOID.0 type=6 value=OID: IF-MIB::linkDown

また、デフォルトでは /var/log/messagesに出力されます。

[root@zabbix ~]# cat /var/log/messages

May 21 07:23:30 zabbix snmptrapd[3127]: 2024-05-21 07:23:30 localhost [UDP: [127.0.0.1]:52956->[127.0.0.1]:162]:#012DISMAN-EVENT-MIB::sysUpTimeInstance = Timeticks: (8640000) 1 day, 0:00:00.00#011SNMPv2-MIB::snmpTrapOID.0 = OID: IF-MIB::linkDown
[root@zabbix ~]#

SNMPv3でSNMP Trapを行う方法

別記事としました。こちらを参照ください。

参考

【入門編】ZabbixでSNMPトラップ監視を始めるには?|『縁(ENISHI)』
ZabbixでSNMPトラップを監視を始める時につまづきやすいポイントについて解説します!SNMPトラップ監視の詳細をまとめた資料もご自由にダウンロードいただけます。
Zabbix SNMPTrap監視の流れ(Perl編) - Qiita
ZabbixではSNMPTrapを受信する為にSNMPTTをいれるか、Zabbixに付随するPerlスクリプトを使用するか選ぶ必要がある。今回はperlスクリプトを使用して監視を行う。⓵ 監視機器…
【 yum 】コマンド(基礎編)――ソフトウェア(パッケージ)をインストールする/アンインストールする
本連載は、Linuxのコマンドについて、基本書式からオプション、具体的な実行例までを紹介していきます。今回は、「yum」コマンドです。
Manpage of SNMPTRAPD
SNMP を使用して Zabbix でルーターを監視
今回のブログではSNMPを使用してZabbixで「ルーターの CPU 使用率、メモリ使用率、ネットワークトラフィックを監視して Zabbix でグラフ化表示する」ということを行います。
zabbixバージョン6.0を用いたSNMP trap監視
zabbixバージョン6.0を用いて監視対象機器から送信されたSNMP trapを監視する設定をする手順をご紹介します。様々なイベントに関するSNMP trapが出力されるため、リンクダウンや機器の故障などを監視する場合に設定します。
ZabbixでSNMPTTを利用してSNMPトラップを監視する
MIRACLE ZBXやZabbixでは、SNMPTTを利用してSNMPトラップを監視することができますが、構成が複雑であり、理解しにくい部分です。今回はMIRACLE ZBXやZabbix によるSNMPトラップ監視の概要と、SNMPTT...

Perl trap receiver(zabbix_trap_receiver.pl)を使用したSNMPトラップ監視|BLOG| サイバートラスト (cybertrust.co.jp)

コメント

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