Zabbix のインストール前の準備
Web サーバはnginx、SQL サーバは MariaDB を使用するため、事前にインストールを実施する。
SNMP Trap は 【net-snmp-perl】を使って Zabbix と連携する。
dnf install −y net-snmp-utils net-snmp-perl net-snmp
dnf install langpacks-en langpacks-ja wget (インストールされてない場合)
localectl set-locale en_US (未設定の場合)
Firewalld であらかじめ Zabbix で使用する各種ポートを許可する。 snmp(161/udp), snmptrap(162/udp), zabbix-agent(10050/tcp), zabbix-trapper(10051/tcp) また、 HTTP/HTTPS も許可する。
firewall-cmd --permanent --zone=public --add-service=snmptrap --add-service=http --add-service=https
firewall-cmd --permanent --zone=public --add-port=10050/tcp --add-port=10051/tcp
firewall-cmd --reload
Zabbix のインストール
Zabbix 公式ホームページに表示されるインストール手順に従ってパッケージ (Zabbix server, frontend, agent) をインストールする。この時、レポジトリが Zabbix と EPEL で競合するため、EPEL 側に除外設定を行う。
また、SNMP Trap を Zabbix で読み込むためのスクリプトが Source ファイルにあるため、これも合わせてダウンロードする。
Download and install Zabbix
dnf config-manager --set-enabled crb
dnf install epel-release epel-next-release
vim /etc/yum.repos.d/epel.repo
================= epel.repo ================
[epel]
excludepkgs=zabbix* (追記)
============================================
rpm -Uvh https://repo.zabbix.com/zabbix/6.4/rhel/9/x86_64/zabbix-release-6.4-1.el9.noarch.rpm
dnf clean all
wget https://cdn.zabbix.com/zabbix/sources/stable/6.4/zabbix-6.4.10.tar.gz
dnf install zabbix-server-mysql zabbix-web-mysql zabbix-nginx-conf zabbix-sql-scripts zabbix-selinux-policy zabbix-agent
Zabbix 用 SQL データベースの作成
Zabbix 公式ホームページの手順に従って SQL のデータベースを作成する。
この時、SQL に新規で zabbix ユーザを作成する。
データベース内のテーブルは先ほど導入した Zabbix のスクリプトを使用して自動で作成する。
mysql -u root -p
mysql> create database zabbix character set utf8mb4 collate utf8mb4_bin;
mysql> create user zabbix@localhost identified by 'password';
mysql> grant all privileges on zabbix.* to zabbix@localhost;
mysql> set global log_bin_trust_function_creators = 1;
mysql> quit;
zcat /usr/share/zabbix-sql-scripts/mysql/server.sql.gz | mysql --default-character-set=utf8mb4 -u zabbix -p zabbix
mysql -u root -p
mysql> set global log_bin_trust_function_creators = 0;
mysql> quit;
Zabbix サーバ、フロントエンド (nginx) の設定
Zabbix サーバの設定ファイルを編集する。(先ほど作成した Zabbix ユーザのパスワード)
また、SNMP Trap の有効化、および読込みファイルを指定する。
【/etc/zabbix/zabbix_server.conf】
DBPassword=password
SNMPTrapperFile=/var/log/snmptrap/zabbix_traps.log
StartSNMPTrapper=1
必要に応じて HTTPS のために証明書の発行を行う。
# mkdir -p /etc/pki/nginx/private
# cd /etc/pki/nginx
# openssl genpkey -algorithm RSA -pkeyopt rsa_keygen_bits:4096 -out ./private/server.key
# chown nginx: ./private/server.key
# vi ./server_ext.txt
====================== server_ext.txt =====================
basicConstraints = CA:FALSE
keyUsage = critical, digitalSignature, keyEncipherment
extendedKeyUsage = critical, serverAuth
subjectAltName = DNS:zabbix.net.home, DNS:*.net.home, IP:192.168.1.10
# crlDistributionPoints = URI:http://www.net.home/revoke.crl
============================================================
# openssl req -new -key ./private/server.key -out server.csr -subj "/CN=zabbix.net.home"
# openssl x509 -in server.csr -out server.crt -req -days 730 -signkey ./private/server.key -extfile server_ext.txt
Zabbix フロントエンド (nginx) の設定ファイルを外部からアクセスする FQDN に編集する。また、必要に応じて HTTPS などの設定を行う。
【/etc/nginx/conf.d/zabbix.conf】
listen 443 ssl http2;
server_name zabbix.net.home;
ssl_certificate "/etc/pki/nginx/server.crt";
ssl_certificate_key "/etc/pki/nginx/private/server.key";
ssl_session_cache shared:SSL:1m;
ssl_session_timeout 10m;
ssl_ciphers PROFILE=SYSTEM;
ssl_prefer_server_ciphers on;
Zabbix と SNMP Trap の連携
先ほど取得した Zabbix のソースファイルから SNMP Trap 整形用スクリプトを抽出する。
スクリプトの配備先は好みの場所でOK。
ここで、スクリプト内の SNMP Trap 出力先を Zabbix Server で指定したファイル名に合わせる。
ついでにディレクトリも作成する。
※この時、SELinuxが有効な場合は Zabbix 側から 【$SNMPTrapperFIle】 が読み込めないため注意する。
ソースファイル【zabbix-6.4.10.tar.gz】
スクリプト【zabbix_trap_receiver.pl】
配備場所【/usr/local/bin】
tar -zxf zabbix-6.4.10.tar.gz
cp zabbix-6.4.10/misc/snmptrap/zabbix_trap_receiver.pl ~/
cp ~/zabbix_trap_receiver.pl /usr/local/bin/
chmod 755 /usr/local/bin/zabbix_trap_receiver.pl
vim /usr/local/bin/zabbix_trap_receiver.pl
$SNMPTrapperFile = '/var/log/snmptrap/zabbix_traps.log';
mkdir /var/log/snmptrap
SNMP Trapd の設定
SNMP Trapd で受信した際に Zabbix のスクリプトを実行するように設定を行う。
実行ファイルは先ほど配備したスクリプトの場所。
【/etc/snmp/snmptrapd.conf】
【lab-snmp】 は SNMP の好きなコミュニティ名を指定。
vim /etc/snmp/snmptrapd.conf
authCommunity log,execute,net lab-snmp
perl do "/usr/local/bin/zabbix_trap_receiver.pl";
SNMP Trap ログの Logrotate 設定
SNMP Trapd で受信したログファイルはそのままでは肥大化し続けるため、適切にログローテーションするように設定する。
【/etc/logrotate.d/snmptrap】
vim /etc/logrotate.d/snmptrap
/var/log/snmptrap/snmptrap.log {
daily
rotate 7
compress
delaycompress
missingok
notifempty
}
Zabbix の起動
それぞれのサービスを起動する。
【http://localhost/】にアクセスすることで、Zabbix の初期セットアップウィザードが開始される。
完了後の Zabbix 初期ログインは【user:Admin, password:zabbix】
Zabbix の SNMP Community 設定は【Administration > General > Macros】から設定。
systemctl restart zabbix-server zabbix-agent nginx php-fpm snmptrapd
systemctl enable zabbix-server zabbix-agent nginx php-fpm snmptrapd
SNMP Trap は Linux Server から【snmptrap -v 2c -c lab-snmp localhost 0 linkUp.99】等を実行して【/var/log/snmptrap/snmptrap.log】にファイルが保存されることを確認する。
Zabbix からの SNMP Trap 確認は【Monitoring > Latest data】でNameにSNMP traps等でフィルタリングして確認。
snmptrap -v 2c -c lab-snmp localhost 0 linkUp.99
less /var/log/snmptrap/snmptrap.log
20:34:25 2022/10/16 ZBXTRAP 127.0.0.1
PDU INFO:
community lab-snmp
requestid 1948544203
transactionid 518
errorstatus 0
receivedfrom UDP: [127.0.0.1]:42638->[127.0.0.1]:162
notificationtype TRAP
messageid 0
errorindex 0
version 1
VARBINDS:
DISMAN-EVENT-MIB::sysUpTimeInstance type=67 value=Timeticks: (0) 0:00:00.00
SNMPv2-MIB::snmpTrapOID.0 type=6 value=OID: IF-MIB::linkUp.99
【参考URL】
Zabbix Manual > 7.Configuration > 2 Items > 3 Item types > 3 SNMP traps
SNMP Traps in Zabbix
snmptrapd 設定方法
ZabbixでSNMP trapを受信する [SNMPTT] の構成手順
SNMPトラップのハンドリング(CentOS 8編)
Extra Packages for Enterprise Linux (EPEL)