1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Amazon Linux 2023でZabbixのSNMP Trap受信を設定する手順まとめ

Posted at

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

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?