概要
以下の記事を参考に、Zabbixで取得したログ監視/SNMPトラップのデータをKafkaに転送する検証を実施した際の手順をまとめました。
環境
基本的な環境構成は参考記事の内容と同様ですが、
Zabbixでログ監視、SNMPトラップ監視を実施するため、以下の追加設定が必要となります。
-
ログ監視
Zabbixでログ監視を実施するために、監視対象ノードへZabbixエージェントをインストールする必要があります。
またZabbixエージェント⇒Zabbixサーバへ通信を行うための通信許可設定が必要です。 -
SNMPトラップ監視
SNMPトラップの場合、SNMPポーリングとは逆にSNMPエージェントからZabbixサーバのUDP 162 Portへデータが送信されるため、サーバ側でデータを受信する仕組みが必要です。
今回の構成では、ZabbixサーバをDockerコンテナで構築しているため、別途SNMPトラップを受信するためのコンテナを起動します。
手順
参考記事 範囲内の構築作業は実施済みの想定で、
ログ監視/SNMPトラップ監視データ連携を行うための追加設定手順を記載していきます。
ログ監視
1. Zabbixエージェント通信許可設定
Zabbixでログ監視を実施する場合、ZabbixエージェントからZabbixサーバへアクティブチェックと呼ばれる通信を行うため、
Zabbixサーバ側にZabbixエージェントからの通信許可設定をします。
まずdocker ps
コマンドでZabbixサーバ側の待受けポートを確認します。
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
8b5ee7314b4b zabbix/zabbix-server-mysql:ubuntu-7.0-latest "/usr/bin/docker-ent…" 53 minutes ago Up 53 minutes 0.0.0.0:10051->10051/tcp, :::10051->10051/tcp zabbix-docker-zabbix-server-1
83e930d56a53 zabbix/zabbix-web-nginx-mysql:ubuntu-7.0-latest "docker-entrypoint.sh" 53 minutes ago Up 53 minutes (healthy) 0.0.0.0:80->8080/tcp, :::80->8080/tcp, 0.0.0.0:443->8443/tcp, :::443->8443/tcp zabbix-docker-zabbix-web-nginx-mysql-1
aaaaa896dcbe mysql:8.0-oracle "docker-entrypoint.s…" 53 minutes ago Up 53 minutes zabbix-docker-mysql-server-1
確認したポートへの通信許可設定をZabbixノードのインバウンドルールに追加します。
2. Zabbixエージェントインストール
以下のサイトにアクセスし、今回Zabbixエージェントをインストールする環境に合わせた要件を選択します。
表示された手順に基づいて、Zabbixエージェントをインストールします。
$ sudo wget https://repo.zabbix.com/zabbix/7.0/ubuntu/pool/main/z/zabbix-release/zabbix-release_7.0-2+ubuntu24.04_all.deb
$ sudo dpkg -i zabbix-release_7.0-2+ubuntu24.04_all.deb
$ sudo apt update
$ sudo apt install zabbix-agent
インストールが完了したら、/etc/zabbix/zabbix_agentd.conf
にログ監視を行うための設定をします。
# A list of comma-delimited IP addresses, optionally in CIDR notation, or DNS names of Zabbix servers and Zabbix proxies.
Server=<ZabbixノードのIPアドレス>
# The Zabbix server/proxy address or cluster configuration to get active checks from.
ServerActive=<ZabbixノードのIPアドレス>:<zabbix-serverコンテナの待受けポート番号>
# An optional parameter that defines the hostname.
Hostname=任意(Zabbixサーバ側で定義するhostの[Host name]と一致するよう設定する)
変更した設定を反映するため、zabbix-agent
サービスを再起動します。
$ sudo systemctl restart zabbix-agent
3. Zabbix ログ監視設定
監視対象ノードへのZabbixエージェントのインストールが完了したら、ZabbixのWebUIへログインし、ログ監視設定を追加します。
はじめにログ監視用hostを追加します。
WebUI画面ログイン後、左ペインのData Collection
> Hosts
を選択し、host一覧画面右上のCreate host
ボタンをクリックします。
host作成画面が表示されたら、以下のように設定しAdd
ボタンをクリックします。
- Host name:任意(Zabbixエージェント側の[Hostname]設定と一致する値を設定する)
- Host groups:任意
- Interfaces:Type:Agent
- Interfaces:IP address:監視対象ノードのIPアドレス
- Interfaces:Port:10050
hostの作成が完了したら、ログ監視用itemを作成します。
作成hostのitems
をクリックしてitem一覧画面を開き、Create item
ボタンをクリックします。
item作成画面が表示されたら、以下のように設定しAdd
ボタンをクリックします。
- Itemタブ
- Name:任意
- Type:Zabbix agent (active)
- Key:log[監視対象ログファイルパス]
- Type of information:Log
- Tagsタブ
- Name/Value:任意(他itemと重複しないよう設定)
ログ監視用itemに設定したTagは、Kafkaへ連携するデータのフィルタリングに使用します。
Zabbix WebUI画面の左ペインからAdministration
> General
> Connectors
を選択し、表示されたConnector一覧からKafka連携用のConnectorをクリックします。
Connector設定画面が表示されたら、以下のように設定を追加しUpdate
ボタンをクリックします。
- Tag filter
- Tag:ログ監視用itemに設定したTagのName
- operator:Equals
- value:ログ監視用itemに設定したTagのValue
4.ログ監視データ転送確認
KafkaノードでKafka Brokerコンテナにログインし、ログ監視データが転送されていることを確認します。
$ docker exec -it kafka_broker-kafka-1 /bin/bash
$ /opt/bitnami/kafka/bin/kafka-console-consumer.sh --bootstrap-server localhost:9092 --topic items
監視対象ノードでテスト用のログを出力します。
$ echo "`date '+%Y/%m/%d %H:%M:%S'` test log" > <監視対象ログファイルパス>
ログ監視設定、データ連携設定に問題がなければ、Kafka Brokerコンテナ側で以下のような監視データが転送されていることを確認できます。
{"clock":1724746102,"eventid":0,"groups":["test"],"host":{"host":"test_logmon_node","name":"test_logmon_node"},"item_tags":[{"tag":"test","value":"z2ktest_logMonitoring"}],"itemid":47302,"name":"logMonitoring","ns":359525138,"severity":0,"source":"","timestamp":0,"type":2,"value":"2024/08/27 08:07:25 test log"}
SNMPトラップ監視
1. zabbix-snmptrapsコンテナ起動
zabbix-snmptrapsコンテナを起動するため、参考記事内でZabbixコンテナ構築に利用したマニフェストdocker-compose_v3_ubuntu_mysql_latest.yaml
を使用します。
ファイル内容を確認すると、zabbix-snmptrapsのサービス定義が記載されています。
~~~抜粋~~~
zabbix-snmptraps:
extends:
file: compose_zabbix_components.yaml
service: snmptraps
image: "${ZABBIX_SNMPTRAPS_IMAGE}:${ZABBIX_UBUNTU_IMAGE_TAG}${ZABBIX_IMAGE_TAG_POSTFIX}"
labels:
com.zabbix.os: "${UBUNTU_OS_TAG}"
~~~抜粋~~~
docker compose
コマンドの引数にサービス名を指定し、zabbix-snmptrapsコンテナを起動します。
$ docker compose -f ./docker-compose_v3_ubuntu_mysql_latest.yaml up -d zabbix-snmptraps
docker compose ps
コマンドでzabbix-snmptrapsコンテナが起動していることを確認します。
NAME IMAGE COMMAND SERVICE CREATED STATUS PORTS
zabbix-docker-mysql-server-1 mysql:8.0-oracle "docker-entrypoint.s…" mysql-server 2 hours ago Up 2 hours
zabbix-docker-zabbix-server-1 zabbix/zabbix-server-mysql:ubuntu-7.0-latest "/usr/bin/docker-ent…" zabbix-server 2 hours ago Up 2 hours 0.0.0.0:10051->10051/tcp, :::10051->10051/tcp
zabbix-docker-zabbix-snmptraps-1 zabbix/zabbix-snmptraps:ubuntu-7.0-latest "/usr/sbin/snmptrapd…" zabbix-snmptraps 15 seconds ago Up 13 seconds 0.0.0.0:162->1162/udp, :::162->1162/udp
zabbix-docker-zabbix-web-nginx-mysql-1 zabbix/zabbix-web-nginx-mysql:ubuntu-7.0-latest "docker-entrypoint.sh" zabbix-web-nginx-mysql 2 hours ago Up 2 hours (healthy) 0.0.0.0:80->8080/tcp, :::80->8080/tcp, 0.0.0.0:443->8443/tcp, :::443->8443/tcp
2. SNMPトラップ通信許可設定
Zabbixサーバ側でUDP 162 Portへの通信を受け付けられるように、Zabbixノードのインバウンドルールに通信許可設定を追加します。
3. SNMPトラップ監視設定
ZabbixのWebUIへログインし、SNMPトラップ監視設定を追加します。
WebUI画面ログイン後、左ペインのData Collection
> Hosts
を選択し、表示されたhost一覧画面から参考記事 内で作成したSNMP監視用hostのitems
をクリックします。
item一覧画面でCreate item
ボタンをクリックし、
item作成画面が表示されたら、以下のように設定しAdd
ボタンをクリックします。
- Itemタブ
- Name:任意
- Type:SNMP trap
- Key:snmptrap.fallback
- Type of information:Log
- Tagsタブ
- Name/Value:任意(他itemと重複しないよう設定)
SNMPトラップ監視用itemの作成に成功したら、itemに設定したTagをKafka連携用ConnectorのTag filterに設定します。
Zabbix WebUI画面の左ペインからAdministration
> General
> Connectors
を選択し、表示されたConnector一覧からKafka連携用のConnectorをクリックします。
Connector設定画面が表示されたら、以下のように設定を追加しUpdate
ボタンをクリックします。
- Tag filter
- Tag:SNMPトラップ監視用itemに設定したTagのName
- operator:Equals
- value:ログ監視用itemに設定したTagのValue
4. SNMPトラップ監視データ連携確認
KafkaノードでKafka Brokerコンテナにログインし、SNMPトラップ監視データが連携されていることを確認します。
$ docker exec -it kafka_broker-kafka-1 /bin/bash
$ /opt/bitnami/kafka/bin/kafka-console-consumer.sh --bootstrap-server localhost:9092 --topic items
監視対象ノードからテスト用のSNMPトラップを送信します。
$ sudo snmptrap -v2c -c <コミュニティ名> <ZabbixノードのIPアドレス> '' .1.3.6.1.4.1.311.1.1.3.1.2 .1.3.6.1.4.1.311.1.1.3.1.2 s "test trap"
SNMPトラップ監視設定、データ連携設定に問題がなければ、Kafka Brokerコンテナ側で以下のような監視データが転送されていることを確認できます。
{"clock":1724747610,"eventid":0,"groups":["test"],"host":{"host":"test_snmp_node","name":"test_snmp_node"},"item_tags":[{"tag":"test","value":"z2ktest_snmpTrap"}],"itemid":47303,"name":"snmpTrap","ns":872007152,"severity":0,"source":"","timestamp":0,"type":2,"value":"2024-08-27T08:33:29+0000 UDP: [34.214.124.230]:46416-\u003e[172.16.238.4]:1162\nDISMAN-EVENT-MIB::sysUpTimeInstance = 933161\nSNMPv2-MIB::snmpTrapOID.0 = SNMPv2-SMI::enterprises.311.1.1.3.1.2\nSNMPv2-SMI::enterprises.311.1.1.3.1.2 = \"test trap\""}
参考
https://qiita.com/ktaka1104/items/bd178a4eebfa7b07e40a
https://www.zabbix.com/download
https://www.zabbix.com/documentation/current/en/manual/config/items/itemtypes/log_items
https://www.zabbix.com/documentation/current/en/manual/config/items/itemtypes/snmptrap
https://hub.docker.com/r/zabbix/zabbix-snmptraps/
https://github.com/zabbix/zabbix-docker