Ubuntu20.04でZabbixを使用してDockerを監視する方法
著者は、 Open Source Initiative を選択して、 Write forDOnationsプログラムの一環として寄付を受け取りました。
Docker は、コンテナー内のアプリケーションプロセスの管理を簡素化する人気のあるアプリケーションです。 コンテナーは仮想マシンに似ていますが、ホストオペレーティングシステムへの依存度が高いため、移植性とリソースに適しています。
実稼働環境でコンテナーを使用する場合は、コンテナーがすべて実行されているかどうか、およびコンテナーが消費しているリソースを知っておく必要があります。 Zabbix は、ネットワーク、サーバー、仮想マシン、アプリケーションなど、ITインフラストラクチャのほぼすべての要素の状態を監視できる監視システムです。
Zabbixは最近、高度な機能を備えた新しいエージェント(Zabbixエージェント2)を導入しました。 新しいエージェントの主な利点の1つは、プラグインを使用して機能を拡張できることです。 現在、Dockerを監視するためのプラグインを含むいくつかのプラグインが利用可能です。
このチュートリアルでは、Ubuntu20.04でZabbixエージェント2を使用してZabbixでDockerモニタリングを設定します。 メトリックを調べ、クラッシュをシミュレートして通知を生成します。 最終的には、Dockerアプリケーションの監視システムが配置され、コンテナーの問題があれば通知されます。
前提条件
このチュートリアルに従うには、次のものが必要です。
-
Ubuntu 20.04の初期サーバーセットアップガイドに従ってセットアップされた2つのUbuntu20.04サーバー。これには、
sudo
特権を持つ非rootユーザーとufw
で構成されたファイアウォールが含まれます。 -
Zabbixをインストールする最初のサーバーは、Zabbixサーバーになります。 次のコンポーネントをインストールします。
- チュートリアルUbuntu20.04LEMPスタックガイドのステップ1から3に従ってインストールされたNginx、MySQL、およびPHP。
- チュートリアルUbuntu20.04でリモートサーバーを安全に監視するためにZabbixをインストールおよび設定する方法のステップ1から5に従ってインストールされるZabbix。
- (Webインターフェイスではなく)メールで通知を受信するには、 Ubuntu20.04でリモートサーバーを安全に監視するためにZabbixをインストールおよび設定する方法のステップ8を完了することをお勧めします。
-
Docker(およびZabbixエージェント)をインストールする2番目のサーバーは、Dockerサーバーになります。 チュートリアルUbuntu20.04にDockerをインストールして使用する方法のステップ1に従ってDockerをインストールします。
-
完全に登録されたドメイン名。 このチュートリアルでは、全体を通して例として
your_domain
を使用します。 Namecheap でドメイン名を購入するか、 Freenom で無料でドメイン名を取得するか、選択したドメイン登録事業者を使用できます。 -
ZabbixサーバーのパブリックIPアドレスを指す
your_domain
のAレコード。 追加方法の詳細については、このDigitalOceanDNSの概要をフォローしてください。
ステップ1— ZabbixAgent2のインストールと設定
Zabbixエージェントは非常に小さなアプリケーションであり、監視するすべてのサーバーまたは仮想マシンにインストールする必要があります。 Zabbixサーバーにモニタリングデータを送信します。 Zabbiхは、ZabbixエージェントまたはZabbixエージェント2のいずれかのエージェントを使用することをお勧めします。 (ドキュメントでそれらの違いについて学ぶことができます。)このチュートリアルでは、Dockerで動作するZabbixエージェント2を使用します。 このステップでは、インストールと構成の方法を学習します。
エージェントソフトウェアをインストールすることから始めます。 Dockerサーバーにログインします。
- ssh sammy@docker_server_ip_address
次のコマンドを実行して、リポジトリ構成パッケージをインストールします。
- wget https://repo.zabbix.com/zabbix/5.0/ubuntu/pool/main/z/zabbix-release/zabbix-release_5.0-1+focal_all.deb
- sudo dpkg -i zabbix-release_5.0-1+focal_all.deb
次に、パッケージインデックスを更新します。
- sudo apt update
次に、Zabbixエージェントをインストールします。
- sudo apt install zabbix-agent2
次に、すべてのエージェントの設定を含むエージェント構成ファイルを編集する必要があります。 これらの設定は、データを転送するアドレス、サーバーとの間の接続に使用するポート、安全な接続を使用するかどうかなどを指定します。 ほとんどの場合、デフォルト設定で問題ありません。 このファイル内のすべての設定は、ファイル全体の有益なコメントを介して文書化されています。
このチュートリアルでは、Zabbixエージェントの設定を編集して、Zabbixサーバーへの接続を設定する必要があります。 テキストエディタでエージェント設定ファイルを開きます。
- sudo nano /etc/zabbix/zabbix_agent2.conf
デフォルトでは、エージェントはエージェントと同じホスト上のサーバーにデータを送信するように構成されているため、ZabbixサーバーのIPアドレスを追加する必要があります。 次のセクションを見つけてください。
...
### Option: Server
# List of comma delimited IP addresses, optionally in CIDR notation, or DNS names of Zabbix servers and Zabbix proxies.
# Incoming connections will be accepted only from the hosts listed here.
# If IPv6 support is enabled then '127.0.0.1', '::127.0.0.1', '::ffff:127.0.0.1' are treated equally
# and '::/0' will allow any IPv4 or IPv6 address.
# '0.0.0.0/0' can be used to allow any IPv4 address.
# Example: Server=127.0.0.1,192.168.1.0/24,::1,2001:db8::/32,zabbix.example.com
#
# Mandatory: yes, if StartAgents is not explicitly set to 0
# Default:
# Server=
Server=127.0.0.1
...
デフォルト値をZabbixサーバーのIPに変更します。
...
Server=zabbix_server_ip_address
...
デフォルトでは、Zabbixサーバーはエージェントに接続します。 ただし、一部のチェック(ログの監視など)では、逆接続が必要です。 正しく動作させるには、Zabbixサーバーアドレスと一意のホスト名を指定する必要があります。
アクティブなチェックを構成するセクションを見つけて、以下に示すようにデフォルト値を変更します。
...
##### Active checks related
### Option: ServerActive
# List of comma delimited IP:port (or DNS name:port) pairs of Zabbix servers and Zabbix proxies for active checks.
# If port is not specified, default port is used.
# IPv6 addresses must be enclosed in square brackets if port for that host is specified.
# If port is not specified, square brackets for IPv6 addresses are optional.
# If this parameter is not specified, active checks are disabled.
# Example: ServerActive=127.0.0.1:20051,zabbix.domain,[::1]:30051,::1,[12fc::1]
#
# Mandatory: no
# Default:
# ServerActive=
ServerActive=zabbix_server_ip_address
### Option: Hostname
# Unique, case sensitive hostname.
# Required for active checks and must match hostname as configured on the server.
# Value is acquired from HostnameItem if undefined.
#
# Mandatory: no
# Default:
# Hostname=
Hostname=Docker server
...
ファイルを保存して閉じます。
ZabbixエージェントがDockerを監視するには、zabbix
ユーザーをdocker
グループに追加する必要があります。
- sudo usermod -aG docker zabbix
これで、Zabbixエージェントを再起動し、起動時に開始するように設定できます。
- sudo systemctl restart zabbix-agent2
- sudo systemctl enable zabbix-agent2
適切な対策として、Zabbixエージェントが正しく実行されていることを確認してください。
- sudo systemctl status zabbix-agent2
出力は次のようになり、エージェントが実行中であることを示します。
Output● zabbix-agent2.service - Zabbix Agent 2
Loaded: loaded (/lib/systemd/system/zabbix-agent2.service; enabled; vendor preset: enabled)
Active: active (running) since Fri 2021-09-03 07:05:05 UTC; 1min 23s ago
...
エージェントは、ポート10050
でサーバーからの接続をリッスンします。 このポートへの接続を許可するようにUFWを設定します。
- sudo ufw allow 10050/tcp
UFWの詳細については、 Ubuntu20.04でUFWを使用してファイアウォールを設定する方法をご覧ください。
このステップでは、Zabbixエージェント2をインストールし、 Zabbixサーバーからの接続を許可するように構成し、Dockerを監視する準備をしました。
これで、エージェントはZabbixサーバーにデータを送信する準備が整いました。 ただし、これを使用するには、サーバーのWebコンソールからリンクしてDockerテンプレートを有効にする必要があります。 次のステップでは、構成を完了します。
ステップ2—新しいホストをZabbixサーバーに追加する
監視するサーバーにエージェントをインストールするのは、プロセスの半分にすぎません。 監視する各ホストは、 Zabbixサーバーに登録する必要があります。これは、Webインターフェイスを介して行うことができます。 また、適切なテンプレートをそれに接続する必要があります。 テンプレートを使用すると、同じ監視項目、トリガー、グラフ、および低レベルの検出ルールを複数のホストに適用できます。 テンプレートがホストにリンクされると、テンプレートのすべてのエンティティ(アイテム、トリガー、グラフなど)がホストに追加されます。
アドレスhttp://zabbix_server_name
またはhttps://zabbix_server_name
に移動して、ZabbixサーバーのWebインターフェースにログインします。 (前提条件 Ubuntu 20.04 でリモートサーバーを安全に監視するためのZabbixのインストールと設定方法]にリンクされているチュートリアルで説明されているように、デフォルトユーザーは Admin 、パスワードはです。 zabbix 。)
ログインしたら、左側のナビゲーションバーで構成をクリックし、次にホストをクリックします。 次に、画面右上のホストの作成ボタンをクリックします。 これにより、ホスト構成ページが開きます。
ホスト名とIPアドレスをDockerサーバーのホスト名とIPアドレスを反映するように調整してから、ホストをグループに追加します。 Linuxサーバーなどの既存のグループを選択することも、Dockerサーバーなどの独自のグループを作成することもできます。 各ホストはグループに属している必要があり、複数のグループに属している場合もあります。 これを行うには、 Groups フィールドに既存または新規のグループの名前を入力し、提案されたリストから目的の値を選択します。
グループを追加したら、テンプレートタブをクリックします。
必要なチェックを有効にするには、テンプレートを追加する必要があります。 テンプレートには、必要なすべてのチェック、トリガー、およびグラフが含まれています。 ホストは複数のテンプレートを持つことができます。 これを行うには、 Search フィールドにテンプレートの名前を入力し、提案されたリストからテンプレートを選択します。
このチュートリアルでは、 Template App Docker と入力し、リストからそれを選択して、このテンプレートをホストに追加します。 これにより、テンプレートで事前構成されたDockerモニタリングに必要なすべてのアイテム、トリガー、グラフがホストにアタッチされます。
最後に、フォームの下部にある追加ボタンをクリックして、ホストを作成します。
リストに新しいホストが表示されます。 1分待ってからページをリロードすると、すべてが正常に機能していることを示す緑色のラベルが表示されます。
このステップでは、サーバーに新しいホストを追加し、既製のテンプレートを使用して必要なチェックを追加しました。
ZabbixサーバーがDockerサーバーを監視しています。 次のステップでは、テストコンテナを起動し、Zabbixが収集できるメトリックを調べます。
ステップ3—Dockerメトリクスへのアクセス
このチュートリアルを新しい環境で実行している場合、実行中のコンテナはなく、監視するものもありません。 このステップでは、テストコンテナーを開始し、使用可能なメトリックを確認します。 このチュートリアルでは、ubuntu
に基づいてテストコンテナを実行します。
Dockerサーバーで次のコマンドを実行します。
- sudo docker run --name test_container -it ubuntu bash
これにより、ubuntu:latest
イメージを使用してtest_containerという名前のテストコンテナが起動します。 -it
フラグは、コンテナーの標準入力に接続された疑似TTYを割り当てるようにDockerに指示し、コンテナー内にインタラクティブなbash
シェルを作成します。
出力は次のようになります。
OutputUnable to find image 'ubuntu:latest' locally
latest: Pulling from library/ubuntu
35807b77a593: Pull complete
Digest: sha256:9d6a8699fb5c9c39cf08a0871bd6219f0400981c570894cd8cbea30d3424a31f
Status: Downloaded newer image for ubuntu:latest
注:次の手順で必要になるため、シェルを離れないでください。
コンテナを起動してから数分後、Zabbixは自動的に新しいコンテナを見つけ、適切なメトリックを追加します。
すべてのメトリックのリストを表示するには、左側のナビゲーションバーで監視をクリックしてからホストをクリックします。 次に、対応する行の最新データをクリックします。
Zabbixエージェントが特定のホストに対して収集するすべてのメトリックを含むテーブルが表示されます。 各項目について、名前、履歴保存期間、最後のチェックの時刻、および最後の値を確認できます。
リストをスクロールして、test_containerに関連付けられているメトリックを確認できます。 名前フィールドにコンテナの名前を入力し、適用をクリックして、関連するすべてのメトリックを検索することもできます。
特定のメトリックの変更履歴を表示するには、グラフ(数値の場合)または履歴(テキスト値の場合)をクリックします。
リストから1つ以上のメトリックを選択し、リストの一番下にあるグラフの表示ボタンをクリックして、複数のグラフを一緒に表示することもできます。
このステップでは、テストコンテナを起動し、ZabbixWebインターフェイスでそのメトリックを表示しました。 次に、通知をトリガーします。
ステップ4—テストアラートの生成
このステップでは、Zabbixからの通知をトリガーするコンテナーの予期しないシャットダウンをシミュレートすることにより、モニタリングがどのように機能するかを確認します。
コンテナのクラッシュをシミュレートすることから始めます。 コンテナシェルで次のコマンドを実行します。
- exit 1
このコマンドを使用して、エラーコード1
でコンテナを終了しました。 この終了コードはdocker run
の呼び出し元に渡され、テストコンテナーのメタデータに記録されます。
アラートを表示するには、ZabbixWebインターフェイスの左側のナビゲーションバーでモニタリングをクリックしてからダッシュボードをクリックします。 1分以内に、「コンテナがエラーコードで停止されました」という通知が表示されます。
以前に電子メールまたはその他の通知を構成したことがある場合は、次のようなメッセージも受信します。
Problem started at 11:17:31 on 2021.09.03
Problem name: Container /test_container: Container has been stopped with error code
Host: Docker Server
Severity: Average
Operational data: 1
Original problem ID: 103
通知を確認した後、コンテナを再起動すると、問題は自動的に解消されます。
コンテナを再起動するには、Dockerサーバーで次のコマンドを実行します。
- sudo docker start test_container
次のコマンドを使用して、コンテナが実行されていることを確認できます。
- sudo docker ps
出力は次のようになります。
OutputCONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
c9b8a264c2e1 ubuntu "bash" 23 minutes ago Up 7 seconds test_container
Zabbixインターフェースのすべてのアラートの履歴を表示するには、左側のナビゲーションバーで監視をクリックしてから問題をクリックします。 オプションとフィルターを使用して、特定の期間、特定のホストなどのイベントを表示できます。 履歴を表示するには、オプション表示:履歴を選択します
このステップでは、コンテナのクラッシュをシミュレートし、Zabbixで通知を受け取りました。
結論
このチュートリアルでは、Dockerコンテナの状態を追跡するのに役立つ簡単な監視ソリューションを設定する方法を学びました。 これで、問題を警告し、Dockerアプリケーションで発生しているプロセスを分析できます。
Zabbixを使用すると、コンテナだけでなく、サーバー、データベース、Webアプリケーションなどを、既製のZabbix公式テンプレートを使用して監視できます。
インフラストラクチャの監視の詳細については、監視トピックページをご覧ください。