【ZABBIX】Zabbix4系とCentOS 7系でSNMP Trap監視する
こんにちは〜インフラエンジニアのtamolabです!
今回はZBBIXとSNMPを利用したシステム監視について監視するまでの構築手順を書きたいと思います。Zabbixでネットワーク機器などZabbix agentがインストールできない機器、いわゆるエージェントレスな監視を行う際に、SNMP trapのOIDをmibファイルから解決してアラートと検知できるようにしたいというモチベーションです。
1. 動作環境説明
Zabbixに必要なコンポーネント(Webインターフェース、zabbix-server、Database)は事前に導入して、基本的にzabbixが利用できる状態からスタートします。
# OSとバージョン確認
$ cat /etc/redhat-release
CentOS Linux release 7.5.1804 (Core)
# Zabbix-serverのバージョン確認
$ zabbix_server -V
zabbix_server (Zabbix) 4.0.11
# Apacheのバージョン確認
$ httpd -v
Server version: Apache/2.4.6 (CentOS)
# PHPのバージョン確認
$ php -v
PHP 5.4.16 (cli)
2. 環境の準備
zabbix serverのコンフィグファイルにSNMP trapを有効にする設定と、ログファイルの場所をしているす箇所があるので編集していきます。
# fileの編集$ sudo vi /etc/zabbix/zabbix_server.conf
# 以下の行を追記
$ sudo vim /etc/zabbix/zabbix_server.conf
#以下の行を追記
SNMPTrapperFile=/var/log/snmptt/snmptt.log
StartSNMPTrapper=1
# zabbix-serverプロセスの再起動
$ sudo systemctl restart zabbix-server
3. snmptt, snmptrapdインストール
パッケージをインストールしていきます。
$ sudo yum install net-snmp-utils
$ sudo yum install net-snmp-perl
$ sudo yum install perl
$ sudo yum install perl-Net-SNMP
$ sudo yum install perl-Config-IniFiles
$ sudo yum install perl-Module-Build
$ sudo yum install perl-Time-HiRes
完了したら、SNMPTTユーザを追加します。
$ sudo useradd -s /sbin/nologin snmptt
次に、SNMPTTパッケージをインストールします。
$ sudo cd /usr/src/
# パッケージのダウンロード
$ sudo wget https://sourceforge.net/projects/snmptt/files/snmptt/snmptt_1.4/snmptt_1.4.tgz/download
# ダウンロードしたtarファイルの展開
$ sudo tar xvzf snmptt_1.4.tgz
# 必要ファイルのコピー
$ sudo cd snmptt_1.4
$ sudo cp snmptt /usr/sbin/
$ sudo cp snmptthamdler /usr/sbin/
$ sudo cp snmptt.ini /etc/snmp/
$ sudo cp snmpttconvertmib /etc/snmp/
# コピーしたファイルの権限(パーミッション)変更
$ sudo chmod 755 /usr/sbin/snmptt
$ sudo chmod 755 /usr/sbin/snmptthandler
$ sudo chmod 755 /usr/sbin/snmpttconvertmib
4. snmptt, snmptrapdのセットアップ
パッケージのインストールが完了したら、ログディレクトリとspoolディレクトリの追加して、所有者を変更します。
# snmpttログディレクトリの追加と所有者の変更
$ sudo mkdir /var/log/snmptt/
$ sudo chown nmptt:snmptt /var/log/snmptt/
# spoolディレクトリの追加と所有者の変更
$ sudo mkdir /var/spool/snmptt/
$ sudo chown nmptt:snmptt /var/spool/snmptt/
ここは任意の設定ですが、ログローテとの設定をします。場合によってはかなりのログ量になるのでローテートしておきましょう。
$ sudo cp snmptt.logrotate /etc/logrotate.d/snmptt
次は、snmpt.confの設定を変更します。これはmibで解決できないOIDを受信した際に文字整形するための設定です。
# file 編集$ sudo vi /etc/snmp/snmptt.conf
$ sudo vim /etc/snmp/snmptt.conf
# 下記を追記
EVENT general .* "General Events" Normal
FORMAT ZBXTRAP $aA Unknown
上記を設定しておくことで、解決できないOIDを受信した時に下記のように文字を整形することができます。$aAにはいろんな値が代入されます。
08:00:45 2020/06/03 <未解決のOIDが記載される> Normal "General Events" - ZBXTRAP Unknown
snmptrapd.confを編集してサービス起動(または再起動)を行います。
$ sudo vim /etc/snmp/snmptrapd.conf
# 下記を追加します。
traphandle default /usr/sbin/snmptthandler
disableAuthorization yes
# プロセスの起動(既に動いている場合は停止してから起動)
$ sudo systemctl stop snmptrapd
$ sudo systemctl start snmptrapd
snmptt.iniを変更して、サービス起動を行います。
$ sudo vim cat /etc/snmp/snmptt.ini
# 下記を追記
mode = daemon
net_snmp_perl_enable = 1
net_snmp_perl_best_guess = 2
sleep = 5
DEBUGGING = 0
multiple_event = 0
date_time_format = %H:%M:%S %Y/%m/%d
DEBUGGING_FILE = /var/log/snmptt/snmptt.debug
DEBUGGING_FILE_HANDLER = /var/log/snmptt/snmptthandler.debug
# サービスの起動
$ sudo systemctl start snmptt
5. テスト
ここまでで一度テストしてみましょう。
# 擬似TRAPファイルを自分自身に送信する。
$ sudo snmptrap -v 2c -c test 127.0.0.1 '' .1.1.1 .1.1.1 s "任意文字列"
# ログの確認
$ cat /var/log/snmptt/snmptt.log
09:52:54 2020/06/03 .1.1.1 Normal "General Events" localhost - ZBXTRAP 127.0.0.1 Unknown
自分自身(127.0.0.1)からOID(.1.1.1)が送信されてきたが、mib解決できない(知らないOID)であったため、/etc/snmp/snmptt.confで記載したように"General Event"で整形されていることが確認できます。
ここまでで、SNMP trapを受信できるようになりました。
あとは監視対象マシンでサーバに向けてSNMP trapの送信の設定をすれば、zabbixでtrapを受けることができます。zabbixのトリガーやアイテムの設定をすればこの/var/log/snmptt/snmptt.logの文字列を監視することができますね。
6. キーワード
#CentOS #zabbix #snmp # snmptrap #監視ツール #IT #mib
7. お問い合わせ
本投稿のコメントでも構いませんし、下記からお問い合わせいただいても大丈夫です。
note.tamolab@gmail.com