ZabbixでMQTTのデータを監視
IoT機器等で使用されるPub/Sub型プロトコル、MQTT。監視ソフトウェアとして広く使用されているZabbixでもMQTT経由で取得したデータを監視できます。
本記事は、ZabbixでMQTTのデータを監視する方法をまとめたものです。対象は主にZabbix 6系+Zabbixエージェント2です。OSはRHEL8系ですが他のバージョンでも同様のはずです。
参考として、MQTTブローカーのMosquitto導入についてこちらの記事に、また簡単にセットアップできるZabbix Applianceの導入についてこちらの記事にまとめてあります。
本記事の目的
- Zabbixにおいて、MQTTで取得したデータを監視する。
基本
ZabbixによるMQTT監視方法
Zabbix.comに、ZabbixのMQTT対応方法について説明があります。
- Zabbix Agent 2のMQTT plugin (本記事の対象)
- 3rd Party Solutions (Agent、個別スクリプト等)
Zabbixの標準機能で対応できるのは、MQTT Plugin(Zabbix Agent 2)です。Zabbix Agent (2ではない方)ではありません。
Zabbix Agent 2の導入
別途Zabbixサーバは導入済みであるものとします。
Zabbix Agent 2は、Zabbixサーバと同じサーバでも、別サーバでも、どちらにインストールしても大丈夫です。
なお、Zabbix Agent 2を動作させるサーバは、目的のMQTTブローカーに対して通信できる必要性があります。Agent 2の機能でMQTTブローカーに対しSubscribeするためです。
Zabbix Agent 2のインストール
以下のZabbixマニュアルを参考に、Zabbix Agent 2を導入します。
Zabbixダウンロードとインストール方法の説明ページを参考に、dnfによるパッケージインストールが可能です。
以下、インストール時のコマンド例です。
# rpm -Uvh https://repo.zabbix.com/zabbix/6.0/rhel/8/x86_64/zabbix-release-6.0-1.el8.noarch.rpm
# dnf install zabbix-agent2.x86_64
Zabbixのリポジトリを登録し、Agent 2のみをインストールしています。
Zabbix Agent 2の初期設定
インストール後、Agent 2の設定ファイルを編集します。
# cp -p /etc/zabbix/zabbix_agent2.conf /etc/zabbix/zabbix_agent2.conf.org
# vi /etc/zabbix/zabbix_agent2.conf
以下の行を編集します。
… Server=(ZabbixサーバのFQDN/IPアドレス) … ServerActive=(ZabbixサーバのFQDN/IPアドレス) … Hostname=(後でZabbixサーバで監視対象を指定する際のHostnameと同じ文字列) …
- MQTT Pluginのみを使用する場合、
RefreshActiveChecks
の設定は不要でした。 - 別途、
/etc/zabbix/zabbix_agent2.d/plugins.d/mqtt.conf
という設定ファイルがありますが、これは基本的に修正不要です。本記事の作成時点で、Plugins.MQTT.Timeout
というタイムアウト値のオプションが指定できるのみです。
次に、サービス設定をします。(ちなみに、マニュアルに”Agent 2 does not have built-in daemonization support on Linux; it can be run as a Windows service.”とあるのですが、以下のようにサービスの登録は可能のようなので、具体的に何ができないのか不明です)
# systemctl enable zabbix-agent2.service Created symlink /etc/systemd/system/multi-user.target.wants/zabbix-agent2.service → /usr/lib/systemd/system/zabbix-agent2.service. # systemctl start zabbix-agent2.service # systemctl status zabbix-agent2.service ● zabbix-agent2.service - Zabbix Agent 2 Loaded: loaded (/usr/lib/systemd/system/zabbix-agent2.service; enabled; vendor preset: disabled) Active: active (running) since Fri 2022-07-17 12:01:25 JST; 2s ago Main PID: 12800 (zabbix_agent2) Tasks: 5 (limit: 23520) Memory: 5.6M CGroup: /system.slice/zabbix-agent2.service mq12800 /usr/sbin/zabbix_agent2 -c /etc/zabbix/zabbix_agent2.conf …
Agent 2 を自動起動する設定と、手動でのサービス起動確認ができました。
続いて、MQTTのSubscribe等の設定は、Zabbixサーバ側の監視設定の中で行います。
Zabbixサーバにて、Agent 2からMQTTデータ取得
Zabbixサーバ側で、Agent 2からMQTTのデータを取得できるよう設定します。
ホスト、アイテムの登録
先ほどAgent 2を導入したサーバを監視対象として登録します。
まずホスト設定です。
Host Name
は、Agent 2側のzabbix_agent2.confのHostname
で指定した文字列と同じものを指定します。この文字列が一致していないと、データを取得できません。Groups
の内容は任意です。Interfaces
は”Agent”としてAgent 2をインストールしたサーバのFQDNやIPアドレスを指定します。
次にアイテム設定です。
Name
の内容は任意です。Type
は、”Zabbix agent (active)”を指定します。MQTT Pluginによる監視はActive Check用アイテムの指定が必須です。- Active Check用アイテムの詳細は、Zabbixマニュアルに記載されています。
- Active Check用アイテムは、Zabbixサーバで指定した監視内容に沿って、Agent側からデータ送信するものです。なお、MQTT Pluginによる監視の場合は、Agent 2が定期的(RefreshActiveChecks)にデータ送信するのではなく、MQTTブローカーからデータを受け取った際に、都度Zabbixサーバにデータを送信するようです。
Key
は、取得したいMQTTのトピック等を指定します。- 基本的な書式:
mqtt.get[tcp://(MQTTブローカーのFQDNやIPアドレス):1883,"(トピック名)"]
- Agent 2が動作するサーバから、MQTTブローカーに対して指定のトピックをSubscribeするよう指示します。1883はMQTTの標準的なポート番号です。
- mqtt.getキーの詳細は、Zabbixマニュアルに記載されています。ワイルドカード指定や認証、TLS等についての説明があります。
- 基本的な書式:
Type of Information
は、取得するデータの型に合わせて指定します。
以上の設定により、Zabbixサーバ側で、Agent 2からMQTTのデータを取得できるようになりました。
あとは他のデータと同じようにZabbixサーバ側で監視やグラフ化などが可能ですが、MQTT固有の手順は不要なので本記事では省略します。
参考として、Zabbixでの監視データの加工についてこちらの記事にまとめてあります。MQTT経由で受信したデータに対し、計算やJSONデータのパースなどが必要な場合に使える設定例です。