Mackerel で Docker を監視してみた

こんにちは、SCSK株式会社の嶋谷です。2024年度入社の新入社員です。

現在私は、AIプラットフォームやWebサーバ・監視サーバの構築といったインフラ基盤の構築業務に携わっています。

今回は、Docker上に構築したAIプラットフォーム基盤をMackerelで監視してみたいと思います。

Mackerelとは

Mackerelは、株式会社はてなが提供するSaaS型の監視ツールです。

サーバの状態(CPUやメモリ)を監視し、事前に設定された閾値を超えたときにオペレータや管理者に通知を行うことができるツールです。加えて、オンプレミス環境だけでなくクラウド環境やコンテナ環境も監視することができます。

Mackerelの詳細情報については、下記リンクをご参照ください。

Mackerel(マカレル): 始めやすくて奥深い、可観測性プラットフォーム
Mackerel(マカレル)は誰でも簡単に始めやすく奥深い可観測性プラットフォーム。運用をイージーにするオブザーバビリティを高め、未知の問題に立ち向かう開発者に力を与えます。サーバー監視をMackerelではじめてみませんか?無料プランや2...

MackerelでDockerを監視する記事が数少ないため、今回実際に実装して記事を書きたいと思いました。

Dockerを監視してみた(監視対象について)

今回の検証では、Dockerを監視するためにコンテナを作成する必要があります。そこで、今流行りのLLMやRAGを活用し、簡単にアプリ開発が可能なAIプラットフォーム「Dify」をAWS環境に構築しました。
監視対象の構成図は以下の通りで、AWSのEC2上にDocker環境を構築し、Docker上でDify環境を構築しています。

Difyについては本記事の主要なトピックではないため、興味がある方は下記リンクをご参照ください。

Dify.AI · 先進的なAIアプリケーションのためのイノベーションエンジン
先進的なAIアプリケーションのためのイノベーションエンジン

Dockerを監視してみた(設定方法)

それでは、MackerelでDockerを監視する方法を説明していきます。(今回はAmazonLinux2のOSを使用しているため、その方法について記載します。)

  1. エージェントのインストールと起動
    まずは、監視対象ホストにエージェントをインストールします。
    以下のコマンドを実行してインストールと起動を行います。 
    APIキーはMackerelのWebコンソールから参照しています。              

    curl -fsSL https://mackerel.io/file/script/amznlinux/setup-all-yum-v2.sh | MACKEREL_APIKEY='YOUR_API_KEY' sh
    sudo systemctl start mackerel-agent

    起動するとMackerelに監視対象ホスト(EC2)が登録されます。
    Mackerelの画面では以下の表示になり、ホスト名・ホストの情報・取得したメトリックのグラフが表示されています。

    ドキュメントどおりにコマンドを実行するだけでホストを登録できました。
    ドキュメントどおりに設定しても動作しない作業も経験してきたので、この作業はサクッと完了して感激しました。

  2. 公式プラグインのインストール
    Dockerを監視するために公式プラグインをインストールする必要があります。
    以下のコマンドを実行して公式プラグインをインストールします。(プラグインを3の手順で使用します。)                                       

    sudo yum install mackerel-agent-plugins

    この作業もドキュメントどおりにコマンドを実行するだけで完了します。

  3. 設定ファイルの修正
    最後に設定ファイルに以下のプラグインを追記します。       

    [plugin.metrics.docker]
    command = ["mackerel-plugin-docker", "-name-format", "name_id"]

    -name-formatではコンテナ名(name)やコンテナID(id)やコンテナ名+コンテナID(name_id)など複数のオプションを設定することができます。このオプションによってMackerel上のグラフ表示に違いがあります。
    ここで注意が必要です!
    安易にオプションをコンテナIDに設定してしまうとMackerel上でコンテナIDしか表示されず、何の機能を持つコンテナかわからなくなります。
    そのため今回はコンテナ名+コンテナID(name_id)に設定することで名前とIDをグラフ上で紐づけています。
    プラグインを追記後、エージェントを以下のコマンドで再起動します。

    sudo systemctl restart mackerel-agent

すると、Mackerel上でDockerコンテナのCPUの使用率がグラフとして表示されました!
今回作成した環境はコンテナが9つ作成されており、グラフはコンテナ毎に折れ線グラフとして表示されています(下記グラフは視認性のために2つのコンテナのグラフを表示しています)。それぞれの折れ線グラフの名前が手順3の-name-formatで設定したコンテナ名+コンテナID(先頭6文字)になっています。グラフの縦軸は使用量(%)、横軸は時刻となっています。

ちなみに-name-formatをコンテナID(id)に設定するとMackerel上では以下の画像のように表示されます。非常に見にくく、IDとコンテナの役割を紐づけることが困難です。みなさんも設定するときは気をつけましょう。

MackerelのDocker監視ではCPU・メモリ・I/O操作の3つのメトリックを監視することができます。ログ監視はできません。それぞれの詳細なメトリックについては下記をご参照ください。

mackerel-agent-plugins/mackerel-plugin-docker at master · mackerelio/mackerel-agent-plugins
Plugins for mackerel-agent. Contribute to mackerelio/mackerel-agent-plugins development by creating an account on GitHub...

おわりに

MackerelでDocker環境を監視することができました。Mackerel上での監視設定はドキュメント通りに作業を進めることで簡単に設定することができました。しかし、-name-formatの設定によるMackerel上での表示内容の違いは、オプションを変更してみたことで気づくことができました。やってみないとわからないことがあり、とても勉強になりました。

今回はDocker環境を監視しましたが、Mackerelはオンプレミス環境だけでなくクラウド環境も監視することができるためさまざまな環境を監視してみようと思います。

次回は、Mackerelと弊社の統合監視基盤FusionCOREとの連携についてのブログを投稿したいと思います。

タイトルとURLをコピーしました