Kubernetes 環境では、コンテナログが散在しがちで一元管理が困難なため、トラブルシューティングの効率が低下し、運用コストが高くなります。LoongCollector を DaemonSet モードでデプロイし、Simple Log Service (SLS) コンソールで収集設定を作成することで、ログ収集を一元化し、構造化処理を実行できます。これにより、ログ検索、問題診断、オブザーバビリティ分析の効率が向上します。
要件
-
ランタイム環境:
-
Container Service for Kubernetes (ACK) (managed and dedicated editions) およびセルフマネージド Kubernetes クラスターをサポートしています。
-
マウント伝播: 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 ユーザーまたはロールに付与して、きめ細かい権限設定を行います。
収集設定
-
LoongCollector のインストール:LoongCollector を DaemonSet モードでデプロイします。これにより、クラスター内の各ノードで収集コンテナが実行され、そのノード上のすべてのコンテナからログを収集します。
サイドカー パターンの詳細については、「サイドカー パターンを使用した Kubernetes Pod からのテキストログの収集」をご参照ください。
-
Logstore の作成:Logstore は収集されたログを保存します。
-
-
グローバル設定と入力設定:収集設定の名前を定義し、ログソースと範囲を指定します。
-
ログの処理と構造化:ログ形式に基づいて処理ルールを設定します。
-
複数行ログ:Java スタックトレースや Python トレースバックなど、複数行にまたがる単一のログエントリに対応します。正規表現を使用して各ログエントリの開始位置を識別します。
-
構造化解析:正規表現、デリミタ、NGINX モードなどの解析プラグインを設定し、生のログ文字列を構造化されたキーと値のペアに抽出することで、クエリと分析が容易になります。
-
-
ログのフィルタリング:収集ブラックリストとコンテンツフィルタリングルールを設定して、有効なログをフィルタリングします。これにより、冗長なデータ転送とストレージを削減できます。
-
ログの分類:ログトピックとタグを設定して、異なるサービス、コンテナ、またはソースパスからのログを区別します。
-
-
クエリと分析の設定:フルテキストインデックスはデフォルトで有効になっており、キーワード検索をサポートしています。構造化されたフィールドに対して正確なクエリと分析を実行し、検索効率を向上させるには、フィールドインデックスを有効にすることを推奨します。
-
検証とトラブルシューティング:設定完了後、ログが正常に収集されていることを確認します。データの欠落、ハートビートの失敗、解析エラーなどの問題が発生した場合は、「トラブルシューティングのよくある質問」をご参照ください。
ステップ 1:LoongCollector のインストール
LoongCollector は、Simple Log Service (SLS) 向けの次世代ログ収集エージェントで、Logtail のアップグレード版です。LoongCollector と Logtail は共存できません。Logtail をインストールするには、「Logtail のインストール、実行、アップグレード、アンインストール」 をご参照ください。
このトピックでは、LoongCollector の基本的なインストールのみを説明します。パラメーターの詳細については、「インストールと設定」 をご参照ください。すでに LoongCollector または Logtail をインストールしている場合は、このステップをスキップして「ステップ 2:Logstore の作成」 に進んでください。
LoongCollector (Logtail) の実行中にホストの時刻が変更されると、ログの重複収集やデータ損失が発生する可能性があります。
ACK クラスター
デフォルトでは、LoongCollector は現在の Alibaba Cloud アカウント の SLS プロジェクトにログを送信します。
ACKコンソールにログインします。 左側のナビゲーションウィンドウで、[クラスター] をクリックします。
-
対象のクラスターの名前をクリックして、その詳細ページを開きます。
-
左側メニューで、 アドオン管理 をクリックします。
-
ログとモニタリング タブで、 loongcollector を見つけ、 インストール をクリックします。
説明クラスターを作成する際、 コンポーネント設定 ページで Log Service の使用 を選択できます。その際、 プロジェクトの作成 または プロジェクトの選択 を選択できます。
インストール後、SLS は現在のアカウントに次のリソースを自動的に作成します。これらは SLS コンソールで表示できます。
タイプ
パラメーター
説明
プロジェクト
k8s-log-${cluster_id}異なるサービスからのログを分離するリソース管理ユニットです。
より柔軟なログリソース管理のためにプロジェクトを作成するには、「プロジェクトの作成」 をご参照ください。
マシングループ
k8s-group-${cluster_id}ログ収集ノードのセットです。
重要LoongCollector コンポーネントは、config-operation-log という名前の Logstore を作成しません。この Logstore がすでに存在する場合、LoongCollector は新しいログを書き込みません。
セルフマネージドクラスター
-
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 -
loongcollector-custom-k8s-packageディレクトリに移動し、./loongcollector/values.yaml設定ファイルを変更します。# ===================== 必須情報 ===================== # このクラスターから収集されたログが格納されるプロジェクト。例: k8s-log-custom-sd89ehdq projectName: "" # プロジェクトが配置されているリージョン。例: cn-shanghai region: "" # プロジェクトを所有する Alibaba Cloud アカウントの ID。ID は引用符 ("") で囲みます。例: "123456789" aliUid: "" # ネットワークタイプ。有効な値: Internet および Intranet。デフォルト値: Internet。 net: Internet # Alibaba Cloud アカウントまたは RAM ユーザーの AccessKey ID と AccessKey secret。AliyunLogFullAccess ポリシーが必要です。 accessKeyID: "" accessKeySecret: "" # カスタムクラスター ID。ID には、大文字、小文字、数字、ハイフン (-) のみを使用できます。 clusterID: "" -
loongcollector-custom-k8s-packageディレクトリで、LoongCollector とその依存関係をインストールするには、次のコマンドを実行します。bash k8s-custom-install.sh install -
インストールが完了したら、コンポーネントのステータスを確認します。
ポッドの起動に失敗した場合は、values.yaml ファイルの設定内容と、必要なイメージがプルされていることを確認してください。
# ポッドのステータスを確認 kubectl get po -n kube-system | grep loongcollector-dsSLS は、次のリソースも自動的に作成します。これらは SLS コンソールで表示できます。
タイプ
パラメーター
説明
プロジェクト
values.yaml ファイルで定義された
projectNameの値異なるサービスからのログを分離するリソース管理ユニットです。
より柔軟なログリソース管理のためにプロジェクトを作成するには、「プロジェクトの作成」 をご参照ください。
マシングループ
k8s-group-${clusterID}ログ収集ノードのセットです。
重要LoongCollector コンポーネントは、config-operation-log という名前の Logstore を作成しません。この Logstore がすでに存在する場合、LoongCollector は新しいログを書き込みません。
ステップ 2:ログストアの作成
ログストアは、収集したログを格納する Simple Log Service のストレージユニットです。
-
Simple Log Service コンソールにログインし、対象のプロジェクト名をクリックします。
-
左側メニューで
を選択し、[+] をクリックしてログストアを作成します。-
Logstore 名: プロジェクト内で一意の名前を入力します。この名前は作成後に変更できません。
-
Logstore タイプ: 機能の比較に基づいて、Standard または Query を選択します。
-
課金モード:
-
[使用機能課金 (変更できません)]: ストレージ、インデックス、読み取り/書き込み操作などの各リソースに対して個別に課金されます。このモードは、小規模なユースケースや、機能の使用量が不確実なシナリオに適しています。
-
[書き込みデータ量課金]: 書き込む生データの量に対してのみ課金されます。このモードでは、30 日間の無料ストレージと、データ変換や配信などの無料機能が提供されます。保管期間が約 30 日のビジネスシナリオや、データ処理パイプラインが複雑な場合に適しています。
-
-
データ保持時間: ログを保持する日数を 1~3,650 日の間で設定します。値が 3,650 の場合は永久保持を示します。デフォルトは 30 日です。
-
その他の設定はデフォルト値のままにして、OK をクリックします。詳細については、「ログストアの管理」をご参照ください。
-
ステップ 3:ログ収集ルールの設定
LoongCollector で収集するログ、そのパース方法、コンテンツのフィルター方法を定義します。次に、登録済みのマシングループに設定を適用します。
-
[LogStores] ページで、対象の Logstore 名の横にある
アイコンをクリックして展開します。 -
データのインポート の横にある
アイコンをクリックします。データのインポート ダイアログボックスで、ログソースのテンプレートを選択し、今すぐ統合 をクリックします。-
コンテナ標準出力の場合、[K8s-Standard Output-New Version] を選択します。
コンテナ標準出力を収集するためのテンプレートには、新旧のバージョンがあります。新しいバージョンの使用を推奨します。新旧バージョンの比較については、「付録:コンテナ標準出力の新旧バージョンの比較」をご参照ください。
-
クラスターテキストログの場合、[Kubernetes-File] を選択します。
-
-
サーバグループ設定 を完了し、次へ をクリックします:
-
[使用シナリオ]:Docker シナリオ を選択します。
-
デプロイ方法: [ACK DaemonSet] または ユーザー作成クラスター Daemonsetを選択します。
-
ソースサーバーグループ リストから、システム作成のマシン グループ
k8s-group-${cluster_id}を右側の 適用されたサーバーグループ リストに追加します。
-
-
Logtail構成 ページで、次のパラメーターを指定し、次へ をクリックします。
1. グローバル設定と入力設定
開始する前に、データ収集テンプレートを選択し、マシン グループに適用していることを確認してください。このステップでは、収集設定名、ログソース、および範囲を定義します。
コンテナ標準出力
[グローバル設定]:
-
[設定名]: 収集設定のカスタム名を指定します。この名前はプロジェクト内で一意である必要があり、作成後に変更することはできません。名前は次の要件を満たす必要があります。
-
小文字、数字、ハイフン (-)、アンダースコア (_) のみを含めることができます。
-
小文字または数字で始まり、小文字または数字で終わる必要があります。
-
入力設定:
-
必要に応じて、[標準出力]と[標準エラー]のスイッチを有効にします。デフォルトでは、両方とも有効になっています。
重要ログエントリが整理されなくなる可能性があるため、標準出力と標準エラー出力の両方を有効にすることは推奨しません。
クラスターテキストログ
[グローバル設定]:
-
[設定名]: 収集設定のカスタム名を指定します。この名前はプロジェクト内で一意である必要があり、作成後に変更することはできません。名前は次の要件を満たす必要があります。
-
小文字、数字、ハイフン (-)、アンダースコア (_) のみを含めることができます。
-
小文字または数字で始まり、小文字または数字で終わる必要があります。
-
[入力設定]:
-
[ファイルパスのタイプ]:
-
[コンテナ内のパス]: コンテナ内のログファイルを収集します。
-
[ホストパス]: ホストのローカルサービスログを収集します。
-
-
[ファイルパス]: 収集対象ログの絶対パスです。
-
Linux: パスはスラッシュ (
/) で始まる必要があります。例:/data/mylogs/**/*.logは、/data/mylogsディレクトリおよびそのサブディレクトリにある、拡張子が.logのすべてのファイルを示します。 -
Windows: パスはドライブ文字で始まる必要があります。例:
C:\Program Files\Intel\**\*.Log
-
-
[ディレクトリ監視の最大深度]: [ファイルパス]でワイルドカード
**が一致するディレクトリの最大深度です。デフォルト値は 0 で、カレントディレクトリのみを示します。有効範囲は 0 から 1,000 です。この値を 0 に設定し、ファイルが配置されているディレクトリへのパスを指定することを推奨します。
2. ログ処理と構造化
ログ処理ルールを設定して、生の非構造化ログを構造化された検索可能なデータに変換し、ログのクエリと分析の効率を向上させます。ルールを設定する前に、ログサンプルを追加することを推奨します。
Logtail構成 ページの 設定の処理 セクションで、ログサンプルの追加 をクリックし、ログコンテンツのサンプルを入力します。システムはサンプルからログ形式を識別し、正規表現と解析ルールの生成を支援し、設定プロセスを簡素化します。
シナリオ 1:複数行ログの処理
Java の例外スタックトレースや JSON オブジェクトなどのログは、しばしば複数行にまたがります。デフォルトの収集モードでは、これらのログは複数の不完全なレコードに分割され、その結果、コンテキストが失われます。この問題に対処するため、複数行モードを有効にし、先頭行の正規表現を設定して、ログの連続する行を単一の完全なエントリにマージします。
例:
|
未処理の生ログ |
デフォルトの収集モード:各行が個別のログとなり、スタックトレースが分断され、コンテキストが失われます。 |
複数行モード有効:先頭行の正規表現が完全なログを識別し、その意味構造を保持します。 |
|
生ログには、完全な Java 例外スタックトレースが含まれています。タイムスタンプと ERROR レベルで始まり、複数レベルの |
デフォルトモードでは、生ログは複数の個別のレコードに分割されます。スタックトレースの各行は、個別の |
複数行モードを有効にすると、完全な例外スタックトレースが単一のログレコードにマージされます。 |
手順:Logtail構成 ページの 設定の処理 セクションで、マルチラインモード を有効にします:
-
タイプ:カスタム または マルチライン JSON を選択します。
-
カスタム:ログ形式が固定でない場合、各エントリの開始行を識別するために 行先頭の正規表現 を設定する必要があります。
-
行先頭の正規表現:正規表現を自動生成または手動で入力できます。この表現は行全体に一致する必要があります。たとえば、前述の例のデータに一致する正規表現は
\[\d+-\d+-\w+:\d+:\d+,\d+]\s\[\w+]\s.*です。-
自動生成:[正規表現の自動生成] をクリックします。次に、ログサンプル テキストボックスで、抽出するログコンテンツを選択し、[正規表現の生成] をクリックします。
-
手動入力:[正規表現の手動入力] をクリックします。正規表現を入力した後、[検証] をクリックします。
-
-
-
マルチライン JSON:生ログがすべて標準の JSON 形式である場合は、このオプションを選択します。サービスは、単一の JSON ログ内の改行を自動的に処理します。
-
-
分割失敗の処理方法:
-
Discard:テキストセグメントが先頭行のルールに一致しない場合、破棄されます。
-
単一行を保持:一致しないテキストは、行ごとに分割され、それぞれが単一行のログとして保持されます。
-
シナリオ 2:ログの構造化
生ログが NGINX アクセスログやアプリケーションの出力ログなどの非構造化または半構造化テキストである場合、直接的なクエリや分析は非効率になることがあります。このサービスは、さまざまなデータ解析プロセッサーを提供しており、異なる形式の生ログを自動的に構造化データに変換できます。これにより、後続の分析、モニタリング、およびアラートのための強固なデータ基盤が構築されます。
例:
|
未処理の生ログ |
構造化ログ出力 |
|
|
手順:Logtail構成 ページの 設定の処理 セクションで:
-
解析プロセッサーの追加:処理プラグインの追加 をクリックし、ログ形式に基づいて正規表現、デリミタ、または JSON 解析プロセッサーを設定します。この例では、NGINX ログを収集します。 を選択します。
-
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"';重要ここでのフォーマット定義は、サーバー上でログを生成するために使用されるフォーマットと 完全に一致する 必要があります。そうでない場合、ログの解析は失敗します。
-
共通設定パラメーター:以下のパラメーターは、複数のデータ解析プロセッサーに共通しており、機能と使用法は共通です。
-
[元のフィールド]:解析するソースフィールドの名前を指定します。デフォルト値は
contentで、収集されたログエントリ全体を表します。 -
[解析失敗時に元のフィールドを保持]:このオプションを有効にすることを推奨します。ログがプロセッサーによって正常に解析できない場合(たとえば、フォーマットの不一致のため)、このオプションにより、元のログコンテンツが指定された元のフィールドに保持されます。
-
[解析成功時に元のフィールドを保持]:選択した場合、ログが正常に解析されても元のログコンテンツは保持されます。
-
3. ログフィルター
ログ収集中に、DEBUG や INFO レベルのログなど、価値の低い、または無関係なログを大量に無差別に収集すると、ストレージリソースの無駄遣い、コストの増加、クエリ効率の低下、データ漏洩リスクの発生につながる可能性があります。これらの問題に対処するため、効率的で安全なログ収集のために、きめ細かいフィルタリングポリシーを実装できます。
コンテンツによるフィルター
フィールドのコンテンツに基づいてログをフィルタリングします。たとえば、level が WARNING または ERROR のログのみを収集します。
例:
|
未処理の生ログ |
|
|
|
手順:Logtail構成 ページの 設定の処理 セクションで:
処理プラグインの追加 をクリックし、 を選択します。
-
Field Name:フィルタリング対象のログフィールド。
-
フィールド値:フィルタリングに使用される正規表現。全文一致のみがサポートされており、部分的なキーワード一致はサポートされていません。
ブラックリスト
ブラックリストを使用して指定されたディレクトリやファイルを除外し、無関係なログや機密性の高いログがアップロードされるのを防ぎます。
手順:Logtail構成 ページの セクションで、ブラックリストの収集 を有効にし、追加 をクリックします。
ディレクトリとファイル名の完全一致およびワイルドカード一致をサポートしています。サポートされているワイルドカードは、アスタリスク(*)と疑問符(?)のみです。
-
[ファイルパスのブラックリスト]:無視するファイルパス。例:
-
/home/admin/private*.log:/home/admin/ディレクトリ内の、privateで始まり.logで終わるすべてのファイルを無視します。 -
/home/admin/private*/*_inner.log:/home/admin/ディレクトリ配下のprivateで始まるサブディレクトリ内にある、_inner.logで終わるファイルを無視します。
-
-
[ファイルのブラックリスト]:収集時に無視するファイル名。例:
-
app_inner.log:収集時にapp_inner.logという名前のすべてのファイルを無視します。
-
-
[ディレクトリのブラックリスト]:ディレクトリパスはスラッシュ(/)で終わってはいけません。例:
-
/home/admin/dir1/:このブラックリストエントリは無効であり、無視されます。 -
/home/admin/dir*:/home/admin/配下の、名前がdirで始まるサブディレクトリ内のすべてのファイルを無視します。 -
/home/admin/*/dir:/home/admin/ディレクトリ配下の、dirという名前の第 2 レベルのサブディレクトリ内のすべてのファイルを無視します。たとえば、/home/admin/a/dirディレクトリ内のファイルは無視されますが、/home/admin/a/b/dirディレクトリ内のファイルは収集されます。
-
コンテナフィルター
環境変数、Pod ラベル、名前空間、コンテナ名などのコンテナメタデータに基づいて収集条件を設定し、特定のコンテナからのログ収集を正確に制御します。
手順:Logtail構成 ページの 入力設定 セクションで、コンテナフィルター を有効にし、追加 をクリックします。
複数の条件は論理 AND で結合されます。すべての正規表現マッチングは Go の RE2 エンジンに基づいており、PCRE などのエンジンと比較していくつかの制限があります。正規表現が「付録:正規表現の使用制限(コンテナフィルター)」のガイドラインに準拠していることを確認してください。
-
環境変数ブラックリスト/ホワイトリスト:対象コンテナの環境変数に基づいて条件を指定します。
-
K8s Pod ラベルブラックリスト/ホワイトリスト:対象コンテナが配置されている Pod のラベルに基づいて条件を指定します。
-
K8s Pod 名の正規表現一致:Pod 名を照合して収集対象のコンテナを指定します。
-
K8s 名前空間の正規表現一致:名前空間名を照合して収集対象のコンテナを指定します。
-
K8s コンテナ名の正規表現一致:コンテナ名を照合して収集対象のコンテナを指定します。
-
コンテナラベルブラックリスト/ホワイトリスト:ラベルが指定された条件に一致するコンテナからログを収集します。この機能は Docker シナリオ向けであり、Kubernetes シナリオでの使用は推奨されません。
4. ログの分類
複数のアプリケーションやインスタンスが同じログ形式を共有するシナリオでは、ログソースを区別することが困難になる場合があります。これにより、クエリ中にコンテキストが失われ、分析が非効率になります。この問題に対処するため、ログトピックとログタギングを設定して、自動的なコンテキストの関連付けと論理的な分類を行うことができます。
ログトピック
複数のアプリケーションやインスタンスからのログが同じ形式を共有しているが、パスが異なる場合 (例:/apps/app-A/run.log と /apps/app-B/run.log)、そのソースを区別するのは困難な場合があります。このような場合、マシン グループ、カスタム名、またはファイルパスの抽出に基づいてトピックを生成し、さまざまなビジネスサービスやパスからのログを柔軟に区別することが可能になります。
手順: に移動し、トピック生成方式を選択します。以下の 3 つの方式がサポートされています:
-
マシン グループ トピック:収集設定が複数のマシン グループに適用されている場合、LoongCollector はサーバーのマシン グループ名を
__topic__フィールドの値として自動的に使用します。この方式は、ログをホストクラスターごとに分類するシナリオに適しています。 -
[カスタム]:
customized://<custom_topic_name>の形式を使用します(例:customized://app-login)。この方式は、固定のビジネス識別子を持つ静的なトピックシナリオに適しています。 -
ファイルパスからの抽出:ログファイルのフルパスからキー情報を抽出し、ログソースを動的にタグ付けします。この方式は、複数のユーザーやアプリケーションが同じログファイル名を共有しているが、パスが異なる状況に適しています。
複数のユーザーやサービスが異なるトップレベルディレクトリにログを書き込んでいるが、同じサブディレクトリパスとファイル名を使用している場合、ファイル名だけではソースを区別できません。例:
/data/logs ├── userA │ └── serviceA │ └── service.log ├── userB │ └── serviceA │ └── service.log └── userC └── serviceA └── service.logこの場合、[ファイルパスからの抽出] を設定し、正規表現を使用してフルパスからキー情報を抽出できます。一致した結果は、ログトピックとして Logstore にアップロードされます。
抽出ルール
正規表現を設定すると、システムは以下のルールに従って、キャプチャグループの数と命名に基づいて出力フィールドの形式を自動的に決定します:
ファイルパスの正規表現では、スラッシュ(/)をエスケープする必要があります。
キャプチャグループのタイプ
ユースケース
生成されるフィールド
正規表現の例
一致するパスの例
生成されるフィールド
単一のキャプチャグループ(1 つの
(.*?))ソースを区別するために、ユーザー名や環境など、1 つのディメンションのみが必要です。
__topic__フィールドを生成します。\/logs\/(.*?)\/app\.log/logs/userA/app.log__topic__:userA複数の名前なしキャプチャグループ(
(.*?)の複数インスタンス)意味的なラベルなしで複数のディメンションが必要な場合。
__tag__:__topic_{i}__:<value>の形式でタグフィールドを生成します。ここで、{i}はキャプチャグループのシーケンス番号です。\/logs\/(.*?)\/(.*?)\/app\.log/logs/userA/svcA/app.log__tag__:__topic_1__:userA__tag__:__topic_2__:svcA複数の名前付きキャプチャグループ(
(?P<name>.*?)を使用)クエリと分析を容易にするために、意味が明確なフィールド名を持つ複数のディメンションが必要な場合。
__tag__:{name}:<value>の形式でタグフィールドを生成します。\/logs\/(?P<user>.*?)\/(?P<service>.*?)\/app\.log/logs/userA/svcA/app.log__tag__:user:userA__tag__:service:svcA
ログタギング
ログタグのエンリッチメントを有効にして、コンテナの環境変数や Kubernetes Pod のラベルからキー情報を抽出し、この情報をタグとして付加して、きめ細かいログのグループ化を行うことができます。
手順:Logtail構成 ページの 入力設定 セクションで、ログタグのエンリッチメント を有効にし、追加 をクリックします。
-
[環境変数関連]:環境変数名とタグ名を設定します。環境変数の値はタグの値として保存されます。
-
環境変数名:抽出する環境変数の名前。
-
タグ名:環境変数の値を保存するタグの名前。
-
-
[Pod Label 関連]:Pod ラベル名とタグ名を設定します。Pod ラベルの値はタグの値として保存されます。
-
Pod ラベル名:抽出する Kubernetes Pod ラベルの名前。
-
タグ名:Pod ラベルの値を保存するタグの名前。
-
5. 出力設定
デフォルトでは、すべてのログが収集され、lz4 形式で圧縮されて 現在の Logstore に送信されます。同じソースからのログを異なる Logstore に振り分けるには、以下の手順に従ってください。
複数宛先への振り分け
-
複数宛先への振り分けは、LoongCollector 3.0.0 以降でのみ利用可能です。Logtail はこの機能をサポートしていません。
-
最大で 5 つの出力先を設定できます。
-
複数の出力先を設定した後、この収集設定は現在の Logstore の一覧には表示されなくなります。複数宛先への振り分け設定を表示、変更、または削除するには、詳細については、「複数宛先への振り分け設定を管理するにはどうすればよいですか?」をご参照ください。
手順:Logtail構成 ページの 出力設定 セクションで:
-
をクリックして出力設定を展開します。 -
出力先の追加 をクリックし、以下の設定を完了します:
-
Logstores:宛先の Logstore を選択します。
-
圧縮方法:サポートされているタイプは lz4 と zstd です。
-
ルート設定:タグフィールドに基づいてログをルーティングし、振り分けます。ルーティング設定に一致するログは、宛先の Logstore に送信されます。この設定を指定しない場合、収集されたすべてのログが宛先の Logstore に送信されます。
-
[タグ名]: ルーティングに使用されるタグフィールドの名前です。
__tag__:プレフィックスを付けずに、__path__などのフィールド名を直接入力します。タグフィールドは、次の 2 つのカテゴリに分類されます。タグの詳細については、「LoongCollector 収集タグの管理」をご参照ください。
-
エージェント関連:収集エージェントから生成され、プロセッサーとは独立したタグ。例:
__hostname__、__user_defined_id__。 -
入力プロセッサー関連:入力プロセッサーから生成され、ログにコンテキスト情報を追加するタグ。例:ファイル収集の場合は
__path__、K8s 収集の場合は_pod_name_および_container_name_。
-
-
[タグ値]:ログのタグフィールドがこの値に一致する場合、そのログは宛先の Logstore に送信されます。
-
[このタグフィールドを破棄するかどうか]:有効にすると、アップロードされるログにこのタグフィールドは含まれなくなります。
-
-
ステップ 4 : クエリと分析
ログ処理とプラグインを設定した後、次へ をクリックして クエリと分析の設定 ページを開きます。
-
デフォルトでは、フルテキストインデックスが有効になっており、生ログの内容からキーワードを検索できます。
-
フィールドに基づいて正確なクエリを実行するには、[プレビューデータ] の読み込み後に 自動インデックスの生成 をクリックします。Log Service は、プレビューデータの先頭エントリに基づいて フィールドインデックス を生成します。
設定が完了したら、次へ をクリックして収集プロセスを完了します。
ステップ 5:検証とトラブルシューティング
収集設定を作成し、マシングループに適用すると、システムは自動的に設定をデプロイし、増分ログの収集を開始します。
収集ログの表示
-
ログファイルへの新規ログ書き込みの確認:LoongCollector は増分ログのみを収集します。
tail -f /path/to/your/log/fileコマンドを実行し、サービス操作をトリガーして新しいログを生成します。 -
ログのクエリ:ターゲット 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)。
一般的な問題のトラブルシューティング
マシングループのハートビート失敗
-
ユーザー識別子を確認します:サーバーが ECS インスタンスでない場合、または ECS インスタンスとプロジェクトが異なる Alibaba Cloud アカウントに属している場合は、指定されたディレクトリに正しいユーザー識別子が含まれていることを確認してください。
-
Linux:
cd /etc/ilogtail/users/ && touch <uid>コマンドを実行して、ユーザー識別子ファイルを作成します。 -
Windows:
C:\LogtailData\users\ディレクトリに移動し、<uid>という名前の空のファイルを作成します。
現在のプロジェクトの Alibaba Cloud アカウント ID と同じ名前のファイルが指定されたパスに存在する場合、ユーザー識別子は正しく設定されています。
-
-
マシングループ識別子を確認します:カスタム ID を持つマシングループを使用する場合、指定されたディレクトリに
user_defined_idファイルが存在することを確認してください。ファイルが存在する場合、その内容がマシングループに設定されたカスタム ID と一致することも確認してください。-
Linux:
# カスタム ID を設定します。ディレクトリが存在しない場合は、手動で作成します。 echo "user-defined-1" > /etc/ilogtail/user_defined_id -
Windows:
C:\LogtailDataディレクトリ (なければ作成します) に、user_defined_idファイルを作成し、カスタム ID を書き込みます。
-
-
ユーザー識別子とマシングループ識別子の両方が正しく設定されている場合は、「LoongCollector (Logtail) マシングループのトラブルシューティングガイド」で詳細なトラブルシューティング手順をご参照ください。
ログ収集エラーまたはフォーマットエラー
トラブルシューティングのアプローチ:これらのエラーは、ネットワーク接続と基本設定が正常であることを示します。原因は通常、ログ内容 と 解析ルール の不一致です。特定のエラーメッセージを表示して原因を特定します:
-
Logtail構成 ページで、エラーが発生している LoongCollector (Logtail) 構成の名前をクリックします。(ログ収集エラー) タブで、コスト上の理由 をクリックしてクエリの時間範囲を設定します。
-
セクションで、エラーログのアラートタイプを確認し、「一般的なログ収集エラー」で対応する解決策を確認してください。
次のステップ
-
データの可視化:可視化ダッシュボードを使用して、主要なメトリクスの傾向を監視します。
-
データ異常の自動アラート:アラートポリシーを設定して、システムの異常をリアルタイムで検出します。
コンテナログ収集のトラブルシューティング
-
LoongCollector (Logtail) を設定した後、対象のログファイルに新しいログが含まれていない場合、LoongCollector (Logtail) はそこからデータを収集しません。
よくある質問
複数宛先への分配設定の管理
複数宛先への分配設定は複数の Logstore に関連付けられているため、プロジェクトレベルの管理ページで管理する必要があります。
-
Simple Log Service (SLS) コンソールにログインし、対象のプロジェクト名をクリックします。
-
プロジェクトページで、左側メニューで
をクリックします。説明このページでは、誤って削除された Logstore の残存設定を含め、プロジェクト内のすべての収集設定を一元的に管理します。
ACK クラスターのログを別アカウントに転送
ACK クラスターに LoongCollector (Logtail) コンポーネントを手動でインストールし、対象アカウントの Alibaba Cloud アカウント ID またはアクセス認証情報 (AccessKey) を使用して設定することで、別の Alibaba Cloud アカウントの SLS プロジェクトにコンテナログを送信できます。
シナリオ:組織構造、権限分離、集中モニタリングなどの理由により、ACK クラスターのログデータを別の Alibaba Cloud アカウントの SLS プロジェクトに収集する場合は、LoongCollector (Logtail) を手動でインストールしてクロスアカウント収集を有効にします。
手順:次の手順に従って LoongCollector を手動でインストールします。詳細については、「Install and configure Logtail」をご参照ください。
-
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 -
loongcollector-custom-k8s-packageディレクトリに移動し、./loongcollector/values.yaml設定ファイルを変更します。# ===================== 必須情報 ===================== # このクラスターから収集されたログが格納されるプロジェクト。例: k8s-log-custom-sd89ehdq projectName: "" # プロジェクトが配置されているリージョン。例: cn-shanghai region: "" # プロジェクトを所有する Alibaba Cloud アカウントの ID。ID は引用符 ("") で囲みます。例: "123456789" aliUid: "" # ネットワークタイプ。有効な値: Internet および Intranet。デフォルト値: Internet。 net: Internet # Alibaba Cloud アカウントまたは RAM ユーザーの AccessKey ID と AccessKey secret。AliyunLogFullAccess ポリシーが必要です。 accessKeyID: "" accessKeySecret: "" # カスタムクラスター ID。ID には、大文字、小文字、数字、ハイフン (-) のみを使用できます。 clusterID: "" -
loongcollector-custom-k8s-packageディレクトリで、LoongCollector とその依存関係をインストールするには、次のコマンドを実行します。bash k8s-custom-install.sh install -
インストールが完了したら、コンポーネントのステータスを確認します。
ポッドの起動に失敗した場合は、values.yaml ファイルの設定内容と、必要なイメージがプルされていることを確認してください。
# ポッドのステータスを確認 kubectl get po -n kube-system | grep loongcollector-dsSLS は、次のリソースも自動的に作成します。これらは SLS コンソールで表示できます。
タイプ
パラメーター
説明
プロジェクト
values.yaml ファイルで定義された
projectNameの値異なるサービスからのログを分離するリソース管理ユニットです。
より柔軟なログリソース管理のためにプロジェクトを作成するには、「プロジェクトの作成」 をご参照ください。
マシングループ
k8s-group-${clusterID}ログ収集ノードのセットです。
重要LoongCollector コンポーネントは、config-operation-log という名前の Logstore を作成しません。この Logstore がすでに存在する場合、LoongCollector は新しいログを書き込みません。
単一ソースに対する複数設定
デフォルトでは、SLS はデータの重複を防ぐため、ログソースごとに 1 つの収集設定のみを使用します:
-
各テキストログファイルに一致する Logtail の収集設定は 1 つだけです。
-
コンテナの標準出力 (stdout) の場合:
-
新しい標準出力テンプレートを使用する場合、デフォルトでは stdout を収集できる収集設定は 1 つだけです。
-
従来の標準出力テンプレートは、追加設定なしでデフォルトで複数収集をサポートします。
-
-
SLS コンソールにログインし、対象のプロジェクトに移動します。
-
左側メニューで
Logstores をクリックし、対象の Logstore を見つけます。 -
Logstore 名の横にある
アイコンをクリックして、詳細を展開します。 -
Logtail構成 をクリックし、設定リストで対象の Logtail 設定を見つけ、Logtail構成 列の Logtail 設定の管理 をクリックします。
-
設定ページで 編集 をクリックし、入力設定 セクションまでスクロールします。
-
テキストファイルログの場合は、ファイルを複数回収集できるようにする を有効にします。
-
コンテナの標準出力の場合は、標準出力の複数回の収集を許可する を有効にします。
-
アンインストール時の依存関係エラー
症状: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 はこの依存関係が解消されるまでアンインストールをブロックします。
解決策:コンポーネントをアンインストールする前に、次の手順に従って依存関係を削除します:
-
ACK コンソールにログインします。
-
クラスター一覧で、対象のクラスター名をクリックします。
-
左側メニューで アドオン管理 をクリックします。
-
[Add-ons] ページで
terway-eniipコンポーネントを見つけ、 をクリックします。 -
表示される確認ダイアログボックスで、OK をクリックします。
-
設定が適用されたら、loongcollector (logtail-ds) コンポーネントのアンインストールを再度試してください。
最後のログエントリの遅延または切り捨て
分析:ログの切り捨ては、ログファイルの最終行に改行文字がない場合、または例外スタックなどの複数行ログエントリが不完全な場合に発生することがよくあります。これは、コレクターがログエントリの完了を判断できないため、最後のセグメントが早期に分割されたり、遅延して報告されたりする可能性があるためです。処理メカニズムは LoongCollector (Logtail) のバージョンによって異なります:
-
1.8 より前のバージョン:
ログの最終行に改行 (または復帰) がない場合、または複数行ログが不完全な場合、コレクターは次の書き込み操作で出力がトリガーされるのを待機します。これにより、新しいログが書き込まれるまで最後のログエントリが長時間保持される可能性があります。 -
1.8 以降のバージョン:
これらのバージョンでは、ログが無期限に保持されるのを防ぐためにタイムアウトフラッシュ機構が導入されています。コレクターが不完全なログ行を検出するとタイマーが開始され、タイムアウト後に現在のバッファが自動的に送信されることで、最終的にログが収集されます。-
デフォルトのタイムアウト:通常は数秒です (ほとんどのシナリオでログの整合性を確保します)。
-
必要に応じてこの値を調整できますが、0 には設定しないでください。0 に設定すると、ログの切り捨てや部分的なデータ損失が発生する可能性があります。
-
解決策:
タイムアウト期間を延長することで、ログが完全に書き込まれてから収集されるように設定できます。
-
SLS コンソールにログインし、対象のプロジェクトに移動します。
-
左側メニューで
Logstores をクリックし、対象の Logstore を見つけます。 -
Logstore 名の横にある
アイコンをクリックして、詳細を展開します。 -
Logtail構成 をクリックし、設定リストで対象の Logtail 設定を見つけ、Logtail構成 列の Logtail 設定の管理 をクリックします。
-
設定ページで 編集 をクリックします。
-
に移動し、次の JSON 設定を追加してタイムアウト期間をカスタマイズします。
{ "FlushTimeoutSecs": 1 }-
デフォルト値:起動パラメーター
default_reader_flush_timeoutによって決まります。通常は数秒です。 -
単位:秒。
-
推奨値:1 以上。0 に設定しないでください。ログの切り捨てや部分的なデータ損失が発生する可能性があります。
-
-
-
設定が完了したら、OK をクリックします。
ネットワークエンドポイントのフェールオーバー
LoongCollector (Logtail) がネットワーク障害や接続タイムアウトなど、内部ネットワークで通信異常を検知した場合、データ転送のためにパブリックネットワークエンドポイントへ自動的にフェールオーバーします。これにより、ログ収集の継続性と信頼性を確保し、ログの滞留やデータ損失を防止できます。
-
LoongCollector:接続が復旧すると、内部ネットワークに自動的に切り戻します。
-
Logtail:自動的に切り戻しません。内部ネットワークでの通信を再開するには、コンポーネントを手動で再起動する必要があります。
付録:ネイティブプロセッサーリファレンス
プロセッサ設定 セクションの Logtail 構成 ページで、プロセッサを追加して生ログを構造化します。既存の収集設定に処理プラグインを追加するには、以下の手順に従います。
-
左側のナビゲーションウィンドウで、
Logstores を選択し、対象の Logstore を検索します。 -
その名前の前にある
アイコンをクリックして Logstore を展開します。 -
Logtail 構成 をクリックします。構成リストで対象の Logtail 構成を見つけ、アクション列の Logtail 構成の管理 をクリックします。
-
Logtail 構成ページで、編集 をクリックします。
このセクションでは、一般的なログ処理ユースケースをカバーする、よく使用される処理プラグインのみを紹介します。その他の機能については、「拡張プロセッサ」をご参照ください。
プラグインの組み合わせルール(LoongCollector / Logtail 2.0 以降):
-
ネイティブプロセッサと拡張プロセッサは、個別に使用することも、必要に応じて組み合わせることもできます。
-
ネイティブプロセッサは、パフォーマンスと安定性が高いため、優先的に使用してください。
-
ネイティブ機能がビジネスニーズを満たせない場合は、構成済みのネイティブプロセッサの後に拡張プロセッサを追加して、補足的な処理を行います。
順序制約:
すべてのプラグインは、構成された順序で順次実行され、処理チェーンを形成します。注意:すべてのネイティブプロセッサは、拡張プロセッサの前に配置する必要があります。拡張プロセッサを追加した後は、ネイティブプロセッサを追加することはできません。
データ解析 (正規表現モード)
正規表現を使用してログからフィールドを抽出し、ログをキーと値のペアに解析できます。その後、各フィールドを個別にクエリおよび分析できます。
例:
|
生ログ |
結果 |
|
|
手順: Logtail構成 ページの 設定の処理 セクションで、処理プラグインの追加 をクリックし、次に を選択します:
-
[正規表現]:ログのマッチングに使用します。自動生成または手動入力が可能です。
-
正規表現の自動生成:
-
[正規表現の自動生成] をクリックします。
-
ログサンプル フィールドで、抽出したいログの内容を強調表示します。
-
[正規表現の生成] をクリックします。
コンテンツをハイライトすると、ログテキストの上に[正規表現を生成] ボタンが表示されます。
-
-
ログ形式に基づいて正規表現を手動で入力します。
設定が完了したら、[検証] をクリックして、正規表現がログコンテンツを正しく解析できるかをテストします。
-
-
[ログ抽出フィールド]: 抽出されたログ値のフィールド名 (キー) を設定します。
-
その他のパラメーターについては、「ユースケース 2:構造化ログ」の共通設定パラメーターの説明をご参照ください。
データ解析 (区切り文字モード)
区切り文字を使用して、ログコンテンツをキーと値のペアに解析できます。単一文字および複数文字の区切り文字の両方に対応しています。
例:
|
生ログ |
指定の文字で |
|
|
手順: Logtail構成 ページの 設定の処理 セクションで、処理プラグインの追加 をクリックし、 を選択します:
-
[区切りモード]: ログコンテンツを分割するために使用する文字です。
例:CSV ファイルの場合は、カスタム を選択し、半角のコンマ (,) を入力します。
-
[引用符]: フィールド値に区切り文字が含まれている場合、そのフィールドを引用符で囲んで、誤った分割を防ぐ必要があります。
-
[ログ抽出フィールド]:結果の列のフィールド名 (キー) を順番に設定します。以下のルールが適用されます:
-
フィールド名には、英字、数字、アンダースコア (_) のみを含めることができます。
-
フィールド名は、英字またはアンダースコア (_) で始まる必要があります。
-
最大長は 128 バイトです。
-
-
その他のパラメーターについては、「ユースケース 2:構造化ログ」の共通設定パラメーターの説明をご参照ください。
データ解析 (JSON モード)
ログから JSON オブジェクトをキーと値のペアに解析できます。
例:
|
生ログ |
結果 |
|
|
手順:Logtail構成 ページの 設定の処理 セクションで、処理プラグインの追加 をクリックし、次に を選択します:
-
[元のフィールド]: デフォルト値は
contentです。このフィールドには、解析対象の生のログコンテンツが格納されます。 -
その他のパラメーターについては、「ユースケース 2:構造化ログ」の共通設定パラメーターの説明をご参照ください。
Expand JSON field
You can parse nested JSON logs into key-value pairs by specifying an expansion depth.
Example:
|
Raw log |
Expansion depth: 0 |
Expansion depth: 1 |
|
|
|
Procedure: On the [Logtail構成] page, in the [設定の処理] section, click [処理プラグインの追加], and then select :
-
[元のフィールド]: The name of the source field to expand, such as
content. -
[JSON 拡張度]: The number of levels to expand within a JSON object. A value of 0 (the default) expands all levels. A value of 1 prevents the expansion of nested objects.
-
[JSON 拡張連結文字]: The character used to join nested field names. The default is an underscore _.
-
[JSON のフィールドプレフィックス拡張]: The prefix for field names after JSON expansion.
-
[配列を展開する]: Enable this option to expand an array into indexed key-value pairs.
Example:
{"k":["a","b"]}is expanded to{"k[0]":"a","k[1]":"b"}.To rename an expanded field, for example from
prefix_s_key_k1tonew_field_name, you can add a [フィールドの名前変更] processor to perform the mapping. -
For information about other parameters, see the description of common configuration parameters in Use Case 2: Structured logs.
JSON 配列の解析
json_extract関数を使用して、JSON 配列から JSON オブジェクトを抽出します。
例:
|
生ログ |
抽出されたオブジェクト |
|
|
手順: Logtail構成 ページの 設定の処理 セクションで、処理モード を SPL に切り替え、SPL 文 を設定し、 json_extract 関数を使用して JSON 配列から JSON オブジェクトを抽出します。
例:ログフィールド content 内の JSON 配列から要素を抽出し、その結果を、 json1 および json2 という名前の新しいフィールドに保存します。
* | extend json1 = json_extract(content, '$[0]'), json2 = json_extract(content, '$[1]')データ解析 (Apache モード)
Apache ログ設定ファイルの定義に基づいて、ログコンテンツを複数のキーと値のペアに構造化できます。
例:
|
生ログ |
Apache 共通ログ形式 |
|
|
手順:Logtail構成ページの設定の処理セクションで処理プラグインの追加をクリックし、次にを選択します:
-
[ログ形式]: combined
-
[APACHE 設定フィールド]:選択した ログ形式 に基づいてシステムによって自動的に入力されます。
重要自動入力された内容が、サーバー上の Apache 設定ファイル (通常は
/etc/apache2/apache2.confにあります) の LogFormat 定義と同一であることを確認してください。 -
その他のパラメーターについては、「ユースケース 2:構造化ログ」の共通設定パラメーターの説明をご参照ください。
データマスキング
ログ内の機密データをマスクします。
例:
|
生ログ |
マスクされた結果 |
|
|
手順:Logtail構成 ページで、設定の処理 セクションで 処理プラグインの追加 をクリックし、次に を選択します:
時刻解析
ログ内の時間フィールドを解析し、解析結果をログの__time__フィールドとして設定します。
例:
|
生ログ |
結果 |
|
解析されたログは、構造化された key-value ペアとして表示され、time フィールドはログ時間 (たとえば、09-29 09:56:01) として正しく解析され、 |
手順: Logtail構成 ページの 設定の処理 セクションで 処理プラグインの追加 をクリックし、次に を選択します:
-
[元のフィールド]: 解析対象の時間値を含むフィールドです。
-
[時間形式]:ログ内の時刻値に対応する時間形式。
-
[タイムゾーン]: ソース時間フィールドのタイムゾーンです。 デフォルトでは、システムは LoongCollector (Logtail) プロセスが実行されている環境のタイムゾーンを使用します。
付録:正規表現の制限
コンテナフィルタリングの正規表現は Go 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__ フィールドに統合され、ストレージの最適化とフォーマットの標準化が実現されています。
新しい標準出力バージョンの主な利点
大幅なパフォーマンス向上
C++ で再構築され、古い Go 実装と比較してパフォーマンスが 180% ~ 300% 向上しました。
データ処理のためのネイティブプラグインとマルチスレッド並列処理をサポートし、システムリソースを最大限に活用します。
ネイティブプラグインと Go プラグインを柔軟に組み合わせて、複雑なシナリオ要件に対応します。
信頼性の向上
標準出力ログローテーションキューをサポートします。ログ収集メカニズムはファイル収集メカニズムと統一されており、標準出力ログの高速なローテーションシナリオで高い信頼性を提供します。
リソース消費の低減
CPU 使用率が 20% ~ 25% 削減されます。
メモリ使用量が 20% ~ 25% 削減されます。
運用保守の一貫性の向上
統一されたパラメーター構成:新しい標準出力収集プラグインの構成パラメーターは、ファイル収集プラグインと一貫しています。
統一されたメタデータ管理:コンテナメタデータフィールドの命名とタグログのストレージ場所は、ファイル収集シナリオと統一されています。コンシューマー側は 1 つの処理ロジックのみを維持すれば済みます。
新旧バージョンの機能比較
機能の次元
旧バージョンの特徴
新バージョンの特徴
ストレージ方法
メタデータは通常フィールドとしてログコンテンツに直接埋め込まれます。
メタデータは
__tag__タグに一元的に格納されます。ストレージ効率
各ログが完全なメタデータを繰り返し保持するため、より多くのストレージスペースを消費します。
同じコンテキスト内の複数のログがメタデータを再利用できるため、ストレージコストが節約されます。
フォーマットの一貫性
コンテナファイル収集フォーマットと一貫性がありません。
フィールドの命名とストレージ構造は、コンテナファイル収集と完全に整合しており、統一されたエクスペリエンスを提供します。
クエリアクセス方法
フィールド名で直接クエリできます。例:
_container_name_。__tag__を介して対応するキーと値にアクセスする必要があります。例:__tag__: _container_name_。コンテナメタデータフィールドマッピングテーブル
旧バージョンのフィールド名
新バージョンのフィールド名
_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>の形式で格納され、ログコンテンツに埋め込まれることはありません。新バージョン変更のユーザーへの影響
コンシューマー側の適応:ストレージ場所が「コンテンツ」から「タグ」に変更されたため、ユーザーのログ消費ロジックを適宜調整する必要があります。例:クエリ時に __tag__ を介してフィールドにアクセスする必要があります。
SQL 互換性:クエリ SQL は自動的に互換性が確保されるように調整されているため、ユーザーは新旧両バージョンのログを同時に処理するためにクエリ文を変更する必要はありません。