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

Container Service for Kubernetes:コンソールを使用して Kubernetes クラスターからコンテナログ (標準出力/標準エラーまたはファイル) を収集

最終更新日:Mar 12, 2026

Kubernetes 環境では、コンテナログが散在し、一元管理が困難です。これにより、トラブルシューティングの効率が低下し、運用コストが高くなります。LoongCollector を DaemonSet としてデプロイし、Simple Log Service コンソールで収集設定を作成することで、ログ収集と構造化処理を統一します。これにより、ログ検索、問題診断、および可観測性分析の効率が向上します。

適用範囲

  • ランタイム環境:

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

    • Kubernetes のバージョンは 1.10.0 以降である必要があり、Mount propagation: HostToContainer をサポートしている必要があります。

    • コンテナランタイム (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 モードでデプロイし、各クラスターノードで 1 つのコレクターコンテナを実行して、そのノード上のすべてのコンテナからログを収集します。

    Sidecar モードについては、「Kubernetes Pod のテキストログを収集 (Sidecar モード)」をご参照ください。
  2. Logstore の作成収集したログを保存するために使用します。

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

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

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

      • 複数行ログ:単一のログエントリが複数行にまたがる場合 (Java の例外スタックや Python のトレースバックなど) に適用されます。行頭の正規表現を使用して、各ログエントリの開始を識別します。

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

    3. ログフィルタリング:収集ブラックリストとコンテンツフィルターを設定して関連ログを選択し、冗長なデータ転送とストレージを削減します。

    4. ログの分類:トピックとタグ付けを使用して、異なるアプリケーション、コンテナ、またはパスからのログを区別します。

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

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

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

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

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

説明

LoongCollector (Logtail) の実行中にホストマシンの時刻が変更されると、ログが重複したり失われたりする可能性があります。

ACK クラスター

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

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

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

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

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

    説明

    クラスターを作成する際に、コンポーネント設定 を選択し、Log Service の使用 にチェックを入れることができます。その後、プロジェクトの作成 または プロジェクトの選択 を選択できます。

    インストール後、Simple Log Service は現在のアカウント下に以下のリソースを自動的に作成します。これらは Simple Log Service コンソールで確認できます。

    リソースタイプ

    リソース名

    目的

    プロジェクト

    k8s-log-${cluster_id}

    異なるビジネスのログを分離するリソース管理ユニット。

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

    マシングループ

    k8s-group-${cluster_id}

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

    Logstore

    config-operation-log

    重要

    この Logstore は削除しないでください。

    loongcollector-operator コンポーネントからのログを保存します。標準の Logstore と同じ課金方法を使用します。詳細については、「取り込みデータ量課金方式の課金項目」をご参照ください。この Logstore に収集設定を作成しないことを推奨します。

自己管理型クラスター

  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。引用符で囲んでください (例: "123456789")
    aliUid: ""
    # ネットワークタイプ。有効な値: Internet (パブリックネットワーク) と Intranet (プライベートネットワーク)。デフォルト値: Internet。
    net: Internet
    # Alibaba Cloud アカウントまたは RAM ユーザーの AccessKey ID と AccessKey Secret。アカウントには AliyunLogFullAccess システム権限ポリシーが必要です。
    accessKeyID: ""
    accessKeySecret: ""
    # カスタムクラスター 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

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

    リソースタイプ

    リソース名

    目的

    プロジェクト

    values.yaml ファイルの projectName の値

    異なるビジネスのログを分離するリソース管理ユニット。

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

    マシングループ

    k8s-group-${cluster_id}

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

    Logstore

    config-operation-log

    重要

    この Logstore は削除しないでください。

    loongcollector-operator コンポーネントからのログを保存します。標準の Logstore と同じ課金方法を使用します。詳細については、「取り込みデータ量課金方式の課金項目」をご参照ください。この Logstore に収集設定を作成しないことを推奨します。

ステップ 2:Logstore の作成

Logstore は、収集したログを保存するための Simple Log Service 内のストレージユニットです。

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

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

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

    • Logstore タイプ:ニーズに応じて標準またはクエリを選択します。

    • 課金モード

      • 使用機能課金 (変更できません):ストレージ、インデックス、読み書き操作などの個々のリソースに基づいて課金されます。小規模なシナリオや、機能の使用量が不確かな場合に適しています。

      • 書き込みデータ量課金:取り込まれた生データ量のみに基づいて課金されます。30 日間の無料ストレージと、無料のデータ変換および配信機能が含まれます。ストレージ期間が 30 日に近いビジネスシナリオや、複雑なデータ処理パイプラインに適しています。

    • データ保持時間:ログを保持する日数を設定します (1~3650 日、3650 は永久保持を意味します)。デフォルトは 30 日です。

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

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

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

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

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

    • コンテナ標準出力:[K8s-Stdout-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~1000。

    この値を 0 に設定し、ファイルを含むディレクトリへのパスを設定することを推奨します。

2. ログの処理と構造化

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

Logtail構成 ページで、設定の処理 セクションに移動します。ログサンプルの追加 をクリックし、収集したいログコンテンツを入力します。システムはこのサンプルを使用してログ形式を検出し、正規表現と解析ルールの生成を支援し、設定の複雑さを軽減します。

シナリオ 1:複数行ログの処理 (Java スタックトレースログなど)

Java の例外スタックトレースや JSON などのログは、しばしば複数行にわたります。デフォルトの収集モードでは、これらは複数の不完全なレコードに分割され、コンテキスト情報が失われます。複数行収集モードを有効にし、行頭の正規表現を設定して、同じログエントリの連続する行を 1 つの完全なログにマージします。

例:

処理なしの生ログ

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

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

image

image

image

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

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

    • カスタム:生ログの形式が異なる場合に使用します。行先頭の正規表現 を設定して、各ログエントリの最初の行を識別します。

      • 行先頭の正規表現:行全体に一致する正規表現を自動生成または手動で入力できます。例えば、前述のシナリオでは、一致する正規表現は \[\d+-\d+-\w+:\d+:\d+,\d+]\s\[\w+]\s.* です。

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

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

    • マルチライン JSON:すべての生ログが標準の JSON 形式を使用する場合に選択します。Simple Log Service は、個々の JSON ログエントリ内の改行を自動的に処理します。

  • 分割失敗の処理方法

    • Discard:行頭ルールに一致しないテキストを破棄します。

    • 単一行を保持:元の単一行モードを使用して、一致しないテキストを分割して保持します。

シナリオ 2:構造化ログ

生ログが NGINX のアクセスログやアプリケーションの出力ログのような非構造化または半構造化テキストである場合、直接クエリや分析を行うのは非効率です。Simple Log Service は、さまざまな形式の生ログを自動的に構造化データに変換する複数の解析プラグインを提供し、その後の分析、モニタリング、アラート機能の強固な基盤を築きます。

例:

処理なしの生ログ

構造化解析されたログ

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 : Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/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 レベルのログなど、価値の低いまたは無関係なログを大量に収集することは、ストレージリソースを浪費し、コストを増加させ、クエリ効率を低下させ、データ侵害のリスクをもたらします。詳細なフィルタリングポリシーを使用して、効率的で安全なログ収集を実現します。

コンテンツベースのフィルタリングでコストを削減

フィールド値に基づいてログをフィルタリングします。例えば、level フィールドが 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/ 配下の第 2 レベルにある "dir" という名前のサブディレクトリ配下のすべてのファイルを無視します。例えば、/home/admin/a/dir 配下のファイルは無視されますが、/home/admin/a/b/dir 配下のファイルは収集されます。

コンテナフィルタリング

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

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

複数の条件は AND 関係を使用します。すべての正規表現マッチングは Go の RE2 エンジンを使用しており、PCRE などのエンジンよりも機能が少ないです。正規表現を作成する際は、「付録:正規表現の使用制限 (コンテナフィルタリング)」のガイドラインに従ってください。
  • 環境変数ブラックリスト/ホワイトリスト:収集するコンテナの環境変数条件を指定します。

  • Kubernetes Pod ラベルブラックリスト/ホワイトリスト:収集するコンテナを含む Pod のラベル条件を指定します。

  • Kubernetes Pod 名の正規表現一致:Pod 名で収集するコンテナを指定します。

  • Kubernetes 名前空間の正規表現一致:名前空間名で収集するコンテナを指定します。

  • Kubernetes コンテナ名の正規表現一致:コンテナ名で収集するコンテナを指定します。

  • コンテナラベルブラックリスト/ホワイトリスト:ラベルが指定された条件を満たすコンテナを収集します。Docker シナリオで使用します。Kubernetes シナリオでは使用しないでください。

4. ログの分類

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

ログトピックの設定

複数のアプリケーションやインスタンスが、/apps/app-A/run.log/apps/app-B/run.log のように、同じフォーマットだが異なるパスでログを生成する場合、収集されたログは区別できなくなります。この場合、マシングループ、カスタム名、またはファイルパスの抽出に基づいてトピックを生成し、ビジネスやパスソースによってログを柔軟に区別します。

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

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

  • カスタム:フォーマットは customized://<カスタムトピック名> です。例: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}__ を生成。ここで {i} はキャプチャグループ番号

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

    /logs/userA/svcA/app.log

    __tag__:__topic_1__userA.

    __tag__:__topic_2__svcA

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

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

    タグフィールド __tag__:{name} を生成

    \/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. 出力設定

デフォルトでは、すべてのログlz4 圧縮を使用して現在の Logstore に送信されます。同じソースからのログを異なる 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__、Kubernetes 収集用の _pod_name__container_name_

      • タグ値:タグフィールドの値がこの値に一致するログが、ターゲットの Logstore に送信されます。

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

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

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

  • システムはデフォルトで フルテキストインデックス を有効にします。これにより、生ログコンテンツのキーワード検索がサポートされます。

  • フィールドによる完全一致検索を実行するには、ページで [データプレビュー] がロードされた後、自動インデックスの生成 をクリックします。Simple 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. ユーザー ID の確認:サーバータイプが ECS でない場合、または ECS インスタンスとプロジェクトが異なる Alibaba Cloud アカウントに属している場合は、指定されたディレクトリに正しいユーザー ID が存在するかどうかを確認します。

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

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

    指定されたパスにプロジェクトの Alibaba Cloud アカウント ID で名前が付けられたファイルが存在する場合、ユーザー 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. ユーザー ID とマシングループ ID が正しく設定されている場合は、「LoongCollector (Logtail) マシングループの問題のトラブルシューティング」で詳細をご確認ください。


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

トラブルシューティング:この問題は、ネットワーク接続と基本設定は正常であることを示しています。問題はログコンテンツ解析ルールの不一致によって引き起こされます。特定のエラーメッセージを表示して、問題の原因を特定します:

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

  2. セクションで、エラーログのアラームメトリックを表示し、「データ収集中の一般的なエラー」の情報に基づいて解決策を見つけます。

次のステップ

  1. ログのクエリと分析

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

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

コンテナログデータが見つからない場合のトラブルシューティング

  1. 新しいログエントリを確認します。Logtail をログ収集用に設定した後、新しいログエントリが追加されない限り、Logtail はログファイルを収集しません。

2. Logtail の運用ログを確認する

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 です。実際の 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. クラスターの 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 のハートビートステータスを持つノードの数が、クラスター内のワーカーノードの数より少ない場合。

      • 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. 収集設定のフィルター条件を確認する

Simple Log Service コンソールで、Logtail 収集設定を確認します。特に、IncludeLabelExcludeLabelIncludeEnvExcludeEnv の設定に注意してください。これらが収集要件と一致していることを確認します。

  • ここでのラベルは、Kubernetes ラベルではなく、コンテナラベル (docker inspect から) を指します。

  • 一時的に IncludeLabelExcludeLabelIncludeEnvExcludeEnv の設定を削除します。その後、ログが正常に収集されるか確認します。削除後にログが表示される場合は、これらの設定のいずれかが誤って設定されています。

よくある質問

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

複数送信先配信設定は複数の Logstore に関連付けられているため、これらの設定はプロジェクトレベルの管理ページで管理します:

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

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

    説明

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

ACK クラスターのログを別の Alibaba Cloud アカウントのプロジェクトに転送する

ACK クラスターに Simple Log Service の LoongCollector (Logtail) コンポーネントを手動でインストールします。その後、宛先アカウントのルートアカウント ID またはアクセス認証情報 (AccessKey) を設定します。これにより、コンテナログが別の Alibaba Cloud アカウントの Simple Log Service プロジェクトに送信されます。

シナリオ:組織構造、権限の隔離、または統一されたモニタリング要件により、ACK クラスターからのログデータを別の Alibaba Cloud アカウントの独立した Simple Log Service プロジェクトに収集する必要がある場合、クロスアカウント設定のために 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 アカウント ID。引用符で囲んでください (例: "123456789")
    aliUid: ""
    # ネットワークタイプ。有効な値: Internet (パブリックネットワーク) と Intranet (プライベートネットワーク)。デフォルト値: Internet。
    net: Internet
    # Alibaba Cloud アカウントまたは RAM ユーザーの AccessKey ID と AccessKey Secret。アカウントには AliyunLogFullAccess システム権限ポリシーが必要です。
    accessKeyID: ""
    accessKeySecret: ""
    # カスタムクラスター 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

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

    リソースタイプ

    リソース名

    目的

    プロジェクト

    values.yaml ファイルの projectName の値

    異なるビジネスのログを分離するリソース管理ユニット。

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

    マシングループ

    k8s-group-${cluster_id}

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

    Logstore

    config-operation-log

    重要

    この Logstore は削除しないでください。

    loongcollector-operator コンポーネントからのログを保存します。標準の Logstore と同じ課金方法を使用します。詳細については、「取り込みデータ量課金方式の課金項目」をご参照ください。この Logstore に収集設定を作成しないことを推奨します。

複数の収集設定で同じログファイルまたはコンテナ標準出力を収集できるようにする

デフォルトでは、データの重複を防ぐため、Simple Log Service は各ログソースが 1 つの収集設定によってのみ収集されるように制限しています:

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

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

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

    • 古い標準出力テンプレートを使用する場合、追加の設定は不要です。デフォルトで複数のコピーを収集することをサポートしています。

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

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

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

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

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

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

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

ACK で loongcollector (logtail-ds) コンポーネントをアンインストールする際の依存関係エラー

問題の説明: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 はこの依存関係を削除する前に loongcollector (logtail-ds) を直接アンインストールすることを許可しません。

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

  1. Container Service for Kubernetes コンソールにログインします。

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

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

  4. コンポーネントリストで、terway-eniip コンポーネントを検索して見つけます。ログを閉じる をクリックします。

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

  6. 設定が有効になった後、loongcollector (logtail-ds) コンポーネントを再度アンインストールしてみてください。

最後のログセグメントが長い遅延で報告され、時々切り捨てられるのはなぜですか?

原因分析:ログの切り捨ては通常、ログファイルの末尾に改行がない場合や、複数行のログ (例外スタックなど) が完全に書き込まれていない場合に発生します。データコレクターはログが終了したかどうかを判断できないため、最後のコンテンツセグメントが途中でチャンクされたり、遅れて報告されたりする可能性があります。LoongCollector (Logtail) のバージョンによって処理メカニズムが異なります:

  • 1.8 より前のバージョン:
    最後のログ行に改行 (キャリッジリターン) がない場合や、複数行のログセグメントが不完全な場合、データコレクターは次の書き込みを待って出力をトリガーします。これにより、新しいログが書き込まれるまで最後のログエントリが長時間送信されないことがあります。







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







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

    • 必要に応じてこの値を調整してください。ただし、0 に設定しないでください。そうしないと、ログが切り捨てられたり、一部のコンテンツが失われたりする可能性があります。

ソリューション:

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

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

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

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

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

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

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

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

      • 単位:秒。

      • 推奨値:≥1 秒。0 に設定しないでください。そうしないと、ログが切り捨てられたり、一部のコンテンツが失われたりする可能性があります。

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

LoongCollector (Logtail) が実行中にプライベートネットワークドメイン名からパブリックネットワークに切り替わるのはなぜですか?自動的に元に戻りますか?

LoongCollector (Logtail) の実行中に、プライベートネットワークドメイン名の通信に異常 (ネットワークの利用不可や接続タイムアウトなど) が検出された場合、システムは自動的にパブリックネットワークドメイン名に切り替えてデータを送信します。これにより、ログ収集の継続性と信頼性が確保され、ログの蓄積や損失が防止されます。

  • LoongCollector:プライベートネットワークが回復すると、自動的にプライベートネットワークに戻ります。

  • Logtail:自動的には戻りません。プライベートネットワーク通信を復元するには、手動で再起動する必要があります。

付録:ネイティブプラグインの詳細

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

  1. 左側のナビゲーションウィンドウで、image[Logstores] を選択し、対象の 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 ログを構造化し、キーと値のペアに解析します。

例:

処理なしの生ログ

標準 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 ログをキーと値のペアに解析します。

例:

処理なしの生ログ

展開深度: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 展開中のフィールド名のコネクタ。デフォルトはアンダースコア (_)。

  • JSON のフィールドプレフィックス拡張:JSON 展開後のフィールド名のプレフィックスを指定します。

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

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

    展開されたフィールドの名前を変更する (例えば、prefix_s_key_k1 を new_field_name に変更する) には、後で フィールドの名前変更 プラグインを追加してマッピングを完了します。
  • その他のパラメーターについては、「シナリオ 2:構造化ログ」の一般的な設定パラメーターの説明をご参照ください。


JSON 配列解析

json_extract 関数を使用して、JSON 配列から 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 ログ設定ファイルの定義に基づいてログコンテンツを構造化し、複数のキーと値のペアに解析します。

例:

処理なしの生ログ

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 などの他のエンジンと比較していくつかの構文制限があります。正規表現を作成する際には、次の点に注意してください:

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 構成を作成した後に名前を変更することはできません。

ログトピックタイプ

トピックの生成方法を選択します。オプションには、マシングループトピック、ファイルパス抽出、カスタムがあります。

高度なパラメーター

グローバル設定に関連するその他のオプションの高度な機能については、「CreateLogtailPipelineConfig」をご参照ください。

入力設定パラメータ

設定項目

説明

Logtail デプロイメントモード

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

Sidecar:各 Pod は 1 つの 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 は現在のディレクトリのみを監視することを意味します。

標準出力

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

標準エラー

標準エラー を有効にして、コンテナの標準エラーを収集します。

複数標準出力収集を許可

デフォルトでは、コンテナの標準出力ログは 1 つの新しい Logtail 標準出力収集設定にのみ一致できます。標準出力を複数の新しい標準出力収集設定で収集する必要がある場合は、ファイルを複数回収集できるようにする スイッチを有効にします。

コンテナメタデータプレビューを有効にする

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

コンテナフィルタリング

  • フィルター条件の説明

重要
  • コンテナラベルは Kubernetes ではなく Docker inspect からのものです。コンテナラベルの取得方法については、「コンテナラベルの取得」をご参照ください。

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

  • Kubernetes シナリオでは、コンテナフィルタリングに Kubernetes レベルの情報 (例えば、K8s ポッド名の正規表現一致K8s 名前空間の正規表現一致K8s コンテナ名の正規表現一致K8s Pod Label のホワイトリスト) を使用します。

  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 コンテナ名の正規表現一致

コンテナ名 (`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` が空の場合、Kubernetes ラベルに `LabelKey` を含むすべてのコンテナが一致します。

  • `LabelValue` が空でない場合、Kubernetes ラベルに `LabelKey=LabelValue` を含むコンテナのみが一致します。

    `LabelValue` はデフォルトで文字列一致を使用します。つまり、`LabelValue` は Kubernetes ラベルの値と完全に一致する必要があります。値が ^ で始まり、$ で終わる場合、正規表現マッチングを使用します。例えば、LabelKeyapp に、LabelValue^(test1|test2)$ に設定すると、Kubernetes ラベルに app:test1 または app:test2 を含むコンテナに一致します。

複数のホワイトリストは OR 関係を使用します。Kubernetes ラベルがいずれかのホワイトリストエントリを満たす場合、そのコンテナは一致します。

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

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

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

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

  • `LabelValue` が空でない場合、Kubernetes ラベルに `LabelKey=LabelValue` を含むコンテナのみが除外されます。

    `LabelValue` はデフォルトで文字列一致を使用します。つまり、`LabelValue` は Kubernetes ラベルの値と完全に一致する必要があります。値が ^ で始まり、$ で終わる場合、正規表現マッチングを使用します。例えば、LabelKeyapp に、LabelValue^(test1|test2)$ に設定すると、Kubernetes ラベルに app:test1 または app:test2 を含むコンテナに一致します。

複数のブラックリストは OR 関係を使用します。Kubernetes ラベルがいずれかのブラックリストエントリを満たす場合、そのコンテナは除外されます。

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

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

環境変数と 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 に設定します。Kubernetes にラベル app=serviceA が含まれている場合、この情報はフィールド __tag__:__k8s_pod_app__: serviceA としてログに追加されます。

ファイルエンコード形式

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

初期収集サイズ

設定が初めて有効になったとき、ファイルの末尾から収集を開始するサイズです。初期収集サイズは 1024 KB に設定されています。

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

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

ここで 最初のコレクションのサイズ を変更できます。値の範囲は 0~10485760 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/ 配下の第 2 レベルの "dir" という名前のサブディレクトリ内のすべてのファイルが収集中に無視されます。例えば、/home/admin/a/dir 配下のファイルは無視されますが、/home/admin/a/b/dir 配下のファイルは収集されます。

複数ファイル収集を許可

デフォルトでは、ログファイルは 1 つの Logtail 設定にのみ一致できます。ファイル内のログを複数回収集する必要がある場合は、ファイルを複数回収集できるようにする スイッチを有効にしてください。

高度なパラメーター

ファイル入力プラグインに関連するその他のオプションの高度な機能については、「CreateLogtailPipelineConfig」をご参照ください。

処理設定パラメータ

設定項目

説明

ログサンプル

収集するログのサンプルを提供します。実際のシナリオからのログを使用してください。ログサンプルはログ処理パラメータの設定を支援し、設定を簡素化します。複数のサンプルを追加できますが、合計長は 1500 文字を超えてはいけません。

[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 解析プラグインのいずれかである必要があります。

      • 2 番目から最後の処理プラグインまで、時間解析プラグイン、フィルタープラグインをそれぞれ最大 1 つ、および複数のマスキングプラグインを含めることができます。

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

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

        image

      • 成功時は解析されたログをアップロードし、失敗時は元のログをアップロード:

        image

      • 成功時は解析されたログをアップロードし、元のログフィールドを追加します。失敗時は元のログをアップロードします。

        例えば、元のログ "content": "{"request_method":"GET", "request_time":"200"}" が正常に解析された場合、元のフィールドを追加すると、解析されたログにフィールドが追加されます。フィールド名は [元のフィールド名の変更] (空の場合は元のフィールド名がデフォルト) で、フィールド値は生ログ {"request_method":"GET", "request_time":"200"} です。

        image