すべてのプロダクト
Search
ドキュメントセンター

Simple Log Service:コンソールからのクラスターのコンテナログ収集

最終更新日:Aug 12, 2026

Kubernetes 環境では、コンテナログが散在しがちで一元管理が困難なため、トラブルシューティングの効率が低下し、運用コストが高くなります。LoongCollector を DaemonSet モードでデプロイし、Simple Log Service (SLS) コンソールで収集設定を作成することで、ログ収集を一元化し、構造化処理を実行できます。これにより、ログ検索、問題診断、オブザーバビリティ分析の効率が向上します。

要件

  • ランタイム環境:

    • Container Service for Kubernetes (ACK) (managed and dedicated editions) およびセルフマネージド Kubernetes クラスターをサポートしています。

    • マウント伝播: HostToContainer をサポートする Kubernetes 1.10.0 以降が必要です。

    • コンテナランタイム (Docker と Containerd のみ)

      • Docker:

        • docker.sock へのアクセスが必要です。

        • 標準出力の収集は、JSON ログドライバーのみをサポートしています。

        • overlay および overlay2 のストレージドライバーのみをサポートしています。その他のストレージドライバーの場合は、ログディレクトリを手動でマウントする必要があります。

      • Containerd:containerd.sock へのアクセスが必要です。

  • リソース要件: LoongCollector (Logtail) は、 system-cluster-critical の優先度で実行されます。クラスターのリソースが不足している場合はデプロイしないでください。デプロイすると、ノード上の既存 Pod がエビクトされる可能性があります。

    • CPU: 少なくとも 0.1 コアを確保してください。

    • メモリ: 収集コンポーネントに少なくとも 150 MB、コントローラーコンポーネントに少なくとも 100 MB を確保してください。

    • 実際のリソース使用量は、収集レート、監視対象のディレクトリとファイル数、およびデータ転送の輻輳によって異なります。リソース使用率が上限の 80% 未満に収まるようにしてください。

  • 権限要件: デプロイに使用する Alibaba Cloud アカウントまたは RAM ユーザーには、AliyunLogFullAccess 権限が必要です。

    カスタムポリシーを作成する場合は、AliyunCSManagedLogRolePolicy システムポリシーを参照してください。システムポリシーの権限をコピーし、対象の RAM ユーザーまたはロールに付与して、きめ細かい権限設定を行います。

収集設定

  1. LoongCollector のインストールLoongCollector を DaemonSet モードでデプロイします。これにより、クラスター内の各ノードで収集コンテナが実行され、そのノード上のすべてのコンテナからログを収集します。

    サイドカー パターンの詳細については、「サイドカー パターンを使用した Kubernetes Pod からのテキストログの収集」をご参照ください。
  2. Logstore の作成Logstore は収集されたログを保存します。

  3. ログ収集ルールの作成と設定

    1. グローバル設定と入力設定:収集設定の名前を定義し、ログソースと範囲を指定します。

    2. ログの処理と構造化:ログ形式に基づいて処理ルールを設定します。

      • 複数行ログ:Java スタックトレースや Python トレースバックなど、複数行にまたがる単一のログエントリに対応します。正規表現を使用して各ログエントリの開始位置を識別します。

      • 構造化解析:正規表現、デリミタ、NGINX モードなどの解析プラグインを設定し、生のログ文字列を構造化されたキーと値のペアに抽出することで、クエリと分析が容易になります。

    3. ログのフィルタリング:収集ブラックリストとコンテンツフィルタリングルールを設定して、有効なログをフィルタリングします。これにより、冗長なデータ転送とストレージを削減できます。

    4. ログの分類:ログトピックとタグを設定して、異なるサービス、コンテナ、またはソースパスからのログを区別します。

  4. クエリと分析の設定:フルテキストインデックスはデフォルトで有効になっており、キーワード検索をサポートしています。構造化されたフィールドに対して正確なクエリと分析を実行し、検索効率を向上させるには、フィールドインデックスを有効にすることを推奨します。

  5. 検証とトラブルシューティング:設定完了後、ログが正常に収集されていることを確認します。データの欠落、ハートビートの失敗、解析エラーなどの問題が発生した場合は、「トラブルシューティングのよくある質問」をご参照ください。

ステップ 1:LoongCollector のインストール

LoongCollector は、Simple Log Service (SLS) 向けの次世代ログ収集エージェントで、Logtail のアップグレード版です。LoongCollector と Logtail は共存できません。Logtail をインストールするには、「Logtail のインストール、実行、アップグレード、アンインストール」 をご参照ください。

このトピックでは、LoongCollector の基本的なインストールのみを説明します。パラメーターの詳細については、「インストールと設定」 をご参照ください。すでに LoongCollector または Logtail をインストールしている場合は、このステップをスキップして「ステップ 2:Logstore の作成」 に進んでください。

説明

LoongCollector (Logtail) の実行中にホストの時刻が変更されると、ログの重複収集やデータ損失が発生する可能性があります。

ACK クラスター

デフォルトでは、LoongCollector は現在の Alibaba Cloud アカウント の SLS プロジェクトにログを送信します。

  1. ACKコンソールにログインします。 左側のナビゲーションウィンドウで、[クラスター] をクリックします。

  2. 対象のクラスターの名前をクリックして、その詳細ページを開きます。

  3. 左側メニューで、 アドオン管理 をクリックします。

  4. ログとモニタリング タブで、 loongcollector を見つけ、 インストール をクリックします。

    説明

    クラスターを作成する際、 コンポーネント設定 ページで Log Service の使用 を選択できます。その際、 プロジェクトの作成 または プロジェクトの選択 を選択できます。

    インストール後、SLS は現在のアカウントに次のリソースを自動的に作成します。これらは SLS コンソールで表示できます。

    タイプ

    パラメーター

    説明

    プロジェクト

    k8s-log-${cluster_id}

    異なるサービスからのログを分離するリソース管理ユニットです。

    より柔軟なログリソース管理のためにプロジェクトを作成するには、「プロジェクトの作成」 をご参照ください。

    マシングループ

    k8s-group-${cluster_id}

    ログ収集ノードのセットです。

    重要

    LoongCollector コンポーネントは、config-operation-log という名前の Logstore を作成しません。この Logstore がすでに存在する場合、LoongCollector は新しいログを書き込みません。

セルフマネージドクラスター

  1. Kubernetes クラスターに接続し、クラスターのリージョンに対応するコマンドを実行します。

    中国本土リージョン

    wget https://aliyun-observability-release-cn-shanghai.oss-cn-shanghai.aliyuncs.com/loongcollector/k8s-custom-pkg/3.0.12/loongcollector-custom-k8s-package.tgz; tar xvf loongcollector-custom-k8s-package.tgz; chmod 744 ./loongcollector-custom-k8s-package/k8s-custom-install.sh

    中国以外のリージョン

    wget https://aliyun-observability-release-ap-southeast-1.oss-ap-southeast-1.aliyuncs.com/loongcollector/k8s-custom-pkg/3.0.12/loongcollector-custom-k8s-package.tgz; tar xvf loongcollector-custom-k8s-package.tgz; chmod 744 ./loongcollector-custom-k8s-package/k8s-custom-install.sh
  2. loongcollector-custom-k8s-package ディレクトリに移動し、./loongcollector/values.yaml 設定ファイルを変更します。

    # ===================== 必須情報 =====================
    # このクラスターから収集されたログが格納されるプロジェクト。例: k8s-log-custom-sd89ehdq
    projectName: ""
    # プロジェクトが配置されているリージョン。例: cn-shanghai
    region: ""
    # プロジェクトを所有する Alibaba Cloud アカウントの ID。ID は引用符 ("") で囲みます。例: "123456789"
    aliUid: ""
    # ネットワークタイプ。有効な値: Internet および Intranet。デフォルト値: Internet。
    net: Internet
    # Alibaba Cloud アカウントまたは RAM ユーザーの AccessKey ID と AccessKey secret。AliyunLogFullAccess ポリシーが必要です。
    accessKeyID: ""
    accessKeySecret: ""
    # カスタムクラスター ID。ID には、大文字、小文字、数字、ハイフン (-) のみを使用できます。
    clusterID: ""
  3. loongcollector-custom-k8s-package ディレクトリで、LoongCollector とその依存関係をインストールするには、次のコマンドを実行します。

    bash k8s-custom-install.sh install
  4. インストールが完了したら、コンポーネントのステータスを確認します。

    ポッドの起動に失敗した場合は、values.yaml ファイルの設定内容と、必要なイメージがプルされていることを確認してください。
    # ポッドのステータスを確認
    kubectl get po -n kube-system | grep loongcollector-ds

    SLS は、次のリソースも自動的に作成します。これらは SLS コンソールで表示できます。

    タイプ

    パラメーター

    説明

    プロジェクト

    values.yaml ファイルで定義された projectName の値

    異なるサービスからのログを分離するリソース管理ユニットです。

    より柔軟なログリソース管理のためにプロジェクトを作成するには、「プロジェクトの作成」 をご参照ください。

    マシングループ

    k8s-group-${clusterID}

    ログ収集ノードのセットです。

    重要

    LoongCollector コンポーネントは、config-operation-log という名前の Logstore を作成しません。この Logstore がすでに存在する場合、LoongCollector は新しいログを書き込みません。

ステップ 2:ログストアの作成

ログストアは、収集したログを格納する Simple Log Service のストレージユニットです。

  1. Simple Log Service コンソールにログインし、対象のプロジェクト名をクリックします。

  2. 左側メニューで imageLogstores を選択し、[+] をクリックしてログストアを作成します。

    • Logstore 名: プロジェクト内で一意の名前を入力します。この名前は作成後に変更できません。

    • Logstore タイプ: 機能の比較に基づいて、Standard または Query を選択します。

    • 課金モード

      • [使用機能課金 (変更できません)]: ストレージ、インデックス、読み取り/書き込み操作などの各リソースに対して個別に課金されます。このモードは、小規模なユースケースや、機能の使用量が不確実なシナリオに適しています。

      • [書き込みデータ量課金]: 書き込む生データの量に対してのみ課金されます。このモードでは、30 日間の無料ストレージと、データ変換や配信などの無料機能が提供されます。保管期間が約 30 日のビジネスシナリオや、データ処理パイプラインが複雑な場合に適しています。

    • データ保持時間: ログを保持する日数を 1~3,650 日の間で設定します。値が 3,650 の場合は永久保持を示します。デフォルトは 30 日です。

    • その他の設定はデフォルト値のままにして、OK をクリックします。詳細については、「ログストアの管理」をご参照ください。

ステップ 3:ログ収集ルールの設定

LoongCollector で収集するログ、そのパース方法、コンテンツのフィルター方法を定義します。次に、登録済みのマシングループに設定を適用します。

  1. image [LogStores] ページで、対象の Logstore 名の横にある image アイコンをクリックして展開します。

  2. データのインポート の横にある image アイコンをクリックします。データのインポート ダイアログボックスで、ログソースのテンプレートを選択し、今すぐ統合 をクリックします。

    • コンテナ標準出力の場合、[K8s-Standard Output-New Version] を選択します。

      コンテナ標準出力を収集するためのテンプレートには、新旧のバージョンがあります。新しいバージョンの使用を推奨します。新旧バージョンの比較については、「付録:コンテナ標準出力の新旧バージョンの比較」をご参照ください。
    • クラスターテキストログの場合、[Kubernetes-File] を選択します。

  3. サーバグループ設定 を完了し、次へ をクリックします:

    • [使用シナリオ]:Docker シナリオ を選択します。

    • デプロイ方法[ACK DaemonSet] または ユーザー作成クラスター Daemonsetを選択します。

    • ソースサーバーグループ リストから、システム作成のマシン グループ k8s-group-${cluster_id} を右側の 適用されたサーバーグループ リストに追加します。

  4. Logtail構成 ページで、次のパラメーターを指定し、次へ をクリックします。

1. グローバル設定と入力設定

開始する前に、データ収集テンプレートを選択し、マシン グループに適用していることを確認してください。このステップでは、収集設定名、ログソース、および範囲を定義します。

コンテナ標準出力

[グローバル設定]:

  • [設定名]: 収集設定のカスタム名を指定します。この名前はプロジェクト内で一意である必要があり、作成後に変更することはできません。名前は次の要件を満たす必要があります。

    • 小文字、数字、ハイフン (-)、アンダースコア (_) のみを含めることができます。

    • 小文字または数字で始まり、小文字または数字で終わる必要があります。

入力設定

  • 必要に応じて、[標準出力]と[標準エラー]のスイッチを有効にします。デフォルトでは、両方とも有効になっています。

    重要

    ログエントリが整理されなくなる可能性があるため、標準出力と標準エラー出力の両方を有効にすることは推奨しません。

クラスターテキストログ

[グローバル設定]:

  • [設定名]: 収集設定のカスタム名を指定します。この名前はプロジェクト内で一意である必要があり、作成後に変更することはできません。名前は次の要件を満たす必要があります。

    • 小文字、数字、ハイフン (-)、アンダースコア (_) のみを含めることができます。

    • 小文字または数字で始まり、小文字または数字で終わる必要があります。

[入力設定]:

  • [ファイルパスのタイプ]:

    • [コンテナ内のパス]: コンテナ内のログファイルを収集します。

    • [ホストパス]: ホストのローカルサービスログを収集します。

  • [ファイルパス]: 収集対象ログの絶対パスです。

    • Linux: パスはスラッシュ (/) で始まる必要があります。例: /data/mylogs/**/*.log は、/data/mylogs ディレクトリおよびそのサブディレクトリにある、拡張子が .log のすべてのファイルを示します。

    • Windows: パスはドライブ文字で始まる必要があります。例: C:\Program Files\Intel\**\*.Log

  • [ディレクトリ監視の最大深度]: [ファイルパス]でワイルドカード ** が一致するディレクトリの最大深度です。デフォルト値は 0 で、カレントディレクトリのみを示します。有効範囲は 0 から 1,000 です。

    この値を 0 に設定し、ファイルが配置されているディレクトリへのパスを指定することを推奨します。

2. ログ処理と構造化

ログ処理ルールを設定して、生の非構造化ログを構造化された検索可能なデータに変換し、ログのクエリと分析の効率を向上させます。ルールを設定する前に、ログサンプルを追加することを推奨します。

Logtail構成 ページの 設定の処理 セクションで、ログサンプルの追加 をクリックし、ログコンテンツのサンプルを入力します。システムはサンプルからログ形式を識別し、正規表現と解析ルールの生成を支援し、設定プロセスを簡素化します。

シナリオ 1:複数行ログの処理

Java の例外スタックトレースや JSON オブジェクトなどのログは、しばしば複数行にまたがります。デフォルトの収集モードでは、これらのログは複数の不完全なレコードに分割され、その結果、コンテキストが失われます。この問題に対処するため、複数行モードを有効にし、先頭行の正規表現を設定して、ログの連続する行を単一の完全なエントリにマージします。

例:

未処理の生ログ

デフォルトの収集モード:各行が個別のログとなり、スタックトレースが分断され、コンテキストが失われます。

複数行モード有効:先頭行の正規表現が完全なログを識別し、その意味構造を保持します。

生ログには、完全な Java 例外スタックトレースが含まれています。タイムスタンプと ERROR レベルで始まり、複数レベルの at 呼び出しスタックを持つ java.sql.SQLException を含みます。

デフォルトモードでは、生ログは複数の個別のレコードに分割されます。スタックトレースの各行は、個別の content フィールドに格納されます。例外のコンテキストは失われ、各行を元のエラーログと関連付けることができなくなります。

複数行モードを有効にすると、完全な例外スタックトレースが単一のログレコードにマージされます。content フィールドには、ERROR 行から最後の呼び出しスタック行までの全コンテンツが含まれ、完全な意味構造が保持されます。

手順:Logtail構成 ページの 設定の処理 セクションで、マルチラインモード を有効にします:

  • タイプカスタム または マルチライン JSON を選択します。

    • カスタム:ログ形式が固定でない場合、各エントリの開始行を識別するために 行先頭の正規表現 を設定する必要があります。

      • 行先頭の正規表現:正規表現を自動生成または手動で入力できます。この表現は行全体に一致する必要があります。たとえば、前述の例のデータに一致する正規表現は \[\d+-\d+-\w+:\d+:\d+,\d+]\s\[\w+]\s.* です。

        • 自動生成:[正規表現の自動生成] をクリックします。次に、ログサンプル テキストボックスで、抽出するログコンテンツを選択し、[正規表現の生成] をクリックします。

        • 手動入力:[正規表現の手動入力] をクリックします。正規表現を入力した後、[検証] をクリックします。

    • マルチライン JSON:生ログがすべて標準の JSON 形式である場合は、このオプションを選択します。サービスは、単一の JSON ログ内の改行を自動的に処理します。

  • 分割失敗の処理方法

    • Discard:テキストセグメントが先頭行のルールに一致しない場合、破棄されます。

    • 単一行を保持:一致しないテキストは、行ごとに分割され、それぞれが単一行のログとして保持されます。

シナリオ 2:ログの構造化

生ログが NGINX アクセスログやアプリケーションの出力ログなどの非構造化または半構造化テキストである場合、直接的なクエリや分析は非効率になることがあります。このサービスは、さまざまなデータ解析プロセッサーを提供しており、異なる形式の生ログを自動的に構造化データに変換できます。これにより、後続の分析、モニタリング、およびアラートのための強固なデータ基盤が構築されます。

例:

未処理の生ログ

構造化ログ出力

192.168.*.* - - [15/Apr/2025:16:40:00 +0800] "GET /nginx-logo.png HTTP/1.1" 0.000 514 200 368 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.*.* Safari/537.36"
body_bytes_sent: 368
http_referer: -
http_user_agent : Mozi11a/5.0 (Nindows NT 10.0; Win64; x64) AppleMebKit/537.36 (KHTML, like Gecko) Chrome/131.0.x.x Safari/537.36
remote_addr:192.168.*.*
remote_user: -
request_length: 514
request_method: GET
request_time: 0.000
request_uri: /nginx-logo.png
status: 200
time_local: 15/Apr/2025:16:40:00

手順:Logtail構成 ページの 設定の処理 セクションで:

  1. 解析プロセッサーの追加:処理プラグインの追加 をクリックし、ログ形式に基づいて正規表現、デリミタ、または JSON 解析プロセッサーを設定します。この例では、NGINX ログを収集します。ネイティブ処理プラグイン > NGINX モード解析 を選択します。

  2. NGINX ログの設定:NGINX サーバーの設定ファイル(nginx.conf)から log_format の定義全体をコピー し、テキストボックスに貼り付けます。

    例:

    log_format main  '$remote_addr - $remote_user [$time_local] "$request" ''$request_time $request_length ''$status $body_bytes_sent "$http_referer" ''"$http_user_agent"';
    重要

    ここでのフォーマット定義は、サーバー上でログを生成するために使用されるフォーマットと 完全に一致する 必要があります。そうでない場合、ログの解析は失敗します。

  3. 共通設定パラメーター:以下のパラメーターは、複数のデータ解析プロセッサーに共通しており、機能と使用法は共通です。

    • [元のフィールド]:解析するソースフィールドの名前を指定します。デフォルト値は content で、収集されたログエントリ全体を表します。

    • [解析失敗時に元のフィールドを保持]:このオプションを有効にすることを推奨します。ログがプロセッサーによって正常に解析できない場合(たとえば、フォーマットの不一致のため)、このオプションにより、元のログコンテンツが指定された元のフィールドに保持されます。

    • [解析成功時に元のフィールドを保持]:選択した場合、ログが正常に解析されても元のログコンテンツは保持されます。

3. ログフィルター

ログ収集中に、DEBUG や INFO レベルのログなど、価値の低い、または無関係なログを大量に無差別に収集すると、ストレージリソースの無駄遣い、コストの増加、クエリ効率の低下、データ漏洩リスクの発生につながる可能性があります。これらの問題に対処するため、効率的で安全なログ収集のために、きめ細かいフィルタリングポリシーを実装できます。

コンテンツによるフィルター

フィールドのコンテンツに基づいてログをフィルタリングします。たとえば、levelWARNING または ERROR のログのみを収集します。

例:

未処理の生ログ

WARNING または ERROR のログのみ収集

{"level":"WARNING","timestamp":"2025-09-23T19:11:40+0800","cluster":"yilu-cluster-0728","message":"Disk space is running low","freeSpace":"15%"}
{"level":"ERROR","timestamp":"2025-09-23T19:11:42+0800","cluster":"yilu-cluster-0728","message":"Failed to connect to database","errorCode":5003}
{"level":"INFO","timestamp":"2025-09-23T19:11:47+0800","cluster":"yilu-cluster-0728","message":"User logged in successfully","userId":"user-123"}
{"level":"WARNING","timestamp":"2025-09-23T19:11:40+0800","cluster":"yilu-cluster-0728","message":"Disk space is running low","freeSpace":"15%"}
{"level":"ERROR","timestamp":"2025-09-23T19:11:42+0800","cluster":"yilu-cluster-0728","message":"Failed to connect to database","errorCode":5003}

手順:Logtail構成 ページの 設定の処理 セクションで:

処理プラグインの追加 をクリックし、ネイティブ処理プラグイン > フィルタリング処理 を選択します。

  • Field Name:フィルタリング対象のログフィールド。

  • フィールド値:フィルタリングに使用される正規表現。全文一致のみがサポートされており、部分的なキーワード一致はサポートされていません。

ブラックリスト

ブラックリストを使用して指定されたディレクトリやファイルを除外し、無関係なログや機密性の高いログがアップロードされるのを防ぎます。

手順:Logtail構成 ページの入力設定 > その他の入力設定 セクションで、ブラックリストの収集 を有効にし、追加 をクリックします。

ディレクトリとファイル名の完全一致およびワイルドカード一致をサポートしています。サポートされているワイルドカードは、アスタリスク(*)と疑問符(?)のみです。
  • [ファイルパスのブラックリスト]:無視するファイルパス。例:

    • /home/admin/private*.log/home/admin/ ディレクトリ内の、private で始まり .log で終わるすべてのファイルを無視します。

    • /home/admin/private*/*_inner.log/home/admin/ ディレクトリ配下の private で始まるサブディレクトリ内にある、_inner.log で終わるファイルを無視します。

  • [ファイルのブラックリスト]:収集時に無視するファイル名。例:

    • app_inner.log:収集時に app_inner.log という名前のすべてのファイルを無視します。

  • [ディレクトリのブラックリスト]:ディレクトリパスはスラッシュ(/)で終わってはいけません。例:

    • /home/admin/dir1/:このブラックリストエントリは無効であり、無視されます。

    • /home/admin/dir*/home/admin/ 配下の、名前が dir で始まるサブディレクトリ内のすべてのファイルを無視します。

    • /home/admin/*/dir/home/admin/ ディレクトリ配下の、dir という名前の第 2 レベルのサブディレクトリ内のすべてのファイルを無視します。たとえば、/home/admin/a/dir ディレクトリ内のファイルは無視されますが、/home/admin/a/b/dir ディレクトリ内のファイルは収集されます。

コンテナフィルター

環境変数、Pod ラベル、名前空間、コンテナ名などのコンテナメタデータに基づいて収集条件を設定し、特定のコンテナからのログ収集を正確に制御します。

手順:Logtail構成 ページの 入力設定 セクションで、コンテナフィルター を有効にし、追加 をクリックします。

複数の条件は論理 AND で結合されます。すべての正規表現マッチングは Go の RE2 エンジンに基づいており、PCRE などのエンジンと比較していくつかの制限があります。正規表現が「付録:正規表現の使用制限(コンテナフィルター)」のガイドラインに準拠していることを確認してください。
  • 環境変数ブラックリスト/ホワイトリスト:対象コンテナの環境変数に基づいて条件を指定します。

  • K8s Pod ラベルブラックリスト/ホワイトリスト:対象コンテナが配置されている Pod のラベルに基づいて条件を指定します。

  • K8s Pod 名の正規表現一致:Pod 名を照合して収集対象のコンテナを指定します。

  • K8s 名前空間の正規表現一致:名前空間名を照合して収集対象のコンテナを指定します。

  • K8s コンテナ名の正規表現一致:コンテナ名を照合して収集対象のコンテナを指定します。

  • コンテナラベルブラックリスト/ホワイトリスト:ラベルが指定された条件に一致するコンテナからログを収集します。この機能は Docker シナリオ向けであり、Kubernetes シナリオでの使用は推奨されません。

4. ログの分類

複数のアプリケーションやインスタンスが同じログ形式を共有するシナリオでは、ログソースを区別することが困難になる場合があります。これにより、クエリ中にコンテキストが失われ、分析が非効率になります。この問題に対処するため、ログトピックとログタギングを設定して、自動的なコンテキストの関連付けと論理的な分類を行うことができます。

ログトピック

複数のアプリケーションやインスタンスからのログが同じ形式を共有しているが、パスが異なる場合 (例:/apps/app-A/run.log/apps/app-B/run.log)、そのソースを区別するのは困難な場合があります。このような場合、マシン グループ、カスタム名、またはファイルパスの抽出に基づいてトピックを生成し、さまざまなビジネスサービスやパスからのログを柔軟に区別することが可能になります。

手順:グローバル設定 > その他のグローバル設定 > ログテーマのタイプ に移動し、トピック生成方式を選択します。以下の 3 つの方式がサポートされています:

  • マシン グループ トピック:収集設定が複数のマシン グループに適用されている場合、LoongCollector はサーバーのマシン グループ名を __topic__ フィールドの値として自動的に使用します。この方式は、ログをホストクラスターごとに分類するシナリオに適しています。

  • [カスタム]:customized://<custom_topic_name> の形式を使用します(例:customized://app-login)。この方式は、固定のビジネス識別子を持つ静的なトピックシナリオに適しています。

  • ファイルパスからの抽出:ログファイルのフルパスからキー情報を抽出し、ログソースを動的にタグ付けします。この方式は、複数のユーザーやアプリケーションが同じログファイル名を共有しているが、パスが異なる状況に適しています。

    複数のユーザーやサービスが異なるトップレベルディレクトリにログを書き込んでいるが、同じサブディレクトリパスとファイル名を使用している場合、ファイル名だけではソースを区別できません。例:

    /data/logs
    ├── userA
    │   └── serviceA
    │       └── service.log
    ├── userB
    │   └── serviceA
    │       └── service.log
    └── userC
        └── serviceA
            └── service.log

    この場合、[ファイルパスからの抽出] を設定し、正規表現を使用してフルパスからキー情報を抽出できます。一致した結果は、ログトピックとして Logstore にアップロードされます。

    抽出ルール

    正規表現を設定すると、システムは以下のルールに従って、キャプチャグループの数と命名に基づいて出力フィールドの形式を自動的に決定します:

    ファイルパスの正規表現では、スラッシュ(/)をエスケープする必要があります。

    キャプチャグループのタイプ

    ユースケース

    生成されるフィールド

    正規表現の例

    一致するパスの例

    生成されるフィールド

    単一のキャプチャグループ(1 つの (.*?)

    ソースを区別するために、ユーザー名や環境など、1 つのディメンションのみが必要です。

    __topic__ フィールドを生成します。

    \/logs\/(.*?)\/app\.log

    /logs/userA/app.log

    __topic__:userA

    複数の名前なしキャプチャグループ((.*?) の複数インスタンス)

    意味的なラベルなしで複数のディメンションが必要な場合。

    __tag__:__topic_{i}__:<value> の形式でタグフィールドを生成します。ここで、{i} はキャプチャグループのシーケンス番号です。

    \/logs\/(.*?)\/(.*?)\/app\.log

    /logs/userA/svcA/app.log

    __tag__:__topic_1__:userA

    __tag__:__topic_2__:svcA

    複数の名前付きキャプチャグループ((?P<name>.*?) を使用)

    クエリと分析を容易にするために、意味が明確なフィールド名を持つ複数のディメンションが必要な場合。

    __tag__:{name}:<value> の形式でタグフィールドを生成します。

    \/logs\/(?P<user>.*?)\/(?P<service>.*?)\/app\.log

    /logs/userA/svcA/app.log

    __tag__:user:userA

    __tag__:service:svcA

ログタギング

ログタグのエンリッチメントを有効にして、コンテナの環境変数や Kubernetes Pod のラベルからキー情報を抽出し、この情報をタグとして付加して、きめ細かいログのグループ化を行うことができます。

手順:Logtail構成 ページの 入力設定 セクションで、ログタグのエンリッチメント を有効にし、追加 をクリックします。

  • [環境変数関連]:環境変数名とタグ名を設定します。環境変数の値はタグの値として保存されます。

    • 環境変数名:抽出する環境変数の名前。

    • タグ名:環境変数の値を保存するタグの名前。

  • [Pod Label 関連]:Pod ラベル名とタグ名を設定します。Pod ラベルの値はタグの値として保存されます。

    • Pod ラベル名:抽出する Kubernetes Pod ラベルの名前。

    • タグ名:Pod ラベルの値を保存するタグの名前。

5. 出力設定

デフォルトでは、すべてのログが収集され、lz4 形式で圧縮されて 現在の Logstore に送信されます。同じソースからのログを異なる Logstore に振り分けるには、以下の手順に従ってください。

複数宛先への振り分け

重要
  • 複数宛先への振り分けは、LoongCollector 3.0.0 以降でのみ利用可能です。Logtail はこの機能をサポートしていません。

  • 最大で 5 つの出力先を設定できます。

  • 複数の出力先を設定した後、この収集設定は現在の Logstore の一覧には表示されなくなります。複数宛先への振り分け設定を表示、変更、または削除するには、詳細については、「複数宛先への振り分け設定を管理するにはどうすればよいですか?」をご参照ください。

手順:Logtail構成 ページの 出力設定 セクションで:

  1. image をクリックして出力設定を展開します。

  2. 出力先の追加 をクリックし、以下の設定を完了します:

    • Logstores:宛先の Logstore を選択します。

    • 圧縮方法:サポートされているタイプは lz4zstd です。

    • ルート設定:タグフィールドに基づいてログをルーティングし、振り分けます。ルーティング設定に一致するログは、宛先の Logstore に送信されます。この設定を指定しない場合、収集されたすべてのログが宛先の Logstore に送信されます。

      • [タグ名]: ルーティングに使用されるタグフィールドの名前です。__tag__: プレフィックスを付けずに、__path__ などのフィールド名を直接入力します。タグフィールドは、次の 2 つのカテゴリに分類されます。

        タグの詳細については、「LoongCollector 収集タグの管理」をご参照ください。
        • エージェント関連:収集エージェントから生成され、プロセッサーとは独立したタグ。例:__hostname____user_defined_id__

        • 入力プロセッサー関連:入力プロセッサーから生成され、ログにコンテキスト情報を追加するタグ。例:ファイル収集の場合は __path__、K8s 収集の場合は _pod_name_ および _container_name_

      • [タグ値]:ログのタグフィールドがこの値に一致する場合、そのログは宛先の Logstore に送信されます。

      • [このタグフィールドを破棄するかどうか]:有効にすると、アップロードされるログにこのタグフィールドは含まれなくなります。

ステップ 4 : クエリと分析

ログ処理とプラグインを設定した後、次へ をクリックして クエリと分析の設定 ページを開きます。

  • デフォルトでは、フルテキストインデックスが有効になっており、生ログの内容からキーワードを検索できます。

  • フィールドに基づいて正確なクエリを実行するには、[プレビューデータ] の読み込み後に 自動インデックスの生成 をクリックします。Log Service は、プレビューデータの先頭エントリに基づいて フィールドインデックス を生成します。

設定が完了したら、次へ をクリックして収集プロセスを完了します。

ステップ 5:検証とトラブルシューティング

収集設定を作成し、マシングループに適用すると、システムは自動的に設定をデプロイし、増分ログの収集を開始します。

収集ログの表示

  1. ログファイルへの新規ログ書き込みの確認:LoongCollector は増分ログのみを収集します。tail -f /path/to/your/log/file コマンドを実行し、サービス操作をトリガーして新しいログを生成します。

  2. ログのクエリ:ターゲット Logstore のクエリと分析ページに移動し、検索と分析 をクリックします。デフォルトの時間範囲は過去 15 分間です。新しいログを確認します。デフォルトでは、収集された各コンテナテキストログには次のフィールドが含まれます:

    フィールド名

    説明

    __tag__:__hostname__

    コンテナホストの名前。

    __tag__:__path__

    コンテナ内のログファイルのパス。

    __tag__:_container_ip_

    コンテナの IP アドレス。

    __tag__:_image_name_

    コンテナが使用するイメージの名前。

    __tag__:_pod_name_

    Pod の名前。

    __tag__:_namespace_

    Pod の名前空間。

    __tag__:_pod_uid_

    Pod の一意の識別子 (UID)。

一般的な問題のトラブルシューティング

マシングループのハートビート失敗

  1. ユーザー識別子を確認します:サーバーが ECS インスタンスでない場合、または ECS インスタンスとプロジェクトが異なる Alibaba Cloud アカウントに属している場合は、指定されたディレクトリに正しいユーザー識別子が含まれていることを確認してください。

    • Linux:cd /etc/ilogtail/users/ && touch <uid> コマンドを実行して、ユーザー識別子ファイルを作成します。

    • Windows:C:\LogtailData\users\ ディレクトリに移動し、<uid> という名前の空のファイルを作成します。

    現在のプロジェクトの Alibaba Cloud アカウント ID と同じ名前のファイルが指定されたパスに存在する場合、ユーザー識別子は正しく設定されています。

  2. マシングループ識別子を確認します:カスタム ID を持つマシングループを使用する場合、指定されたディレクトリに user_defined_id ファイルが存在することを確認してください。ファイルが存在する場合、その内容がマシングループに設定されたカスタム ID と一致することも確認してください。

    • Linux:

      # カスタム ID を設定します。ディレクトリが存在しない場合は、手動で作成します。
      echo "user-defined-1" > /etc/ilogtail/user_defined_id
    • Windows:C:\LogtailData ディレクトリ (なければ作成します) に、user_defined_id ファイルを作成し、カスタム ID を書き込みます。

  3. ユーザー識別子とマシングループ識別子の両方が正しく設定されている場合は、「LoongCollector (Logtail) マシングループのトラブルシューティングガイド」で詳細なトラブルシューティング手順をご参照ください。


ログ収集エラーまたはフォーマットエラー

トラブルシューティングのアプローチ:これらのエラーは、ネットワーク接続と基本設定が正常であることを示します。原因は通常、ログ内容解析ルール の不一致です。特定のエラーメッセージを表示して原因を特定します:

  1. Logtail構成 ページで、エラーが発生している LoongCollector (Logtail) 構成の名前をクリックします。(ログ収集エラー) タブで、コスト上の理由 をクリックしてクエリの時間範囲を設定します。

  2. セクションで、エラーログのアラートタイプを確認し、「一般的なログ収集エラー」で対応する解決策を確認してください。

次のステップ

  1. ログのクエリと分析

  2. データの可視化:可視化ダッシュボードを使用して、主要なメトリクスの傾向を監視します。

  3. データ異常の自動アラート:アラートポリシーを設定して、システムの異常をリアルタイムで検出します。

コンテナログ収集のトラブルシューティング

  1. LoongCollector (Logtail) を設定した後、対象のログファイルに新しいログが含まれていない場合、LoongCollector (Logtail) はそこからデータを収集しません。

2. Logtail ランタイムログの表示

LoongCollector (Logtail) のランタイムログを表示して、詳細なエラー情報を確認します。

  1. Logtail コンテナへのログイン

    1. Logtail Pod をクエリします。

      kubectl get po -n kube-system | grep logtail

      次のような出力が返されます。

      logtail-ds-****d                                             1/1       Running    0          8d
      logtail-ds-****8                                             1/1       Running    0          8d
    2. Pod にログインします。

      kubectl exec -it -n kube-system logtail-ds-****d -- bash

      このコマンドで、logtail-ds-****d は Pod 名です。実際の Pod 名に置き換えてください。

  1. Logtail ランタイムログの表示

    Logtail ログは、Logtail コンテナ内の /usr/local/ilogtail/ ディレクトリに保存されています。ファイル名は ilogtail.LOGlogtail_plugin.LOG です。Logtail コンテナにログインし、次のコマンドを実行してログファイルを表示します。

    # /usr/local/ilogtail/ ディレクトリに移動します。
    cd /usr/local/ilogtail
    
    # ilogtail.LOG と logtail_plugin.LOG ファイルを表示します。
    cat ilogtail.LOG
    cat logtail_plugin.LOG

    目的: エラーログでアラームタイプを特定し、「Simple Log Service データ収集における一般的なエラー」で対応する解決策を見つけてください。

3. マシングループのハートビートの確認

マシングループのハートビートステータスを確認します: リソースグループ > マシングループ ページに移動し、目的のマシングループの名前をクリックします。 サーバグループ設定 > サーバグループのステータス セクションで、ハートビート ステータスを表示し、ステータスが OK のノード数をカウントします。

  1. コンテナクラスター内のワーカーノードの数を確認します。

    1. クラスターの KubeConfig を取得し、kubectl を使用してクラスターに接続します

    2. クラスター内のワーカーノード数を表示します。

      kubectl get node | grep -v master

      次のような出力が返されます。

      NAME                                 STATUS    ROLES     AGE       VERSION
      cn-hangzhou.i-bp17enxc2us3624wexh2   Ready     <none>    238d      v1.10.4
      cn-hangzhou.i-bp1ad2b02jtqd1shi2ut   Ready     <none>    220d      v1.10.4
  2. ハートビートステータスが OK のノード数が、コンテナクラスターのワーカーノード数と一致することを確認します。比較結果に基づいてトラブルシューティング方法を選択します。

    • マシングループ内のすべてのノードのハートビートステータスが 失敗 の場合:

      • セルフマネージドクラスターを使用している場合は、次のパラメーターが正しく設定されているかどうかを確認してください: {regionId}{aliuid}{access-key-id}{access-key-secret}

        これらのパラメーターのいずれかが正しくない場合は、helm del --purge alibaba-log-controller コマンドを実行して削除してから、インストールパッケージを再インストールしてください。

    • ハートビートステータスが OK のノードは存在するものの、その数がクラスター内のワーカーノード数よりも少ない場合:

      • DaemonSet が手動でデプロイされたかどうかを確認します。

        1. 次のコマンドを実行します。出力が返された場合、以前に DaemonSet が手動でデプロイされています。

          kubectl get po -n kube-system -l k8s-app=logtail
        2. DaemonSet テンプレートの最新バージョンをダウンロードします。

        3. ${your_region_name}${your_aliyun_user_id}${your_machine_group_name} などのパラメーターを、実際の値で設定します。

        4. 更新した設定を適用します。

          kubectl apply -f ./logtail-daemonset.yaml

4. 収集フィルターの確認

Simple Log Service コンソールで、Logtail 収集設定を確認します。 [IncludeLabel]、[ExcludeLabel]、[IncludeEnv]、[ExcludeEnv]、およびその他のフィルター設定が、要件に合わせて正しく設定されていることを確認してください。

  • ここでいう「ラベル」とは、Docker コンテナのラベル (docker inspect の出力から) を指し、Kubernetes のラベルではありません。

  • テストするには、一時的に [IncludeLabel]、[ExcludeLabel]、[IncludeEnv]、[ExcludeEnv] の設定を削除し、ログが収集されるかどうかを確認してください。収集される場合は、これらのパラメーターの設定にエラーがあることがわかります。

よくある質問

複数宛先への分配設定の管理

複数宛先への分配設定は複数の Logstore に関連付けられているため、プロジェクトレベルの管理ページで管理する必要があります。

  1. Simple Log Service (SLS) コンソールにログインし、対象のプロジェクト名をクリックします。

  2. プロジェクトページで、左側メニューで imageリソースグループ > 設定の管理 をクリックします。

    説明

    このページでは、誤って削除された Logstore の残存設定を含め、プロジェクト内のすべての収集設定を一元的に管理します。

ACK クラスターのログを別アカウントに転送

ACK クラスターに LoongCollector (Logtail) コンポーネントを手動でインストールし、対象アカウントの Alibaba Cloud アカウント ID またはアクセス認証情報 (AccessKey) を使用して設定することで、別の Alibaba Cloud アカウントの SLS プロジェクトにコンテナログを送信できます。

シナリオ:組織構造、権限分離、集中モニタリングなどの理由により、ACK クラスターのログデータを別の Alibaba Cloud アカウントの SLS プロジェクトに収集する場合は、LoongCollector (Logtail) を手動でインストールしてクロスアカウント収集を有効にします。

手順:次の手順に従って LoongCollector を手動でインストールします。詳細については、「Install and configure Logtail」をご参照ください。

  1. Kubernetes クラスターに接続し、クラスターのリージョンに対応するコマンドを実行します。

    中国本土リージョン

    wget https://aliyun-observability-release-cn-shanghai.oss-cn-shanghai.aliyuncs.com/loongcollector/k8s-custom-pkg/3.0.12/loongcollector-custom-k8s-package.tgz; tar xvf loongcollector-custom-k8s-package.tgz; chmod 744 ./loongcollector-custom-k8s-package/k8s-custom-install.sh

    中国以外のリージョン

    wget https://aliyun-observability-release-ap-southeast-1.oss-ap-southeast-1.aliyuncs.com/loongcollector/k8s-custom-pkg/3.0.12/loongcollector-custom-k8s-package.tgz; tar xvf loongcollector-custom-k8s-package.tgz; chmod 744 ./loongcollector-custom-k8s-package/k8s-custom-install.sh
  2. loongcollector-custom-k8s-package ディレクトリに移動し、./loongcollector/values.yaml 設定ファイルを変更します。

    # ===================== 必須情報 =====================
    # このクラスターから収集されたログが格納されるプロジェクト。例: k8s-log-custom-sd89ehdq
    projectName: ""
    # プロジェクトが配置されているリージョン。例: cn-shanghai
    region: ""
    # プロジェクトを所有する Alibaba Cloud アカウントの ID。ID は引用符 ("") で囲みます。例: "123456789"
    aliUid: ""
    # ネットワークタイプ。有効な値: Internet および Intranet。デフォルト値: Internet。
    net: Internet
    # Alibaba Cloud アカウントまたは RAM ユーザーの AccessKey ID と AccessKey secret。AliyunLogFullAccess ポリシーが必要です。
    accessKeyID: ""
    accessKeySecret: ""
    # カスタムクラスター ID。ID には、大文字、小文字、数字、ハイフン (-) のみを使用できます。
    clusterID: ""
  3. loongcollector-custom-k8s-package ディレクトリで、LoongCollector とその依存関係をインストールするには、次のコマンドを実行します。

    bash k8s-custom-install.sh install
  4. インストールが完了したら、コンポーネントのステータスを確認します。

    ポッドの起動に失敗した場合は、values.yaml ファイルの設定内容と、必要なイメージがプルされていることを確認してください。
    # ポッドのステータスを確認
    kubectl get po -n kube-system | grep loongcollector-ds

    SLS は、次のリソースも自動的に作成します。これらは SLS コンソールで表示できます。

    タイプ

    パラメーター

    説明

    プロジェクト

    values.yaml ファイルで定義された projectName の値

    異なるサービスからのログを分離するリソース管理ユニットです。

    より柔軟なログリソース管理のためにプロジェクトを作成するには、「プロジェクトの作成」 をご参照ください。

    マシングループ

    k8s-group-${clusterID}

    ログ収集ノードのセットです。

    重要

    LoongCollector コンポーネントは、config-operation-log という名前の Logstore を作成しません。この Logstore がすでに存在する場合、LoongCollector は新しいログを書き込みません。

単一ソースに対する複数設定

デフォルトでは、SLS はデータの重複を防ぐため、ログソースごとに 1 つの収集設定のみを使用します:

  • 各テキストログファイルに一致する Logtail の収集設定は 1 つだけです。

  • コンテナの標準出力 (stdout) の場合:

    • 新しい標準出力テンプレートを使用する場合、デフォルトでは stdout を収集できる収集設定は 1 つだけです。

    • 従来の標準出力テンプレートは、追加設定なしでデフォルトで複数収集をサポートします。

  1. SLS コンソールにログインし、対象のプロジェクトに移動します。

  2. 左側メニューで image Logstores をクリックし、対象の Logstore を見つけます。

  3. Logstore 名の横にある image アイコンをクリックして、詳細を展開します。

  4. Logtail構成 をクリックし、設定リストで対象の Logtail 設定を見つけ、Logtail構成 列の Logtail 設定の管理 をクリックします。

  5. 設定ページで 編集 をクリックし、入力設定 セクションまでスクロールします。

    • テキストファイルログの場合は、ファイルを複数回収集できるようにする を有効にします。

    • コンテナの標準出力の場合は、標準出力の複数回の収集を許可する を有効にします。

アンインストール時の依存関係エラー

症状:Container Service for Kubernetes (ACK) で loongcollector (logtail-ds) ログ収集コンポーネントをアンインストールしようとすると、次のエラーが表示されます:

Dependencies of addons are not met: terway-eniip depends on logtail-ds(>0.0) whose version is v3.x.x.x-aliyun or will be v3.x.x.x-aliyun

原因:このエラーは、terway-eniip ネットワークプラグインのログ収集機能によって、loongcollector (logtail-ds) コンポーネントへの依存関係が作成されるためです。そのため、ACK はこの依存関係が解消されるまでアンインストールをブロックします。

解決策:コンポーネントをアンインストールする前に、次の手順に従って依存関係を削除します:

  1. ACK コンソールにログインします。

  2. クラスター一覧で、対象のクラスター名をクリックします。

  3. 左側メニューで アドオン管理 をクリックします。

  4. [Add-ons] ページで terway-eniip コンポーネントを見つけ、ログを閉じる をクリックします。

  5. 表示される確認ダイアログボックスで、OK をクリックします。

  6. 設定が適用されたら、loongcollector (logtail-ds) コンポーネントのアンインストールを再度試してください。

最後のログエントリの遅延または切り捨て

分析:ログの切り捨ては、ログファイルの最終行に改行文字がない場合、または例外スタックなどの複数行ログエントリが不完全な場合に発生することがよくあります。これは、コレクターがログエントリの完了を判断できないため、最後のセグメントが早期に分割されたり、遅延して報告されたりする可能性があるためです。処理メカニズムは LoongCollector (Logtail) のバージョンによって異なります:

  • 1.8 より前のバージョン:
    ログの最終行に改行 (または復帰) がない場合、または複数行ログが不完全な場合、コレクターは次の書き込み操作で出力がトリガーされるのを待機します。これにより、新しいログが書き込まれるまで最後のログエントリが長時間保持される可能性があります。







  • 1.8 以降のバージョン:
    これらのバージョンでは、ログが無期限に保持されるのを防ぐためにタイムアウトフラッシュ機構が導入されています。コレクターが不完全なログ行を検出するとタイマーが開始され、タイムアウト後に現在のバッファが自動的に送信されることで、最終的にログが収集されます。







    • デフォルトのタイムアウト:通常は数秒です (ほとんどのシナリオでログの整合性を確保します)。

    • 必要に応じてこの値を調整できますが、0 には設定しないでください。0 に設定すると、ログの切り捨てや部分的なデータ損失が発生する可能性があります。

解決策:

タイムアウト期間を延長することで、ログが完全に書き込まれてから収集されるように設定できます。

  1. SLS コンソールにログインし、対象のプロジェクトに移動します。

  2. 左側メニューで image Logstores をクリックし、対象の Logstore を見つけます。

  3. Logstore 名の横にある image アイコンをクリックして、詳細を展開します。

  4. Logtail構成 をクリックし、設定リストで対象の Logtail 設定を見つけ、Logtail構成 列の Logtail 設定の管理 をクリックします。

  5. 設定ページで 編集 をクリックします。

    • 入力設定 > その他の入力設定 > 高度なパラメーター に移動し、次の JSON 設定を追加してタイムアウト期間をカスタマイズします。

      {
        "FlushTimeoutSecs": 1
      }
      • デフォルト値:起動パラメーター default_reader_flush_timeout によって決まります。通常は数秒です。

      • 単位:秒。

      • 推奨値:1 以上。0 に設定しないでください。ログの切り捨てや部分的なデータ損失が発生する可能性があります。

  6. 設定が完了したら、OK をクリックします。

ネットワークエンドポイントのフェールオーバー

LoongCollector (Logtail) がネットワーク障害や接続タイムアウトなど、内部ネットワークで通信異常を検知した場合、データ転送のためにパブリックネットワークエンドポイントへ自動的にフェールオーバーします。これにより、ログ収集の継続性と信頼性を確保し、ログの滞留やデータ損失を防止できます。

  • LoongCollector:接続が復旧すると、内部ネットワークに自動的に切り戻します。

  • Logtail:自動的に切り戻しません。内部ネットワークでの通信を再開するには、コンポーネントを手動で再起動する必要があります。

付録:ネイティブプロセッサーリファレンス

プロセッサ設定 セクションの Logtail 構成 ページで、プロセッサを追加して生ログを構造化します。既存の収集設定に処理プラグインを追加するには、以下の手順に従います。

  1. 左側のナビゲーションウィンドウで、imageLogstores を選択し、対象の Logstore を検索します。

  2. その名前の前にある image アイコンをクリックして Logstore を展開します。

  3. Logtail 構成 をクリックします。構成リストで対象の Logtail 構成を見つけ、アクション列の Logtail 構成の管理 をクリックします。

  4. Logtail 構成ページで、編集 をクリックします。

このセクションでは、一般的なログ処理ユースケースをカバーする、よく使用される処理プラグインのみを紹介します。その他の機能については、「拡張プロセッサ」をご参照ください。
重要

プラグインの組み合わせルール(LoongCollector / Logtail 2.0 以降):

  • ネイティブプロセッサと拡張プロセッサは、個別に使用することも、必要に応じて組み合わせることもできます。

  • ネイティブプロセッサは、パフォーマンスと安定性が高いため、優先的に使用してください。

  • ネイティブ機能がビジネスニーズを満たせない場合は、構成済みのネイティブプロセッサの後に拡張プロセッサを追加して、補足的な処理を行います。

順序制約:

すべてのプラグインは、構成された順序で順次実行され、処理チェーンを形成します。注意:すべてのネイティブプロセッサは、拡張プロセッサの前に配置する必要があります。拡張プロセッサを追加した後は、ネイティブプロセッサを追加することはできません。

データ解析 (正規表現モード)

正規表現を使用してログからフィールドを抽出し、ログをキーと値のペアに解析できます。その後、各フィールドを個別にクエリおよび分析できます。

例:

生ログ

結果

127.0.0.1 - - [16/Aug/2024:14:37:52 +0800] "GET /wp-admin/admin-ajax.php?action=rest-nonce HTTP/1.1" 200 41 "http://www.example.com/wp-admin/post-new.php?post_type=page" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/127.0.0.0 Safari/537.36 Edg/127.0.0.0"
body_bytes_sent: 41
http_referer: http://www.example.com/wp-admin/post-new.php?post_type=page
http_user_agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/127.0.0.0 Safari/537.36 Edg/127.0.0.0
remote_addr: 127.0.0.1
remote_user: -
request_method: GET
request_protocol: HTTP/1.1
request_uri: /wp-admin/admin-ajax.php?action=rest-nonce
status: 200
time_local: 16/Aug/2024:14:37:52 +0800

手順: Logtail構成 ページの 設定の処理 セクションで、処理プラグインの追加 をクリックし、次に ネイティブ処理プラグイン > 正規表現解析 を選択します:

  • [正規表現]:ログのマッチングに使用します。自動生成または手動入力が可能です。

    • 正規表現の自動生成:

      • [正規表現の自動生成] をクリックします。

      • ログサンプル フィールドで、抽出したいログの内容を強調表示します。

      • [正規表現の生成] をクリックします。

        コンテンツをハイライトすると、ログテキストの上に[正規表現を生成] ボタンが表示されます。

    • ログ形式に基づいて正規表現を手動で入力します。

    設定が完了したら、[検証] をクリックして、正規表現がログコンテンツを正しく解析できるかをテストします。

  • [ログ抽出フィールド]: 抽出されたログ値のフィールド名 (キー) を設定します。

  • その他のパラメーターについては、「ユースケース 2:構造化ログ」の共通設定パラメーターの説明をご参照ください。


データ解析 (区切り文字モード)

区切り文字を使用して、ログコンテンツをキーと値のペアに解析できます。単一文字および複数文字の区切り文字の両方に対応しています。

例:

生ログ

指定の文字で, フィールドを分割する

05/May/2025:13:30:28,10.10.*.*,"POST /PutData?Category=YunOsAccountOpLog&AccessKeyId=****************&Date=Fri%2C%2028%20Jun%202013%2006%3A53%3A30%20GMT&Topic=raw&Signature=******************************** HTTP/1.1",200,18204,aliyun-sdk-java
ip:10.10.*.*
request:POST /PutData?Category=YunOsAccountOpLog&AccessKeyId=****************&Date=Fri%2C%2028%20Jun%202013%2006%3A53%3A30%20GMT&Topic=raw&Signature=******************************** HTTP/1.1
size:18204
status:200
time:05/May/2025:13:30:28
user_agent:aliyun-sdk-java

手順: Logtail構成 ページの 設定の処理 セクションで、処理プラグインの追加 をクリックし、ネイティブ処理プラグイン > 区切り文字解析 を選択します:

  • [区切りモード]: ログコンテンツを分割するために使用する文字です。

    例:CSV ファイルの場合は、カスタム を選択し、半角のコンマ (,) を入力します。

  • [引用符]: フィールド値に区切り文字が含まれている場合、そのフィールドを引用符で囲んで、誤った分割を防ぐ必要があります。

  • [ログ抽出フィールド]:結果の列のフィールド名 (キー) を順番に設定します。以下のルールが適用されます:

    • フィールド名には、英字、数字、アンダースコア (_) のみを含めることができます。

    • フィールド名は、英字またはアンダースコア (_) で始まる必要があります。

    • 最大長は 128 バイトです。

  • その他のパラメーターについては、「ユースケース 2:構造化ログ」の共通設定パラメーターの説明をご参照ください。


データ解析 (JSON モード)

ログから JSON オブジェクトをキーと値のペアに解析できます。

例:

生ログ

結果

{"url": "POST /PutData?Category=YunOsAccountOpLog&AccessKeyId=U0Ujpek********&Date=Fri%2C%2028%20Jun%202013%2006%3A53%3A30%20GMT&Topic=raw&Signature=pD12XYLmGxKQ%2Bmkd6x7hAgQ7b1c%3D HTTP/1.1", "ip": "10.200.98.220", "user-agent": "aliyun-sdk-java", "request": {"status": "200", "latency": "18204"}, "time": "05/Jan/2025:13:30:28"}
ip: 10.200.98.220
request: {"status": "200", "latency" : "18204" }
time: 05/Jan/2025:13:30:28
url: POST /PutData?Category=YunOsAccountOpLog&AccessKeyId=U0Ujpek******&Date=Fri%2C%2028%20Jun%202013%2006%3A53%3A30%20GMT&Topic=raw&Signature=pD12XYLmGxKQ%2Bmkd6x7hAgQ7b1c%3D HTTP/1.1
user-agent:aliyun-sdk-java

手順:Logtail構成 ページの 設定の処理 セクションで、処理プラグインの追加 をクリックし、次に ネイティブ処理プラグイン > JSON 解析 を選択します:

  • [元のフィールド]: デフォルト値は content です。このフィールドには、解析対象の生のログコンテンツが格納されます。

  • その他のパラメーターについては、「ユースケース 2:構造化ログ」の共通設定パラメーターの説明をご参照ください。


Expand JSON field

You can parse nested JSON logs into key-value pairs by specifying an expansion depth.

Example:

Raw log

Expansion depth: 0

Expansion depth: 1

{"s_key":{"k1":{"k2":{"k3":{"k4":{"k51":"51","k52":"52"},"k41":"41"}}}}}
0_s_key_k1_k2_k3_k41:41
0_s_key_k1_k2_k3_k4_k51:51
0_s_key_k1_k2_k3_k4_k52:52
1_s_key:{"k1":{"k2":{"k3":{"k4":{"k51":"51","k52":"52"},"k41":"41"}}}}

Procedure: On the [Logtail構成] page, in the [設定の処理] section, click [処理プラグインの追加], and then select 拡張処理プラグイン > JSON フィールドの拡張:

  • [元のフィールド]: The name of the source field to expand, such as content.

  • [JSON 拡張度]: The number of levels to expand within a JSON object. A value of 0 (the default) expands all levels. A value of 1 prevents the expansion of nested objects.

  • [JSON 拡張連結文字]: The character used to join nested field names. The default is an underscore _.

  • [JSON のフィールドプレフィックス拡張]: The prefix for field names after JSON expansion.

  • [配列を展開する]: Enable this option to expand an array into indexed key-value pairs.

    Example: {"k":["a","b"]} is expanded to {"k[0]":"a","k[1]":"b"}.

    To rename an expanded field, for example from prefix_s_key_k1 to new_field_name, you can add a [フィールドの名前変更] processor to perform the mapping.
  • For information about other parameters, see the description of common configuration parameters in Use Case 2: Structured logs.


JSON 配列の解析

json_extract関数を使用して、JSON 配列から JSON オブジェクトを抽出します。

例:

生ログ

抽出されたオブジェクト

[{"key1":"value1"},{"key2":"value2"}]
json1:{"key1":"value1"}
json2:{"key2":"value2"}

手順: Logtail構成 ページの 設定の処理 セクションで、処理モードSPL に切り替え、SPL 文 を設定し、  json_extract 関数を使用して JSON 配列から JSON オブジェクトを抽出します。

例:ログフィールド content 内の JSON 配列から要素を抽出し、その結果を、 json1 および json2 という名前の新しいフィールドに保存します。

* | extend json1 = json_extract(content, '$[0]'), json2 = json_extract(content, '$[1]')

データ解析 (Apache モード)

Apache ログ設定ファイルの定義に基づいて、ログコンテンツを複数のキーと値のペアに構造化できます。

例:

生ログ

Apache 共通ログ形式 combined の解析

1 192.168.1.10 - - [08/May/2024:15:30:28 +0800] "GET /index.html HTTP/1.1" 200 1234 "https://www.example.com/referrer" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/123.0.X.X Safari/537.36"
http_referer:https://www.example.com/referrer
http_user_agent:Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/123.0.X.X Safari/537.36
remote_addr:192.168.1.10
remote_ident:-
remote_user:-
request_method:GET
request_protocol:HTTP/1.1
request_uri:/index.html
response_size_bytes:1234
status:200
time_local:[08/May/2024:15:30:28 +0800]

手順:Logtail構成ページの設定の処理セクションで処理プラグインの追加をクリックし、次にネイティブ処理プラグイン > Apache モード解析を選択します:

  • [ログ形式]: combined

  • [APACHE 設定フィールド]:選択した ログ形式 に基づいてシステムによって自動的に入力されます。

    重要

    自動入力された内容が、サーバー上の Apache 設定ファイル (通常は /etc/apache2/apache2.conf にあります) の LogFormat 定義と同一であることを確認してください。

  • その他のパラメーターについては、「ユースケース 2:構造化ログ」の共通設定パラメーターの説明をご参照ください。


データマスキング

ログ内の機密データをマスクします。

例:

生ログ

マスクされた結果

[{'account':'1812213231432969','password':'04a23f38'}, {'account':'1812213685634','password':'123a'}]
[{'account':'1812213231432969','password':'********'}, {'account':'1812213685634','password':'********'}]

手順:Logtail構成 ページで、設定の処理 セクションで 処理プラグインの追加 をクリックし、次に ネイティブ処理プラグイン > データマスキング処理 を選択します:

  • [元のフィールド]:マスキング対象の内容が含まれるフィールドです。

  • [マスキング方法]:

    • const:機密コンテンツを指定の文字列に置き換えます。

    • md5:機密コンテンツをその MD5 ハッシュ値に置き換えます。

  • [文字列の置き換え]: マスキング方法const に設定した場合、機密コンテンツを置換する文字列を入力する必要があります。

  • [置き換えられたコンテンツより前のコンテンツの式]:機密データの直前のコンテンツに一致する正規表現です。この式ではRE2 構文を使用します。

  • [置き換えられたコンテンツの式]: 機密コンテンツに一致する正規表現です。この式は RE2 構文を使用します。


時刻解析

ログ内の時間フィールドを解析し、解析結果をログの__time__フィールドとして設定します。

例:

生ログ

結果

{"level":"INFO","timestamp":"2025-09-23T19:11:47+0800","cluster":"yilu-cluster-0728","message":"User logged in successfully","userId":"user-123"}

解析されたログは、構造化された key-value ペアとして表示され、time フィールドはログ時間 (たとえば、09-29 09:56:01) として正しく解析され、clusterlevelmessage、および userId などの他のフィールドは独立して表示されます。

手順: Logtail構成 ページの 設定の処理 セクションで 処理プラグインの追加 をクリックし、次に ネイティブ処理プラグイン > 時間解析 を選択します:

  • [元のフィールド]: 解析対象の時間値を含むフィールドです。

  • [時間形式]:ログ内の時刻値に対応する時間形式

  • [タイムゾーン]: ソース時間フィールドのタイムゾーンです。 デフォルトでは、システムは LoongCollector (Logtail) プロセスが実行されている環境のタイムゾーンを使用します。

付録:正規表現の制限

コンテナフィルタリングの正規表現は Go RE2 エンジン を使用しており、Perl 互換正規表現 (PCRE) などの他のエンジンと比較して構文に制限があります。正規表現を記述する際は、次の点に注意してください。

1. 名前付きグループの構文の違い

Go は、名前付きグループには (?P<name>...) 構文を使用し、PCRE で使用される (?<name>...) 構文はサポートしていません。

  • 正しい: (?P<year>\d{4})

  • 誤り: (?<year>\d{4})

2. サポートされていない正規表現機能

RE2 は、一般的ですが複雑な以下の正規表現機能をサポートしていません。これらの使用は避けてください。

  • アサーション: (?=...)(?!...)(?<=...)、または (?<!...)

  • 条件式: (?(condition)true|false)

  • 再帰マッチング: (?R) または (?0)

  • サブプログラム参照: (?&name) または (?P>name)

  • アトミックグループ: (?>...)

3. 推奨事項

正規表現をデバッグするには、Regex101 などのツールを使用してください。互換性を確保するために、検証時には Golang (RE2) モードを選択してください。サポートされていない構文を使用した正規表現の場合、プラグインは解析や一致検索に失敗します。

付録:コンテナ標準出力のバージョン比較

ログストレージの効率と収集の一貫性を向上させるため、コンテナ標準出力のログメタデータ形式がアップグレードされました。新しい形式では、メタデータが __tag__ フィールドに統合され、ストレージの最適化とフォーマットの標準化が実現されています。

  1. 新しい標準出力バージョンの主な利点

    • 大幅なパフォーマンス向上

      • C++ で再構築され、古い Go 実装と比較してパフォーマンスが 180% ~ 300% 向上しました。

      • データ処理のためのネイティブプラグインとマルチスレッド並列処理をサポートし、システムリソースを最大限に活用します。

      • ネイティブプラグインと Go プラグインを柔軟に組み合わせて、複雑なシナリオ要件に対応します。

    • 信頼性の向上

      • 標準出力ログローテーションキューをサポートします。ログ収集メカニズムはファイル収集メカニズムと統一されており、標準出力ログの高速なローテーションシナリオで高い信頼性を提供します。

    • リソース消費の低減

      • CPU 使用率が 20% ~ 25% 削減されます。

      • メモリ使用量が 20% ~ 25% 削減されます。

    • 運用保守の一貫性の向上

      • 統一されたパラメーター構成:新しい標準出力収集プラグインの構成パラメーターは、ファイル収集プラグインと一貫しています。

      • 統一されたメタデータ管理:コンテナメタデータフィールドの命名とタグログのストレージ場所は、ファイル収集シナリオと統一されています。コンシューマー側は 1 つの処理ロジックのみを維持すれば済みます。

  2. 新旧バージョンの機能比較

    機能の次元

    旧バージョンの特徴

    新バージョンの特徴

    ストレージ方法

    メタデータは通常フィールドとしてログコンテンツに直接埋め込まれます。

    メタデータは __tag__ タグに一元的に格納されます。

    ストレージ効率

    各ログが完全なメタデータを繰り返し保持するため、より多くのストレージスペースを消費します。

    同じコンテキスト内の複数のログがメタデータを再利用できるため、ストレージコストが節約されます。

    フォーマットの一貫性

    コンテナファイル収集フォーマットと一貫性がありません。

    フィールドの命名とストレージ構造は、コンテナファイル収集と完全に整合しており、統一されたエクスペリエンスを提供します。

    クエリアクセス方法

    フィールド名で直接クエリできます。例:_container_name_

    __tag__ を介して対応するキーと値にアクセスする必要があります。例:__tag__: _container_name_

  3. コンテナメタデータフィールドマッピングテーブル

    旧バージョンのフィールド名

    新バージョンのフィールド名

    _container_ip_

    __tag__:_container_ip_

    _container_name_

    __tag__:_container_name_

    _image_name_

    __tag__:_image_name_

    _namespace_

    __tag__:_namespace_

    _pod_name_

    __tag__:_pod_name_

    _pod_uid_

    __tag__:_pod_uid_

    新バージョンでは、すべてのメタデータフィールドはログのタグ領域に __tag__:<key> の形式で格納され、ログコンテンツに埋め込まれることはありません。

  4. 新バージョン変更のユーザーへの影響

    • コンシューマー側の適応:ストレージ場所が「コンテンツ」から「タグ」に変更されたため、ユーザーのログ消費ロジックを適宜調整する必要があります。例:クエリ時に __tag__ を介してフィールドにアクセスする必要があります。

    • SQL 互換性:クエリ SQL は自動的に互換性が確保されるように調整されているため、ユーザーは新旧両バージョンのログを同時に処理するためにクエリ文を変更する必要はありません。

詳細情報

グローバルパラメーター

パラメーター

説明

構成名

Logtail 構成の名前です。この名前はプロジェクト内で一意である必要があり、構成作成後は変更できません。

ログトピックタイプ

ログトピックを生成する方法です。マシン グループからトピックを生成する、ファイルパスからトピックを抽出する、またはカスタムトピックを指定できます。

詳細パラメーター

グローバル構成のその他の任意の詳細パラメーターについては、「Logtail パイプライン構成の作成」をご参照ください。

入力パラメーター

パラメーター

説明

Logtail のデプロイモード

DaemonSet:クラスター内の各ノードに LoongCollector インスタンスをデプロイし、ノード上のすべてのコンテナからログを収集します。

サイドカー:各 Pod に LoongCollector コンテナをデプロイし、Pod 内のすべてのコンテナからログを収集します。ログ収集は Pod 間で分離されます。

ファイルパスタイプ

コンテナ内のパス または ホストパス を設定できます。

  • [コンテナ内のパス]:コンテナ内の特定のパスからテキストログファイルを収集します。

  • [ホストパス]:クラスターノード上の特定のパスからサービスログを収集します。

ファイルパス

ホスト (例:ECS) 上のログの場所に基づいて、ログディレクトリとファイル名を設定します。

  • Linux ホストでは、ログパスはスラッシュ (/) で始まる必要があります。例:/apsara/nuwa/**/app.Log

  • Windows ホストでは、ログパスはドライブ文字で始まる必要があります。例:C:\Program Files\Intel\**\*.Log

ディレクトリとファイルには、正確な名前を指定するか、ワイルドカードを使用できます。詳細については、「ワイルドカードマッチング」をご参照ください。ログパスでは、アスタリスク (*) と疑問符 (?) のワイルドカードのみがサポートされています。

ファイル検出では、複数レベルのディレクトリマッチングにより、指定されたディレクトリとそのサブディレクトリ内の一致するすべてのファイルを検索します。例:

  • /apsara/nuwa/**/*.log は、/apsara/nuwa ディレクトリとそのサブディレクトリにある、.log 拡張子を持つすべてのファイルに一致します。

  • /var/logs/app_*/**/*.log は、/var/logs ディレクトリとそのサブディレクトリにある、app_* 形式に一致するすべてのディレクトリ内の、.log 拡張子を持つすべてのファイルに一致します。

  • /var/log/nginx/**/access* は、/var/log/nginx ディレクトリとそのサブディレクトリにある、名前が access で始まるすべてのファイルに一致します。

最大ディレクトリ監視深度

ディレクトリの最大監視深度。この値は、ファイルパス 内でワイルドカード ** が一致する最大深度を指定します。値 0 はカレントディレクトリのみを監視します。

標準出力

標準出力 を有効にすると、Logtail はコンテナの標準出力を収集します。

標準エラー出力

標準エラー を有効にすると、Logtail はコンテナの標準エラー出力を収集します。

標準出力の複数回収集を許可

デフォルトでは、コンテナの標準出力は、標準出力収集のための 1 つの Logtail 構成にのみ一致します。複数の構成を使用して標準出力を収集する必要がある場合は、ファイルを複数回収集できるようにする スイッチを有効にします。

コンテナメタデータのプレビューを有効化

コンテナメタデータのプレビューの有効化 を有効にして Logtail 構成を作成すると、コンテナメタデータを表示できます。メタデータには、一致したコンテナとすべてのコンテナに関する情報が含まれます。

コンテナフィルタリング

  • フィルター条件

重要
  • docker inspect コマンドを実行して取得できるコンテナラベルは、Kubernetes ラベルとは異なります。詳細については、「コンテナラベルの取得」をご参照ください。

  • 環境変数は、コンテナの起動時に設定する変数です。詳細については、「コンテナ環境変数の取得」をご参照ください。

  • Kubernetes 環境では、K8s ポッド名の正規表現一致K8s 名前空間の正規表現一致K8s コンテナ名の正規表現一致K8s Pod Label のホワイトリスト などの Kubernetes レベルの情報を使用してコンテナをフィルタリングすることを推奨します。

  1. Kubernetes の名前空間とコンテナ名は、それぞれコンテナラベル io.kubernetes.pod.namespaceio.kubernetes.container.name にマッピングされます。これらのコンテナラベルを使用してコンテナをフィルタリングすることを推奨します。たとえば、ある Pod が backend-prod 名前空間に属し、そのコンテナ名が worker-server であるとします。このコンテナからログを収集するには、コンテナラベルのホワイトリストに io.kubernetes.pod.namespace : backend-prod または io.kubernetes.container.name : worker-server を追加します。

  2. これらの 2 つのコンテナラベルがフィルタリング要件を満たさない場合は、環境変数のホワイトリストまたはブラックリストを使用してコンテナをフィルタリングします。

[K8s ポッド名の正規表現一致]

Pod 名に基づいてログを収集したいコンテナを指定します。正規表現によるマッチングがサポートされています。たとえば、このパラメーターを ^(nginx-log-demo.*)$ に設定すると、名前が nginx-log-demo で始まる Pod 内のすべてのコンテナが一致します。

[K8s 名前空間の正規表現一致]

名前空間名に基づいてログを収集したいコンテナを指定します。正規表現によるマッチングがサポートされています。たとえば、このパラメーターを ^(default|nginx)$ に設定すると、nginx と default の名前空間にあるすべてのコンテナが一致します。

[K8s コンテナ名の正規表現一致]

コンテナ名に基づいてログを収集したいコンテナを指定します。Kubernetes のコンテナ名は spec.containers で定義されます。正規表現によるマッチングがサポートされています。たとえば、このパラメーターを ^(container-test)$ に設定すると、container-test という名前のすべてのコンテナが一致します。

[コンテナラベルホワイトリスト (Docker 向け、Kubernetes での使用は非推奨)]

コンテナラベルのホワイトリストは、ログ収集の対象となるコンテナを選択します。デフォルトでは、このパラメーターは空であり、すべてのコンテナの標準出力が収集されることを示します。コンテナラベルのホワイトリストを設定するには、LabelKey を指定する必要があります。LabelValue はオプションです。

  • LabelValue を空のままにすると、指定された LabelKey を含むラベルを持つすべてのコンテナが一致します。

  • LabelValue を指定すると、指定された LabelKey=LabelValue のラベルを持つコンテナのみが一致します。

    デフォルトでは、LabelValue には文字列マッチングが使用されます。LabelValue がコンテナラベルの値と完全に一致する場合にのみ、マッチングが成立します。値が ^ で始まり、$ で終わる場合は、正規表現マッチングが使用されます。たとえば、[LabelKey]io.kubernetes.container.name に、[LabelValue]^(nginx|cube)$ に設定できます。この設定は、nginx または cube という名前のコンテナに一致します。

複数のホワイトリストを設定した場合、ホワイトリストは OR ロジックで評価されます。コンテナのラベルがいずれかのホワイトリストに一致すれば、そのコンテナは一致したとみなされます。

[コンテナラベルブラックリスト (Docker 向け、Kubernetes での使用は非推奨)]

コンテナラベルのブラックリストは、ログ収集から除外したいコンテナを指定します。デフォルトでは、このパラメーターは空であり、どのコンテナも除外されないことを示します。コンテナラベルのブラックリストを設定するには、LabelKey を指定する必要があります。LabelValue はオプションです。

  • LabelValue を空のままにすると、この設定は指定された LabelKey を含むラベルを持つすべてのコンテナを除外します。

  • LabelValue を指定すると、この設定は指定された LabelKey=LabelValue のラベルを持つコンテナのみを除外します。

    デフォルトでは、LabelValue には文字列マッチングが使用されます。LabelValue がコンテナラベルの値と完全に一致する場合にのみ、マッチングが成立します。値が ^ で始まり、$ で終わる場合は、正規表現マッチングが使用されます。たとえば、[LabelKey]io.kubernetes.container.name に、[LabelValue]^(nginx|cube)$ に設定できます。この設定は、nginx または cube という名前のコンテナを除外します。

複数のブラックリストを設定した場合、ブラックリストは OR ロジックで評価されます。コンテナのラベルがいずれかのブラックリストに一致すれば、そのコンテナは除外されます。

[環境変数のホワイトリスト]

環境変数のホワイトリストは、ログを収集したいコンテナを指定します。デフォルトでは、このパラメーターは空であり、すべてのコンテナの標準出力が収集されることを示します。環境変数のホワイトリストを設定するには、EnvKey を指定する必要があります。EnvValue はオプションです。

  • EnvValue を空のままにすると、指定された EnvKey を含む環境変数を持つすべてのコンテナが一致します。

  • EnvValue を指定すると、指定された EnvKey=EnvValue の環境変数を持つコンテナのみが一致します。

    デフォルトでは、EnvValue には文字列マッチングが使用されます。EnvValue が環境変数の値と完全に一致する場合にのみ、マッチングが成立します。値が ^ で始まり、$ で終わる場合は、正規表現マッチングが使用されます。たとえば、[EnvKey]NGINX_SERVICE_PORT に、[EnvValue]^(80|6379)$ に設定できます。この設定は、サービスポートが 80 または 6379 のコンテナに一致します。

複数のホワイトリストを設定した場合、ホワイトリストは OR ロジックで評価されます。コンテナの環境変数がいずれかのホワイトリストに一致すれば、そのコンテナは一致したとみなされます。

[環境変数のブラックリスト]

環境変数のブラックリストは、ログ収集から除外したいコンテナを指定します。デフォルトでは、このパラメーターは空であり、どのコンテナも除外されないことを示します。環境変数のブラックリストを設定するには、EnvKey を指定する必要があります。EnvValue はオプションです。

  • EnvValue を空のままにすると、この設定は指定された EnvKey を含む環境変数を持つすべてのコンテナを除外します。

  • EnvValue を指定すると、この設定は指定された EnvKey=EnvValue の環境変数を持つコンテナのみを除外します。

    デフォルトでは、EnvValue には文字列マッチングが使用されます。EnvValue が環境変数の値と完全に一致する場合にのみ、マッチングが成立します。値が ^ で始まり、$ で終わる場合は、正規表現マッチングが使用されます。たとえば、[EnvKey]NGINX_SERVICE_PORT に、[EnvValue]^(80|6379)$ に設定できます。この設定は、サービスポートが 80 または 6379 のコンテナを除外します。

複数のブラックリストを設定した場合、ブラックリストは OR ロジックで評価されます。コンテナの環境変数がいずれかのブラックリストに一致すれば、そのコンテナは除外されます。

[K8s Pod Label のホワイトリスト]

Kubernetes ラベルのホワイトリストに基づいて、ログを収集したいコンテナを指定します。Kubernetes ラベルのホワイトリストを設定するには、LabelKey を指定する必要があります。LabelValue はオプションです。

  • LabelValue を空のままにすると、指定された LabelKey を含む Kubernetes ラベルを持つすべてのコンテナが一致します。

  • LabelValue を指定すると、指定された LabelKey=LabelValue の Kubernetes ラベルを持つコンテナのみが一致します。

    デフォルトでは、LabelValue には文字列マッチングが使用されます。LabelValue が Kubernetes ラベルの値と完全に一致する場合にのみ、マッチングが成立します。値が ^ で始まり、$ で終わる場合は、正規表現マッチングが使用されます。たとえば、[LabelKey]app に、[LabelValue]^(test1|test2)$ に設定できます。この設定は、Kubernetes ラベル app:test1 または app:test2 を持つコンテナに一致します。

複数のホワイトリストを設定した場合、ホワイトリストは OR ロジックで評価されます。コンテナの Kubernetes ラベルがいずれかのホワイトリストに一致すれば、そのコンテナは一致したとみなされます。

説明
  • デプロイメントなどの Kubernetes 管理リソースのラベルを実行時に変更しても、特定の Pod は再起動されません。そのため、Pod は変更を検出できず、マッチングルールが正しく機能しない可能性があります。K8s Pod ラベルのホワイトリストとブラックリストは、Pod ラベルに基づいて設定してください。Kubernetes ラベルの詳細については、「ラベルとセレクター」をご参照ください。

[K8s Pod タグのブラックリスト]

Kubernetes ラベルのブラックリストに基づいて、ログ収集から除外したいコンテナを指定します。Kubernetes ラベルのブラックリストを設定するには、LabelKey を指定する必要があります。LabelValue はオプションです。

  • LabelValue を空のままにすると、この設定は指定された LabelKey を含む Kubernetes ラベルを持つすべてのコンテナを除外します。

  • LabelValue を指定すると、この設定は指定された LabelKey=LabelValue の Kubernetes ラベルを持つコンテナのみを除外します。

    デフォルトでは、LabelValue には文字列マッチングが使用されます。LabelValue が Kubernetes ラベルの値と完全に一致する場合にのみ、マッチングが成立します。値が ^ で始まり、$ で終わる場合は、正規表現マッチングが使用されます。たとえば、[LabelKey]app に、[LabelValue]^(test1|test2)$ に設定できます。この設定は、Kubernetes ラベル app:test1 または app:test2 を持つコンテナを除外します。

複数のブラックリストを設定した場合、ブラックリストは OR ロジックで評価されます。コンテナの Kubernetes ラベルがいずれかのブラックリストに一致すれば、そのコンテナは除外されます。

説明
  • デプロイメントなどの Kubernetes 管理リソースのラベルを実行時に変更しても、特定の Pod は再起動されません。そのため、Pod は変更を検出できず、マッチングルールが正しく機能しない可能性があります。K8s Pod ラベルのホワイトリストとブラックリストは、Pod ラベルに基づいて設定してください。Kubernetes ラベルの詳細については、「ラベルとセレクター」をご参照ください。

ログタグの付加

環境変数や Kubernetes ラベルをログタグとしてログに追加できます。

[環境変数関連]

このパラメーターを設定すると、Log Service は環境変数フィールドをログに追加します。たとえば、環境変数名VERSION に、tag 名env_version に設定し、コンテナに環境変数 VERSION=v1.0.0 がある場合、Log Service はフィールド __tag__:__env_version__: v1.0.0 をログに追加します。

[Pod Label 関連]

このパラメーターを設定すると、Log Service は Kubernetes Pod ラベルに関連するフィールドをログに追加します。たとえば、Pod タグ名app に、tag 名k8s_pod_app に設定し、Kubernetes Pod にラベル app=serviceA がある場合、Log Service はフィールド __tag__:__k8s_pod_app__: serviceA をログに追加します。

ファイルエンコーディング

ログファイルのエンコーディング形式。

初回収集サイズ

構成が最初に有効になったとき、このパラメーターはファイルの末尾を基準としたログ収集の開始位置を指定します。デフォルト値は 1,024 KB です。

  • 初回収集時にファイルが 1,024 KB 未満の場合、Logtail はファイルの先頭からログを収集します。

  • 初回収集時にファイルが 1,024 KB を超える場合、Logtail はファイルの末尾から 1,024 KB の位置からログを収集します。

最初のコレクションのサイズ を変更できます。値の範囲は 0 から 10,485,760 KB です。

収集ブラックリスト

ブラックリストの収集 スイッチをオンにした後、ブラックリストを設定して、ログ収集中に指定されたディレクトリまたはファイルを無視できます。ディレクトリとファイルには、正確な名前を指定するか、ワイルドカードを使用できます。アスタリスク (*) と疑問符 (?) のワイルドカードのみがサポートされています。

重要
  • ファイルパス を設定する際にワイルドカードを使用し、一致したパスの一部を除外する必要がある場合は、ブラックリストを有効にするには、ブラックリストの収集 にフルパスを指定する必要があります。

    たとえば、ファイルパス/home/admin/app*/log/*.log に設定したが、/home/admin/app1* ディレクトリ内のすべてのサブディレクトリを除外したいとします。この場合、ディレクトリのブラックリスト を選択し、ディレクトリを /home/admin/app1*/** に設定する必要があります。ディレクトリを /home/admin/app1* に設定した場合、ブラックリストは有効になりません。

  • ブラックリストのマッチング処理は、計算オーバーヘッドを伴います。ブラックリストのエントリは最大 10 個までにすることを推奨します。

  • ディレクトリパスはスラッシュ (/) で終わることはできません。たとえば、パスを /home/admin/dir1/ に設定した場合、ディレクトリブラックリストは有効になりません。

ファイルパス、ファイル、ディレクトリに対してブラックリストを設定できます。ブラックリストの種類は次のとおりです。

[ファイルパスのブラックリスト]

  • ファイルパスのブラックリスト を選択し、パスを /home/admin/private*.log に設定すると、/home/admin/ ディレクトリ内の名前が private で始まり .log で終わるすべてのファイルがログ収集中に無視されます。

  • ファイルパスのブラックリスト を選択し、パスを /home/admin/private*/*_inner.log に設定すると、/home/admin/ ディレクトリ内の名前が private で始まるディレクトリにある、名前が _inner.log で終わるファイルがログ収集中に無視されます。たとえば、/home/admin/private/app_inner.log ファイルは無視されますが、/home/admin/private/app.log ファイルは収集されます。

ファイルのブラックリスト

ファイルのブラックリスト を選択し、ファイル名を app_inner.log に設定すると、app_inner.log という名前のすべてのファイルがログ収集中に無視されます。

ディレクトリのブラックリスト

  • ディレクトリのブラックリスト を選択し、ディレクトリを /home/admin/dir1 に設定すると、/home/admin/dir1 ディレクトリ内のすべてのファイルがログ収集中に無視されます。

  • ディレクトリのブラックリスト を選択し、ディレクトリを /home/admin/dir* に設定すると、/home/admin/ ディレクトリ内の名前が dir で始まるサブディレクトリ内のすべてのファイルがログ収集中に無視されます。

  • ディレクトリのブラックリスト を選択し、ディレクトリを /home/admin/*/dir に設定すると、/home/admin/ ディレクトリ内の dir という名前の第 2 レベルのサブディレクトリ内のすべてのファイルがログ収集中に無視されます。たとえば、/home/admin/a/dir ディレクトリ内のファイルは無視されますが、/home/admin/a/b/dir ディレクトリ内のファイルは収集されます。

ファイルの重複収集を許可

デフォルトでは、特定のファイルからログを収集できる Logtail 構成は 1 つだけです。ファイルから複数回ログを収集するには、ファイルを複数回収集できるようにする スイッチを有効にします。

詳細パラメーター

ファイル入力プラグインに関する、その他の高度なオプションパラメーターについては、「Logtail パイプライン構成の作成」をご参照ください。

処理パラメーター

パラメーター

説明

ログサンプル

ログデータのサンプルです。本番環境のログを使用することを推奨します。ログサンプルは、ログ処理パラメーターの設定を簡素化するのに役立ちます。複数のサンプルを追加できます。合計の長さは 1,500 文字を超えることはできません。

[2023-10-01T10:30:01,000] [INFO] java.lang.Exception: exception happened
    at TestPrintStackTrace.f(TestPrintStackTrace.java:3)
    at TestPrintStackTrace.g(TestPrintStackTrace.java:7)
    at TestPrintStackTrace.main(TestPrintStackTrace.java:16)

複数行モード

  • 複数行ログタイプ:複数行ログは、複数の連続した行にまたがる単一のログエントリです。各ログエントリの開始を識別するためのルールを定義する必要があります。

    • [カスタム]: 行先頭の正規表現 を使用して、各ログエントリの最初の行を照合します。

    • [マルチライン JSON]: 各 JSON オブジェクトは複数の行に展開されます。例:

      {
        "name": "John Doe",
        "age": 30,
        "address": {
          "city": "New York",
          "country": "USA"
        }
      }
  • 解析失敗時のアクション:

    Exception in thread "main" java.lang.NullPointerException
        at com.example.MyClass.methodA(MyClass.java:12)
        at com.example.MyClass.methodB(MyClass.java:34)
        at com.example.MyClass.main(MyClass.java:20)

    Log Service が上記のログの解析に失敗した場合:

    • [Discard]: ログを破棄します。

    • [単一行を保持]: 各行を個別のログとして保持します。この場合、この処理では 4 つの個別のログが生成されます。

処理方法

[処理プラグインの組み合わせ]: [ネイティブ処理プラグイン] と [拡張処理プラグイン] を組み合わせて使用できます。プロセッサーの詳細については、「Logtail プラグインを使用したデータ処理」をご参照ください。

重要

プロセッサーの使用に関する制限は、コンソールページの情報に準じます。

  • Logtail 2.0 以降

    • ネイティブプロセッサーは任意の順序で組み合わせることができます。

    • ネイティブプロセッサーと拡張プロセッサーを同時に使用できます。ただし、拡張プロセッサーはすべてのネイティブプロセッサーの後に配置する必要があります。

  • Logtail 2.0 より前のバージョン

    • ネイティブプロセッサーと拡張プロセッサーを同時に使用することはできません。

    • ネイティブプロセッサーはテキストログの収集にのみ使用できます。ネイティブプロセッサーを使用する場合、次の要件を満たす必要があります:

      • 最初のプロセッサーは、正規表現解析プラグイン、区切り文字解析プラグイン、JSON 解析プラグイン、NGINX パターン解析プラグイン、Apache パターン解析プラグイン、または IIS パターン解析プラグインのいずれかである必要があります。

      • 後続のプロセッサーには、最大 1 つの時刻解析プラグイン、1 つのフィルタープラグイン、および複数のデータマスキングプラグインを含めることができます。

    • 解析が失敗したときに元のフィールドを残す解析が成功したときに元のフィールドを残す パラメーターについては、次の組み合わせのみが有効です。

      • 正常に解析されたログのみをアップロードする:

        [解析失敗時にソースフィールドを保持][解析成功時にソースフィールドを保持] のチェックボックスをオフにします。

      • 解析成功時には解析済みログを、解析失敗時には生ログをアップロードする:

        [解析失敗時にソースフィールドを保持] チェックボックスを選択し、[解析成功時にソースフィールドを保持] チェックボックスの選択を解除してから、[名前変更後のソースフィールド]__raw__ に設定します。

      • 解析成功時には解析済みログと生ログフィールドをアップロードし、解析失敗時には生ログのみをアップロードする:

        たとえば、生ログ "content": "{"request_method":"GET", "request_time":"200"}" が正常に解析された場合、生フィールドを追加すると、解析後のログに別のフィールドが追加されます。追加されたフィールドの名前は[ソースフィールドの変更名]で指定され(指定されていない場合は元のフィールド名が使用されます)、値は生ログ {"request_method":"GET", "request_time":"200"} です。

        [パース失敗時にソースフィールドを保持] および [パース成功時にソースフィールドを保持] チェックボックスを選択します。 次に、[名前変更後のソースフィールド] を生ログを格納するフィールドの名前に設定し、[詳細パラメーター] を有効にしてから、詳細パラメーターを {"CopyingRawLog":true} に設定します。