Table of Contents
Great systems are not just built. They are monitored.
MetricFire runs Graphite and Grafana as a fully managed service for growing engineering teams, taking care of storage, scaling, and version updates so your team doesn't have to. Plans start at $19/month, billed per metric namespace rather than per host, and include engineer-staffed support. Integrations work natively with Heroku, AWS, Azure, and GCP, and data is stored with 3× redundancy in SOC2- and ISO:27001-certified data centres.
はじめに
Docker環境では、最適かつ安全で信頼性の高い状態を保つために、何らかの監視が必要です。監視を行うことで環境を維持し、問題が深刻化する前に迅速に対処することができます。
内部サービスや実行中のプロセスを監視すれば、リソースの使用状況(CPU、メモリ、ディスク容量)を追跡できます。これにより、リソースの過剰な割り当てや利用不足を防ぎ、最適なパフォーマンスを確保できます。
本記事では、Telegrafエージェントを使用してDockerのパフォーマンス統計情報を収集し、それをデータソースに転送する方法について詳しく解説します。
Telegrafエージェントの導入
Telegrafは、InfluxDB上に構築されたプラグイン駆動型のサーバーエージェントです。データベース、システム、プロセス、デバイス、アプリケーションからメトリクスを収集し、送信します。Goで書かれており、外部依存のない単一バイナリとしてコンパイルされ、メモリ使用量も最小限に抑えられています。Telegrafは多くのオペレーティングシステムに対応しており、さまざまなシステムパフォーマンスメトリクスを収集・転送するための便利な入力プラグインおよび出力プラグインを多数備えています。
Telegrafの利用はシンプルです。ドキュメントに記載されている手順に従うことで、簡単に使い始めることができます。
Telegrafのインストール(Linux / RedHat)
/etcディレクトリにインストールされます。wget https://dl.influxdata.com/telegraf/releases/telegraf_1.21.2-1_amd64.deb
sudo dpkg -i telegraf_1.21.2-1_amd64.deb
RedHat/CentOS
wget https://dl.influxdata.com/telegraf/releases/telegraf-1.21.4-1.x86_64.rpm
sudo yum localinstall telegraf-1.21.4-1.x86_64.rpm
出力の設定
Telegrafは、Kafka、Graphite、InfluxDB、Prometheus、SQL、NoSQLなど、さまざまなデータ送信先へメトリクスを出力するよう設定できます。
この例では、Graphiteへの出力を設定します。まだデータソースをホスティングしていない場合は、次の手順を進めるためにMetricFireのHosted Graphiteの無料トライアル(14日間)を開始してください。
Hosted Graphiteアカウントを利用すると、データソースの提供に加え、アラート機能や可視化ツールとしてのHosted Grafanaも利用できます。
Graphite出力を設定するには、/etc/telegraf/telegraf.confにある設定ファイルを見つけ、任意のテキストエディタで開きます。その後、以下の変更を行います:
まず、次の行を見つけてコメントアウトします。
# [[outputs.influxdb]]
次に、以下の行のコメントを解除します。
[[outputs.graphite]]
続いて、server行のコメントを解除し、以下のように編集します。
servers = ["carbon.hostedgraphite.com:2003"]
最後に、prefix行のコメントを解除し、以下のように編集します。
prefix = "<YOUR_API_KEY>.telegraf"
Docker入力プラグインの設定
Telegrafには、幅広いパフォーマンス統計を収集・転送するための多くの入力プラグインがあります。この例では、このプラグインを2つの簡単なステップで設定する方法を説明します。
1. 設定ファイルの編集:telegraf.confファイルをvimシェルまたはテキストエディタで開き、[[inputs.docker]]の行を見つけてコメントを解除します。次に、endpoint行のコメントも解除して設定します。通常、ローカルのDockerまたはDocker Desktopは次のデフォルトエンドポイントを使用します。
[[inputs.docker]]
endpoint = "unix:///var/run/docker.sock"
2. 設定エラーの確認:以下のコマンドを実行して、出力に設定エラーがないか確認します。
telegraf --config telegraf.conf
上記コマンドの出力にエラーが表示されなければ、Telegrafサービスを再起動できます。再起動後はバックグラウンドで実行され、10種類のDockerパフォーマンスメトリクスが転送されます(Graphite形式では以下のように表示されます)。
telegraf.<host>.docker-desktop.<docker-version>.docker.memory_total
telegraf.<host>.docker-desktop.<docker-version>.docker.n_containers
telegraf.<host>.docker-desktop.<docker-version>.docker.n_containers_paused
telegraf.<host>.docker-desktop.<docker-version>.docker.n_containers_running
telegraf.<host>.docker-desktop.<docker-version>.docker.n_containers_stopped
telegraf.<host>.docker-desktop.<docker-version>.docker.n_cpus
telegraf.<host>.docker-desktop.<docker-version>.docker.n_goroutines
telegraf.<host>.docker-desktop.<docker-version>.docker.n_images
telegraf.<host>.docker-desktop.<docker-version>.docker.n_listener_events
telegraf.<host>.docker-desktop.<docker-version>.docker.n_used_file_descriptors
さらに、Docker環境内で実行中の各コンテナごとにインスタンス単位のメトリクスも取得され、各コンテナはおよそ70種類のメトリクスを生成します。
これらのメトリクスには、CPU、メモリ、ブロック入出力、ネットワークの送受信パケット数、稼働時間などのステータス情報が含まれます。
Dockerプラグインの詳細な設定オプションや取得可能なメトリクスの完全な一覧については、公式のGitHubリポジトリをご参照ください。
MetricFireのHosted Graphiteを使ってカスタムダッシュボードとアラートを作成
MetricFireは、サーバー、データベース、ネットワーク、デバイス、アプリケーションなどからのメトリクスを収集・可視化・分析・アラート設定できる監視プラットフォームを提供しています。MetricFireを利用することで、インフラ内の問題を簡単に特定し、リソースを最適化できます。MetricFireのHosted Graphiteは、監視環境を自前でホスティングする負担を取り除き、より重要な作業に時間とリソースを集中できるようにします。
Hosted Graphiteアカウントに登録し、上記の手順でTelegrafエージェントを使ってサーバーを設定すると、メトリクスはHosted Graphiteのバックエンドへ転送され、タイムスタンプが付与され、取り込まれ、集約されます。
メトリクスは次のGraphite形式で送信・保存されます:metric.name.path <数値> <unixタイムスタンプ>
この形式はツリー構造のデータを提供し、クエリを容易にします。
これらのメトリクスはHosted Graphiteアカウント内で確認でき、カスタムアラートやGrafanaダッシュボードの構築に利用できます。
Hosted GraphiteのHosted Grafanaでダッシュボードを作成
Hosted GraphiteのUIで、Dashboards => Primary Dashboardsに移動し、「+」ボタンをクリックして新しいパネルを作成します。
次に、クエリUIを使ってGraphiteのメトリクスパスを選択します(Hosted Graphite経由でGrafanaにアクセスしている場合、デフォルトのデータソースはHosted Graphiteバックエンドになります)。
Graphiteのデータソースはワイルドカード(*)検索にも対応しており、指定したパスに一致するすべてのメトリクスを取得できます。
さらに、これらのメトリクスに対してGraphite関数を適用できます。例えば、scale()で値を指定した倍率で乗算したり、aliasByNode()でパネル上のメトリクス名を整理したりできます。
Grafanaには、ダッシュボード変数やイベント注釈などの便利な機能も多数用意されています。また、さまざまな可視化方法の適用、表示設定の変更、単位の定義なども行えます。
詳細については、Hosted Graphiteのダッシュボードドキュメントをご参照ください。
Graphiteアラートの作成
Hosted GraphiteのUIで、Alerts => Graphite Alertsに移動し、新しいアラートを作成します。アラートに名前を付け、対象となるメトリクスをアラートフィールドに追加し、このアラートの内容を説明します。
次に、Criteriaタブを選択してしきい値を設定し、通知チャネルを選択します。デフォルトの通知先は、Hosted Graphiteアカウント登録時に使用したメールアドレスです。さらに、Slack、PagerDuty、Microsoft Teams、OpsGenie、カスタムWebhookなどの通知チャネルも簡単に設定できます。詳細はHosted Graphiteのドキュメントを参照してください。
まとめ
Docker環境の監視は、高いパフォーマンスの維持、コストの最適化、セキュリティの強化、そしてビジネス目標や継続性に沿った意思決定を行うために不可欠です。Dockerのパフォーマンス監視は有益なデータを提供します。MetricFireのダッシュボードやアラートは、リアルタイムの可視化、問題の事前検知、過去トレンドの分析、そして意思決定の支援を通じてこれらのデータを補完し、堅牢で効率的なインフラの維持に役立ちます。
無料トライアルに登録して、今すぐDocker環境の監視をお試しください。また、デモを予約して、監視ニーズについてMetricFireチームに直接ご相談いただくことも可能です。