Logtail は、コンテナで生成されたテキストログを収集し、収集されたログをコンテナメタデータと一緒に Log Service にアップロードします。

機能特徴

基本的なログファイル収集と比較して、Docker ファイル収集は、次の機能もサポートしています。

  • コンテナ内のログパスの設定。このパスからホストへのマッピングを気にする必要はありません。
  • Label を使用した収集するコンテナの指定。
  • Label を使用した特定のコンテナの除外。
  • 収集対象のコンテナを指定する environment。
  • 特定のコンテナを除外する environment。
  • 複数行ログ (Java スタックログなど) 。
  • コンテナデータの自動タグ付け。
  • Kubernetes コンテナの自動タグ付け。

制限事項

  • 収集停止のポリシー:コンテナが停止すると、Logtail は (1-3 秒の遅延で) コンテナの die イベントをリッスンした後、コンテナからのログの収集を停止します。 この間に収集遅延が発生すると、停止前にログの一部を失う可能性があります。
  • Dockerストレージドライブ :現在、オーバーレイドライブと overlay2 ドライブのみがサポートされています。 他のドライブタイプの場合、ローカル PC にログディレクトリをマウントする必要があります。
  • Logtailの実行方法:Logtail はコンテナとして実行し、Logtail のデプロイ方法に従う必要があります。
  • Label:ラベルは、Docker inspect のラベル情報であり、Kubernetes 設定のラベルではありません。
  • Environment:Environment は、コンテナの起動時に設定された環境情報です。

手順

  1. Logtail コンテナをデプロイして設定します。
  2. Log Service で収集設定を行います。

1. Logtail のデプロイメントと設定

  • Kubernetes

    Kubernetes ログ収集の詳細については、「Kubernetes のログ収集」をご参照ください 。

  • その他のコンテナ管理メソッド

    Swarm や Mesos などの他のコンテナ管理メソッドの詳細については、「標準の Docker ログの収集」をご参照ください。

2. Log Service の収集設定

  1. Logstore リスト ページで、[データインポートウィザード] アイコンをクリックして設定プロセスを入力します。
  2. データソースを選択します。

    [サードパーティ製のソフトウェア][Docker ファイル] を選択し、[次へ] をクリックします。

  3. データソースを設定します。
    設定項目 必須 説明
    Docker ファイル 必須 収集する該当ファイルが Docker ファイルであるかどうかを確認します。
    ホワイトリストにラベルを付ける オプション LabelKey は必須です。 LabelValue が空でない場合、LabelKey = LabelValue がラベルに含まれているコンテナのみが収集されます。 LabelValue が空の場合、LabelKey がラベルに含まれているすべてのコンテナが収集されます。
    1. キーと値のペアには互いに OR 関係があります。つまり、ラベルにキーと値のペアのいずれかが含まれていればコンテナは収集されます。
    2. ここでは、ラベルは Docker inspect のラベル情報です。
    ブラックリストに Label を付ける オプション LabelKey は必須です。 LabelValue が空でない場合、LabelKey = LabelValue がラベルに含まれているコンテナのみが除外されます。 LabelValue が空の場合、LabelKey がラベルに含まれているすべてのコンテナが除外されます。
    1. キーと値のペアは相互に OR 関係を持ちます。つまり、 ラベルにキーと値のペアのいずれかが含まれている場合、コンテナは除外されます。
    2. ここでは、ラベルは Docker inspect のラベル情報です。
    環境変数ホワイトリスト オプション EnvKey は必須です。 EnvValue が空でない場合、EnvKey = EnvValue が環境変数に含まれているコンテナのみが収集されます。 EnvValue が空の場合、EnvKey が環境変数に含まれているすべてのコンテナが収集されます。
    • キーと値のペアは相互に OR 関係を持ちます。つまり、環境変数にキーと値のペアのいずれかが含まれている場合、コンテナは収集されます。
    • ここでは、環境変数とは、コンテナの起動時に設定される環境情報です。
    環境変数ブラックリスト オプション EnvKeyis は必須です。 EnvValue が空でない場合、EnvKey = EnvValue が環境変数に含まれているコンテナのみが除外されます。 EnvValue が空の場合、EnvKey が環境変数に含まれているすべてのコンテナが除外されます。
    1. キーと値のペアは相互に OR 関係を持ちます。つまり、環境変数にキーと値のペアのいずれかが含まれている場合、コンテナは収集されます。
    2. ここでは、環境変数とは、コンテナの起動時に設定される環境情報です。
    その他の設定 - その他の収集設定とパラメーターの説明については、「テキストファイルの収集」をご参照ください。
  4. 説明
    • このトピックでは、ラベルは Docker 検査に含まれるラベル情報を指します。
    • Kubernetes の名前空間とコンテナ名は、Docker 内のラベル io.kubernetes.pod.namespace および io.kubernetes.container.name に割り当てられます。 たとえば、作成した Pod は backend-prod 名前空間に属し、コンテナ名は worker-server とします。 この場合、2 つのホワイトリストラベル io.kubernetes.pod.namespace : backend-pro および io.kubernetes.container.name : worker-server を設定して、worker-server コンテナ内のログのみの収集を 指定ことができます。
    • Kubernetes ではio.kubernetes.pod.namespaceio.kubernetes.container.name ラベルのみの使用を推奨します。 他のシナリオでは、環境のホワイトリストまたはブラックリストを使用できます。
  5. マシングループに適用します。

    [マシングループに適用] ページで、収集対象の Logtail マシングループを選択し、[マシングループに適用] をクリックして、選択したマシングループに設定を適用します。 マシングループを作成していない場合は、[マシングループの作成] をクリックしてマシングループを作成します。

  6. コンテナのテキストログにアクセスするプロセスを完了します。

    検索、分析、可視化、および Shipper と ETL 機能を設定するために、ページの指示どおりに設定を完了します。

設定例

  • Environment 設定

    environment が POD_NAMESPACE=kube-system ではなく、 NGINX_PORT_80_TCP_PORT=80 であるコンテナのログを収集します。 ログファイルパスは、/var/log/nginx/access.logで、ログはシンプルモードで解析されます。

    Environmentは、コンテナの起動時に設定された環境情報です。
    図 1. Environment 設定の例 

    この例のデータソースの設定は、次のとおりです。 その他の収集設定とパラメーターの説明については、「テキストファイルの収集」をご参照ください。

  • Label 設定
    Label が io.kubernetes.container.name=nginx で、type=pre ではないコンテナのログを収集します。 ログファイルパスは、/var/log/nginx/access.logで、ログはシンプルモードで解析されます。
    Label は、Docker inspect のラベル情報であり、Kubernetes 設定のラベルではありません。
    図 2. Label モードの例

    この例のデータソースの設定は、次のとおりです。 その他の収集設定とパラメーターの説明については、「テキストファイルの収集」をご参照ください。

デフォルトフィールド

標準 Docker

各ログによって次のフィールドが、デフォルトでアップロードされます。

フィールド 説明
_image_name_ Image name.
_container_name_ コンテナ名
_container_ip_ コンテナ IP アドレス
Kubernetes

クラスターが Kubernetes クラスターの場合、各ログによって次のフィールドがデフォルトでアップロードされます。

フィールド 説明
_image_name_ イメージ名
_container_name_ コンテナ名
_pod_name_ pod 名
_namespace_ pod が存在する名前空間
_pod_uid_ pod の一意の識別子
_container_ip_ pod の IP アドレス