はじめに
- MQTT Broker(EMQX Enterprise)でZabbixを設定した内容をまとめたいと思います。
- パフォーマンスチェックはAPIの値を取得するのでZabbix agentではなくHTTP agentを使用します。
※追記
procの引数を検索するがてら、Zabbixのソースをのぞいて検索してみたところ、
agent2でMQTTの監視をするプラグインがあったのでそっちを使った方がいいのかも。
やりたいこと
- パフォーマンスチェック:API経由でメトリクスを取得する。
- 死活監視:APIチェックとプロセスチェック+トリガー検知の作成。
1.パフォーマンスチェック
- ドキュメント通りに以下のAPIを使用する。
https://{URL}/api/v5/metrics
- MQTT Broker(EMQX Enterprise)側でAPIKeyとSecretKeyを発行する。
- これらを使用してPostman等で値が取れるか確認する。
後に結果で返ってきたJSONオブジェクトを整形したり、原因の切り分けができるので推奨とします。
Zabbix Item作成
- 監視のキモとなるItemを作成します。
- またテンプレート化してマクロに環境変数を入れて管理します。(APIキー、URLなど)
設定内容
Item
- 使用するTypeはHTTP agentです。
- Keyは任意で何でも良いのですが、後にダッシュボードで使用するため分かりやすい名前を使用します。
- URLとHeadersに後にテンプレートマクロで記載する環境変数用の枠を入れます。
※初回はトークンとURLを直接入れて原因の切り分けをしてもいいかもしれません。
Preprocessing
- 取得した値を整形するためにPreprocessingタブで整形します
- JSONPathを指定しParametersに区切り文字を入れます。
個人的にこの区切り文字でちょっと詰まりましたが、隣にTestタブがあるのですぐ結果が分かります。
- 全て設定し終わったらItemをテストします。
- ResultがValueの値と一致していればOKです。
2.死活監視(プロセスチェック)
- 今回はZabbix agentを使用しproc.numを使用します。
- 監視対象のプロセスをpsコマンド等で特定する。
ps -aux | grep emqx
Zabbix Item作成
- TypeにZabbix agentを選択
実施するインスタンスにagentを入れる&Zabbixサーバーへの疎通設定が必要です。
今回は割愛します。
- Keyにはproc.num[emqx]を入れます。
ドキュメントを見る限り
proc.num[,,,,]のフォーマットに沿うと
proc.num[emqx,,,,]の方が正しいと思います。
proc.numを定義しているところでコード検索したのですが、引数なしの箇所が見つからなかったです。(こちらは自分の力不足)
- 設定後値が取れているか確認する。(1が正常、0が停止状態)
Triggers設定
- lastを使用。
- 1の時は稼働していて0の時はアラートを出すように条件式を設定をする。
- systemctl等で停止したりしてテストする。
ダッシュボード設定
- Add widgetから設定、TypeはItem valueを選択
- Itemに先ほど指定したキー(proc.num[emqx])があるのでそちらを選択する。
- Advanced configurationにチェックを入れDescriptionにStatus等を入れる。
- LTS 7.0ならハニカムウェジェットの方がいいかも。
参考
EMQX Enterprise APIドキュメント
https://docs.emqx.com/en/emqx/v5.7/admin/api-docs.html#tag/Status/paths/~1status/get
最後に
- 今回はHTTPエージェントを使用したAPI経由でのメトリクスを取得することができました。
- ただAPIキーの管理が大変なのでできるならばHTTPエージェントを使用せずに実装したいところですが、ここは要勉強ですね。
- またトリガー検知の部分はまだまだ最適化できそうなので学んでいきたいところですね。