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

Docker からのログと統計情報の収集

Sumo は Docker からデータを収集する方法を複数サポートしています。この手順では、インストール済みコレクタ、および Sumo の Docker ログ ソースと Docker 統計情報ソースを使用して、Docker からデータを収集する方法について説明します。 

このトピックで説明する方法により Docker 用 Sumo アプリケーションを使用して、Docker のログ、統計情報、およびイベントを収集するとともに、収集されたデータのサマリーを表示できます。 

Sumo が収集する Docker のデータと収集方法

Sumo の Docker ログ ソースと Docker 統計情報ソースは、Docker エンジン API を使用して次のデータを Docker から収集します。

  • Docker コンテナ ログ。Sumo の Docker ログ ソースはコンテナ ログを収集します。Sumo がログの収集に使用する API については、Docker API のドキュメントの「Get Container Logs (コンテナ ログの取得)」を参照してください。 
  • Docker エンジン イベント。Sumo の Docker ログ ソースは Docker イベントを収集します。Docker イベントについては、Docker API のドキュメントの「Monitor Events (イベントのモニタリング)」を参照してください。
  • Docker コンテナ統計情報。Sumo の Docker 統計情報ソースは統計情報を収集します。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 ホストへのコレクタのインストール、Sumo Docker 両ソース (ログ ソースと統計情報ソース) のセットアップ、および Docker 用 Sumo アプリケーションのインストールの手順を説明します。この設定を使用して、Docker のログ、イベント、および統計情報を収集し、アプリケーションによって提供されるダッシュボードでリソースのパフォーマンスとイベント データを視覚化できます。 

ステップ 1: アクセス キーの作成

「アクセス キー」の手順に従って、Sumo アクセス ID とキーを作成します。次の手順で Docker ホストにコレクタをセットアップするとき、アクセス ID とキーを指定する必要があります。 

ステップ 2: 各 Docker ホストへのコレクタのインストール

コレクタをインストールするホストのオペレーティング システムに対応する手順に従ってください。 

ステップ 3: Docker ログ ソースの設定

  1. Sumo Web アプリケーションで、[Manage Data (データの管理)] > [Collection (コレクション)] > [Collection (コレクション)] を選択します。
  2. Docker ホストにインストールされたコレクタに移動して、[Add (追加)] > [Add Source (ソースの追加)] を選択します。
  3. [Docker Logs (Docker ログ)] を選択します。[Docker Logs (Docker ログ)] ページが開きます。
  4. 以下のソース フィールドを設定します。
    1. Name (名前)。(必須)。
    2. Description (説明)。(省略可能)。
    3. URI。Docker デーモンの URI を入力します。
      • モニタリング対象の Docker コンテナと同じホストでコレクタが動作する場合、非ネットワーク型 Unix ソケットとして以下を入力します。
        unix:///var/run/docker.sock
      • Docker ホスト以外のマシンでコレクタが動作する場合は、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 (証明書パス)。(リモート アクセスの場合のみ必須) コレクタが動作するローカル マシンの証明書ファイルへのパスを入力します。上の例では、証明書パスは /Users/sumo/.docker/machine/machines/default です。
    5. [Collect From (収集元)][Container Filters (コンテナ フィルタ)]。すべてのコンテナから収集する場合は、[All Containers (すべてのコンテナ)] ラジオ ボタンをクリックします。コンテナを選択して収集する場合は、[Specified Container Filters (指定したコンテナ フィルタ)] ラジオ ボタンをクリックして、[Container Filters (コンテナ フィルタ)] フィールドにフィルタ表現を指定します。コンテナ フィルタを定義する方法の詳細については、後述の「コンテナ フィルタの定義の詳細」を参照してください。
      • デフォルトでは、最大 40 個のコンテナから収集できます。制限値を大きくするには、collector.properties ファイル (コレクタのインストール ディレクトリの config サブディレクトリ内) を編集して、docker.maxPerContainerConnections プロパティを追加します。サポートされる最大値は 100 です。
    6. Source Host (ソース ホスト): ソース ホストのホスト名または IP アドレスを入力します。指定しないと、ホストは Docker が動作するマシンと見なされます。ホスト名は最大 128 文字です。必要に応じて、Docker 変数を使用してソース ホスト値を作成できます。詳細については、「変数を使用した sourceCategory と sourceHost の設定」を参照してください。
    7. Source Category (ソース カテゴリ)。(必須) Sumo ソース カテゴリ (prod/web/docker/logs など) を入力します。[Source Category (ソース カテゴリ)] メタデータ フィールドは、ソースを整理してラベル付けするための基本的な構成要素です。必要に応じて、Docker 変数を使用してソース カテゴリ値を作成できます。詳細については、「変数を使用した sourceCategory と sourceHost の設定」を参照してください。
  5. 詳細オプションを設定します。
    1. Enable Timestamp Parsing (タイムスタンプ パースの有効化)。デフォルトでは、このオプションはオンになっています。
    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 統計情報ソースの設定

  1. Sumo で [Manage Data (データの管理)] > [Collection (コレクション)] > [Collection (コレクション)] を選択します。
  2. Docker ホストにインストールされたコレクタに移動して、[Add (追加)] > [Add Source (ソースの追加)] を選択します。
  3. [Docker Stats (Docker 統計情報)] を選択します。次に示すような Docker Stats (Docker 統計情報)] ページが開きます。コンテンツ タイプには 2 つあります。[Metrics (メトリクス)] はデータをメトリクスとして収集する場合、[Logs (ログ)] (JSON) はデータを JSON ログとして収集する場合に選択します。
    Docker stats with metrics.png
  4. 以下のソース フィールドを設定します。
    1. Name (名前)。(必須)
    2. Description (説明)。(省略可能)
    3. URI。Docker デーモンの URI を入力します。
      • モニタリング対象の Docker コンテナと同じホストでコレクタが動作する場合、非ネットワーク型 Unix ソケットとして以下を入力します。
        unix:///var/run/docker.sock
      • Docker ホスト以外のマシンでコレクタが動作する場合は、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 (証明書パス)。(リモート アクセスの場合のみ必須) コレクタが動作するローカル マシンの証明書ファイルへのパスを入力します。上の例では、証明書パスは /Users/sumo/.docker/machine/machines/default です。
    5. [Collect From (収集元)][Container Filters (コンテナ フィルタ)]。すべてのコンテナから収集する場合は、[All Containers (すべてのコンテナ)] ラジオ ボタンをクリックします。コンテナを選択して収集する場合は、[Specified Container Filters (指定したコンテナ フィルタ)] ラジオ ボタンをクリックして、[Container Filters (コンテナ フィルタ)] フィールドにフィルタ表現を指定します。コンテナ フィルタを定義する方法の詳細については、後述の「コンテナ フィルタの定義の詳細」を参照してください。
      • デフォルトでは、最大 40 個のコンテナから収集できます。制限値を大きくするには、collector.properties ファイル (コレクタのインストール ディレクトリの config サブディレクトリ内) を編集して、docker.maxPerContainerConnections プロパティを追加します。サポートされる最大値は 100 です。
    6. Source Host (ソース ホスト): ソース ホストのホスト名または IP アドレスを入力します。指定しないと、ホストは Docker が動作するマシンと見なされます。ホスト名は最大 128 文字です。必要に応じて、Docker 変数を使用してソース ホスト値を作成できます。詳細については、「変数を使用した sourceCategory と sourceHost の設定」を参照してください。
    7. Source Category (ソース カテゴリ)。(必須) Sumo ソース カテゴリ (prod/web/docker/stats など) を入力します。[Source Category (ソース カテゴリ)] メタデータ フィールドは、ソースを整理してラベル付けするための基本的な構成要素です。  必要に応じて、Docker 変数を使用してソース ホスト値を作成できます。詳細については、「変数を使用した sourceCategory と sourceHost の設定」を参照してください。
    8. Scan Interval (スキャン間隔): このオプションでは、ソースのスキャン頻度を設定します。間隔を短くすると、メッセージの量が増えて、ご使用の環境で追加の料金が発生する場合があります。最小許容スキャン間隔は、1 秒です。
    9. Metrics (メトリクス) (選択したコンテンツ タイプがメトリクスの場合に使用可能)。取り込む Docker メトリクスを選択します。詳細については、「Docker メトリクスの定義」を参照してください。

ステップ 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

この例では、ソースは「prod-*-mysql」とは一致しない、「prod-」で始まる名前のコンテナすべてから収集します。「master-*-app-*」と一致する名前のコンテナ、「sumologic-collector」という名前のコンテナからも収集します。

フィルタ リストに除外のみが含まれていると、ソースは除外フィルタと一致しないすべてのコンテナから収集します。例:

!container123*, !prod-*

この例では、ソースは「container123」と「prod-」で始まる名前のコンテナを除外します。

変数を使用した sourceCategory と sourceHost の設定

コレクタ バージョン 19.216-22 以降では、sourceCategory と sourceHost を Docker ログ ソースまたは Docker 統計情報ソースに設定すると、Docker およびそのホストで使用可能な変数を使用して値を指定できます。

以下の形式でコンポーネント変数を指定して、sourceCategory および sourceHost 用のテンプレートを作成します。

{{NAMESPACE.VAR_NAME}}

ただし:
    •    NAMESPACE は変数タイプを指定する名前空間です。

    •    VAR_NAME は変数名です。


以下の表は、使用可能な変数タイプの定義です。

Namespace/VAR_TYPE 説明 VAR_NAME
sys ホスト システム環境変数。 変数の名前。
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}}-{{sys.PATH}}-{{env.var_name }}

以下のように、メタデータ形式でテキストを結合できます。 

ID {{container.ID}}- AnyTextYouWant {{label.label_name}}-{{sys.PATH}}

ユーザ定義変数がない場合は、メタデータ フィールドの該当部分は空白です。  

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)

 

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