Amazon Linux 2023 上で Zabbix に SNMP Trap を受信させるための設定手順をまとめました。
Zabbix の SNMP Trap 機能を使ってネットワーク機器などからの通知を受け取りたい方に向けた内容です。
- 検証環境: Amazon Linux 2023, Zabbix 7.0
- 対象読者: Zabbix の SNMP Trap を試してみたい方、構築手順を自動化したい方
OS側の設定
必要なパッケージのイントールする。
sudo dnf -y install net-snmp net-snmp-utils net-snmp-perl
snmptrapsの情報を保存するためのディレクトリを作成する。
sudo mkdir -p /var/log/zabbix/snmptraps
sudo touch /var/log/zabbix/snmptraps/snmptraps.log
sudo chown -R zabbix:zabbix /var/log/zabbix/snmptraps
sudo chmod 666 /var/log/zabbix/snmptraps/snmptraps.log
Zabbixの設定変更
zabbix_server.confの編集
/etc/zabbix/zabbix_server.conf
以下箇所の設定値を変更する。
### Option: LogFile
# Log file name for LogType 'file' parameter.
#
# Mandatory: yes, if LogType is set to file, otherwise no
# Default:
# LogFile=
+ LogFile=/var/log/zabbix/zabbix_server.log
### Option: SNMPTrapperFile
# 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.
#
# Mandatory: no
# Default:
# SNMPTrapperFile=/tmp/zabbix_traps.tmp
+ SNMPTrapperFile=/var/log/zabbix/snmptraps/snmptraps.log
### Option: StartSNMPTrapper
# If 1, SNMP trapper process is started.
#
# Mandatory: no
# Range: 0-1
# Default:
+ StartSNMPTrapper=1
SNMP trapのハンドラスクリプトを作成する
/usr/sbin/zabbix_trap_handler.sh
にハンドラスクリプトを配置する。
#!/bin/bash
LOGFILE="/var/log/zabbix/snmptraps/snmptraps.log"
while read line; do
echo "$line" >> "$LOGFILE"
done
snmptrapdの設定
/etc/snmp/snmptrapd.conf
を編集する。
+authCommunity log,execute,net public
+traphandle default /bin/bash /usr/sbin/zabbix_trap_handler.sh
サービスの再起動
sudo systemctl enable snmptrapd
sudo systemctl restart snmptrapd
sudo systemctl restart zabbix-server
おまけ:まとめて設定した場合のシェルスクリプト
設定値は用途に合わせて要編集
#!/bin/bash
# Exit on error
set -e
# 色の定義
GREEN=$(tput setaf 2)
BLUE=$(tput setaf 4)
YELLOW=$(tput setaf 3)
RED=$(tput setaf 1)
RESET=$(tput sgr0)
log_info() {
echo -e "${BLUE}[INFO]${RESET} $1"
}
log_ok() {
echo -e "${GREEN}[OK]${RESET} $1"
}
log_warn() {
echo -e "${YELLOW}[WARN]${RESET} $1"
}
log_error() {
echo -e "${RED}[ERROR]${RESET} $1"
}
# 変数定義
CONFIG_FILE="/etc/zabbix/zabbix_server.conf"
TRAP_LOG_DIR="/var/log/zabbix/snmptraps"
TRAP_LOG_FILE="$TRAP_LOG_DIR/snmptraps.log"
TRAP_HANDLER="/usr/sbin/zabbix_trap_handler.sh"
SNMPTRAPD_CONF="/etc/snmp/snmptrapd.conf"
BACKUP_FILE="${CONFIG_FILE}.bak.$(date +%Y%m%d%H%M%S)"
log_info "Installing required packages..."
if sudo dnf install -y net-snmp net-snmp-utils net-snmp-perl; then
log_ok "Packages installed successfully."
else
log_error "Failed to install required packages."
exit 1
fi
log_info "Creating SNMP trap log directory and file..."
if sudo mkdir -p "$TRAP_LOG_DIR" && sudo touch "$TRAP_LOG_FILE"; then
sudo chown -R zabbix:zabbix "$TRAP_LOG_DIR"
sudo chmod 666 "$TRAP_LOG_FILE"
log_ok "SNMP trap log directory and file created."
else
log_error "Failed to create SNMP trap log directory or file."
exit 1
fi
log_info "Backing up Zabbix server configuration to $BACKUP_FILE"
if sudo cp "$CONFIG_FILE" "$BACKUP_FILE"; then
log_ok "Backup created successfully."
else
log_error "Failed to create backup."
exit 1
fi
declare -A settings=(
["StartSNMPTrapper"]="1"
["SNMPTrapperFile"]="$TRAP_LOG_FILE"
)
log_info "Updating Zabbix server configuration..."
for key in "${!settings[@]}"; do
value="${settings[$key]}"
if grep -qE "^${key}=${value}$" "$CONFIG_FILE"; then
log_ok "Skipped (already correct): $key=$value"
elif grep -Eq "^[#]*\s*${key}=" "$CONFIG_FILE"; then
sudo sed -i "s|^[#]*\s*${key}=.*|${key}=${value}|" "$CONFIG_FILE"
log_ok "Updated: $key=$value"
else
echo "${key}=${value}" | sudo tee -a "$CONFIG_FILE" > /dev/null
log_ok "Added: $key=$value"
fi
done
log_info "Creating SNMP trap handler script..."
sudo tee "$TRAP_HANDLER" > /dev/null << 'EOF'
#!/bin/bash
LOGFILE="/var/log/zabbix/snmptraps/snmptraps.log"
while read line; do
echo "$line" >> "$LOGFILE"
done
EOF
sudo chmod +x "$TRAP_HANDLER"
log_ok "SNMP trap handler script created."
log_info "Configuring snmptrapd..."
if grep -q "traphandle default /bin/bash $TRAP_HANDLER" "$SNMPTRAPD_CONF" && \
grep -q "authCommunity log,execute,net public" "$SNMPTRAPD_CONF"; then
log_ok "Skipped: snmptrapd.conf already configured."
else
sudo tee "$SNMPTRAPD_CONF" > /dev/null << EOF
authCommunity log,execute,net public
traphandle default /bin/bash $TRAP_HANDLER
EOF
log_ok "Configured: snmptrapd.conf updated."
fi
log_info "Enabling and restarting services..."
sudo systemctl enable snmptrapd
sudo systemctl restart snmptrapd
sudo systemctl restart zabbix-server
log_ok "Services enabled and restarted."
log_ok "SNMP trap reception setup completed successfully."
参考URL