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

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

最終更新日:Nov 19, 2025

Kubernetes 環境で散在するコンテナーログを管理することは困難であり、多くの場合、非効率的なトラブルシューティングや高い O&M コストにつながります。この問題に対処するために、DaemonSet モードで LoongCollector エージェントをデプロイし、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 のインストール: DaemonSet モードで LoongCollector をデプロイします。これにより、クラスター内の各ノードで収集コンテナーが実行され、そのノード上のすべてのコンテナーからログが収集されるようになります。

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

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

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

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

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

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

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

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

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

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

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

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

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

説明

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

ACK クラスター

Container Service for Kubernetes コンソールから 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-標準出力-新規] を選択します。

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

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

    • シナリオ: [K8s シナリオ] を選択します。

    • デプロイメント方法: [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: 収集中に、`private` で始まり `.log` で終わる /home/admin/ ディレクトリ内のすべてのファイルが無視されます。

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

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

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

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

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

    • /home/admin/dir*: `dir` で始まる /home/admin/ のサブディレクトリ内のすべてのファイルが無視されます。

    • /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。これは、固定されたビジネス ID を持つ静的なトピックシナリオに適用されます。

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

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

    /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 ラベルの名前。

    • タグ名: タグの名前。

ステップ 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. ユーザー識別子の確認: サーバータイプが ECS でない場合、または ECS インスタンスとプロジェクトが異なる Alibaba Cloud アカウントに属している場合、次の表に示すように、指定されたディレクトリに正しいユーザー識別子が存在するかどうかを確認します。

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

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

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

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

    • Linux:

      # カスタムユーザー ID を設定します。ディレクトリが存在しない場合は、手動で作成します。
      echo "user-defined-1" > /etc/ilogtail/user_defined_id
    • Windows: C:\LogtailData ディレクトリに、user_defined_id という名前のファイルを作成し、カスタムユーザー ID をファイルに書き込みます。ディレクトリが存在しない場合は、手動で作成する必要があります。

  3. ユーザー ID とマシングループ ID の両方が正しく設定されている場合は、「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 の設定を一時的に削除して、ログが正常に収集できるかどうかを確認します。収集できる場合、これらのパラメーターの設定が正しくありません。

よくある質問

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 構成ページで、[編集] をクリックし、[入力設定] セクションまでスクロールダウンします:

    • テキストファイルログを収集する場合: [ファイルを複数回収集することを許可] を有効にします。

    • コンテナーの標準出力を収集する場合: [異なる 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 コンポーネントを検索して見つけます。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 展開フィールドプレフィックス: 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 設定フィールド: システムは [ログ形式] に基づいて設定を自動的に入力します。

    重要

    自動入力された内容が、サーバー上の 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 構成] ページの [プロセッサ設定] セクションで、[プロセッサを追加] をクリックし、[ネイティブプロセッサ] > [時間解析] を選択します:

  • 生フィールド: 解析前の元のログコンテンツを保存するフィールド。

  • 時間形式: ログ内の時間コンテンツに基づいて時間形式を設定します。

  • タイムゾーン: ログ内の時間フィールドのタイムゾーンを選択します。デフォルトはマシンタイムゾーンで、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 構成の作成後に名前を変更することはできません。

トピックタイプ

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

高度なパラメーター

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

入力設定パラメーター

パラメーター

説明

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 構成による収集を許可] を有効にする必要があります。

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

[コンテナーメタデータプレビューを有効にする] を有効にすると、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 は文字列マッチングです。つまり、LabelValue が Kubernetes ラベルの値と完全に同じである場合にのみ一致します。値が ^ で始まり $ で終わる場合は、正規表現マッチングです。たとえば、[LabelKey]app に、[LabelValue]^(test1|test2)$ に設定すると、Kubernetes ラベルが `app:test1` または `app:test2` のコンテナーが一致します。

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

説明
  • Deployments などの 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 ラベルがブラックリストエントリのいずれかを満たせば、そのコンテナーは除外されます。

説明
  • Deployments などの 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 です。値は 0 から 10,485,760 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」をご参照ください。

プロセッサー構成パラメーター

パラメーター

説明

ログサンプル

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

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

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

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

処理方法

プロセッサー。これには [ネイティブプラグイン][拡張プラグイン] が含まれます。 詳細については、「データ処理のための Logtail プラグインの概要」をご参照ください。

重要

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

  • Logtail 2.0:

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

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

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

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

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

      • 最初のプラグインは、正規表現解析、デリミタベースの解析、JSON 解析、NGINX パターン解析、Apache パターン解析、または IIS パターン解析である必要があります。

      • 2 番目から最後のプラグインまで、時間解析プラグインは最大 1 つ、フィルタリングプラグインは 1 つ、データマスキングプラグインは複数配置できます。

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

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

        image

      • 成功した場合は解析済みログをアップロードし、失敗した場合は生ログをアップロードします:

        image

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

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

        image