このトピックでは、Log ServiceコンソールでLogtail設定を作成し、Logtail設定を使用してDaemonSetモードでコンテナテキストログを収集する方法について説明します。

始める前に

  • Logtailコンポーネントがインストールされています。 詳細については、「KubernetesクラスターへのLogtailコンポーネントのインストール」をご参照ください。
  • Logtailコンポーネントのインストールに使用するプロジェクトにLogstoreが作成されます。 詳細については、「Logstore の作成」をご参照ください。
  • ログを収集するコンテナーは、継続的にログを生成します。
    重要 Logtailは増分ログのみを収集します。 適用されたLogtail設定がサーバーに配信された後にサーバー上のログファイルが更新されない場合、Logtailはファイルからログを収集しません。 詳細については、「ログファイルの読み取り」をご参照ください。

機能

Logtailはコンテナーテキストログを収集し、そのテキストログをコンテナメタデータとともにLog Serviceにアップロードできます。 Logtailは次の機能をサポートしています。
  • テキストログを収集するときに、コンテナー内のログファイルパスを指定できます。 ログファイルのパスをホスト上のパスに手動でマップする必要はありません。
  • コンテナーラベルのホワイトリストを使用して、ログを収集するコンテナーを指定します。
  • コンテナーラベルブラックリストを使用して、ログが収集されないコンテナーを指定します。
  • 環境変数ホワイトリストを使用して、ログを収集するコンテナーを指定します。
  • 環境変数ブラックリストを使用して、ログが収集されないコンテナを指定します。
  • 複数行のログを収集します。 たとえば、LogtailはJavaスタックログを収集できます。
  • 収集したコンテナログと一緒にアップロードする必要があるコンテナメタデータを自動的に関連付けます。 メタデータには、コンテナ名、イメージ名、ポッド名、名前空間、環境変数が含まれます。
  • コンテナーがKubernetesクラスターで実行される場合、Logtailは次の機能もサポートします。
    • Kubernetes名前空間、ポッド名、およびコンテナー名を使用して、ログを収集するコンテナーを指定します。
    • Kubernetesラベルホワイトリストを使用して、ログを収集するコンテナーを指定します。
    • Kubernetesラベルブラックリストを使用して、ログが収集されないコンテナーを指定します。
    • 収集したコンテナログと一緒にアップロードする必要があるKubernetesラベルを自動的に関連付けます。

制限事項

  • Logtailが停止したコンテナでdieイベントを検出した場合、Logtailはコンテナからテキストログを収集しなくなります。 収集待ち時間が存在する場合、コンテナが停止する前に収集された一部のテキストログが失われる可能性があります。
  • For Docker容器、のみオーバーレイとoverlay2収納ドライバサポートされている。 If他収納ドライバ使用されている、必要がありマウントボリュームにディレクトリのログ。 そして、一時ディレクトリが生成される。

    PersistentVolumeClaim (PVC) を使用してApsara File Storage NAS (NAS) ファイルシステムがログのディレクトリにマウントされている場合、DaemonSetモードではログを収集できません。 この場合、Sidecarモードでログを収集することを推奨します。 詳細については、「SidecarモードでCRDを使用してコンテナテキストログを収集する」および「Log Serviceコンソールを使用してSidecarモードでコンテナテキストログを収集する」をご参照ください。

  • Logtailはコンテナのシンボリックリンクにアクセスできません。 収集ディレクトリとして実際のパスを指定する必要があります。
  • ボリュームがコンテナのデータディレクトリにマウントされている場合、Logtailはデータディレクトリの親ディレクトリからデータを収集できません。 データディレクトリの完全なパスをコレクションディレクトリとして指定する必要があります。

    たとえば、ボリュームが /var/log/serviceディレクトリにマウントされ、収集ディレクトリを /var/logに設定した場合、Logtailは /var/logディレクトリからログを収集できません。 収集ディレクトリとして /var/log/serviceを指定する必要があります。

  • デフォルトでは、Kubernetesはホストのルートディレクトリをlogtailコンテナの /Logtail_hostディレクトリにマウントします。 ホストからテキストログを収集する場合は、ログファイルパスのプレフィックスとして /logtail_hostを指定する必要があります。

    たとえば、ホストの /home/logs/app_log/ ディレクトリからログを収集する場合は、ログファイルパスとして /logtail_host/home/logs/app_log/ を指定する必要があります。

  • Logtailは、Dockerエンジンまたはcontainerdエンジンを使用するコンテナーからデータを収集します。
    • Docker: Logtailは、/run /Docker. sockディレクトリのdockerエンジンにアクセスします。 ディレクトリが存在し、Logtailにディレクトリにアクセスする権限があることを確認します。
    • containerd: Logtailアクセスcontainerdエンジンに /実行 /containerd/containerd。靴下ディレクトリ。 Makeことを確認ディレクトリ存在とLogtailは権限ディレクトリにアクセスする。

Logtail構成の作成

重要 デフォルトでは、ログファイルからログを収集するために使用できるLogtail設定は1つだけです。 複数のLogtail設定を使用してログファイルからログを収集する方法の詳細については、「複数のLogtail設定を使用してログファイルからログを収集する場合はどうすればよいですか?」をご参照ください。
  1. Log Service コンソールにログインします。
  2. [データのインポート] セクションで、[Kubernetes - Object] をクリックします。
  3. プロジェクトとLogstoreを選択します。 [次へ] をクリックします。
    この例では、Logtailコンポーネントのインストールに使用するプロジェクトと、作成するLogstoreを選択します。
  4. [既存のマシングループを使用] をクリックします。
    Logtailコンポーネントをインストールすると、Log Serviceは自動的にk8s-group-${your_k8s_cluster_id} という名前のマシングループを作成します。 このマシングループを選択できます。
  5. [ソースサーバーグループ] からk8s-group-${your_k8s_cluster_id} マシングループを選択し、マシングループを [応用サーバーグループ] に移動します。 [次へ] をクリックします。
    重要 マシングループのハートビートステータスがFAILの場合、[自動再試行] をクリックします。 問題が解決しない場合は、「Logtailマシングループにハートビートがない場合の対処方法」をご参照ください。
  6. Logtail設定のパラメーターを設定し、[次へ] をクリックします。
    1. Configure基本設定、などの名前、ログパス、コレクションモード、フィルタ、および容易にするために使用されているプラグインデータ処理。
      The前と同じ設定項目は項目に設定することができ収集サーバーテキストログ。 詳細については、「テキストログの収集」をご参照ください。
      説明
      • When収集容器テキストログ、コレクションモード選択することができあなたのビジネス要件ベース。 コレクションモードには、Simple Mode、Simple Mode - Multi-line、Full Regex Mode、JSON Mode、Delimiter Mode、およびNGINX Configuration Modeがあります。 Logtailは、選択した収集モードに基づいてログを解析します。 複数行のログを収集する場合は、ModeパラメータにSimple Mode-multi-lineまたはFull Regex Modeを選択します。 JSONログを収集する場合は、ModeパラメーターにJSON Modeを選択できます。 各収集モードの詳細については、「収集モード」をご参照ください。
      • 選択した収集モードでログを解析できない場合は、[プラグイン処理の有効化] をオンにし、Logtailプラグインを追加してログを解析できます。 たとえば、Logtailプラグインを追加して、フィールドの抽出、ログ時間の抽出、データのマスク、ログのフィルタリングを行うことができます。 詳細については、「Logtailプラグイン」をご参照ください。
    2. Dockerファイルをオンにします。
    3. オプション:コンテナーをフィルターする条件を指定します。
      • Logtail V1.0.34より前のバージョンでは、環境変数とコンテナラベルを使用してのみコンテナをフィルタリングできます。

        Kubernetesクラスターの名前空間とKubernetesクラスター内のコンテナーの名前は、コンテナーラベルにマップできます。 名前空間のLabelKeyパラメーターの値はio.kubernetes.pod.nameスペースです。 コンテナー名のLabelKeyパラメーターの値がio.kubernetes.container.nameです。 2つのコンテナラベルを使用してコンテナをフィルタリングすることを推奨します。 コンテナラベルがビジネス要件を満たしていない場合は、環境変数ホワイトリストまたは環境変数ブラックリストを使用してコンテナをフィルタリングできます。 たとえば、ポッドの名前空間はbackend-prodで、ポッド内のコンテナの名前はworker-serverです。 ワーカーサーバーコンテナのログを収集する場合は、コンテナラベルホワイトリストにio.kubernetes.pod.nameスペース: backend-prodまたはio.kubernetes.container.name : worker-serverを指定できます。

        重要
        • コンテナラベルは、docker inspectコマンドを実行して取得します。 コンテナラベルはKubernetesラベルとは異なります。 詳細については、「コンテナラベルの取得」をご参照ください。
        • 環境変数は、コンテナーを起動するように設定されている環境変数と同じです。 詳細については、「環境変数の取得」をご参照ください。
        • LabelKeyパラメーターに重複する値を指定しないでください。 LabelKeyパラメーターに重複する値を指定した場合、その値の1つだけが有効になります。
        項目説明
        ラベルのホワイトリストコンテナーラベルのホワイトリスト。 ホワイトリストは、テキストログの収集元となるコンテナを指定します。 コンテナーラベルのホワイトリストを設定する場合、LabelKeyパラメーターは必須で、LabelValueパラメーターはオプションです。
        • LabelValueパラメーターが空の場合、コンテナーラベルにLabelKeyで指定されたキーが含まれているコンテナーが一致します。
        • LabelValueパラメーターが空でない場合、コンテナーラベルがLabelKeyとLabelValueで指定されたキーと値のペアで構成されているコンテナーが一致します。

          デフォルトでは、LabelValueパラメーターの値に対して文字列照合が実行されます。 コンテナーは、コンテナーラベルの値がLabelValueパラメーターの値と同じである場合にのみ一致します。 LabelValueパラメーターに、キャレット (^) で始まり、ドル記号 ($) で終わる値を指定した場合、正規表現マッチングが実行されます。 たとえば、LabelKeyパラメーターをio.kubernetes.container.nameに設定し、LabelValueパラメーターを ^(nginx | cube)$ に設定すると、nginxという名前のコンテナーとcubeという名前のコンテナーが一致します。

        キーと値のペアは、OR演算子を使用して接続されます。 指定されたキーと値のペアの1つで構成されるコンテナーラベルがコンテナーにある場合、コンテナーは照合されます。

        ラベルブラックリストコンテナーラベルのブラックリスト。 ブラックリストは、テキストログが収集されないコンテナを指定します。 コンテナーラベルブラックリストを設定する場合、LabelKeyパラメーターは必須で、LabelValueパラメーターはオプションです。
        • LabelValueパラメーターが空の場合、コンテナーラベルにLabelKeyで指定されたキーが含まれているコンテナーは除外されます。
        • LabelValueパラメーターが空でない場合、コンテナーラベルがLabelKeyとLabelValueで指定されたキーと値のペアで構成されているコンテナーは除外されます。

          デフォルトでは、LabelValueパラメーターの値に対して文字列照合が実行されます。 コンテナーは、コンテナーラベルの値がLabelValueパラメーターの値と同じである場合にのみ一致します。 LabelValueパラメーターに、キャレット (^) で始まり、ドル記号 ($) で終わる値を指定した場合、正規表現マッチングが実行されます。 たとえば、LabelKeyパラメーターをio.kubernetes.container.nameに設定し、LabelValueパラメーターを ^(nginx | cube)$ に設定すると、nginxという名前のコンテナーとcubeという名前のコンテナーが一致します。

        キーと値のペアは、OR演算子を使用して接続されます。 指定されたキーと値のペアのいずれかで構成されるコンテナーラベルがコンテナーに含まれている場合、コンテナーは除外されます。

        Environment Variable Whitelist環境変数のホワイトリスト。 ホワイトリストは、テキストログの収集元となるコンテナを指定します。 環境変数ホワイトリストを設定する場合、EnvKeyパラメーターは必須で、EnvValueパラメーターはオプションです。
        • IfをEnvValueパラメータは空、容器その環境変数で指定されたキーが含まれていEnvKeyは一致している。
        • EnvValueパラメーターが空でない場合、EnvKeyとEnvValueで指定されたキーと値のペアで環境変数が構成されているコンテナーが一致します。

          デフォルトでは、EnvValueパラメーターの値に対して文字列照合が実行されます。 コンテナは、環境変数の値がEnvValueパラメーターの値と同じである場合にのみ一致します。 EnvValueパラメーターにキャレット (^) で始まり、ドル記号 ($) で終わる値を指定した場合、正規表現マッチングが実行されます。 たとえば、EnvKeyパラメーターをNGINX_SERVICE_PORTに設定し、EnvValueパラメーターを ^(80 | 6379)$ に設定した場合、ポート番号が80のコンテナーとポート番号が6379のコンテナーが一致します。

        キーと値のペアは、OR演算子を使用して接続されます。 指定されたキーと値のペアの1つで構成される環境変数がコンテナーにある場合、コンテナーは照合されます。

        環境変数ブラックリスト環境変数ブラックリスト。 ブラックリストは、テキストログが収集されないコンテナを指定します。 環境変数ブラックリストを設定する場合、EnvKeyパラメーターは必須で、EnvValueパラメーターはオプションです。
        • EnvValueパラメーターが空の場合、EnvKeyで指定されたキーが環境変数に含まれるコンテナーは除外されます。
        • EnvValueパラメーターが空でない場合、EnvKeyとEnvValueで指定されたキーと値のペアで環境変数が構成されているコンテナーは除外されます。

          デフォルトでは、EnvValueパラメーターの値に対して文字列照合が実行されます。 コンテナは、環境変数の値がEnvValueパラメーターの値と同じである場合にのみ一致します。 EnvValueパラメーターにキャレット (^) で始まり、ドル記号 ($) で終わる値を指定した場合、正規表現マッチングが実行されます。 たとえば、EnvKeyパラメーターをNGINX_SERVICE_PORTに設定し、EnvValueパラメーターを ^(80 | 6379)$ に設定した場合、ポート番号が80のコンテナーとポート番号が6379のコンテナーが一致します。

        キーと値のペアは、OR演算子を使用して接続されます。 指定されたキーと値のペアの1つで構成される環境変数がコンテナーにある場合、コンテナーは除外されます。

      • Logtail V1.0.34以降の場合、ポッド名、名前空間、コンテナ名、ラベルなど、さまざまなレベルのKubernetes情報を使用してコンテナをフィルタリングすることを推奨します。

        [K8sにデプロイ] をオンにし、次のパラメーターを設定してコンテナーをフィルターします。

        説明 デプロイメントなどのKubernetesコントロールリソースの実行中にKubernetesラベルを変更した場合、運用ポッドは再起動されません。 したがって、ポッドは変化を検出することができない。 これにより、マッチングルールが無効になる可能性があります。 KubernetesラベルホワイトリストとKubernetesラベルブラックリストを指定する場合は、ポッドのKubernetesラベルを使用することを推奨します。
        項目説明
        K8sポッド名レギュラーマッチングpod 名。 ポッド名は、テキストログの収集元となるコンテナを指定します。 正規表現マッチングがサポートされています。 たとえば、^(nginx-log-demo.*)$ を指定すると、nginx-log-demoで始まる名前のポッド内のすべてのコンテナが一致します。
        K8s名前空間正規マッチング名前空間。 名前空間は、テキストログが収集されるコンテナを指定します。 正規表現マッチングがサポートされています。 たとえば、^(default | nginx)$ を指定すると、nginx名前空間とdefault名前空間のすべてのコンテナーが一致します。
        K8sコンテナ名レギュラーマッチングコンテナ名。 コンテナ名は、テキストログの収集元となるコンテナを指定します。 正規表現マッチングがサポートされています。 Kubernetesコンテナ名はspec.containersで定義されています。 たとえば、^(container-test)$ を指定すると、名前がcontainer-testであるすべてのコンテナが一致します。
        K8sラベルホワイトリストKubernetesラベルのホワイトリスト。 ホワイトリストは、テキストログの収集元となるコンテナを指定します。 Kubernetesラベルホワイトリストを設定する場合、LabelKeyパラメーターは必須で、LabelValueパラメーターはオプションです。
        • LabelValueパラメーターが空の場合、KubernetesラベルにLabelKeyで指定されたキーが含まれているコンテナーが一致します。
        • LabelValueパラメーターが空でない場合、KubernetesラベルがLabelKeyとLabelValueで指定されたキーと値のペアで構成されているコンテナーが一致します。

          デフォルトでは、LabelValueパラメーターの値に対して文字列照合が実行されます。 コンテナーは、Kubernetesラベルの値がLabelValueパラメーターの値と同じである場合にのみ一致します。 キャレット (^) で始まり、ドル記号 ($) で終わる値を指定した場合、正規表現マッチングが実行されます。 たとえば、LabelKeyパラメーターをappに設定し、LabelValueパラメーターを ^(test1 | test2)$ に設定した場合、Kubernetesラベルがapp:test1またはapp:test2で構成されるコンテナが一致します。

        キーと値のペアは、OR演算子を使用して接続されます。 指定されたキーと値のペアのいずれかで構成されるKubernetesラベルがコンテナーに含まれている場合、コンテナーは照合されます。

        K8sラベルブラックリストKubernetesラベルブラックリスト。 ブラックリストは、テキストログが収集されないコンテナを指定します。 Kubernetesラベルブラックリストを設定する場合、LabelKeyパラメーターは必須で、LabelValueパラメーターはオプションです。
        • LabelValueパラメーターが空の場合、KubernetesラベルにLabelKeyで指定されたキーが含まれているコンテナーは除外されます。
        • IfをLabelValueパラメータはない空、容器そのKubernetesラベルキー値のペアで構成されLabelKeyとLabelValueは濾過で指定された。

          デフォルトでは、LabelValueパラメーターの値に対して文字列照合が実行されます。 コンテナーは、Kubernetesラベルの値がLabelValueパラメーターの値と同じである場合にのみ一致します。 If指定値caretで開始 (^) とで終わるドル記号 ($) 、正規表現マッチング実行される。 たとえば、LabelKeyパラメーターをappに設定し、LabelValueパラメーターを ^(test1 | test2)$ に設定した場合、Kubernetesラベルがapp:test1またはapp:test2で構成されるコンテナが一致します。

        キーと値のペアは、OR演算子を使用して接続されます。 指定されたキーと値のペアのいずれかで構成されるKubernetesラベルがコンテナーに含まれている場合、コンテナーは除外されます。

    4. オプション:ログラベルを指定します。

      Logtail V1.0.34以降の場合、ログの環境変数またはKubernetesラベルをログラベルとして指定することを推奨します。

      項目説明
      環境変数ログタグ環境変数をログラベルとして指定すると、log Serviceは環境変数関連のフィールドをログに追加します。 たとえば、EnvKeyパラメーターをVERSIONに設定し、EnvValueパラメーターをenv_versionに設定した場合、コンテナーの環境変数設定にVERSION=v1.0.0が含まれている場合、Log Serviceは __tag __:__ env_version __: v1.0.0フィールドをログに追加します。
      K8sラベルログタグKubernetesラベルをログラベルとして指定すると、log ServiceはKubernetesラベル関連のフィールドをログに追加します。 たとえば、LabelKeyパラメーターをappに設定し、LabelValueパラメーターをk8s_label_appに設定した場合、Kubernetesクラスターのラベル設定にapp=serviceAが含まれている場合、Log Serviceは ___tag __:___k8s_label_app _: serviceAフィールドをログに追加します。
  7. データをプレビューし、インデックスを設定し、[次へ] をクリックします。
    デフォルトでは、Log Serviceでフルテキストインデックスが有効になっています。 手動モードまたは自動モードで収集したログに基づいてフィールドインデックスを設定することもできます。 自動モードでフィールドインデックスを設定するには、[自動インデックス生成] をクリックします。 これにより、Log Serviceは自動的にフィールドインデックスを作成します。 詳細については、「インデックスの作成」をご参照ください。
    重要 ログをクエリおよび分析する場合は、フルテキストインデックス作成またはフィールドインデックス作成を有効にする必要があります。 フルテキストインデックスとフィールドインデックスの両方を有効にすると、フィールドインデックスのみが使用されます。
  8. [ログクエリ] をクリックします。 Logstoreのクエリと分析ページにリダイレクトされます。
    インデックスが有効になるまで約1分待つ必要があります。 そして、収集したログを Raw Logsタブで確認することができます。 詳細については、「データのクエリと分析」をご参照ください。

設定例

環境変数ホワイトリストと環境変数ブラックリストに基づいてコンテナをフィルタリングする

環境変数設定にNGINX_SERVICE_PORT=80が含まれ、POD_NAMESPACE=kube-systemが含まれないコンテナからテキストログを収集します。 ログファイルパスは /var/log/nginx/access.logです。 ログはシンプルモードで収集されます。

  1. 環境変数を取得します。

    コンテナの環境変数を表示するには、コンテナが存在するホストにログインします。 詳細については、「環境変数の取得」をご参照ください。

    環境変数の設定例
  2. Logtail設定を作成します。
    次の図は、Logtail設定の例を示しています。 シンプルモードでログを収集するために使用されるLogtail設定を作成する方法の詳細については、「シンプルモードでログを収集する」をご参照ください。 データソースの設定例

コンテナラベルのホワイトリストとコンテナラベルのブラックリストに基づいてコンテナをフィルタリングする

コンテナラベルがio.kubernetes.container.name=nginxであるコンテナからテキストログを収集します。 ログファイルパスは /var/log/nginx/access.logです。 ログはシンプルモードで収集されます。

  1. コンテナーラベルを取得します。

    コンテナのコンテナラベルを表示するには、コンテナが存在するホストにログインします。 詳細については、「コンテナラベルの取得」をご参照ください。

    ラベルの設定例
  2. Logtail設定を作成します。
    次の図は、Logtail設定の例を示しています。 シンプルモードでログを収集するために使用されるLogtail設定を作成する方法の詳細については、「シンプルモードでログを収集する」をご参照ください。 データソースの設定例

Kubernetes名前空間、ポッド名、およびコンテナー名を使用したコンテナーのフィルタリング

デフォルトの名前空間で名前がnginx-log-demoで始まるポッドのnginx-log-demo-0コンテナからテキストログを収集します。

  1. さまざまなレベルのKubernetes情報を取得します。
    • ポッドに関する情報を取得します。 Kubernetesリソース
    • 名前空間に関する情報を取得します。 Kubernetesリソース
  2. Logtail設定を作成します。

    次の図は、Logtail設定の例を示しています。 シンプルモードでログを収集するために使用されるLogtail設定を作成する方法の詳細については、「シンプルモードでログを収集する」をご参照ください。

    Logtail設定の制限

Kubernetesラベルを使用したコンテナーのフィルタリング

Kubernetesラベルにジョブ名キーと特定の値が含まれているコンテナーからテキストログを収集します。 値はnginx-log-demoで始まります。

  1. Kubernetesラベルを取得します。 Kubernetesリソース
  2. Logtail設定を作成します。
    次の図は、Logtail設定の例を示しています。 シンプルモードでログを収集するために使用されるLogtail設定を作成する方法の詳細については、「シンプルモードでログを収集する」をご参照ください。 Logtail の設定

複数行のログを収集する

Kubernetesラベルにジョブ名キーと特定の値が含まれているコンテナーから複数行のテキストログを収集します。 値はnginx-log-demoで始まります。 ModeパラメーターをSimple Mode - Multi-lineに設定します。

  1. Kubernetesラベルを取得します。 Kubernetesリソース
  2. Logtail設定を作成します。
    次の図は、Logtail設定の例を示しています。 シンプルモードで複数行ログを収集する方法の詳細については、「シンプルモードでログを収集する」をご参照ください。 コンテナー複数行ログ

デフォルトフィールド

次の表に、各コンテナテキストログにデフォルトで含まれるフィールドを示します。
ログフィールド説明
_image_name_The name of the image.
_container_name_コンテナーの名前。The name of the container.
_pod_name_ポッドの名前。
_namespace_ポッドの名前空間。
_pod_uid_pod の一意の識別子。
_container_ip_ポッドのIPアドレス。

トラブルシューティング

Logtailを使用して標準コンテナやKubernetesコンテナなどのコンテナからログを収集するときに例外が発生した場合、次のトピックに基づいて問題のトラブルシューティングを行うことができます。

Logtailを使用してコンテナからログを収集するときにエラーが発生した場合はどうすればよいですか?