複数の物理サーバー間で動的な(つまり、移動する)コンテナーを検出および監視し、その結果を、コンテナーを実行するエージェントが実行されているサーバーではなく、コンテナーサービスに関連付けています。
私は2つのサーバーを持っています:AとB;私は1つのコンテナーを持っています。CはAまたはBのいずれかで実行できます。私のオーケストレーションエンジン(Swarm、Kubernetes、Rancherなど)は、少なくとも1つの場所で実行されるようにする責任があります。
AとBにzabbixエージェントを使用しているため、CPU、ファイルシステム、メモリなど、通常のものすべてを監視できます。
2つのことを監視したい:
Zabbixとエージェントを構成して、実行されている場所とは無関係に、Cとそのプロセスの両方の状態を報告するにはどうすればよいですか?
私の仮定は:
私の質問は:
要するに、コンテナの自動検出をホストとして実行するように設定し、それらのそれぞれについてプロセスチェックを実行して、特定のグループ/パターンのエージェントを持つすべてのサーバーで実行し、出力をエージェントが実行されているAまたはBサーバーではなくCコンテナーですか?
編集:ファーストレスポンダーのおかげで、「メタホスト」というアイデアが浮かびました。しかし、それは新しい問題を生み出します:
これは、「「Docker」グループのすべてのホストで検出を実行する」と言えば、はるかに簡単です。これにより、すべてのC(およびDなど)コンテナーが検出され、それらがホストとして追加されます。また、「現在検出されているすべてのコンテナーでプロセスチェックスクリプトを実行する」と言います。おそらく、現在コンテナーにアクセスできるエージェント(つまり、コンテナーが現在実行されている場所)を知っているからです。
Zabbixが特定のサーバーに関連付けられているアプリケーションを監視するのに最適であり、動き回るアプリを監視するのではなく、ますます感じているようになりました。それとも私はそれを誤解していますか?
免責事項:私は https://github.com/monitoringartist/Zabbix-Docker-Monitoring の作成者です
AおよびBに標準 Zabbix-Docker-Monitoring を設定します。
Dockerテンプレートの編集-必要に応じて、検出されたコンテナーをフィルター処理し、トリガーのプロトタイプをすべて削除します。
新しい計算アイテムを作成します。これにより、AおよびBの各C関連アイテムが新しいC計算アイテムに集約されます(ZabbixでC "メタホスト"を作成できます)-これらの新しいCメトリックの上に新しいトリガーを設定します。
更新:集計に 計算された項目 を使用-たとえば、AおよびBからの集計sum(docker.up[cid])
-次に、「コンテナーcidが実行されていません」のトリガー条件はsum(docker.up[cid])<1
になります。 Plsは正しい構文についてZabbixドキュメントを読みます。
LLDは、コンテナーがatmを実行している場所を検出し、それに応じて項目/トリガーを更新します。誤ったアラートを排除したい場合は、LLD /トリガーのタイミングを調整することを忘れないでください。