Docker からのログとメトリクスの収集
Sumo は Docker からデータを収集する方法を複数サポートしています。この手順では、Installed Collector、および Sumo の Docker ログ Source と Docker 統計情報 Source を使用して、Docker からデータを収集する方法について説明します。
このトピックで説明する方法により Docker 用 Sumo アプリケーションを使用して、Docker のログ、統計情報、およびイベントを収集するとともに、収集されたデータのサマリーを表示できます。
Sumo が収集する Docker のデータ
Sumo の Docker ログ Source と Docker 統計情報 Source は、Docker エンジン API を使用して次のデータを Docker から収集します。
- Docker コンテナ ログ。Sumo の Docker ログ Source はコンテナ ログを収集します。Sumo がログの収集に使用する API については、Docker API のドキュメントの「Get Container Logs (コンテナ ログの取得)」を参照してください。
- Docker エンジン イベント。Sumo の Docker ログ Source は Docker イベントを収集します。Docker イベントについては、Docker API のドキュメントの「Monitor Events (イベントのモニタリング)」を参照してください。
- Docker コンテナ統計情報。Sumo の Docker 統計情報 Source は統計情報を収集します。Docker 統計情報については、Docker API のドキュメントの「Get Container Stats Based on Resource Usage (リソース使用量に基づくコンテナ統計情報の取得)」を参照してください。
1 つの Docker ホストでモニタリングできるのは、デフォルトで最大 40 個の Docker コンテナです。特定のホストで 40 個を超えるコンテナをモニタリングしたい場合は、collector.properties に 40 より大きい数値を設定できます。次の手順でその方法を説明します。1 つの Docker ホストでの 100 個を超えるコンテナのモニタリングはサポートしていません。
前提条件
モニタリングするコンテナでは、json-file ドライバまたは journald ドライバのいずれかを使用する必要があります。詳細については、Docker ヘルプの「Configure Logging Drivers (ログ ドライバの設定)」を参照してください。
プロセス概要
次のセクションでは、Docker ホストへの Collector のインストール、Sumo Docker 両 Source (ログ Source と統計情報 Source) のセットアップ、および Docker 用 Sumo アプリケーションのインストールの手順を説明します。この設定を使用して、Docker のログ、イベント、および統計情報を収集し、アプリケーションによって提供されるダッシュボードでリソースのパフォーマンスとイベント データを視覚化できます。
ステップ 1: アクセス キーの作成
「アクセス キー」の手順に従って、Sumo アクセス ID とキーを作成します。次の手順で Docker ホストに Collector をセットアップするとき、アクセス ID とキーを指定する必要があります。
ステップ 2: 各 Docker ホストへの Collector のインストール
Collector をインストールするホストのオペレーティング システムに対応する手順に従ってください。
ステップ 3: Docker ログ Source の設定
- Sumo Web アプリケーションで、[Manage Data (データの管理)] > [Collection (コレクション)] > [Collection (コレクション)] を選択します。
- Docker ホストにインストールされた Collector に移動して、[Add (追加)] > [Add Source (Source の追加)] を選択します。
- [Docker Logs (Docker ログ)] を選択します。[Docker Logs (Docker ログ)] ページが開きます。
- 以下の Source フィールドを設定します。
- Name (名前): (必須)。
- Description (説明): (省略可能)。
- URI。Docker デーモンの URI を入力します。
- モニタリング対象の Docker コンテナと同じホストで Collector が動作する場合、非ネットワーク型 Unix ソケットとして以下を入力します。
unix:///var/run/docker.sock - Docker ホスト以外のマシンで Collector が動作する場合は、Docker 環境変数から URI を指定できます。docker-machine コマンドを実行して Docker 環境変数を見つけます。
$ docker-machine env machine-name
例: $ docker-machine env default export DOCKER_TLS_VERIFY="1" export DOCKER_HOST="tcp://192.168.99.100:2376" export DOCKER_CERT_PATH="/Users/sumo/.docker/machine/machines/default" export DOCKER_MACHINE_NAME="default" # Run this command to configure your shell: # eval "$(docker-machine env default)"
DOCKER_HOST 変数の値を取得し、"tcp" を "https" に変更して、その値を URI として入力します。例:https://192.168.99.100:2376
- モニタリング対象の Docker コンテナと同じホストで Collector が動作する場合、非ネットワーク型 Unix ソケットとして以下を入力します。
- Cert Path (証明書パス)。(リモート アクセスの場合のみ必須) Collector が動作するローカル マシンの証明書ファイルへのパスを入力します。上の例では、証明書パスは /Users/sumo/.docker/machine/machines/default です。
- [Collect From (収集元)] と [Container Filters (コンテナ フィルタ)]。すべてのコンテナから収集する場合は、[All Containers (すべてのコンテナ)] ラジオ ボタンをクリックします。コンテナを選択して収集する場合は、[Specified Container Filters (指定したコンテナ フィルタ)] ラジオ ボタンをクリックして、[Container Filters (コンテナ フィルタ)] フィールドにフィルタ表現を指定します。コンテナ フィルタを定義する方法の詳細については、後述の「コンテナ フィルタの定義の詳細」を参照してください。
- デフォルトでは、最大 40 個のコンテナから収集できます。制限値を大きくするには、Collector サービスを停止し、
collector.properties
ファイル (Collector のインストール ディレクトリのconfig
サブディレクトリ内) を編集して、docker.maxPerContainerConnections
プロパティを追加します。サポートされる最大値は 100 です。この後、Collector サービスを起動します。この設定ファイルの変更方法の詳細については、「collector.properties」を参照してください。
- デフォルトでは、最大 40 個のコンテナから収集できます。制限値を大きくするには、Collector サービスを停止し、
- Source Host (Source ホスト): Source ホストのホスト名または IP アドレスを入力します。指定しないと、ホストは Docker が動作するマシンと見なされます。ホスト名は最大 128 文字です。
必要に応じて、Docker 変数を使用して Source Host 値を作成できます。詳細については、「変数を使用した sourceCategory と sourceHost の設定」を参照してください。 - Source Category: (必須) Sumo Source Category (prod/web/docker/logs など) を入力します。[Source Category] メタデータ フィールドは、Source を整理してラベル付けするための基本的な構成要素です。詳細については、「メタデータの命名規則」と「ベスト プラクティス: 良い Source Category、悪い Source Category」を参照してください。
必要に応じて、Docker 変数を使用して Source Category 値を作成できます。詳細については、「変数を使用した sourceCategory と sourceHost の設定」を参照してください。
- 詳細オプションを設定します。
- Enable Timestamp Parsing (タイムスタンプ parse の有効化)。デフォルトでは、このオプションはオンになっています。
- Time Zone (タイム ゾーン): デフォルトは、[Use time zone from log file (ログ ファイルのタイム ゾーンを使用)] です。
- Timestamp Format (タイムスタンプ形式)。デフォルトは、[Automatically detect the format (形式を自動検出)] です。
- Encoding (エンコーディング): デフォルトは、「UTF-8」です。
- Enable Multiline Processing (複数行処理の有効化):
- Detect messages spanning multiple lines (複数行メッセージの検出)。デフォルトでは、このオプションはオンになっています。
- Infer Boundaries (境界の推定): デフォルトでは、このオプションはオンになっています。
- Boundary Regex (境界正規表現): 複数行処理が有効で、[Infer Boundaries (境界の推定)] が無効な場合は、メッセージ境界用の正規表現を入力します。
- 処理ルールを設定します。詳細については、「処理ルール」を参照してください。
ステップ 4: Docker 統計情報 Source の追加
- Sumo で [Manage Data (データの管理)] > [Collection (コレクション)] > [Collection (コレクション)] を選択します。
- Docker ホストにインストールされた Collector に移動して、[Add (追加)] > [Add Source (Source の追加)] を選択します。
- [Docker Stats (Docker 統計情報)] を選択し、[Content Type (コンテンツタイプ)] で [Logs (JSON) (ログ (JSON))] を選択して、JSON ログとしてデータを収集します。
- 次の Source フィールドを設定します。
- Name (名前): (必須)
- Description (説明): (省略可能)
- URI。Docker デーモンの URI を入力します。
- モニタリング対象の Docker コンテナと同じホストで Collector が動作する場合、非ネットワーク型 Unix ソケットとして以下を入力します。
unix:///var/run/docker.sock
- Docker ホスト以外のマシンで Collector が動作する場合は、Docker 環境変数から URI を指定できます。Docker 環境変数を見つけるには、
docker-machine
コマンドを実行します。このコマンドの構文は、$ docker-machine env machine-name
です。
例:
$ docker-machine env default
export DOCKER_TLS_VERIFY="1"
export DOCKER_HOST="tcp://192.168.99.100:2376"
export DOCKER_CERT_PATH="/Users/sumo/.docker/machine/machines/default"
export DOCKER_MACHINE_NAME="default"
# Run this command to configure your shell:
# eval "$(docker-machine env default)"
DOCKER_HOST
変数の値の「tcp」を「https」に変更し、その値を URI として入力します。たとえば、https://192.168.99.100:2376
のようになります。
- モニタリング対象の Docker コンテナと同じホストで Collector が動作する場合、非ネットワーク型 Unix ソケットとして以下を入力します。
- Cert Path (証明書パス)。(リモート アクセスの場合のみ必須) Collector が動作するローカル マシンの証明書ファイルへのパスを入力します。上の例では、証明書パスは /Users/sumo/.docker/machine/machines/default です。
- [Collect From (収集元)] と [Container Filters (コンテナ フィルタ)]。すべてのコンテナから収集する場合は、[All Containers (すべてのコンテナ)] ラジオ ボタンをクリックします。コンテナを選択して収集する場合は、[Specified Container Filters (指定したコンテナ フィルタ)] ラジオ ボタンをクリックして、[Container Filters (コンテナ フィルタ)] フィールドにフィルタ表現を指定します。コンテナ フィルタを定義する方法の詳細については、後述の「コンテナ フィルタの定義の詳細」を参照してください。
- デフォルトでは、最大 40 個のコンテナから収集できます。制限値を大きくするには、Collector サービスを停止し、
collector.properties
ファイル (Collector のインストール ディレクトリのconfig
サブディレクトリ内) を編集して、docker.maxPerContainerConnections
プロパティを追加します。サポートされる最大値は 100 です。この後、Collector サービスを起動します。この設定ファイルの変更方法の詳細については、「collector.properties」を参照してください。
- デフォルトでは、最大 40 個のコンテナから収集できます。制限値を大きくするには、Collector サービスを停止し、
- Source Host (Source ホスト): Source ホストのホスト名または IP アドレスを入力します。指定しないと、ホストは Docker が動作するマシンと見なされます。ホスト名は最大 128 文字です。必要に応じて、Docker 変数を使用して Source Host 値を作成できます。詳細については、「変数を使用した sourceCategory と sourceHost の設定」を参照してください。
- Source Category: (必須) Sumo Source Category (
prod/web/docker/logs
など) を入力します。必要に応じて、Docker 変数を使用して Source Host 値を作成できます。詳細については、「変数を使用した sourceCategory と sourceHost の設定」を参照してください。 - Scan Interval (スキャン間隔): このオプションでは、Source のスキャン頻度を設定します。間隔を短くすると、メッセージの量が増えて、ご使用の環境で追加の料金が発生する場合があります。最小許容スキャン間隔は、1 秒です。
ステップ 5: Docker 用 Sumo アプリケーションのインストール
Docker 用 Sumo アプリケーションでは、Docker コンテナの運用状況を把握できます。このアプリケーションのダッシュボードを使用すると、CPU、メモリ、およびネットワークに関するコンテナのパフォーマンスの統計を表示できます。また、コンテナのイベント、たとえば、開始や停止などの重要なコマンドも表示できます。
インストールの手順については、「Docker アプリケーションのインストール」を参照してください。
ステップ 6: 検索の実行とダッシュボードの使用
この時点で、Sumo は Docker データを受信中です。Docker から収集されるログの例については、「Docker メッセージのサンプル」を参照してください。クエリの例については、「クエリのサンプル」の「作成または開始されたコンテナ」を参照してください。
Docker 用 Sumo アプリケーションによって提供されるダッシュボードについては、「Docker アプリケーション ダッシュボード」を参照してください。
コンテナ フィルタの定義の詳細
[Container Filter (コンテナ フィルタ)] フィールドに、以下のフィルタ タイプを 1 つ以上コンマで区切ったリストにして入力できます。
- 特定のコンテナ名 (「my-container」など)
- ワイルドカード フィルタ (「my-container-*」など)
- 感嘆符で始まる除外 (ブラックリスト) フィルタ (「!master-container」、「!prod-*」など)
フィルタ リストの例:
prod-*, !prod-*-mysql, master-*-app-*, sumologic-collector
この例では、Source は「prod-*-mysql」とは一致しない、「prod-」で始まる名前のコンテナすべてから収集します。「master-*-app-*」と一致する名前のコンテナ、「sumologic-collector」という名前のコンテナからも収集します。
フィルタ リストに除外のみが含まれていると、Source は除外フィルタと一致しないすべてのコンテナから収集します。例:
!container123*, !prod-*
この例では、Source は「container123」と「prod-」で始まる名前のコンテナを除外します。
変数を使用した sourceCategory と sourceHost の設定
Collector バージョン 19.216-22 以降では、sourceCategory と sourceHost を Docker ログ Source または Docker 統計情報 Source に設定すると、Docker およびそのホストで使用可能な変数を使用して値を指定できます。
以下の形式でコンポーネント変数を指定して、sourceCategory および sourceHost 用のテンプレートを作成します。
{{NAMESPACE.VAR_NAME}}
各パラメータの説明
• NAMESPACE
は変数タイプを指定する名前空間です。
• VAR_NAME
は変数名です。
これらは、大文字と小文字が区別されます。
以下の表は、使用可能な変数タイプの定義です。
Namespace/VAR_TYPE | 説明 | VAR_NAME |
container | --log-opt タグ オプションで使用するための Docker の [Container (コンテナ)] メタデータ フィールド。 これらは、データ ポイントに自動的に追加されます。 詳細については、Docker ヘルプの「Log tags for logging driver (ログ ドライバのログ タグ)」を参照してください。 |
ID—コンテナ ID の最初の 12 文字。 FullID—コンテナ ID 全体。 Name (名前)—コンテナ名。 ImageID—コンテナのイメージ ID の最初の 12 文字。 FullID—コンテナのイメージ ID 全体。 ImageName—コンテナで使用されるイメージの名前。 |
label | Docker コンテナを開始するときに --label フラグで指定するユーザ定義のラベル。 これは、データ ポイントに自動的に追加されます。 |
変数の名前。 ドット文字 ( . ) はサポートされません。 |
env | コンテナを開始するときに --env|-e フラグで設定するユーザ定義のコンテナ環境変数。 | 変数の名前。 ドット文字 ( . ) はサポートされません。 |
例:
{{container.ID}}
以下のように、複数の変数を使用できます。
{{container.ID}}-{{label.label_name}}-{{env.var_name}}
以下のように、メタデータ形式でテキストを結合できます。
ID-{{container.ID}}-AnyTextYouWant{{label.label_name}}
ユーザ定義変数がない場合は、メタデータ フィールドの該当部分は空白です。
Docker メッセージのサンプル
次は 2 つの Docker イベント ログのサンプルです。
{"status":"start", "id":"10adec58fa15202e06afef7b1b0b3b1464962a115ff56918444c3f22867d3f3b", "from":"hello-world", "time":1485975967} {"status":"create", "id":"045599bc4d589264658f5f7f4efa3f1e3af9088ba1f7383a160cf344e1055d46", "from":"ubuntu", "time":1485966852}
次は Docker 統計情報メッセージのサンプルです。
{"read" : "2017-02-01T19:36:48.777487188Z", "network" : {"rx_bytes":87977,"rx_dropped":0,"rx_errors":0,"rx_packets":252,"tx_bytes":146194,"tx_dropped":0,"tx_errors":0,"tx_packets":302}, "cpu_stats" : {"cpu_usage":{"percpu_usage":[9469809313],"total_usage":9469809313,"usage_in_kernelmode":1050000000,"usage_in_usermode":8410000000},"system_cpu_usage":2496992710000000,"throttling_data":{"periods":0,"throttled_periods":0,"throttled_time":0}}, "blkio_stats" : {"io_merged_recursive":[],"io_queue_recursive":[],"io_service_bytes_recursive":[],"io_service_time_recursive":[],"io_serviced_recursive":[],"io_time_recursive":[],"io_wait_time_recursive":[],"sectors_recursive":[]}, "memory_stats" : {"limit":1033252864,"max_usage":202858496,"stats":{"active_anon":86831104,"active_file":13131776,"cache":24981504,"dirty":36864,"hierarchical_memory_limit":9223372036854771712,"inactive_anon":86786048,"inactive_file":11849728,"mapped_file":6430720,"pgfault":63351,"pgmajfault":146,"pgpgin":68526,"pgpgout":20040,"rss":173617152,"rss_huge":0,"total_active_anon":86831104,"total_active_file":13131776,"total_cache":24981504,"total_dirty":36864,"total_inactive_anon":86786048,"total_inactive_file":11849728,"total_mapped_file":6430720,"total_pgfault":63351,"total_pgmajfault":146,"total_pgpgin":68526,"total_pgpgout":20040,"total_rss":173617152,"total_rss_huge":0,"total_unevictable":0,"total_writeback":0,"unevictable":0,"writeback":0},"usage":201818112}}
クエリのサンプル
作成または開始されたコンテナ
_sourceCategory=docker ("\"status\":\"create\"" or "\"status\":\"start\"") id from
| parse "\"status\":\"*\"" as status, "\"id\":\"*\"" as container_id, "\"from\":\"*\"" as image
| count_distinct(container_id)