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

Simple Log Service:コンソールを使用したクラスターからのコンテナログ (標準出力およびファイル) の収集

最終更新日:Mar 01, 2026

Kubernetes 環境では、分散したコンテナログの管理は難しく、トラブルシューティングの非効率化や O&M コストの増大につながります。この問題に対処するため、LoongCollector データコレクターを DaemonSet モードでデプロイし、Simple Log Service コンソールで収集設定を作成できます。このアプローチにより、統一されたログ収集と構造化処理が可能になり、ログ検索、問題診断、可観測性分析の効率が向上します。

適用範囲

  • ランタイム環境:

    • 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 クラスター

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

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

  2. ターゲットクラスターの名前をクリックします。

  3. 左側のナビゲーションウィンドウで、[コンポーネント管理] をクリックします。

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

    説明

    クラスターを作成する際に、[コンポーネント設定] ページで [Simple 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 アカウントの UID。引用符で囲んでください (例: "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. 左側のナビゲーションウィンドウで、image[ログストレージ] を選択し、[+] をクリックして Logstore を作成します:

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

    • [Logstore タイプ]:機能比較に基づいて、標準またはクエリを選択します。

    • 課金モード

      • [機能単位の支払い]:ストレージ、インデックス、読み書き操作など、各リソースに対して個別に課金されます。この課金モードは、小規模なシナリオや機能の使用量が不確定なシナリオに適しています。

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

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

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

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

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

  1. image Logstores ページで、ターゲット Logstore 名の左にある image をクリックして展開します。

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

    • コンテナの標準出力の場合、[K8S - Stdout And Stderr - 新バージョン] を選択します。

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

  3. [マシングループの設定] を行い、[次へ] をクリックします:

    • シナリオ: [Kubernetes クラスター] を選択します。

    • デプロイメント方法[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 スタックトレースなど)

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

例:

未処理の生ログ

デフォルトの収集モードでは、各行が個別のログとなり、スタック情報が分断され、コンテキストが失われる

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

image

image

image

手順:[Logtail 設定] ページの [プロセッサー設定] セクションで、[複数行モード] を有効にします:

  • [タイプ][カスタム] または [複数行 JSON] を選択します。

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

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

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

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

    • [複数行 JSON]:すべての生ログが標準の JSON 形式である場合にこのオプションを選択します。Simple Log Service は、単一の JSON ログ内の改行を自動的に処理します。

  • [分割失敗時の処理]

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

    • [単一行を保持]:一致しないテキストは、元の単一行パターンに基づいてチャンク化され、保持されます。

シナリオ 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 : 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 設定] ページの [処理設定] エリアで

[プロセッサーを追加] をクリックし、[ネイティブプロセッサー] > [データフィルタリング] を選択します:

  • [フィールド名]:フィルタリングするログフィールド。

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

ブラックリストによる収集範囲の制御

ブラックリストメカニズムを使用して、指定されたディレクトリやファイルを除外できます。これにより、無関係または機密性の高いログがアップロードされるのを防ぎます。

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

ディレクトリとファイル名の完全一致およびワイルドカード一致がサポートされています。サポートされているワイルドカード文字はアスタリスク (*) とクエスチョンマーク (?) のみです。
  • [ファイルパスブラックリスト]:無視するファイルパス。例:

    • /home/admin/private*.log:収集中に、/home/admin/ ディレクトリ内の private で始まり .log で終わるすべてのファイルが無視されます。

    • /home/admin/private*/*_inner.log:収集中に、/home/admin/ ディレクトリ下の private で始まるディレクトリ内の _inner.log で終わるファイルが無視されます。

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

    • app_inner.log:収集中に、app_inner.log という名前のすべてのファイルが無視されます。

  • [ディレクトリブラックリスト]:ディレクトリパスはスラッシュ (/) で終わることはできません。例:

    • /home/admin/dir1/:ディレクトリブラックリストは有効になりません。

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

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

コンテナフィルタリング

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

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

複数の条件は論理 AND で結合されます。すべての正規表現マッチングは、Go 言語の RE2 エンジンに基づいています。このエンジンは、PCRE などの他のエンジンよりも多くの制限があります。したがって、「付録:正規表現の制限 (コンテナフィルタリング)」のガイドラインに準拠した正規表現を記述する必要があります。
  • 環境変数ブラックリスト/ホワイトリスト:ログを収集したいコンテナの環境変数条件を指定します。

  • K8s Pod ラベルブラックリスト/ホワイトリスト:ログを収集したいコンテナが配置されている Pod のラベル条件を指定します。

  • K8s Pod 名正規表現一致:Pod 名でログを収集したいコンテナを指定します。

  • K8s 名前空間正規表現一致:名前空間名でログを収集したいコンテナを指定します。

  • K8s コンテナ名正規表現一致:コンテナ名でログを収集したいコンテナを指定します。

  • コンテナラベルブラックリスト/ホワイトリスト:指定された条件を満たすラベルを持つコンテナからログを収集します。これは Docker シナリオで使用され、Kubernetes シナリオでは推奨されません。

4. ログの分類

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

ログトピックの設定

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

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

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

  • [カスタム]:形式は customized://<custom_topic_name> です。例えば、customized://app-login。これは、固定のビジネスアイデンティティを持つ静的なトピックシナリオに適用されます。

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

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

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

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

    抽出ルール:正規表現のキャプチャグループに基づく

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

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

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

    シナリオ

    生成されるフィールド

    正規表現の例

    一致したパスの例

    生成されるフィールド

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

    ソースを区別するために必要なディメンションが 1 つだけの場合 (ユーザー名や環境など)

    __topic__ フィールドを生成

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

    /logs/userA/app.log

    __topic__: userA

    複数のキャプチャグループ - 名前なし (複数の (.*?))

    複数のディメンションが必要だが、意味的なラベルがない場合

    タグフィールド __tag__:__topic_{i}__ を生成します。ここで {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 ラベル]:Pod ラベル名とタグ名を設定します。Pod ラベルの値はタグ値として保存されます。

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

    • タグ名:タグの名前。

5. 出力

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

動的な複数宛先への配信

重要
  • 複数宛先への配信は、LoongCollector 3.0.0 以降でのみサポートされています。Logtail はこの機能をサポートしていません。

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

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

設定手順:[Logtail 設定] ページの [出力設定] エリアで。

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

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

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

    • 圧縮方式: [lz4] および [zstd] をサポートしています。

    • [ルーティング設定]:タグフィールドに基づいてログをルーティングします。ルーティング設定に一致するログは、ターゲットの 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)。

トラブルシューティング FAQ

マシングループのハートビート状態が FAIL

  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:

      # カスタムユーザー ID を設定します。ディレクトリが存在しない場合は、手動で作成します。
      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. 新しいログの確認:LoongCollector (Logtail) を収集用に設定した後、ターゲットのログファイルに新しいログがない場合、LoongCollector (Logtail) はそのファイルからデータを収集しません。

2. LoongCollector (Logtail) の運用ログの表示

LoongCollector (Logtail) の運用ログを表示して、詳細なエラー情報を取得します。

  1. Logtail コンテナにログインする

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

      kubectl get po -n kube-system | grep logtail

      システムは次のような結果を返します。

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

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

      この例では、logtail-ds-****d は Pod 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. マシングループのハートビートの確認

マシングループのハートビート状態を確認します:image[リソース] > [マシングループ] ページに移動し、ターゲットのマシングループの名前をクリックします。[マシングループ設定] > [マシングループの状態] セクションで、[ハートビート] の状態を表示し、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 収集設定を確認します。Logtail 設定の IncludeLabelExcludeLabelIncludeEnvExcludeEnv などの設定が、収集要件を満たしているかどうかに特に注意してください。

  • ここでのラベルはコンテナラベルを指し、Docker inspect のラベルであり、Kubernetes のラベルではありません。

  • 一時的に IncludeLabelExcludeLabelIncludeEnvExcludeEnv の設定を削除して、ログが正常に収集できるか確認します。収集できる場合は、これらのパラメーターの設定が間違っています。

よくある質問

複数宛先配信設定を管理するにはどうすればよいですか?

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

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

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

    説明

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

ACK クラスターのログを別の Alibaba Cloud アカウントのプロジェクトに送信するにはどうすればよいですか?

ACK クラスターに Simple Log Service の LoongCollector (Logtail) コンポーネントを手動でインストールし、宛先アカウントの Alibaba Cloud アカウント 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 アカウントの UID。引用符で囲んでください (例: "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) コンポーネントをアンインストールする際に依存関係エラーが発生するのはなぜですか?

問題: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 コンポーネントを検索して見つけ、image > [ロギングを無効にする] をクリックします。

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

  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. 設定後、[保存] をクリックします。

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 展開後のフィールド名のプレフィックスを指定します。

  • [配列の展開]:配列をインデックス付きのキーと値のペアに展開します。

    例:{"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 Common Log Format 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 LogFormat 設定]:システムは [ログ形式] に基づいて設定を自動的に入力します。

    重要

    自動入力されたコンテンツが、サーバーの 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 エンジンに基づいています。RE2 エンジンは、Perl 互換正規表現 (PCRE) などの他のエンジンと比較していくつかの構文上の制限があります。正規表現を記述する際には、以下の点に注意してください:

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

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

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

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

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

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

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

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

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

  • サブルーチン参照:(?&name) または (?P>name)

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

3. 推奨事項

Regex101 などのツールを使用して正規表現をデバッグします。互換性を検証するには、Golang (RE2) モードを選択します。プラグインは、サポートされていない構文を含む式を解析または一致させることはできません。

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

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

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

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

      • C++ でリファクタリングされ、古い Go 実装と比較してパフォーマンスが 180% から 300% 向上しました。

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

      • ネイティブプラグインと Go プラグインの柔軟な組み合わせをサポートし、複雑なシナリオの要件を満たします。

    • より高い信頼性

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

    • リソース消費の削減

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

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

    • 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 は、指定したログファイルディレクトリのみを監視することを指定します。

標準出力

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

標準エラー

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

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

デフォルトでは、コンテナの標準出力ログは、1 つの新バージョンの Logtail 標準出力収集設定にのみ一致できます。標準出力が複数の新バージョンの標準出力収集設定によって収集される必要がある場合は、[標準出力の複数回収集を許可] を有効にする必要があります。

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

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

コンテナフィルタリング

  • フィルター条件の説明

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

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

  • Kubernetes シナリオでは、コンテナフィルタリングに [K8s Pod 名正規表現一致][K8s 名前空間正規表現一致][K8s コンテナ名正規表現一致][K8s Pod ラベルホワイトリスト] などの Kubernetes レベルの情報を使用することを推奨します。

  1. Kubernetes の名前空間とコンテナ名は、コンテナラベル、具体的には io.kubernetes.pod.namespaceio.kubernetes.container.name にマッピングされます。コンテナフィルタリングには、これらの 2 つのコンテナラベルを使用することを推奨します。例えば、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)$ に設定すると、nginx と default 名前空間内のすべてのコンテナが一致します。

K8s コンテナ名の正規表現マッチング

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

[コンテナラベルホワイトリスト]

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

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

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

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

複数のホワイトリストエントリは OR 関係にあり、コンテナのラベルがホワイトリストエントリのいずれかを満たせば、そのコンテナは一致します。

コンテナラベルのブラックリスト

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

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

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

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

複数のブラックリストエントリは OR 関係にあり、コンテナのラベルがブラックリストエントリのいずれかを満たせば、そのコンテナは除外されます。

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

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

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

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

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

複数のホワイトリストエントリは OR 関係にあり、コンテナの環境変数がキーと値のペアのいずれかを満たせば、そのコンテナは一致します。

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

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

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

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

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

複数のブラックリストエントリは OR 関係にあり、コンテナの環境変数がキーと値のペアのいずれかを満たせば、そのコンテナは除外されます。

[K8s Pod ラベルホワイトリスト]

Kubernetes ラベルホワイトリストを使用して、収集するコンテナを指定します。Kubernetes ラベルホワイトリストを設定するには、LabelKey が必須で、LabelValue はオプションです。

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

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

    デフォルトでは、`LabelValue` は文字列照合に使用され、その値が Kubernetes ラベルの値と同一である場合にのみマッチします。値が ^ で始まり、$ で終わる場合は、正規表現による照合となります。たとえば、[LabelKey]app に、[LabelValue]^(test1|test2)$ に設定すると、Kubernetes ラベルが app:test1 または app:test2 のコンテナーがマッチします。

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

説明
  • デプロイメントなどの Kubernetes 制御リソースが実行中に Kubernetes ラベルを変更した場合、運用中の Pod は再起動されないため、Pod は変更を検出できません。これにより、マッチング ルールが無効になる可能性があります。Kubernetes ラベルのブラックリストとホワイトリストを設定する際は、Pod の Kubernetes ラベルを使用することを推奨します。Kubernetes ラベルの詳細については、「ラベルとセレクター」をご参照ください。

[K8s Pod ラベルブラックリスト]

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

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

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

    デフォルトでは、LabelValue に対して文字列マッチングが実行されます。LabelValue の値が Kubernetes ラベルの値と完全に同じである場合にのみ一致が発生します。値が ^ で始まり $ で終わる場合は、正規表現マッチングが実行されます。例えば、[LabelKey]app に、[LabelValue]^(test1|test2)$ に設定すると、Kubernetes ラベルが app:test1 または app:test2 のコンテナが一致します。

複数のブラックリストエントリは OR 関係にあり、コンテナの Kubernetes ラベルがブラックリストエントリのいずれかを満たせば、そのコンテナは除外されます。

説明
  • デプロイメントなどの Kubernetes 制御リソースが実行中に Kubernetes ラベルを変更した場合、運用中の Pod は再起動されないため、Pod は変更を検出できません。これにより、マッチング ルールが無効になる可能性があります。Kubernetes ラベルのホワイトリストとブラックリストを設定する際は、Pod の Kubernetes ラベルを使用することを推奨します。Kubernetes ラベルの詳細については、「ラベルとセレクター」をご参照ください。

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

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

[環境変数]

このパラメーターを設定すると、Simple Log Service は環境変数関連のフィールドをログに追加します。例えば、[環境変数名]VERSION に、[タグ名]env_version に設定し、コンテナに環境変数 VERSION=v1.0.0 が含まれている場合、この情報は __tag__:__env_version__: v1.0.0 というフィールドとしてログに追加されます。

[Pod ラベル]

このパラメーターを設定すると、Simple Log Service は Kubernetes Pod ラベル関連のフィールドをログに追加します。例えば、[Pod ラベル名]app に、[タグ名]k8s_pod_app に設定し、Kubernetes Pod にラベル app=serviceA が含まれている場合、この情報は __tag__:__k8s_pod_app__: serviceA というフィールドとしてログに追加されます。

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

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

初回収集サイズ

設定が最初に有効になったとき、これはファイルの末尾から収集が開始されるサイズです。デフォルトの初回収集サイズは 1,024 KB です。

  • 初回収集で、ファイルが 1,024 KB 未満の場合、収集はファイルの先頭から開始されます。

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

ここで [初回収集サイズ] を変更できます。値は 0 から 10,485,760 KB の範囲で指定できます。

収集ブラックリスト

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

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

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

  • ブラックリストに対するマッチングには計算オーバーヘッドがあります。ブラックリストのエントリ数は 10 以内にしてください。

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

ファイルパスブラックリスト、ファイルブラックリスト、ディレクトリブラックリストによる設定をサポートしています。詳細は以下の通りです:

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

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

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

ファイルブラックリスト

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

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

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

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

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

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

デフォルトでは、1 つの Logtail 設定を使用してログファイルからログを収集することしかできません。ファイル内のログを複数回収集する必要がある場合は、[ファイルの複数回収集を許可] を有効にします。

高度なパラメーター

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

処理設定パラメーター

設定項目

説明

ログサンプル

収集するログのサンプル。実際のシナリオのログを使用してください。ログサンプルは、ログ処理パラメーターの設定を支援し、設定の難易度を下げます。複数のサンプルを追加でき、合計長は 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)

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

    • [破棄]:このログセグメントを直接破棄します。

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

処理方法

[処理プラグイングループ] には、[ネイティブプラグイン][拡張プラグイン] が含まれます。詳細については、「ネイティブおよび拡張処理プラグインの使用」をご参照ください。

重要

処理プラグインの使用に関する制限については、コンソールページのプロンプトをご参照ください。

  • Logtail 2.0:

    • ネイティブプラグインは任意の方法で組み合わせることができます。

    • ネイティブプラグインと拡張プラグインは同時に使用できますが、拡張プラグインはすべてのネイティブプラグインの後にのみ表示できます。

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

    • ネイティブプラグインと拡張プラグインを同時に追加することはサポートされていません。

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

      • 最初のプラグインは、正規表現解析、デリミタベースの解析、JSON 解析、NGINX パターン解析、Apache パターン解析、または IIS パターン解析でなければなりません。

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

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

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

        image

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

        image

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

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

        image