メインコンテンツまでスキップ
Sumo Logic Japanese

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 の設定

  1. Sumo Web アプリケーションで、[Manage Data (データの管理)] > [Collection (コレクション)] > [Collection (コレクション)] を選択します。
  2. Docker ホストにインストールされた Collector に移動して、[Add (追加)] > [Add Source (Source の追加)] を選択します。
  3. [Docker Logs (Docker ログ)] を選択します。[Docker Logs (Docker ログ)] ページが開きます。
  4. 以下の Source フィールドを設定します。
    1. Name (名前): (必須)。
    2. Description (説明): (省略可能)。
    3. 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
    4. Cert Path (証明書パス)。(リモート アクセスの場合のみ必須) Collector が動作するローカル マシンの証明書ファイルへのパスを入力します。上の例では、証明書パスは /Users/sumo/.docker/machine/machines/default です。
    5. [Collect From (収集元)][Container Filters (コンテナ フィルタ)]。すべてのコンテナから収集する場合は、[All Containers (すべてのコンテナ)] ラジオ ボタンをクリックします。コンテナを選択して収集する場合は、[Specified Container Filters (指定したコンテナ フィルタ)] ラジオ ボタンをクリックして、[Container Filters (コンテナ フィルタ)] フィールドにフィルタ表現を指定します。コンテナ フィルタを定義する方法の詳細については、後述の「コンテナ フィルタの定義の詳細」を参照してください。
      • デフォルトでは、最大 40 個のコンテナから収集できます。制限値を大きくするには、Collector サービスを停止し、collector.properties ファイル (Collector のインストール ディレクトリの config サブディレクトリ内) を編集して、docker.maxPerContainerConnections プロパティを追加します。サポートされる最大値は 100 です。この後、Collector サービスを起動します。この設定ファイルの変更方法の詳細については、「collector.properties」を参照してください。
    6. Source Host (Source ホスト): Source ホストのホスト名または IP アドレスを入力します。指定しないと、ホストは Docker が動作するマシンと見なされます。ホスト名は最大 128 文字です。
      必要に応じて、Docker 変数を使用して Source Host 値を作成できます。詳細については、「変数を使用した sourceCategory と sourceHost の設定」を参照してください。
    7. Source Category: (必須) Sumo Source Category (prod/web/docker/logs など) を入力します。[Source Category] メタデータ フィールドは、Source を整理してラベル付けするための基本的な構成要素です。詳細については、「メタデータの命名規則」「ベスト プラクティス: 良い Source Category、悪い Source Category」を参照してください。
      必要に応じて、Docker 変数を使用して Source Category 値を作成できます。詳細については、「変数を使用した sourceCategory と sourceHost の設定」を参照してください。
  5. 詳細オプションを設定します。
    1. Enable Timestamp Parsing (タイムスタンプ parse の有効化)。デフォルトでは、このオプションはオンになっています。
    2. Time Zone (タイム ゾーン): デフォルトは、[Use time zone from log file (ログ ファイルのタイム ゾーンを使用)] です。
    3. Timestamp Format (タイムスタンプ形式)。デフォルトは、[Automatically detect the format (形式を自動検出)] です。
    4. Encoding (エンコーディング): デフォルトは、「UTF-8」です。
    5. Enable Multiline Processing (複数行処理の有効化): 
      • Detect messages spanning multiple lines (複数行メッセージの検出)。デフォルトでは、このオプションはオンになっています。
      • Infer Boundaries (境界の推定): デフォルトでは、このオプションはオンになっています。
      • Boundary Regex (境界正規表現): 複数行処理が有効で、[Infer Boundaries (境界の推定)] が無効な場合は、メッセージ境界用の正規表現を入力します。
  6. 処理ルールを設定します。詳細については、「処理ルール」を参照してください。

ステップ 4: Docker 統計情報 Source の追加

  1. Sumo で [Manage Data (データの管理)] > [Collection (コレクション)] > [Collection (コレクション)] を選択します。
  2. Docker ホストにインストールされた Collector に移動して、[Add (追加)] > [Add Source (Source の追加)] を選択します。
  3. [Docker Stats (Docker 統計情報)] を選択し、[Content Type (コンテンツタイプ)] で [Logs (JSON) (ログ (JSON))] を選択して、JSON ログとしてデータを収集します。

Docker_Collection_Docker-stats-dialog.png

  1. 次の Source フィールドを設定します。
    1. Name (名前): (必須)
    2. Description (説明): (省略可能)
    3. 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 のようになります。
    4. Cert Path (証明書パス)。(リモート アクセスの場合のみ必須) Collector が動作するローカル マシンの証明書ファイルへのパスを入力します。上の例では、証明書パスは /Users/sumo/.docker/machine/machines/default です。
    5. [Collect From (収集元)][Container Filters (コンテナ フィルタ)]。すべてのコンテナから収集する場合は、[All Containers (すべてのコンテナ)] ラジオ ボタンをクリックします。コンテナを選択して収集する場合は、[Specified Container Filters (指定したコンテナ フィルタ)] ラジオ ボタンをクリックして、[Container Filters (コンテナ フィルタ)] フィールドにフィルタ表現を指定します。コンテナ フィルタを定義する方法の詳細については、後述の「コンテナ フィルタの定義の詳細」を参照してください。
      • デフォルトでは、最大 40 個のコンテナから収集できます。制限値を大きくするには、Collector サービスを停止し、collector.properties ファイル (Collector のインストール ディレクトリの config サブディレクトリ内) を編集して、docker.maxPerContainerConnections プロパティを追加します。サポートされる最大値は 100 です。この後、Collector サービスを起動します。この設定ファイルの変更方法の詳細については、「collector.properties」を参照してください。
    6. Source Host (Source ホスト): Source ホストのホスト名または IP アドレスを入力します。指定しないと、ホストは Docker が動作するマシンと見なされます。ホスト名は最大 128 文字です。必要に応じて、Docker 変数を使用して Source Host 値を作成できます。詳細については、「変数を使用した sourceCategory と sourceHost の設定」を参照してください。
    7. Source Category: (必須) Sumo Source Category (prod/web/docker/logs など) を入力します。必要に応じて、Docker 変数を使用して Source Host 値を作成できます。詳細については、「変数を使用した sourceCategory と sourceHost の設定」を参照してください。
    8. 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)

 

  • この記事は役に立ちましたか?