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

Simple Log Service:コンテナログの収集 (標準出力とファイル)

最終更新日:Apr 21, 2026

Kubernetes 環境における散在したコンテナログの管理は、複雑で非効率的、かつコストがかかります。DaemonSet モードで LoongCollector をデプロイし、Simple Log Service (SLS) コンソールで収集設定を作成することで、ログ収集と構造化処理を一元化できます。このプロセスにより、ログ検索、問題の切り分け、および可観測性分析が向上します。

前提条件

  • ランタイム環境

    • Container Service for Kubernetes (ACK) (マネージド版および専用版) と自己管理型 Kubernetes クラスターをサポートします。

    • Mount propagation: 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 モードでデプロイします。これにより、クラスター内の各ノードで収集コンテナが実行され、そのノード上のすべてのコンテナからログを収集します。

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

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

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

    2. ログの処理と構造化:ログのフォーマットに基づいて処理ルールを設定します。

      • 複数行ログ:Java の例外スタックや Python のトレースバックなど、複数行にまたがるログエントリを、各エントリの開始を識別するための先頭行の正規表現を定義して処理します。

      • 構造化解析:正規表現、区切り文字、または NGINX モードなどの解析プラグインを設定して、生ログの文字列を構造化されたキーと値のペアに抽出し、効率的なクエリと分析を可能にします。

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

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

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

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

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

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

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

説明

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

ACK クラスター

Container Service for Kubernetes (ACK) コンソールで LoongCollector をインストールします。デフォルトでは、ログは現在の Alibaba Cloud アカウント内の Simple Log Service プロジェクトに送信されます。

  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 アカウントの UID。UID は引用符 ("") で囲んでください。例:"123456789"
    aliUid: ""
    # ネットワークタイプ。有効な値:Internet および Intranet。デフォルト値:Internet。
    net: Internet
    # Alibaba Cloud アカウントまたは RAM ユーザーの AccessKey ID と AccessKey Secret。アカウントまたは RAM ユーザーには AliyunLogFullAccess システム権限ポリシーが必要です。
    accessKeyID: ""
    accessKeySecret: ""
    # カスタムクラスター ID。ID には、大文字、小文字、数字、ハイフン (-) のみを含めることができます。
    clusterID: ""
  3. loongcollector-custom-k8s-package ディレクトリで、次のコマンドを実行して LoongCollector とその依存関係をインストールします:

    bash k8s-custom-install.sh install
  4. インストール完了後、コンポーネントが実行中であることを確認します。

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

    SLS はまた、以下のリソースを自動的に作成します。これらは SLS コンソールで確認できます。

    リソースタイプ

    リソース名

    説明

    プロジェクト

    values.yaml ファイルで指定した projectName の値

    異なるサービスからのログを分離するために使用されるリソース管理ユニットです。

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

    マシングループ

    k8s-group-${cluster_id}

    ログ収集ノードのコレクションです。

    重要

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

ステップ 2:Logstore の作成

Logstore は、ログを保存するために SLS で使用されるストレージユニットです。

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

  2. 左側のナビゲーションウィンドウで、imageLogstores を選択し、+ をクリックして Logstore を作成します:

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

    • Logstore タイプ:特徴量の比較に基づいて、標準ストレージまたはクエリを選択します。

    • 課金モード

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

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

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

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

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

LoongCollector がどのログを収集し、ログ構造をどのように解析し、コンテンツをどのようにフィルタリングするかを定義します。その後、設定をマシングループに適用します。

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

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

    • コンテナの標準出力には、K8s-Standard Output-New を選択します。

      コンテナの標準出力を収集するためのテンプレートには、新旧 2 つのバージョンがあります。新しいバージョンの使用を推奨します。バージョンの比較については、「付録:新旧コンテナ標準出力バージョンの比較」をご参照ください。
    • クラスターのテキストログには、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 オブジェクトなどのログは、しばしば複数行にわたります。デフォルトの収集モードでは、これらのログは複数の不完全なレコードに分割され、コンテキスト情報が失われます。これに対処するには、複数行収集モードを有効にし、各ログエントリの連続した行を 1 つの完全なレコードにマージするための先頭行の正規表現を設定します。

例:

未処理の生ログ

デフォルトモードでは、各行が個別のログとして扱われ、スタックトレースが分断され、コンテキストが失われます。

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

image

image

image

手順: Logtail構成 ページの 設定の処理 エリアで、マルチラインモード を有効にします。

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

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

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

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

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

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

  • 分割失敗の処理方法

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

    • 単一行を保持:一致しないテキストは、元の単一行モードに従って分割され、保持されます。

ユースケース 2:ログの構造化

生ログが非構造化または半構造化テキスト (例:Nginx アクセスログ、アプリケーション出力) の場合、直接のクエリと分析はしばしば非効率です。LoongCollector は、さまざまなデータ解析プラグインを提供し、異なる形式の生ログを自動的に構造化データに変換し、その後の分析、モニタリング、およびアラート機能のための強固な基盤を提供します。

例:

未処理の生ログ

構造化解析後のログ

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 レベルなどの価値の低い、または無関係なログを収集すると、ストレージを浪費し、コストを増加させ、クエリのパフォーマンスを低下させ、セキュリティリスクをもたらす可能性があります。効率的で安全なログ収集のために、詳細なフィルタリングポリシーを実装します。

コンテンツフィルタリング

フィールドのコンテンツに基づいてログをフィルタリングします。たとえば、レベルが WARNING または 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.logapp_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 シナリオ向けであり、K8s シナリオでは推奨されません。

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 つの (.*?))

    ソースを区別するために単一のディメンションが必要です (例:ユーザー名、環境)。

    __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 ラベルのキー。

    • タグキー:新しいタグのキー。

5. 出力設定

デフォルトでは、すべてのログ現在の Logstorelz4 圧縮で送信されます。同じソースからのログを異なる Logstore に配信するには、以下の手順に従います。

複数送信先への動的配信

重要
  • 複数送信先への動的配信は、LoongCollector 3.0.0 以降でのみ利用可能です。この機能は Logtail ではサポートされていません。

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

  • 複数の出力先を設定した後、この収集設定は現在の Logstore の収集設定リストには表示されなくなります。設定を表示、変更、または削除するには、「複数送信先配信設定の管理方法は?」をご参照ください。

手順: Logtail構成 ページの 出力設定 エリアで:

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

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

    • Logstores:対象の Logstore を選択します。

    • 圧縮方法lz4zstd をサポートします。

    • ルート設定:タグフィールドに基づいてログをルーティングします。ルーティング設定に一致するログは、ターゲットの Logstore に送信されます。これを空のままにすると、収集されたすべてのログがターゲットの Logstore に送信されます。

      • タグ名:ルーティングに使用するタグキー。キーを直接入力します (例:__path__)。__tag__: プレフィックスは不要です。タグフィールドは 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. マシングループ識別子の確認:マシングループにカスタム識別子を使用している場合は、指定されたディレクトリに user_defined_id ファイルが存在するか確認してください。ファイルが存在する場合は、その内容がマシングループに設定されたカスタム識別子と一致するか確認してください。

    • Linux:

      # カスタム識別子を設定します。ディレクトリが存在しない場合は、手動で作成してください。
      echo "user-defined-1" > /etc/ilogtail/user_defined_id
    • Windows:C:\LogtailData ディレクトリに、user_defined_id という名前のファイルを作成し、カスタム識別子をファイルに書き込みます。(ディレクトリが存在しない場合は、手動で作成してください。)

  3. ユーザー識別子とマシングループ識別子が正しく設定されている場合は、「LoongCollector (Logtail) マシングループのトラブルシューティング」を参照して、さらなるトラブルシューティングを行ってください。


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

この問題は通常、ネットワーク接続と基本設定は正しいが、ログの内容が解析ルールと一致しない場合に発生します。問題を診断するには、特定のエラーメッセージを表示します:

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

  2. セクションで、エラーログのアラートタイプを表示し、「データ収集の一般的なエラータイプ」を参照して対応するソリューションを見つけます。

次のステップ

  1. ログのクエリと分析

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

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

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

  1. 対象のログファイルに新しいログが生成されていることを確認します。Logtail は新しいログが表示されるまでデータを収集しません。

2. 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 ID に置き換えてください。

  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. kubectl を使用して ACK クラスターに接続します

    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 のハートビートステータスを持つノード数と、コンテナクラスターのワーカーノード数を比較します。その後、結果に基づいて適切なトラブルシューティング手順に従います。

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

      • 自己管理型クラスターの場合、{regionId}{aliuid}{access-key-id}、および {access-key-secret} パラメーターが正しいことを確認します。

        正しくない場合は、helm del --purge alibaba-log-controller コマンドを実行してインストールパッケージを削除し、再インストールします。

    • ハートビートステータスが OK のノード数が、クラスターのワーカーノード数より少ない場合。

      • YAML ファイルを使用して DaemonSet が手動でデプロイされたかどうかを確認します。

        1. 次のコマンドを実行します。結果が返された場合、以前に YAML ファイルを使用して 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. 収集フィルターの確認

SLS コンソールで、Logtail 収集設定を確認します。Logtail 設定の IncludeLabelExcludeLabelIncludeEnv、および ExcludeEnv の設定が収集要件を満たしていることを確認します。

  • この文脈での「ラベル」は、Docker の inspect 出力からのコンテナラベルを指し、Kubernetes ラベルではありません。

  • フィルターをテストするには、一時的に IncludeLabelExcludeLabelIncludeEnv、および ExcludeEnv の設定を削除し、ログが収集されるか確認します。収集される場合、フィルター設定が正しくありません。

よくある質問

複数送信先配信設定の管理

複数送信先配信設定は複数の Logstore に適用されるため、プロジェクトレベルの管理ページから管理します:

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

  2. プロジェクトページで、左側のナビゲーションウィンドウで imageリソースグループ > 設定の管理 をクリックします。

    説明

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

ACK ログをクロスアカウントのプロジェクトに送信する

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

シナリオの説明:組織、権限、またはモニタリングの目的で、別のアカウントの SLS プロジェクトにログデータを収集する必要がある場合は、LoongCollector (Logtail) を手動でインストールしてクロスアカウント収集を有効にします。

手順:LoongCollector を手動でインストールするには、以下の手順に従います。Logtail のインストール方法については、「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 アカウントの UID。UID は引用符 ("") で囲んでください。例:"123456789"
    aliUid: ""
    # ネットワークタイプ。有効な値:Internet および Intranet。デフォルト値:Internet。
    net: Internet
    # Alibaba Cloud アカウントまたは RAM ユーザーの AccessKey ID と AccessKey Secret。アカウントまたは RAM ユーザーには AliyunLogFullAccess システム権限ポリシーが必要です。
    accessKeyID: ""
    accessKeySecret: ""
    # カスタムクラスター ID。ID には、大文字、小文字、数字、ハイフン (-) のみを含めることができます。
    clusterID: ""
  3. loongcollector-custom-k8s-package ディレクトリで、次のコマンドを実行して LoongCollector とその依存関係をインストールします:

    bash k8s-custom-install.sh install
  4. インストール完了後、コンポーネントが実行中であることを確認します。

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

    SLS はまた、以下のリソースを自動的に作成します。これらは SLS コンソールで確認できます。

    リソースタイプ

    リソース名

    説明

    プロジェクト

    values.yaml ファイルで指定した projectName の値

    異なるサービスからのログを分離するために使用されるリソース管理ユニットです。

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

    マシングループ

    k8s-group-${cluster_id}

    ログ収集ノードのコレクションです。

    重要

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

同じソースに複数の設定を使用する

デフォルトでは、データの重複を防ぐため、SLS は各ソースからログを収集するために 1 つの収集設定のみを許可します:

  • テキストログファイルは、1 つの Logtail 収集設定にのみ一致できます。

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

    • 標準出力テンプレートの新しいバージョンを使用する場合、デフォルトでは stdout は 1 つの標準出力収集設定によってのみ収集できます。

    • 標準出力テンプレートの古いバージョンを使用する場合、追加の設定は不要で、デフォルトで複数の収集がサポートされます。

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

  2. 左側のナビゲーションウィンドウで、image[Logstore] を選択し、対象の Logstore を見つけます。

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

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

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

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

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

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

問題: 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 は loongcollector (logtail-ds) のアンインストールを許可しません。

ソリューション: 以下の手順に従って依存関係を削除し、コンポーネントをアンインストールします:

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

  2. クラスターリストで、対象クラスターの名前をクリックして詳細ページに移動します。

  3. 左側のナビゲーションウィンドウで、アドオン管理 をクリックします。

  4. アドオンのリストで terway-eniip コンポーネントを検索し、ログを閉じる をクリックします。

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

  6. 設定が有効になった後、再度 loongcollector (logtail-ds) コンポーネントのアンインストールを試みます。

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

原因: ログの切り捨ては通常、ログファイルの最後の改行が欠落している場合や、例外スタックのような複数行のログエントリが完全に書き込まれていない場合に発生します。コレクターはログエントリが完了したかどうかを判断できないため、最後のログエントリが分割されたり遅延したりすることがあります。この処理方法は、ご利用の LoongCollector (Logtail) のバージョンによって異なります:

  • 1.8 より前のバージョン:
    ログの最後の行に改行がない場合、または複数行のログブロックが不完全な場合、コレクターは次の書き込み操作を待って出力をトリガーします。これにより、新しいログが書き込まれるまで最後のログエントリが大幅に遅延する可能性があります。



  • バージョン 1.8 以降:
    これらのバージョンでは、ログが滞留するのを防ぐためのタイムアウトフラッシュメカニズムが導入されています。不完全なログ行が検出されると、システムはタイマーを開始します。タイムアウト期間が経過すると、現在のコンテンツが自動的に送信され、ログが最終的に収集されることが保証されます。



    • デフォルトのタイムアウト:60 秒 (ほとんどのシナリオでデータ整合性を保証)

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

ソリューション:

待機時間を延長して、収集される前に完全なログエントリが書き込まれるようにすることができます:

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

  2. 左側のナビゲーションウィンドウで、image[Logstore] を選択し、対象の Logstore を見つけます。

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

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

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

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

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

      • 単位:秒。

      • 推奨値:≥ 1 秒。0 に設定するとログの切り捨てや部分的なデータ損失が発生する可能性があるため、推奨されません。

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

LoongCollector ネットワークフェイルオーバーと回復

LoongCollector (Logtail) が内部ネットワーク接続の問題 (障害やタイムアウトなど) を検出した場合、自動的にパブリックネットワークに切り替わります。このフェイルオーバーメカニズムにより、信頼性の高いログ収集が保証され、バックログやデータ損失が防止されます。

  • LoongCollector:ネットワークが回復した後、自動的に内部ネットワークに切り替わります。

  • Logtail:自動的には切り替わりません。内部ネットワーク通信を復元するには、再起動する必要があります。

付録:ネイティブプロセッサ

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

  1. 左側のナビゲーションウィンドウで、image[Logstore] を選択し、対象の 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; ×64) 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構成 ページの 設定の処理 エリアで 処理プラグインの追加 をクリックし、ネイティブ処理プラグイン > 正規表現解析 を選択します:

  • 正規表現:ログエントリに一致します。自動的に生成するか、手動で入力することができます。

    • 正規表現を自動的に生成するには:

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

      • ログサンプル ボックスで、抽出するコンテンツをハイライトします。

      • [生成] をクリックします。

        image

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

    式を設定した後、[検証] をクリックして、ログサンプルを正しく解析できるかテストします。

  • ログ抽出フィールド:抽出されたコンテンツ (値) に名前 (キー) を割り当てます。

  • その他のパラメーターについては、「シナリオ 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:構造化ログ」の共通設定パラメーターの説明をご参照ください。


ネストされた JSON 解析

このプロセッサは、ネストされた JSON オブジェクトをキーと値のペアに展開します。展開は JSON 展開深度 設定で制御します。

例:

生ログ

結果 (深度:0)

結果 (深度: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"}}}}

手順: Logtail構成 ページの 設定の処理 セクションで 処理プラグインの追加 をクリックし、拡張処理プラグイン > JSON フィールドの拡張 を選択します:

  • 元のフィールド:展開する元のフィールドの名前。例:content

  • JSON 拡張度:JSON オブジェクト内で展開するレベル数。0 はすべてのレベルを展開 (デフォルト)、1 はトップレベルのみを展開、などとなります。

  • JSON 拡張連結文字:ネストされたオブジェクトのキーを結合するために使用される文字。デフォルトはアンダースコア (_) です。

  • JSON のフィールドプレフィックス拡張:展開された各キーの名前に追加するプレフィックス。

  • 配列を展開する:このオプションを有効にすると、配列がインデックス付きのキーと値のペアに展開されます。

    例:{"k":["a","b"]}{"k[0]":"a","k[1]":"b"} に展開されます。

    展開されたフィールドの名前を変更する (例:prefix_s_key_k1 から new_field_name へ) には、このプロセッサの後に フィールドの名前変更 プロセッサを追加します。
  • その他のパラメーターについては、「シナリオ 2:構造化ログ」の共通設定パラメーターの説明をご参照ください。


JSON 配列解析

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

例:

生ログ

解析結果

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

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

例: ログフィールド content から、JSON 配列の要素を抽出し、結果をそれぞれ新しいフィールド json1json2 に保存します。

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

Apache ログ解析

このプロセッサは、Apache の LogFormat ディレクティブに基づいて 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"}

image

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

  • 元のフィールド:解析する時間文字列を含むソースフィールド。

  • 時間形式:ログ内の時間文字列に対応する時間フォーマット

  • タイムゾーン:ログの時間フィールドのタイムゾーン。指定しない場合、LoongCollector (Logtail) を実行しているマシンのタイムゾーンがデフォルトになります。

付録:正規表現の制限 (コンテナフィルタリング)

コンテナフィルタリングの正規表現は、Go RE2 エンジンを使用します。PCRE などの他のエンジンと比較して、RE2 エンジンにはいくつかの構文上の制限があります。正規表現を作成する際には、以下の点に注意してください:

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% 削減されます。

    • O&M の一貫性の向上

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

      • 統一されたメタデータ管理:コンテナメタデータフィールドの命名とタグログの保存場所は、ファイル収集シナリオと統一されています。コンシューマー側は 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 パイプライン設定の作成」をご参照ください。

入力パラメーター

パラメーター

説明

Logtail デプロイモード

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

Sidecar:各 Pod は 1 つの LoongCollector コンテナを実行し、その Pod 内のすべてのコンテナからログを収集します。異なる Pod のログ収集は分離されます。

ファイルパスタイプ

コンテナ内のパス または ホストパス の設定をサポートします。

  • コンテナ内のパス:コンテナ内からテキストログファイルを収集する場合にこのオプションを選択します。

  • ホストパス:クラスターノードからサービスログを収集する場合にこのオプションを選択します。

ファイルパス

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

  • 対象ホストが Linux システムの場合、ログパスはフォワードスラッシュ (/) で始まる必要があります。例:/apsara/nuwa/**/app.Log

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

ディレクトリ名とファイル名の両方で、完全一致とワイルドカードがサポートされています。ファイル名のルールに関する詳細については、「ワイルドカードマッチング」をご参照ください。ログパスでサポートされているワイルドカードは、アスタリスク (*) と疑問符 (?) のみです。

ログ収集では、複数レベルのディレクトリマッチングが使用されます。これは、Logtail が指定されたディレクトリとそのすべてのサブディレクトリで、基準に一致するすべてのファイルを見つけることを意味します。例:

  • /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 名に一致する正規表現を指定します。一致した Pod 内のコンテナからログが収集されます。たとえば、このパラメーターを ^(nginx-log-demo.*)$ に設定すると、名前が nginx-log-demo で始まる Pod 内のすべてのコンテナが一致します。

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

名前空間に一致する正規表現を指定します。一致した名前空間内のコンテナからログが収集されます。たとえば、このパラメーターを ^(default|nginx)$ に設定すると、nginxdefault 名前空間内のすべてのコンテナが一致します。

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

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

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

ログを収集するコンテナを指定します。デフォルトでは空で、すべてのコンテナの標準出力が収集されます。コンテナラベルホワイトリストを設定するには、LabelKey が必須で、LabelValue はオプションです。

  • LabelValue が空の場合、LabelKey ラベルを持つすべてのコンテナが一致します。

  • LabelValue が空でない場合、LabelKey=LabelValue と完全に一致するラベルを持つコンテナのみが一致します。

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

複数のホワイトリストエントリは論理 OR 関係を持ちます。コンテナのラベルがホワイトリストエントリのいずれかに一致する場合、コンテナは一致します。

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

ログ収集からコンテナを除外します。デフォルトでは空で、どのコンテナも除外されません。コンテナラベルブラックリストを設定するには、LabelKey が必須で、LabelValue はオプションです。

  • LabelValue が空の場合、LabelKey ラベルを持つすべてのコンテナが除外されます。

  • LabelValue が空でない場合、LabelKey=LabelValue と完全に一致するラベルを持つコンテナのみが除外されます。

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

複数のブラックリストエントリは論理 OR 関係を持ちます。コンテナのラベルがブラックリストエントリのいずれかに一致する場合、コンテナは除外されます。

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

ログを収集するコンテナを指定します。デフォルトでは空で、すべてのコンテナの標準出力が収集されます。環境変数ホワイトリストを設定するには、EnvKey が必須で、EnvValue はオプションです。

  • EnvValue が空の場合、EnvKey 環境変数を持つすべてのコンテナが一致します。

  • EnvValue が空でない場合、EnvKey=EnvValue と完全に一致する環境変数を持つコンテナのみが一致します。

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

複数のホワイトリストエントリは論理 OR 関係を持ちます。コンテナの環境変数が指定されたキーと値のペアのいずれかに一致する場合、コンテナは一致します。

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

ログ収集からコンテナを除外します。デフォルトでは空で、どのコンテナも除外されません。環境変数ブラックリストを設定するには、EnvKey が必須で、EnvValue はオプションです。

  • EnvValue が空の場合、EnvKey 環境変数を持つすべてのコンテナからのログが除外されます。

  • EnvValue が空でない場合、EnvKey=EnvValue と完全に一致する環境変数を持つコンテナのみが除外されます。

    デフォルトでは、EnvValue は文字列マッチングに使用されます。つまり、EnvValue の値が環境変数の値と完全に一致する場合にのみマッチが成功します。値が ^ で始まり $ で終わる場合、それは正規表現として扱われます。たとえば、EnvKeyNGINX_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 ラベルの値と完全に一致する場合にのみマッチが発生します。値が ^ で始まり $ で終わる場合、それは正規表現として扱われます。たとえば、LabelKeyapp に、LabelValue^(test1|test2)$ に設定すると、Kubernetes ラベル app:test1 または app:test2 を持つコンテナが一致します。

複数のホワイトリストエントリは論理 OR 関係を持ちます。コンテナの Kubernetes ラベルがホワイトリストエントリのいずれかに一致する場合、コンテナは一致します。

説明
  • Deployment などの Kubernetes リソースコントローラーのラベルを実行時に変更しても、実行中の Pod は再起動されません。そのため、Pod は変更を検出できず、マッチングルールが失敗する可能性があります。Kubernetes ラベルのホワイトリストとブラックリストを設定する際は、Pod 上の Kubernetes ラベルを使用してください。Kubernetes ラベルの詳細については、「ラベルとセレクター」をご参照ください。

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

Kubernetes ラベルブラックリストを使用して、ログ収集からコンテナを除外します。Kubernetes ラベルブラックリストを設定するには、LabelKey が必須で、LabelValue はオプションです。

  • LabelValue が空の場合、LabelKey Kubernetes ラベルを持つすべてのコンテナが除外されます。

  • LabelValue が空でない場合、LabelKey=LabelValue と完全に一致する Kubernetes ラベルを持つコンテナのみが除外されます。

    デフォルトでは、LabelValue は完全な文字列マッチを実行します。LabelValue が Kubernetes ラベルの値と完全に一致する場合にのみマッチが見つかります。値が ^ で始まり $ で終わる場合、それは正規表現として扱われます。たとえば、LabelKeyapp に、LabelValue^(test1|test2)$ に設定すると、Kubernetes ラベル app:test1 または app:test2 を持つコンテナが一致します。

複数のブラックリストエントリは論理 OR 関係を持ちます。コンテナの Kubernetes ラベルがブラックリストエントリのいずれかに一致する場合、コンテナは除外されます。

説明
  • Deployment などの Kubernetes リソースコントローラーのラベルを実行時に変更しても、実行中の Pod は再起動されません。そのため、Pod は変更を検出できず、マッチングルールが失敗する可能性があります。Kubernetes ラベルのホワイトリストとブラックリストを設定する際は、Pod 上の Kubernetes ラベルを使用してください。Kubernetes ラベルの詳細については、「ラベルとセレクター」をご参照ください。

ログタグエンリッチメント

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

環境変数関連

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

Pod Label 関連

Kubernetes Pod 拡張フィールドを設定すると、Log Service は Kubernetes Pod 関連のフィールドをログに追加します。たとえば、Pod タグ名app に、tag 名k8s_pod_app に設定すると、ラベル app=serviceA を持つ Pod のログにフィールド __tag__:__k8s_pod_app__: serviceA が追加されます。

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

ログファイルのエンコード形式を指定します。

初回収集サイズ

設定が初めて有効になると、このパラメーターはファイルの末尾から測定した収集開始位置を指定します。デフォルト値は 1024 KB です。

  • 初回収集時、ファイルが 1024 KB より小さい場合、収集はファイルの先頭から開始されます。

  • 初回収集時、ファイルが 1024 KB より大きい場合、収集はファイルの末尾から 1024 KB の位置から開始されます。

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

収集ブラックリスト

ブラックリストの収集 スイッチを有効にすると、収集中に指定したディレクトリやファイルを無視するブラックリストを設定できます。ディレクトリやファイル名は、完全一致またはワイルドカードを使用して指定できます。サポートされているワイルドカードは、アスタリスク (*) と疑問符 (?) のみです。

重要
  • ファイルパス でワイルドカードを使用し、結果として得られるパスの一部を除外したい場合は、ブラックリストの収集 に対応する完全なパスを入力して、ブラックリスト設定が有効になるようにする必要があります。

    たとえば、ファイルパス/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 ディレクトリ内のファイルは収集されます。

ファイルの複数回収集を許可

デフォルトでは、ログファイルは 1 つの Logtail 構成にのみ一致できます。ファイル内のログを複数回収集する必要がある場合は、ファイルを複数回収集できるようにする スイッチをオンにします。

詳細パラメーター

ファイル入力プラグインに関連するオプションの詳細パラメーター。詳細については、「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:½0)

    Log Service が上記のログコンテンツの分割に失敗した場合:

    • Discard:このログセグメントを破棄します。

    • 単一行を保持:各テキスト行を個別のログエントリとして保持し、合計で 4 つのログエントリになります。

処理モード

処理プラグインの組み合わせ。これには ネイティブ処理プラグイン拡張処理プラグイン が含まれます。プロセッサの詳細については、「ネイティブプロセッサと拡張プロセッサの使用」をご参照ください。

重要

プロセッサの使用制限については、コンソールのプロンプトをご参照ください。

  • Logtail 2.0 以降:

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

    • ネイティブプロセッサと拡張プロセッサを組み合わせることができますが、すべての拡張プロセッサはすべてのネイティブプロセッサの後に配置する必要があります。

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

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

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

      • 最初のプロセッサは、正規表現解析、区切り文字ベースの解析、JSON 解析、Nginx パターン解析、Apache パターン解析、または IIS パターン解析のプロセッサでなければなりません。

      • 最初の解析プロセッサの後、最大で 1 つの時間解析プロセッサ、1 つのフィルタリングプロセッサ、および複数のデータマスキングプロセッサを追加できます。

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

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

        image

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

        image

      • 成功時は、解析済みログをアップロードし、生ログフィールドを追加します。失敗時は、生ログをアップロードします。

        たとえば、元のログ "content": "{"request_method":"GET", "request_time":"200"}" が正常に解析された場合、元のフィールドを追加すると、解析済みログに新しいフィールドが追加されます。フィールド名はリネームされた元のフィールド (空の場合は、デフォルトで元のフィールド名になります) で、フィールド値は元のログ {"request_method":"GET", "request_time":"200"} です。

        image