Kubernetes 環境では、コンテナログが散在し、一元管理が困難です。これにより、トラブルシューティングの効率が低下し、運用コストが高くなります。LoongCollector を DaemonSet としてデプロイし、Simple Log Service コンソールで収集設定を作成することで、ログ収集と構造化処理を統一します。これにより、ログ検索、問題診断、および可観測性分析の効率が向上します。
適用範囲
-
ランタイム環境:
-
Alibaba Cloud Container Service for Kubernetes (ACK) (マネージドクラスターと専用クラスターの両方) および自己管理型 Kubernetes クラスターをサポートします。
-
Kubernetes のバージョンは 1.10.0 以降である必要があり、
Mount propagation: HostToContainerをサポートしている必要があります。 -
コンテナランタイム (Docker と Containerd のみサポート)
-
Docker:
-
docker.sock へのアクセス権限が必要です。
-
標準出力の収集は、JSON タイプのログドライバーのみをサポートします。
-
ストレージドライバーは overlay と overlay2 のみをサポートします。他のタイプの場合は、ログディレクトリを手動でマウントしてください。
-
-
Containerd:containerd.sock へのアクセス権限が必要です。
-
-
-
リソース要件:LoongCollector (Logtail) は system-cluster-critical の優先度で実行されます。クラスターのリソースが不足している場合はデプロイしないでください。そうしないと、ノード上の既存の Pod が退去させられる可能性があります。
-
CPU:少なくとも 0.1 コアを予約してください。
-
メモリ:収集コンポーネントには少なくとも 150 MB、コントローラーコンポーネントには少なくとも 100 MB が必要です。
-
実際の使用量は、収集レート、監視対象のディレクトリとファイルの数、および送信ブロッキングレベルによって異なります。実際の使用量が制限の 80% を下回るようにしてください。
-
-
権限要件:デプロイメントに使用される Alibaba Cloud アカウントまたは RAM ユーザーには、
AliyunLogFullAccess権限が必要です。カスタムポリシーを作成するには、「AliyunCSManagedLogRolePolicy」システム権限ポリシーをご参照ください。その権限をコピーし、対象の RAM ユーザーまたはロールに割り当てることで、詳細な権限コントロールが可能です。
収集設定のワークフロー
-
LoongCollector のインストール:LoongCollector を DaemonSet モードでデプロイし、各クラスターノードで 1 つのコレクターコンテナを実行して、そのノード上のすべてのコンテナからログを収集します。
Sidecar モードについては、「Kubernetes Pod のテキストログを収集 (Sidecar モード)」をご参照ください。
-
Logstore の作成:収集したログを保存するために使用します。
-
-
グローバル設定と入力設定:収集設定名を定義し、ログソースと収集範囲を指定します。
-
ログの処理と構造化:ログのフォーマットに基づいて処理を設定します。
-
複数行ログ:単一のログエントリが複数行にまたがる場合 (Java の例外スタックや Python のトレースバックなど) に適用されます。行頭の正規表現を使用して、各ログエントリの開始を識別します。
-
構造化解析:解析プラグイン (正規表現、デリミタ、NGINX モードなど) を使用して、生の文字列を構造化されたキーと値のペアに抽出し、クエリと分析を容易にします。
-
-
ログフィルタリング:収集ブラックリストとコンテンツフィルターを設定して関連ログを選択し、冗長なデータ転送とストレージを削減します。
-
ログの分類:トピックとタグ付けを使用して、異なるアプリケーション、コンテナ、またはパスからのログを区別します。
-
-
クエリと分析の設定:キーワード検索のためにフルテキストインデックスがデフォルトで有効になっています。構造化フィールドに対する正確なクエリと分析のためにフィールドインデックスを有効にし、取得効率を向上させます。
-
検証とトラブルシューティング:設定後、ログ収集が成功したことを確認します。データが収集されない、ハートビートの失敗、解析エラーなどの問題が発生した場合は、「一般的な問題のトラブルシューティング」をご参照ください。
ステップ 1:LoongCollector のインストール
LoongCollector は、Alibaba Cloud Simple Log Service の次世代ログ収集エージェントであり、Logtail のアップグレード版です。両者は共存できません。代わりに Logtail をインストールするには、「Logtail のインストール、実行、アップグレード、アンインストール」をご参照ください。
このトピックでは、LoongCollector の基本的なインストールプロセスのみを説明します。詳細なパラメーターについては、「インストールと設定」をご参照ください。LoongCollector または Logtail がすでにインストールされている場合は、このステップをスキップして、「ステップ 2:Logstore の作成」に直接進んでください。
LoongCollector (Logtail) の実行中にホストマシンの時刻が変更されると、ログが重複したり失われたりする可能性があります。
ACK クラスター
Container Service コンソールから LoongCollector をインストールします。デフォルトでは、ログは現在の Alibaba Cloud アカウント下の Simple Log Service プロジェクトに送信されます。
ACK コンソールにログインします。左側のナビゲーションウィンドウで、クラスターリスト をクリックします。
-
対象のクラスター名をクリックして、詳細ページに移動します。
-
左側のナビゲーションウィンドウで、アドオン管理 をクリックします。
-
ログとモニタリング タブに切り替えます。loongcollector を見つけて、インストール をクリックします。
説明クラスターを作成する際に、コンポーネント設定 を選択し、Log Service の使用 にチェックを入れることができます。その後、プロジェクトの作成 または プロジェクトの選択 を選択できます。
インストール後、Simple Log Service は現在のアカウント下に以下のリソースを自動的に作成します。これらは Simple Log Service コンソールで確認できます。
リソースタイプ
リソース名
目的
プロジェクト
k8s-log-${cluster_id}異なるビジネスのログを分離するリソース管理ユニット。
より柔軟なログリソース管理のために独自のプロジェクトを作成するには、「プロジェクトの作成」をご参照ください。
マシングループ
k8s-group-${cluster_id}ログ収集ノードのコレクション。
Logstore
config-operation-log重要この Logstore は削除しないでください。
loongcollector-operator コンポーネントからのログを保存します。標準の Logstore と同じ課金方法を使用します。詳細については、「取り込みデータ量課金方式の課金項目」をご参照ください。この Logstore に収集設定を作成しないことを推奨します。
自己管理型クラスター
-
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。引用符で囲んでください (例: "123456789") aliUid: "" # ネットワークタイプ。有効な値: Internet (パブリックネットワーク) と Intranet (プライベートネットワーク)。デフォルト値: Internet。 net: Internet # Alibaba Cloud アカウントまたは RAM ユーザーの AccessKey ID と AccessKey Secret。アカウントには AliyunLogFullAccess システム権限ポリシーが必要です。 accessKeyID: "" accessKeySecret: "" # カスタムクラスター ID。文字、数字、ハイフン (-) のみ使用できます。 clusterID: "" -
loongcollector-custom-k8s-packageディレクトリで、次のコマンドを実行して LoongCollector とその依存関係をインストールします:bash k8s-custom-install.sh install -
インストール後、コンポーネントのステータスを確認します。
Pod の起動に失敗した場合は、values.yaml の設定が正しいこと、および関連するイメージが正常にプルされていることを確認してください。
# Pod のステータスを確認 kubectl get po -n kube-system | grep loongcollector-dsSimple 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 内のストレージユニットです。
-
Simple Log Service コンソールにログインし、対象のプロジェクト名をクリックします。
-
左側のナビゲーションウィンドウで、
を選択し、[+] をクリックして Logstore を作成します:-
Logstore 名:プロジェクト内で一意の名前を入力します。この名前は作成後に変更できません。
-
Logstore タイプ:ニーズに応じて標準またはクエリを選択します。
-
課金モード:
-
使用機能課金 (変更できません):ストレージ、インデックス、読み書き操作などの個々のリソースに基づいて課金されます。小規模なシナリオや、機能の使用量が不確かな場合に適しています。
-
書き込みデータ量課金:取り込まれた生データ量のみに基づいて課金されます。30 日間の無料ストレージと、無料のデータ変換および配信機能が含まれます。ストレージ期間が 30 日に近いビジネスシナリオや、複雑なデータ処理パイプラインに適しています。
-
-
データ保持時間:ログを保持する日数を設定します (1~3650 日、3650 は永久保持を意味します)。デフォルトは 30 日です。
-
他の設定はデフォルトのままにし、OK をクリックします。他の設定の詳細については、「Logstore の管理」をご参照ください。
-
ステップ 3:ログ収集ルールの作成と設定
LoongCollector がどのログを収集し、その構造をどのように解析し、コンテンツをどのようにフィルタリングするかを定義し、設定を登録済みのマシングループにバインドします。
-
Logstore ページで、対象の Logstore 名の前にある
アイコンをクリックして展開します。 -
アイコンの横にある データのインポート をクリックし、データのインポート ダイアログボックスでログソースに基づいて取り込みテンプレートを選択し、今すぐ統合 をクリックします:-
コンテナ標準出力:[K8s-Stdout-New] を選択
コンテナ標準出力収集には、新しいテンプレートとレガシーテンプレートの 2 つが利用可能です。新しいテンプレートの使用を推奨します。バージョン間の違いについては、「付録:新しいコンテナ標準出力バージョンとレガシーバージョンの比較」をご参照ください。
-
クラスターテキストログ:[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~1000。この値を 0 に設定し、ファイルを含むディレクトリへのパスを設定することを推奨します。
2. ログの処理と構造化
ログ処理ルールを設定して、生の非構造化ログを構造化された検索可能なデータに変換します。これにより、ログのクエリと分析の効率が向上します。設定する前にログサンプルを追加します:
Logtail構成 ページで、設定の処理 セクションに移動します。ログサンプルの追加 をクリックし、収集したいログコンテンツを入力します。システムはこのサンプルを使用してログ形式を検出し、正規表現と解析ルールの生成を支援し、設定の複雑さを軽減します。
シナリオ 1:複数行ログの処理 (Java スタックトレースログなど)
Java の例外スタックトレースや JSON などのログは、しばしば複数行にわたります。デフォルトの収集モードでは、これらは複数の不完全なレコードに分割され、コンテキスト情報が失われます。複数行収集モードを有効にし、行頭の正規表現を設定して、同じログエントリの連続する行を 1 つの完全なログにマージします。
例:
|
処理なしの生ログ |
デフォルトの収集モードでは、各行が個別のログとして扱われます。スタックトレース情報が断片化され、コンテキストが失われます。 |
複数行モードが有効。行頭の正規表現が完全なログを識別し、完全な意味構造を保持します。 |
|
|
|
|
設定手順:Logtail構成 ページで、設定の処理 セクションに移動し、マルチラインモード を有効にします:
-
タイプ:カスタム または マルチライン JSON を選択します。
-
カスタム:生ログの形式が異なる場合に使用します。行先頭の正規表現 を設定して、各ログエントリの最初の行を識別します。
-
行先頭の正規表現:行全体に一致する正規表現を自動生成または手動で入力できます。例えば、前述のシナリオでは、一致する正規表現は
\[\d+-\d+-\w+:\d+:\d+,\d+]\s\[\w+]\s.*です。-
自動生成:[正規表現の自動生成] をクリックします。ログサンプル テキストボックスで、抽出するログコンテンツを選択し、[正規表現の生成] をクリックします。
-
手動入力:[正規表現の手動入力] をクリックし、式を入力してから [検証] をクリックします。
-
-
-
マルチライン JSON:すべての生ログが標準の JSON 形式を使用する場合に選択します。Simple Log Service は、個々の JSON ログエントリ内の改行を自動的に処理します。
-
-
分割失敗の処理方法:
-
Discard:行頭ルールに一致しないテキストを破棄します。
-
単一行を保持:元の単一行モードを使用して、一致しないテキストを分割して保持します。
-
シナリオ 2:構造化ログ
生ログが NGINX のアクセスログやアプリケーションの出力ログのような非構造化または半構造化テキストである場合、直接クエリや分析を行うのは非効率です。Simple Log Service は、さまざまな形式の生ログを自動的に構造化データに変換する複数の解析プラグインを提供し、その後の分析、モニタリング、アラート機能の強固な基盤を築きます。
例:
|
処理なしの生ログ |
構造化解析されたログ |
|
|
設定手順: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/配下の第 2 レベルにある "dir" という名前のサブディレクトリ配下のすべてのファイルを無視します。例えば、/home/admin/a/dir配下のファイルは無視されますが、/home/admin/a/b/dir配下のファイルは収集されます。
-
コンテナフィルタリング
コンテナのメタデータ (環境変数、Pod ラベル、名前空間、コンテナ名など) に基づいて収集条件を設定し、どのコンテナのログを収集するかを正確に制御します。
設定手順:Logtail構成 ページで、入力設定 セクションに移動します。コンテナフィルター を有効にし、追加 をクリックします。
複数の条件は AND 関係を使用します。すべての正規表現マッチングは Go の RE2 エンジンを使用しており、PCRE などのエンジンよりも機能が少ないです。正規表現を作成する際は、「付録:正規表現の使用制限 (コンテナフィルタリング)」のガイドラインに従ってください。
-
環境変数ブラックリスト/ホワイトリスト:収集するコンテナの環境変数条件を指定します。
-
Kubernetes Pod ラベルブラックリスト/ホワイトリスト:収集するコンテナを含む Pod のラベル条件を指定します。
-
Kubernetes Pod 名の正規表現一致:Pod 名で収集するコンテナを指定します。
-
Kubernetes 名前空間の正規表現一致:名前空間名で収集するコンテナを指定します。
-
Kubernetes コンテナ名の正規表現一致:コンテナ名で収集するコンテナを指定します。
-
コンテナラベルブラックリスト/ホワイトリスト:ラベルが指定された条件を満たすコンテナを収集します。Docker シナリオで使用します。Kubernetes シナリオでは使用しないでください。
4. ログの分類
複数のアプリケーションやインスタンスが同じログ形式を共有している場合、ログソースを区別することが難しくなります。これにより、クエリ中にコンテキストが失われ、分析が非効率になります。ログのトピックとタグ付けを設定して、コンテキストを自動的に関連付け、ログを論理的に分類します。
ログトピックの設定
複数のアプリケーションやインスタンスが、/apps/app-A/run.log や /apps/app-B/run.log のように、同じフォーマットだが異なるパスでログを生成する場合、収集されたログは区別できなくなります。この場合、マシングループ、カスタム名、またはファイルパスの抽出に基づいてトピックを生成し、ビジネスやパスソースによってログを柔軟に区別します。
設定手順: に移動し、トピック生成方法を選択します。3 つのタイプがサポートされています:
-
マシングループトピック:収集設定を複数のマシングループに適用すると、LoongCollector は自動的にマシングループ名を
__topic__フィールドとして使用します。ログがホストクラスターごとに分割されるシナリオで使用します。 -
カスタム:フォーマットは
customized://<カスタムトピック名>です。例:customized://app-login。固定のビジネス識別子を持つ静的なトピックシナリオで使用します。 -
ファイルパス抽出:ログファイルの完全なパスからキー情報を抽出し、ログソースを動的にタグ付けします。複数のユーザーやアプリケーションが同じログファイル名を使用するが、異なるパスを使用する場合に使用します。
複数のユーザーやサービスが異なるトップレベルディレクトリにログを書き込むが、同一のサブパスとファイル名を使用する場合、ファイル名だけではソースを区別できません。例:
/data/logs ├── userA │ └── serviceA │ └── service.log ├── userB │ └── serviceA │ └── service.log └── userC └── serviceA └── service.logこの場合、ファイルパス抽出を設定し、正規表現を使用して完全なパスからキー情報を抽出します。一致した結果が Logstore にアップロードされるログトピックになります。
抽出ルール:正規表現のキャプチャグループ
正規表現を設定する際、システムはキャプチャグループの数と名前に基づいて出力フィールドの形式を自動的に決定します。以下の通りです:
ファイルパスの正規表現では、スラッシュ (/) をエスケープしてください。
キャプチャグループタイプ
ユースケース
生成されるフィールド
正規表現の例
一致するパスの例
生成されるフィールド
単一のキャプチャグループ (
(.*?)が 1 つのみ)ソースを区別するために 1 つのディメンションのみが必要 (ユーザー名や環境など)
__topic__フィールドを生成\/logs\/(.*?)\/app\.log/logs/userA/app.log__topic__: userA複数のキャプチャグループ—名前なし (
(.*?)が複数)複数のディメンションが必要だが、意味的なラベルは不要
タグフィールド
__tag__:__topic_{i}__を生成。ここで{i}はキャプチャグループ番号\/logs\/(.*?)\/(.*?)\/app\.log/logs/userA/svcA/app.log__tag__:__topic_1__userA.__tag__:__topic_2__svcA複数のキャプチャグループ—名前付き (
(?P<name>.*?)を使用)クエリと分析を容易にするために、明確なフィールドの意味を持つ複数のディメンションが必要
タグフィールド
__tag__:{name}を生成\/logs\/(?P<user>.*?)\/(?P<service>.*?)\/app\.log/logs/userA/svcA/app.log__tag__:user:userA.__tag__:service:svcA
ログタギング
ログタグのエンリッチメントを有効にして、コンテナの環境変数や Kubernetes の Pod ラベルからキー情報を抽出し、詳細なロググルーピングのためのタグとして付加します。
設定手順:Logtail構成 ページで、入力設定 セクションに移動します。ログタグのエンリッチメント を有効にし、追加 をクリックします。
-
環境変数関連:環境変数名とタグ名を設定します。環境変数の値はタグ名の下に保存されます。
-
環境変数名:抽出する環境変数の名前。
-
タグ名:環境変数タグの名前。
-
-
Pod Label 関連:Pod ラベル名とタグ名を設定します。Pod ラベルの値はタグ名の下に保存されます。
-
Pod ラベル名:抽出する Kubernetes Pod ラベルの名前。
-
タグ名:タグの名前。
-
5. 出力設定
デフォルトでは、すべてのログは lz4 圧縮を使用して現在の Logstore に送信されます。同じソースからのログを異なる Logstore に配信するには、以下の手順に従います:
複数送信先への動的配信
-
複数送信先への送信は、LoongCollector バージョン 3.0.0 以降でのみサポートされます。Logtail はサポートしていません。
-
最大 5 つの出力先を設定できます。
-
複数の出力先を設定した後、この収集設定は現在の Logstore の収集設定リストに表示されなくなります。複数送信先配信設定を表示、変更、または削除するには、「複数送信先配信設定を管理するにはどうすればよいですか?」をご参照ください。
設定手順:Logtail構成 ページで、出力設定 セクションに移動します。
-
をクリックして出力設定を展開します。 -
出力先の追加 をクリックし、以下の設定を完了します:
-
Logstores:ターゲットの Logstore を選択します。
-
圧縮方法:lz4 と zstd をサポートします。
-
ルート設定:タグフィールドに基づいてログをルーティングします。ルーティング設定に一致するログは、ターゲットの Logstore にアップロードされます。空のルーティング設定は、収集されたすべてのログがターゲットの Logstore にアップロードされることを意味します。
-
タグ名:ルーティングに使用されるタグフィールドの名前。フィールド名を直接入力します (例:
__path__)。__tag__:プレフィックスは付けません。タグフィールドは 2 つのカテゴリに分類されます:タグの詳細については、「LoongCollector 収集タグの管理」をご参照ください。
-
エージェント関連:収集エージェント自体に関連し、プラグインとは独立しています。例:
__hostname__、__user_defined_id__。 -
入力プラグイン関連:入力プラグインによって提供され、ログにエンリッチされます。例:ファイル収集用の
__path__、Kubernetes 収集用の_pod_name_、_container_name_。
-
-
タグ値:タグフィールドの値がこの値に一致するログが、ターゲットの Logstore に送信されます。
-
このタグフィールドを破棄するかどうか:有効にすると、アップロードされたログにこのタグフィールドは含まれません。
-
-
ステップ 4:クエリと分析の設定
ログ処理とプラグインを設定した後、次へ をクリックして クエリと分析の設定 ページに進みます:
-
システムはデフォルトで フルテキストインデックス を有効にします。これにより、生ログコンテンツのキーワード検索がサポートされます。
-
フィールドによる完全一致検索を実行するには、ページで [データプレビュー] がロードされた後、自動インデックスの生成 をクリックします。Simple Log Service は、プレビューデータの最初のエントリに基づいて フィールドインデックス を生成します。
設定が完了したら、次へ をクリックして、収集プロセス全体の設定を完了します。
ステップ 5:検証とトラブルシューティング
収集設定を作成し、マシングループに適用すると、システムは自動的に設定をデプロイし、増分ログの収集を開始します。
レポートされたログの表示
-
ログファイルに新しいコンテンツが追加されたことを確認する: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)。
一般的な問題のトラブルシューティング
マシングループのハートビートが異常
-
ユーザー ID の確認:サーバータイプが ECS でない場合、または ECS インスタンスとプロジェクトが異なる Alibaba Cloud アカウントに属している場合は、指定されたディレクトリに正しいユーザー ID が存在するかどうかを確認します。
-
Linux:
cd /etc/ilogtail/users/ && touch <uid>コマンドを実行して、ユーザー ID ファイルを作成します。 -
Windows:
C:\LogtailData\users\ディレクトリに移動し、<uid>という名前の空のファイルを作成します。
指定されたパスにプロジェクトの Alibaba Cloud アカウント ID で名前が付けられたファイルが存在する場合、ユーザー ID は正しく設定されています。
-
-
マシングループ ID の確認:カスタム識別子ベースのマシングループを使用している場合は、指定されたディレクトリに
user_defined_idという名前のファイルが存在するかどうかを確認します。ファイルが存在する場合は、ファイルの内容がマシングループに設定されたカスタム ID と同じであるかどうかを確認します。-
Linux:
# カスタム ID を設定します。ディレクトリが存在しない場合は、手動で作成してください。 echo "user-defined-1" > /etc/ilogtail/user_defined_id -
Windows:
C:\LogtailDataディレクトリに、user_defined_idという名前のファイルを作成し、カスタム ID をファイルに書き込みます。ディレクトリが存在しない場合は、手動で作成してください。
-
-
ユーザー ID とマシングループ ID が正しく設定されている場合は、「LoongCollector (Logtail) マシングループの問題のトラブルシューティング」で詳細をご確認ください。
ログ収集エラーまたはフォーマットエラーが発生
トラブルシューティング:この問題は、ネットワーク接続と基本設定は正常であることを示しています。問題はログコンテンツと解析ルールの不一致によって引き起こされます。特定のエラーメッセージを表示して、問題の原因を特定します:
-
Logtail構成 ページで、異常な LoongCollector (Logtail) 構成の名前をクリックします。(ログ収集エラー) タブで、コスト上の理由 をクリックしてクエリの時間範囲を設定します。
-
セクションで、エラーログのアラームメトリックを表示し、「データ収集中の一般的なエラー」の情報に基づいて解決策を見つけます。
次のステップ
コンテナログデータが見つからない場合のトラブルシューティング
-
新しいログエントリを確認します。Logtail をログ収集用に設定した後、新しいログエントリが追加されない限り、Logtail はログファイルを収集しません。
よくある質問
複数送信先配信設定の管理
複数送信先配信設定は複数の Logstore に関連付けられているため、これらの設定はプロジェクトレベルの管理ページで管理します:
-
Simple Log Service コンソールにログインします。その後、対象のプロジェクト名をクリックします。
-
対象のプロジェクトページで、左側のナビゲーションウィンドウにある
をクリックします。説明このページでは、Logstore が誤って削除されたために残っているものを含め、プロジェクト配下のすべての収集設定を一元管理します。
ACK クラスターのログを別の Alibaba Cloud アカウントのプロジェクトに転送する
ACK クラスターに Simple Log Service の LoongCollector (Logtail) コンポーネントを手動でインストールします。その後、宛先アカウントのルートアカウント ID またはアクセス認証情報 (AccessKey) を設定します。これにより、コンテナログが別の Alibaba Cloud アカウントの Simple Log Service プロジェクトに送信されます。
シナリオ:組織構造、権限の隔離、または統一されたモニタリング要件により、ACK クラスターからのログデータを別の Alibaba Cloud アカウントの独立した Simple Log Service プロジェクトに収集する必要がある場合、クロスアカウント設定のために LoongCollector (Logtail) を手動でインストールします。
プロシージャ:このプロシージャでは、LoongCollector の手動インストールを例として使用します。Logtail のインストール方法については、「Logtail のインストールと設定」をご参照ください。
-
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。引用符で囲んでください (例: "123456789") aliUid: "" # ネットワークタイプ。有効な値: Internet (パブリックネットワーク) と Intranet (プライベートネットワーク)。デフォルト値: Internet。 net: Internet # Alibaba Cloud アカウントまたは RAM ユーザーの AccessKey ID と AccessKey Secret。アカウントには AliyunLogFullAccess システム権限ポリシーが必要です。 accessKeyID: "" accessKeySecret: "" # カスタムクラスター ID。文字、数字、ハイフン (-) のみ使用できます。 clusterID: "" -
loongcollector-custom-k8s-packageディレクトリで、次のコマンドを実行して LoongCollector とその依存関係をインストールします:bash k8s-custom-install.sh install -
インストール後、コンポーネントのステータスを確認します。
Pod の起動に失敗した場合は、values.yaml の設定が正しいこと、および関連するイメージが正常にプルされていることを確認してください。
# Pod のステータスを確認 kubectl get po -n kube-system | grep loongcollector-dsSimple 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 つの標準出力収集設定のみが収集できます。
-
古い標準出力テンプレートを使用する場合、追加の設定は不要です。デフォルトで複数のコピーを収集することをサポートしています。
-
-
Simple Log Service コンソールにログインします。対象のプロジェクトに移動します。
-
左側のナビゲーションウィンドウで、
[Logstores] を選択します。対象の Logstore を見つけます。 -
その名前の前にある
をクリックして Logstore を展開します。 -
Logtail構成 をクリックします。設定リストで、対象の Logtail 構成を見つけます。次に、[操作] 列の 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) を直接アンインストールすることを許可しません。
ソリューション:次の手順に従って依存関係を削除し、コンポーネントをアンインストールします:
-
クラスターリストで、対象のクラスターの名前をクリックします。クラスター詳細ページに移動します。
-
左側のナビゲーションウィンドウで、アドオン管理 をクリックします。
-
コンポーネントリストで、
terway-eniipコンポーネントを検索して見つけます。 をクリックします。 -
表示されるダイアログボックスで、OK をクリックします。
-
設定が有効になった後、loongcollector (logtail-ds) コンポーネントを再度アンインストールしてみてください。
最後のログセグメントが長い遅延で報告され、時々切り捨てられるのはなぜですか?
原因分析:ログの切り捨ては通常、ログファイルの末尾に改行がない場合や、複数行のログ (例外スタックなど) が完全に書き込まれていない場合に発生します。データコレクターはログが終了したかどうかを判断できないため、最後のコンテンツセグメントが途中でチャンクされたり、遅れて報告されたりする可能性があります。LoongCollector (Logtail) のバージョンによって処理メカニズムが異なります:
-
1.8 より前のバージョン:
最後のログ行に改行 (キャリッジリターン) がない場合や、複数行のログセグメントが不完全な場合、データコレクターは次の書き込みを待って出力をトリガーします。これにより、新しいログが書き込まれるまで最後のログエントリが長時間送信されないことがあります。 -
バージョン 1.8 以降:
ログが滞留するのを防ぐために、タイムアウトリフレッシュメカニズムが導入されています。不完全なログ行が検出されると、システムはタイマーを開始します。タイムアウト後、現在のコンテンツを自動的に送信して、ログが最終的に収集されるようにします。-
デフォルトのタイムアウト:60 秒 (ほとんどのシナリオで完全性を保証)
-
必要に応じてこの値を調整してください。ただし、0 に設定しないでください。そうしないと、ログが切り捨てられたり、一部のコンテンツが失われたりする可能性があります。
-
ソリューション:
待機時間を延長して、収集される前に完全なログが書き込まれるようにすることができます:
-
Simple Log Service コンソールにログインします。対象のプロジェクトに移動します。
-
左側のナビゲーションウィンドウで、
[Logstores] を選択します。対象の Logstore を見つけます。 -
その名前の前にある
をクリックして Logstore を展開します。 -
Logtail構成 をクリックします。設定リストで、対象の Logtail 構成を見つけます。次に、[操作] 列の Logtail 設定の管理 をクリックします。
-
[Logtail 構成] ページで、編集 をクリックします:
-
を選択します。次の JSON 設定を追加してタイムアウトをカスタマイズします:
{ "FlushTimeoutSecs": 1 }-
デフォルト値:起動パラメータ
default_reader_flush_timeoutによって決定されます (通常は数秒)。 -
単位:秒。
-
推奨値:≥1 秒。0 に設定しないでください。そうしないと、ログが切り捨てられたり、一部のコンテンツが失われたりする可能性があります。
-
-
-
設定が完了したら、OK をクリックします。
LoongCollector (Logtail) が実行中にプライベートネットワークドメイン名からパブリックネットワークに切り替わるのはなぜですか?自動的に元に戻りますか?
LoongCollector (Logtail) の実行中に、プライベートネットワークドメイン名の通信に異常 (ネットワークの利用不可や接続タイムアウトなど) が検出された場合、システムは自動的にパブリックネットワークドメイン名に切り替えてデータを送信します。これにより、ログ収集の継続性と信頼性が確保され、ログの蓄積や損失が防止されます。
-
LoongCollector:プライベートネットワークが回復すると、自動的にプライベートネットワークに戻ります。
-
Logtail:自動的には戻りません。プライベートネットワーク通信を復元するには、手動で再起動する必要があります。
付録:ネイティブプラグインの詳細
[プロセッサ設定] の [Logtail 構成] ページで、プロセッサを追加して生ログを構造化します。既存の収集設定に処理プラグインを追加するには、次の手順に従います:
左側のナビゲーションウィンドウで、
[Logstores] を選択し、対象の Logstore を見つけます。その名前の前にある
アイコンをクリックして Logstore を展開します。[Logtail 構成] をクリックします。設定リストで、対象の Logtail 構成を見つけ、[操作] 列の [Logtail 構成の管理] をクリックします。
[Logtail 構成] ページで、[編集] をクリックします。
このセクションでは、一般的なログ処理のユースケースをカバーする、一般的に使用される処理プラグインのみを紹介します。その他の機能については、「拡張プロセッサ」をご参照ください。
プラグインの組み合わせルール (LoongCollector / Logtail 2.0 以降):
ネイティブプロセッサと拡張プロセッサは、独立して使用することも、必要に応じて組み合わせることもできます。
ネイティブプロセッサはパフォーマンスと安定性が高いため、優先的に使用してください。
ネイティブ機能がビジネスニーズを満たせない場合は、設定済みのネイティブプロセッサの後に拡張プロセッサを追加して補足的な処理を行います。
順序の制約:
すべてのプラグインは設定された順序で順次実行され、処理チェーンを形成します。注意:すべてのネイティブプロセッサは、どの拡張プロセッサよりも前に配置する必要があります。拡張プロセッサを追加した後は、ネイティブプロセッサを追加することはできません。
正規表現解析
正規表現を使用してログフィールドを抽出し、ログをキーと値のペアに解析します。各フィールドは独立してクエリおよび分析できます。
例:
|
処理なしの生ログ |
正規表現解析プラグインの使用 |
|
|
設定手順:Logtail構成 エリアの 設定の処理 ページで、処理プラグインの追加 をクリックし、 を選択します:
-
正規表現:ログに一致させます。自動生成または手動入力をサポートします:
-
自動生成:
-
[正規表現を自動生成] をクリックします。
-
ログサンプル で抽出するログコンテンツを選択します。
-
[正規表現を生成] をクリックします。

-
-
手動入力:ログ形式に基づいて [正規表現を手動で入力] します。
設定後、[検証] をクリックして、正規表現がログコンテンツを正しく解析するかテストします。
-
-
ログ抽出フィールド:抽出されたログコンテンツ (値) に対応するフィールド名 (キー) を設定します。
-
その他のパラメーターについては、「シナリオ 2:構造化ログ」の一般的な設定パラメーターの説明をご参照ください。
デリミタ解析
デリミタを使用してログコンテンツを構造化し、複数のキーと値のペアに解析します。単一文字および複数文字のデリミタをサポートします。
例:
|
処理なしの生ログ |
指定された文字 |
|
|
設定手順:Logtail構成 エリアの 設定の処理 ページで、処理プラグインの追加 をクリックし、 を選択します:
-
区切りモード:ログコンテンツを分割するために使用する文字を指定します。
例:CSV ファイルの場合、カスタム を選択し、カンマ (,) を入力します。
-
引用符:フィールド値にデリミタが含まれている場合、フィールドを囲む引用符を指定して、誤った分割を防ぎます。
-
ログ抽出フィールド:分離された順序で各列に対応するフィールド名 (キー) を設定します。ルールは次のとおりです:
-
フィールド名は文字、数字、アンダースコア (_) のみを含むことができます。
-
文字またはアンダースコア (_) で始まる必要があります。
-
最大長:128 バイト。
-
-
その他のパラメーターについては、「シナリオ 2:構造化ログ」の一般的な設定パラメーターの説明をご参照ください。
標準 JSON 解析
オブジェクトタイプの JSON ログを構造化し、キーと値のペアに解析します。
例:
|
処理なしの生ログ |
標準 JSON キー値の自動抽出 |
|
|
設定手順:Logtail構成 エリアの 設定の処理 ページで、処理プラグインの追加 をクリックし、 を選択します:
-
元のフィールド:デフォルト値は content です (このフィールドには解析対象の生ログコンテンツが保存されます)。
-
その他のパラメーターについては、「シナリオ 2:構造化ログ」の一般的な設定パラメーターの説明をご参照ください。
ネストされた JSON 解析
展開深度を指定して、ネストされた JSON ログをキーと値のペアに解析します。
例:
|
処理なしの生ログ |
展開深度:0、および展開深度をプレフィックスとして使用 |
展開深度:1、および展開深度をプレフィックスとして使用 |
|
|
|
設定手順:Logtail構成 エリアの 設定の処理 ページで、処理プラグインの追加 をクリックし、 を選択します:
-
元のフィールド:展開するソースフィールド名、例えば
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 配列構造の抽出 |
|
|
設定手順: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__ フィールドとして設定します。
例:
|
処理なしの生ログ |
時間解析 |
|
|
設定手順:Logtail構成 エリアの 設定の処理 ページで、処理プラグインの追加 をクリックし、 を選択します:
-
元のフィールド:解析前のログコンテンツを保存するソースフィールド。
-
時間形式:ログの時間コンテンツに基づいて時間フォーマットを設定します。詳細については、「時間フォーマット」をご参照ください。
-
タイムゾーン:ログ時間フィールドのタイムゾーンを選択します。デフォルトでは、マシンのタイムゾーンが使用されます。これは、LoongCollector (Logtail) プロセスが実行される環境のタイムゾーンです。
付録:正規表現の使用制限 (コンテナフィルタリング)
コンテナフィルタリングに使用される正規表現は、Go の RE2 エンジンに基づいています。このエンジンは、PCRE などの他のエンジンと比較していくつかの構文制限があります。正規表現を作成する際には、次の点に注意してください:
1. 名前付きグループの構文の違い
Go は (?P<name>...) 構文を使用して名前付きグループを定義します。PCRE で使用される (?<name>...) 構文はサポートしていません。
-
正しい例:
(?P<year>\d{4}) -
誤った例:
(?<year>\d{4})
2. サポートされていない正規表現機能
次の一般的で複雑な正規表現機能は RE2 では利用できません。これらを使用しないでください:
-
アサーション:
(?=...),(?!...),(?<=...),(?<!...) -
条件式:
(?(condition)true|false) -
再帰的マッチング:
(?R)、(?0) -
サブルーチン参照:
(?&name)、(?P>name) -
アトミックグループ:
(?>...)
3. 使用上の推奨事項
Regex101 などのツールを使用して正規表現をデバッグする際は、互換性を確保するために Golang (RE2) モードを選択して検証してください。上記で言及したサポートされていない構文が使用された場合、プラグインは正しく解析またはマッチングできません。
付録:コンテナ標準出力の新旧バージョンの比較
ログストレージの効率と収集の一貫性を向上させるため、コンテナ標準出力のログメタデータ形式がアップグレードされました。新しい形式では、メタデータが __tag__ フィールドに統合され、ストレージの最適化と形式の標準化が実現されています。
新しい標準出力バージョンの主な利点
大幅なパフォーマンス向上
C++ でリファクタリングされ、古い Go 実装と比較してパフォーマンスが 180% から 300% 向上しました。
データ処理のためのネイティブプラグインとマルチスレッド並列処理をサポートし、システムリソースを最大限に活用します。
ネイティブプラグインと Go プラグインの柔軟な組み合わせをサポートし、複雑なシナリオの要件を満たします。
より高い信頼性
標準出力ログローテーションキューをサポートします。ログ収集メカニズムはファイル収集メカニズムと統一されており、急速な標準出力ログローテーションのシナリオで高い信頼性を提供します。
リソース消費の削減
CPU 使用率が 20% から 25% 削減されます。
メモリ使用量が 20% から 25% 削減されます。
O&M の一貫性の向上
統一されたパラメータ設定:新しい標準出力収集プラグインの設定パラメータは、ファイル収集プラグインと一貫しています。
統一されたメタデータ管理:コンテナメタデータフィールドの命名とタブログの保存場所は、ファイル収集シナリオと統一されています。コンシューマー側は 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 は互換性のために自動的に適応されているため、ユーザーは新旧両バージョンのログを同時に処理するためにクエリ文を変更する必要はありません。






