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

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

最終更新日:Nov 06, 2025

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

使用上の注意

  • ランタイム環境:

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

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

    • コンテナーランタイム (Docker および Containerd のみ)

      • Docker:

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

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

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

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

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

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

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

    • 実際の使用量は、収集レート、監視対象のディレクトリとファイルの数、および送信の混雑レベルによって異なります。実際の使用量が制限の 80% 未満であることを確認してください。

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

    カスタムポリシーを作成するには、AliyunCSManagedLogRolePolicy システムポリシーをご参照ください。ポリシーに含まれる権限をコピーし、ターゲットの RAM ユーザーまたはロールに付与して、詳細な権限設定を行います。

収集設定のワークフロー

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

    Sidecar モードについては、「クラスターからテキストログを収集する (Sidecar)」をご参照ください。
  2. Logstore の作成: Logstore はログデータのストレージユニットです。1 つのプロジェクトに複数の Logstore を作成できます。

  3. 収集設定の作成:

    このトピックでは、一般的なユースケースにおける共通の設定パラメーターとコアオプションのみを説明します。設定パラメーターとその説明の完全なリストについては、「詳細情報」をご参照ください。
    • 最小構成 (必須): クラスターから SLS プロジェクトへのデータ収集トンネルを確立します。

    • 一般的な処理設定 (任意): 一般的なデータ処理プラグインを設定して、生ログを構造化データに解析します。たとえば、正規表現やデリミタを使用して解析したり、データマスキングやフィルタリングを実行したりします。

      このトピックでは、一般的なログ処理のユースケースをカバーするネイティブ処理プラグインのみを説明します。その他の機能については、「拡張処理プラグイン」をご参照ください。
    • その他の詳細設定 (任意): 複数行のテキストログを収集し、ログタグを充実させて、より詳細な収集を行います。

LoongCollector (Logtail) のインストール

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

このトピックでは、LoongCollector をインストールするための基本的な手順のみを説明します。パラメーターの詳細については、「LoongCollector のインストール (Kubernetes)」をご参照ください。LoongCollector または Logtail をインストール済みの場合は、このステップをスキップして、収集したログを保存するためのLogstore を作成してください。

ACK クラスター

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

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

  2. [クラスター] ページで、ターゲットクラスターの名前をクリックします

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

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

    説明

    新しいクラスターの場合、[詳細オプション] セクションで [Log Service を有効にする] を選択します。次に、[プロジェクトの作成] または [プロジェクトの選択] を行います。

    インストールが完了すると、SLS は ACK クラスターが存在するリージョンに関連リソースを自動的に作成します。Simple Log Service コンソールにログインして表示します。

    リソースタイプ

    リソース名

    機能

    プロジェクト

    k8s-log-${cluster_id}

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

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

    マシングループ

    k8s-group-${cluster_id}

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

    Logstore

    config-operation-log

    重要

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

    loongcollector-operator コンポーネントのログを保存します。その課金方法は通常の Logstore と同じです。詳細については、「データ書き込み量による課金モードの課金項目」をご参照くださいこの Logstore には収集設定を作成しないことをお勧めします。

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

  1. Kubernetes クラスターに接続します。お使いのリージョンに対応するコマンドを選択して、LoongCollector とその依存コンポーネントをダウンロードします:

    中国国内のリージョン:

    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: ""
    # プロジェクトのリージョン (例: Shanghai: 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

    SLS はまた、以下のリソースを自動的に作成します。Simple Log Service コンソールにログインして表示します。

    リソースタイプ

    リソース名

    機能

    プロジェクト

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

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

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

    マシングループ

    k8s-group-${cluster_id}

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

    Logstore

    config-operation-log

    重要

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

    loongcollector-operator コンポーネントのログを保存します。その課金方法は通常の Logstore と同じです。詳細については、「データ書き込み量に応じた課金項目」をご参照ください。この Logstore には収集設定を作成しないことをお勧めします。

Logstore の作成

すでに Logstore を作成している場合は、このステップをスキップして収集設定の作成に進んでください。

SLS は、課金方法として「データ書き込み量による課金」と「機能による課金」の 2 つをサポートしています。Logstore を作成する際に、必要に応じて適切な課金方法を選択してください。
  1. Simple Log Service コンソールにログインし、ターゲットプロジェクトの名前をクリックします。

  2. 左側のナビゲーションウィンドウで、image [ログストレージ] を選択し、[+] をクリックします。

  3. [Logstore の作成] ページで、次のコア設定を完了します:

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

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

    • 課金モード:

      • 機能による課金: ストレージ、インデックス、読み書き操作などのリソースに対して個別に課金されます。小規模なユースケースや、機能の使用量が不確かな場合に適しています。

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

    • データ保持期間: ログを保持する日数を設定します。値の範囲は 1 日から 3650 日です。3650 日は永久保存を意味します。デフォルトは 30 日です。

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

最小構成

LoongCollector をインストールし、Logstore を作成した後、収集設定を行うことができます。このセクションでは、コンテナーの標準出力とクラスターのテキストログという 2 つの基本的なユースケースについて説明します。これらのユースケースでは、生ログを解析または処理せずに Logstore にアップロードするため、データチャネルを迅速に確立するのに適しています。

Logstore image ページで:

  1. ターゲット Logstore の名前の前にある image をクリックします。

  2. [データ収集] の後にある image をクリックします。

  3. ログソースに基づいてクイック統合テンプレートを選択します。コンテナー内のログには 2 つのソースがあります:

    • 標準出力 (stdout および stderr): コンテナープログラムがコンソールに出力するログコンテンツ。

    • テキストログファイル: コンテナー内の指定されたパスに書き込まれるログファイル。

image

コンテナー標準出力 (stdout) の収集

  1. [クイックデータインポート] ダイアログボックスで、テンプレート [K8S - Stdout And Stderr - 新バージョン] を検索し、[今すぐ統合] をクリックします。

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

    • [シナリオ][Kubernetes クラスター] に設定します。

    • [デプロイモード][ACK Daemonset] または [Daemonset モードのセルフマネージドクラスター] に設定します。

    • ソースマシングループリストで、システムが作成したマシングループ k8s-group-${cluster_id} を右側の適用済みマシングループリストに追加します。

  3. Logtail を設定し、[次へ] をクリックします。

    • [グローバル設定]: 設定名を入力します。

    • [入力設定]: [Stdout And Stderrt] または [標準エラー] スイッチを有効にします。デフォルトでは両方とも有効です。

    • [プロセッサー設定]:

      • (任意) 一般的な処理設定: 正規表現やデリミタなどのメソッドを使用して生ログを構造化データに解析したり、データマスキングやフィルタリングを実行したりします。

      • (任意) その他の詳細設定: 複数行のテキストログを収集し、ログタグを充実させて、より詳細な収集要件に対応します。

  4. クエリと分析: データをプレビューし、[インデックスの自動生成] をクリックします。SLS はフィールドインデックスを生成します。[次へ] をクリックして設定を完了します。

生ログ:

10.244.0.1 - - [01/Aug/2025:10:25:30 +0000] "GET / HTTP/1.1" 200 615 "-" "curl/7.88.1"

収集された生の標準出力 (stdout):

10.244.0.1 - - [01/Aug/2025:10:25:30 +0000] "GET / HTTP/1.1" 200 615 "-" "curl/7.88.1"

クラスターテキストログの収集

  1. [クイックデータインポート] ダイアログボックスで、テンプレート [Kubernetes - ファイル] を検索し、[今すぐ統合] をクリックします。

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

    • [シナリオ][Kubernetes クラスター] に設定します。

    • [デプロイモード][ACK Daemonset] または [Daemonset モードのセルフマネージドクラスター] に設定します。

    • ソースマシングループリストで、システムが作成したマシングループ k8s-group-${cluster_id} を右側の適用済みマシングループリストに追加します。

  3. Logtail を設定し、[次へ] をクリックします。

    • [グローバル設定]: 設定名を入力します。

    • [入力設定]:

      • [Logtail デプロイモード]Daemonset に設定します。

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

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

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

      • [ファイルパス]: ログ収集の絶対パス。Linux では、「/」で始まる必要があります。

        例: /data/mylogs/**/*.log は、/data/mylogs ディレクトリとそのサブディレクトリにある .log 拡張子を持つすべてのファイルを示します。

      • [最大ディレクトリ監視深度]: [ファイルパス] のワイルドカード文字 ** に一致する最大ディレクトリ深度。デフォルトは 0 (現在のレベルのみ) で、範囲は 0 から 1000 です。

        パフォーマンスを向上させるには、正確なディレクトリパスを指定し、深度を 0 に設定します。
    • [プロセッサー設定]:

      • (任意) 一般的な処理設定: 正規表現やデリミタなどのメソッドを使用して生ログを構造化データに解析したり、データマスキングやフィルタリングを実行したりします。

      • (任意) その他の詳細設定: 複数行のテキストログを収集し、ログタグを充実させて、より詳細な収集要件に対応します。

  4. クエリと分析: データをプレビューし、[インデックスの自動生成] をクリックします。SLS はフィールドインデックスを生成します。[次へ] をクリックして設定を完了します。

生ログ:

Aug 19 11:20:51 hostname-1 crond[2995]: (CRON) INFO (@reboot jobs will be run at computer's startup.)

生ログ行全体が content フィールドに保存されます:

content: Aug 19 11:20:51 hostname-1 crond[2995]: (CRON) INFO (@reboot jobs will be run at computer's startup.)

一般的な処理設定

最小構成を完了した後、[プロセッサー設定] セクションで処理プラグインを追加して、生ログを構造化データに解析したり、データマスキングやフィルタリングを実行したりします。既存の収集設定に処理プラグインを追加するには、次のようにします:

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

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

  3. [Logtail 設定] をクリックします。設定リストで、ターゲットの Logtail 設定を見つけ、[操作] 列の [Logtail 設定の管理] をクリックします。

  4. Logtail 設定ページで、[編集] をクリックし、[プロセッサー設定] セクションまでスクロールダウンして、解析プラグインを設定します。

このセクションでは、一般的なログ処理のユースケースをカバーするネイティブプラグインのみを説明します。詳細については、「拡張プラグイン」をご参照ください。
重要

Logtail 2.0 以降のバージョン、および LoongCollector コンポーネントについては、以下のプラグイン組み合わせルールに従ってください:

  • ネイティブプラグインの使用を優先します。

  • ネイティブプラグインでニーズを満たせない場合は、ネイティブプラグインの後に拡張プラグインを設定します。

  • ネイティブプラグインは、拡張プラグインの前にのみ使用できます。

構造化設定

正規表現解析

正規表現を使用してログフィールドを抽出し、ログをキーと値のペアに解析します。

  1. [サンプルログの追加]: ログサンプルを設定すると、ログ処理パラメーターの設定に役立ち、設定プロセスが簡素化されます。

  2. [プロセッサーの追加] をクリックし、[ネイティブプロセッサー] > データ解析 (正規表現モード) を選択します:

    • [正規表現]: ログに一致させるために使用します。自動生成または手動入力します:

      • 自動生成:

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

        • [ログサンプル] で、抽出したいログコンテンツを選択します。

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

          image

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

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

    • [抽出されたフィールド]: 抽出されたログコンテンツ (値) に対応するフィールド名 (キー) を設定します。

生ログ:

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"

カスタム正規表現解析: 正規表現 (\S+)\s-\s(\S+)\s\[([^]]+)]\s"(\w+)\s(\S+)\s([^"]+)"\s(\d+)\s(\d+)\s"([^"]+)"\s"([^"]+).*

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

デリミタベースの解析

デリミタを使用してログコンテンツを構造化し、複数のキーと値のペアに解析します。単一文字と複数文字の両方のデリミタがサポートされています。

[プロセッサーの追加] をクリックし、[ネイティブプロセッサー] データ解析 (デリミタモード) を選択します:

  • [デリミタ]: ログコンテンツを分割するために使用する文字を指定します。

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

  • [引用符]: フィールド値に区切り文字が含まれている場合、誤った分割を避けるためにフィールドを囲む引用符を指定する必要があります。

  • [抽出されたフィールド]: 分割順に各列に対応するフィールド名 (キー) を設定します。ルールは次のとおりです:

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

    • 文字またはアンダースコア (_) で始まる必要があります。

    • 最大長: 128 バイト。

生ログ:

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

標準 JSON 解析

オブジェクトタイプの JSON ログを構造化し、キーと値のペアに解析します。

[プロセッサーの追加] をクリックし、[ネイティブプロセッサー] > データ解析 (JSON モード) を選択します:

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

  • 他の設定はデフォルトのままにします。

生ログ:

{"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"}

標準 JSON のキーと値のペアが自動的に抽出されます:

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

ネストされた JSON 解析

展開深度を指定して、ネストされた JSON ログをキーと値のペアに解析します。

[プロセッサーの追加] をクリックし、[拡張プロセッサー] > JSON フィールドの展開 を選択します:

  • [元のフィールド]: 展開するソースフィールド (例: content)。

  • [JSON 展開深度]: JSON オブジェクトの展開レベル。0 は完全展開 (デフォルト)、1 は現在のレベル、など。

  • [展開されたキーを連結する文字]: JSON 展開時のフィールド名のコネクタ。デフォルトはアンダースコア _ です。

  • [展開されたキーの名前プレフィックス]: JSON 展開後のフィールド名のプレフィックスを指定します。

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

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

    展開されたフィールドの名前を変更する場合 (例: `prefix_s_key_k1` から `new_field_name` へ)、後で フィールド名の変更 プラグインを追加して名前変更を実行します。

生ログ:

{"s_key":{"k1":{"k2":{"k3":{"k4":{"k51":"51","k52":"52"},"k41":"41"}}}}}

展開深度: 0、展開深度をプレフィックスとして使用。

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、プレフィックスとして使用します。

1_s_key:{"k1":{"k2":{"k3":{"k4":{"k51":"51","k52":"52"},"k41":"41"}}}}

JSON 配列解析

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

[処理方法][SPL] に設定します:

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

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

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

生ログ:

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

抽出された JSON 配列構造:

json1:{"key1":"value1"}
json2:{"key2":"value2"}

NGINX ログ解析

log_format の定義に基づいて、ログコンテンツを複数のキーと値のペアに構造化します。デフォルトのコンテンツがニーズに合わない場合は、カスタムフォーマットを使用します。

[プロセッサーの追加] をクリックし、[ネイティブプロセッサー] > データ解析 (NGINX モード) を選択します:

  • [NGINX ログ設定]: NGINX サーバーの設定ファイル (通常は /etc/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"';
    重要

    ここでのフォーマット定義は、サーバーでログを生成するフォーマットと完全に同じでなければなりません。そうでない場合、ログ解析は失敗します。

生ログ:

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"

log_format main 定義に基づいてキーと値のペアに解析されます:

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

Apache ログ解析

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

[プロセッサーの追加] をクリックし、[ネイティブプロセッサー] > データ解析 (Apache モード) を選択します:

  • [ログフォーマット][combined] に設定します。

  • [APACHE LogFormat 設定]: システムは [ログフォーマット] に基づいて設定を自動的に入力します。

    重要

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

生ログ:

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"

Apache Common Log Format combined 解析:

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]

データマスキング

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

[プロセッサー設定] セクションで、[プロセッサーの追加] をクリックし、[ネイティブプロセッサー] > データマスキング を選択します:

  • [元のフィールド]: 解析前のログコンテンツを格納するソースフィールド。

  • [データマスキング方法]:

    • [const]: 機密コンテンツを指定された文字列に置き換えます。

    • [md5]: 機密コンテンツを対応する MD5 ハッシュに置き換えます。

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

  • [置換されるコンテンツに先行するコンテンツ式]: 機密コンテンツを見つけるために使用します。RE2 構文を使用して設定します。

  • [置換されるコンテンツに一致するコンテンツ式]: 機密コンテンツの式。RE2 構文を使用して設定します。

生ログ:

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

マスキング結果:

[{'account':'1812213231432969','password':'********'}, {'account':'1812213685634','password':'********'}]

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

正規表現に基づいてログフィールド値を照合し、ホワイトリスト条件を満たすログのみを収集します。

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

  • [フィールド名]: フィルタリング対象のログフィールド。

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

生ログ:

{"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|ERROR に設定します。これは、level フィールドの値が 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}

時間解析

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

[プロセッサー設定] セクションで、[プロセッサーの追加] をクリックし、[ネイティブプロセッサー] > 時間解析 を選択します:

  • [元のフィールド]: 解析前のログコンテンツを格納するソースフィールド。

  • [時間フォーマット]: ログの時間コンテンツに基づいて、対応する時間フォーマットを設定します。

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

生ログ:

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

時間解析:

image

その他の詳細設定

最小構成または一般的な処理設定を完了した後、複数行ログの収集、トピックタイプの構成などを行い、詳細なログ収集を実現します。

既存の収集設定を変更するには、次のようにします:

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

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

  3. [Logtail 設定] をクリックします。設定リストで、ターゲットの Logtail 設定を見つけ、[操作] 列の [Logtail 設定の管理] をクリックします。

  4. Logtail 設定ページで、[編集] をクリックします。

特徴

目的

複数行ログ収集

Java スタックトレースなどの複数行にまたがるログを処理します。

ログトピックタイプ

マシングループ、ファイルパス、またはカスタムルールに基づいてトピックを設定し、ログソースを分類します。

コンテナーフィルタリングとブラックリスト

  • コンテナー名、ラベル、または環境変数でフィルタリングします。

  • 機密または無関係なログファイルを無視します。

ログタグの充実化

環境変数とコンテナー情報をメタデータフィールドとして追加します。

ログ転送の圧縮

lz4/zstd を有効にして帯域幅を削減します。


複数行ログ収集

デフォルトでは、SLS は単一行モードで動作し、テキストの各行を個別のログとして扱います。これにより、スタックトレースや JSON などのコンテンツを含む複数行のログが誤って分割され、コンテキストが失われる可能性があります。

この問題に対処するには、[複数行モード] を有効にし、[最初の行に一致する正規表現] を定義します。これにより、SLS は完全なログの開始行を正確に識別し、複数の行を単一のログエントリにマージできます。

[プロセッサー設定]:

  • [複数行モード] を有効にします。

  • [タイプ][カスタム] または [複数行 JSON] に設定します。

    • [カスタム]: 生ログの形式は固定されていません。[最初の行に一致する正規表現] を設定して、各ログの開始行を識別する必要があります。

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

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

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

    • [複数行 JSON]: 生ログがすべて標準 JSON 形式である場合にこれを選択します。SLS は単一の JSON ログ内の改行を自動的に処理します。

  • [分割に失敗した場合の処理方法]:

    • [破棄]: テキストの一部が最初の行のルールに一致しない場合、それは破棄されます。

    • [単一行を保持]: 一致しないテキストは個別の単一行ログとして処理されます。

生ログ:

[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)

単一行モード: 各行は個別のログであり、スタック情報が分割され、コンテキストが失われます。

image

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

content:[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)

トピックタイプの設定

[グローバル設定] > [その他のグローバル設定] > [ログトピックタイプ]: トピックの生成方法を選択します。

  • マシングループトピック: SLS では、1 つの収集設定を複数のマシングループに適用できます。LoongCollector がデータを報告する際、マシングループのトピックをログトピックとして使用し、Logstore にアップロードします。トピックを使用して、異なるマシングループからのログを区別します。

  • ファイルパス抽出: 異なるユーザーやアプリケーションが、異なるトップレベルディレクトリに、しかし同じサブディレクトリパスとファイル名でログを書き込む場合、ファイル名からログソースを区別することが困難になります。[ファイルパス抽出] を設定します。正規表現を使用して完全なファイルパスを照合し、照合された結果 (ユーザー名またはアプリケーション名) をログトピックとして Logstore にアップロードします。

    説明

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

    ファイルパス正規表現を使用した抽出

    ユースケース: 異なるユーザーが異なるディレクトリにログを記録しますが、ログファイル名は同じです。ディレクトリパスは次のとおりです。

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

    [Logtail 設定] でファイルパスを /data/logs、ファイル名を service.log とだけ設定した場合、LoongCollector (Logtail) は 3 つすべての service.log ファイルのコンテンツを同じ Logstore に収集します。これにより、どのユーザーがどのログを生成したかを区別できなくなります。正規表現を使用してファイルパスから値を抽出し、異なるログトピックを生成します。

    正規表現

    抽出結果

    \/data\/logs\/(.*)\/serviceA\/.*
    __topic__: userA
    __topic__: userB
    __topic__: userC

    複数のキャプチャグループを使用した抽出

    ユースケース: 単一のログトピックではログのソースを区別するのに不十分な場合、ログファイルパスに複数の正規表現キャプチャグループを設定してキー情報を抽出します。これらのキャプチャグループには、名前付きキャプチャグループ (?P<name>) と名前なしキャプチャグループが含まれます。

    • 名前付きキャプチャグループ: 生成されるタグフィールドは __tag__:{name} です。

    • 名前なしキャプチャグループ: 生成されるタグフィールドは __tag__:__topic_{i}__ です。ここで、{i} はキャプチャグループのシーケンス番号です。

    説明

    正規表現に複数のキャプチャグループがある場合、__topic__ フィールドは生成されません。

    たとえば、ファイルパスが /data/logs/userA/serviceA/service.log の場合、次の方法でファイルパスから複数の値を抽出します:

    正規表現

    抽出結果

    正規表現抽出に名前なしキャプチャグループを使用します。

    \/data\/logs\/(.*?)\/(.*?)\/service.log
    __tag__:__topic_1__: userA
    __tag__:__topic_2__: serviceA

    正規表現抽出に名前付きキャプチャグループを使用します。

    \/data\/logs\/(?P<user>.*?)\/(?P<service>.*?)\/service.log
    __tag__:user: userA
    __tag__:service: serviceA

    検証: 設定後、ログトピックに基づいてログをクエリします。

    ログクエリおよび分析ページで、対応する生成されたログトピック (例: __topic__: userA または __tag__:__topic_1__: userA) を入力して、そのトピックのログをクエリします。

    image

  • [カスタム]: customized:// + カスタムトピック名 を入力して、カスタムの静的ログトピックを使用します。


コンテナーフィルタリングとブラックリスト

コンテナーフィルタリング

[入力設定]:

  • [コンテナーフィルタリング] を有効にし、[追加] をクリックしてフィルタリング方法を選択し、設定します。複数の条件は「AND」関係で結合されます。

    • 環境変数ブラックリスト/ホワイトリスト: 収集対象のコンテナーの環境変数条件を指定します。

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

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

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

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

    • コンテナーラベルブラックリスト/ホワイトリスト: ラベルが条件を満たすコンテナーを収集します。Docker のユースケースで使用されます。Kubernetes のユースケースでは推奨されません。

すべての正規表現マッチングは Go 言語の RE2 エンジンを使用しており、PCRE などのエンジンと比較して機能セットが限られています。正規表現を記述するには、「付録: 正規表現の制限 (コンテナーフィルタリング)」を参照して正しい構文を確認してください。

ブラックリスト

[入力設定] > [その他の入力設定]: [収集ブラックリスト] を有効にし、[追加] をクリックしてブラックリストを設定します。

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

    • /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 ラベル: Pod ラベル名とタグ名を設定します。Pod ラベルの値はタグ名に保存されます。

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

      • タグ名: タグの名前。


ログ転送の圧縮

[出力設定]:

説明

Logtail 1.3.4 以降のバージョンのみが zstd 圧縮をサポートします。

  • lz4: 圧縮速度が速く、圧縮率が低い。

  • zstd: 圧縮率が高く、速度がやや遅く、メモリ使用量が多い。

次のステップ

  1. ログのクエリと分析: 収集された各コンテナーテキストログには、以下のデフォルトフィールド情報が含まれています:

    フィールド

    説明

    __tag__:__hostname__

    コンテナーのホスト名。

    __tag__:__path__

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

    __tag__:_container_ip_

    コンテナーの IP アドレス。

    __tag__:_image_name_

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

    __tag__:_pod_name_

    Pod の名前。

    __tag__:_namespace_

    Pod が属する名前空間。

    __tag__:_pod_uid_

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

  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. 次のコマンドを実行します。結果がある場合、DaemonSet が以前に YAML ファイルを使用して手動でデプロイされたことを意味します。

          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 クラスターに LoongCollector (Logtail) を手動でインストールし、ターゲットの Alibaba Cloud アカウント ID または AccessKey で設定します。これにより、コンテナーログを別の Alibaba Cloud アカウントの SLS プロジェクトに送信できます。

ユースケース: 組織構造、権限の分離、または統一された監視などの理由で、ACK クラスターから別の Alibaba Cloud アカウントの SLS プロジェクトにログデータを収集します。クロスアカウント設定のために LoongCollector (Logtail) を手動でインストールします。

プロシージャ: 以下の手順では、LoongCollector の手動インストールを例として使用します。Logtail のインストール方法については、「Logtail のインストールと設定」をご参照ください。

  1. Kubernetes クラスターに接続します。お使いのリージョンに対応するコマンドを選択して、LoongCollector とその依存コンポーネントをダウンロードします:

    中国国内のリージョン:

    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: ""
    # プロジェクトのリージョン (例: Shanghai: 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

    SLS はまた、以下のリソースを自動的に作成します。Simple Log Service コンソールにログインして表示します。

    リソースタイプ

    リソース名

    機能

    プロジェクト

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

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

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

    マシングループ

    k8s-group-${cluster_id}

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

    Logstore

    config-operation-log

    重要

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

    loongcollector-operator コンポーネントのログを保存します。その課金方法は通常の Logstore と同じです。詳細については、「データ書き込み量に応じた課金項目」をご参照ください。この Logstore には収集設定を作成しないことをお勧めします。

複数の収集設定を使用して同じファイルまたはコンテナーの標準出力からログを収集するにはどうすればよいですか?

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

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

  • コンテナーの標準出力 (stdout) も、1 つの標準出力収集設定によってのみ収集できます。

  1. Simple Log Service コンソールにログインし、ターゲットプロジェクトに移動します。

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

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

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

  5. 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) モードを選択します。プラグインは、サポートされていない構文を含む式を解析またはマッチングできません。

詳細情報

グローバル設定パラメーター

パラメーター

説明

設定名

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

トピックタイプ

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

詳細パラメーター

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

入力設定パラメーター

パラメーター

説明

Logtail デプロイモード

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

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

ファイルパスタイプ

以下のオプションをサポートします:

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

  • [ホストパス]: クラスターノードからサービスログを収集する場合に選択します。

ファイルパス

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

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

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

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

ログパスは複数レベルのディレクトリマッチングをサポートします。これは、指定されたディレクトリとそのサブディレクトリ内の基準を満たすすべてのファイルが収集されることを意味します。例:

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

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

  • /var/log/nginx/**/access* は、/var/log/nginx ディレクトリとその再帰的なサブディレクトリにある access で始まるファイルを示します。

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

ログディレクトリを監視する最大深度を設定します。これは、[ファイルパス] のワイルドカード文字 ** に一致する最大ディレクトリ深度です。0 は現在のディレクトリのみを監視することを表します。

Stdout と Stderr

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

標準エラー

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

異なる Logtail 設定による収集を許可

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

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

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

コンテナーフィルタリング

  • フィルター条件の説明

重要
  • コンテナーラベルは、Docker inspect のラベルを指し、Kubernetes のラベルではありません。取得するには、「コンテナーラベルの取得」をご参照ください。

  • 環境変数は、コンテナー起動時に設定された環境変数情報を指します。取得するには、「コンテナー環境変数の取得」をご参照ください。

  • Kubernetes のユースケースでは、コンテナーフィルタリングに Kubernetes レベルの情報 (例: [K8s Pod 名正規表現一致][K8s 名前空間正規表現一致][K8s コンテナー名正規表現一致][K8s Pod ラベルホワイトリスト]) を使用することをお勧めします。

  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 は文字列一致であり、LabelValue がコンテナーのラベル値と完全に同じ場合にのみ一致します。値が ^ で始まり $ で終わる場合は、正規表現一致です。たとえば、[LabelKey]io.kubernetes.container.name に、[LabelValue]^(nginx|cube)$ に設定すると、nginx または cube という名前のコンテナーに一致します。

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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 管理リソース (Deployment など) のラベルを変更しても、特定のワーカー Pod は再起動されません。そのため、Pod はこの変更を認識できず、マッチング ルールが失敗する可能性があります。K8s ラベルのブラックリストとホワイトリストを設定する際は、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 管理リソース (Deployment など) のラベルを変更しても、特定のワーカー Pod は再起動されません。そのため、Pod はこの変更を認識できず、マッチング ルールが失敗する可能性があります。K8s ラベルのブラックリストとホワイトリストを設定する際は、Pod の Kubernetes ラベルを基準として使用してください。Kubernetes ラベルの詳細については、「ラベルとセレクター」をご参照ください。

ログタグの充実化

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

[環境変数]

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

[Pod ラベル]

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

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

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

初回収集サイズ

設定が最初に有効になったとき、これは収集が開始されるファイルの末尾からのサイズです。デフォルトの初期収集サイズは 1024 KB です。値の範囲は 0 から 10485760 KB です。

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

  • 最初の収集で、ファイルが 1024 KB より大きい場合、収集はファイルの末尾から 1024 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)

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

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

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

処理方法

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

重要

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

  • 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