コンテナ化された環境では、アプリケーションのログは異なる Docker コンテナの標準出力やログファイルに分散しており、管理や取得が困難です。Simple Log Service (SLS) の LoongCollector を使用して、複数のノードからの一元的な Logstore へのログ収集を実現します。これにより、一元的なストレージ、構造化解析、データマスキング、フィルタリング、そして効率的なクエリと分析が可能になります。
注意事項
権限要件:デプロイに使用する Alibaba Cloud アカウントまたは RAM ユーザーは、
AliyunLogFullAccess権限を持っている必要があります。Docker バージョンと LoongCollector の要件:
ご利用の Docker Engine のバージョンが 29.0 以降、またはサポートされる最小 Docker API バージョンが 1.42 以降の場合、LoongCollector 3.2.4 以降を使用する必要があります。そうでない場合、LoongCollector はコンテナの標準出力やファイルログを収集できません。
LoongCollector のバージョン 3.2.4 以降は、Docker API バージョン 1.24 から 1.48 までをサポートします。
LoongCollector のバージョン 3.2.3 以前は、Docker API バージョン 1.18 から 1.41 までをサポートします。
標準出力の収集に関する制限事項:
Docker の設定ファイル daemon.json に
"log-driver": "json-file"を追加する必要があります。CentOS 7.4 以降のバージョン (CentOS 8.0 を除く) では、
fs.may_detach_mounts=1を設定する必要があります。
テキストログ収集の制限事項: overlay および overlay2 ストレージドライバーのみがサポートされています。他のドライバータイプの場合、ログディレクトリを手動でマウントする必要があります。
収集設定の作成プロセス
事前準備:プロジェクトと Logstore を作成します。プロジェクトは異なるアプリケーションのログを分離するためのリソース管理単位であり、Logstore はログを保存するために使用されます。
マシングループの設定 (LoongCollector のインストール):ログを収集したいサーバーに LoongCollector をインストールし、サーバーをマシングループに追加します。マシングループを使用して、収集ノードを一元管理し、設定を配布し、サーバーの状態を管理します。
グローバル設定と入力設定:収集設定の名前、ログ収集のソースと範囲を定義します。
ログの処理と構造化:ログのフォーマットに基づいて処理ルールを設定します。
複数行ログ:Java の例外スタックや Python のトレースバックなど、単一のログが複数行にまたがる場合に適用されます。各ログの開始を識別するために正規表現を使用する必要があります。
構造化解析:正規表現、区切り文字、または NGINX モードのプラグインなどの解析プラグインを設定して、生の文字列を構造化されたキーと値のペアに抽出します。これにより、後続のクエリと分析が容易になります。
ログフィルタリング:収集ブラックリストとコンテンツフィルタリングルールを設定して、有効なログコンテンツをスクリーニングします。この方法は、冗長なデータの転送とストレージを削減します。
ログの分類:トピックとログタグを設定して、異なるアプリケーション、コンテナ、またはパスソースからのログを柔軟に区別します。
クエリと分析の設定:システムはデフォルトでフルテキストインデックスを有効にし、キーワード検索をサポートします。構造化されたフィールドの正確なクエリと分析のために、フィールドインデックスを有効にして検索効率を向上させることを推奨します。
検証とトラブルシューティング:設定完了後、ログが正常に収集されることを確認します。データが収集されない、ハートビートの失敗、解析エラーなどの問題が発生した場合は、「よくある質問」セクションをご参照ください。
事前準備
ログを収集する前に、ログを管理および保存するためのプロジェクトと Logstore を計画し、作成する必要があります。必要なリソースがすでにある場合は、このステップをスキップして、「ステップ 1:マシングループの設定 (LoongCollector のインストール)」に進んでください。
プロジェクトの作成
Logstore の作成
ステップ 1:マシングループの設定 (LoongCollector のインストール)
Docker ホストに LoongCollector をコンテナとしてデプロイし、ホストをマシングループに追加します。マシングループを使用して、複数の収集ノードを一元管理し、設定を配布し、ステータスを監視します。
イメージの取得
Docker がインストールされているホストで、次のコマンドを実行して LoongCollector イメージをプルします。ダウンロード速度と安定性を向上させるために、
${region_id}をホストのリージョン IDまたは近くのリージョン (例:cn-hangzhou) に置き換えます。# LoongCollector イメージアドレス docker pull aliyun-observability-release-registry.${region_id}.cr.aliyuncs.com/loongcollector/loongcollector:v3.0.12.0-25723a1-aliyun # Logtail イメージアドレス docker pull registry.${region_id}.aliyuncs.com/log-service/logtail:v2.1.11.0-aliyunLoongCollector コンテナの起動
次のコマンドを実行してコンテナを起動します。ディレクトリを正しくマウントし、必要な環境変数を設定してください:
docker run -d \ -v /:/logtail_host:ro \ -v /var/run/docker.sock:/var/run/docker.sock \ --env ALIYUN_LOGTAIL_CONFIG=/etc/ilogtail/conf/${sls_upload_channel}/ilogtail_config.json \ --env ALIYUN_LOGTAIL_USER_ID=${aliyun_account_id} \ --env ALIYUN_LOGTAIL_USER_DEFINED_ID=${user_defined_id} \ aliyun-observability-release-registry.${region_id}.cr.aliyuncs.com/loongcollector/loongcollector:v3.0.12.0-25723a1-aliyunパラメーターの説明:
${sls_upload_channel}:ログアップロードチャネル。フォーマットはプロジェクトリージョン-ネットワーク転送タイプです。例:転送タイプ
設定値のフォーマット
例
シナリオ
内部ネットワーク転送
regionIdcn-hangzhouECS インスタンスとプロジェクトが同じリージョンにある。
インターネット転送
regionId-internetcn-hangzhou-internetECS インスタンスとプロジェクトが異なるリージョンにある。
サーバーが他のクラウドプロバイダーまたは自社データセンターにある。
転送アクセラレーション
regionId-accelerationcn-hangzhou-acceleration中国国内外のリージョン間通信。
${aliyun_account_id}:Alibaba Cloud アカウント ID。${user_defined_id}:マシングループのカスタム ID。この ID はマシングループをバインドするために使用されます。例えば、user-defined-docker-1を使用します。ID はリージョン内で一意である必要があります。重要以下の起動条件を満たす必要があります:
3 つの主要な環境変数が正しく設定されていること:
ALIYUN_LOGTAIL_CONFIG、ALIYUN_LOGTAIL_USER_ID、およびALIYUN_LOGTAIL_USER_DEFINED_ID。/var/run/docker.sockディレクトリがマウントされていること。このディレクトリはコンテナのライフサイクルイベントをリッスンするために使用されます。ルートディレクトリ
/が/logtail_hostにマウントされていること。これはホストのファイルシステムにアクセスするために使用されます。
コンテナの実行ステータスの確認
docker ps | grep loongcollector期待される出力例:
6ad510001753 aliyun-observability-release-registry.cn-beijing.cr.aliyuncs.com/loongcollector/loongcollector:v3.0.12.0-25723a1-aliyun "/usr/local/ilogtail…" About a minute ago Up About a minute recursing_shirleyマシングループの設定
左側のナビゲーションウィンドウで、 を選択し、 をクリックし、次のパラメーターを設定して [ OK ] をクリックします:
名前:マシングループのカスタム名を入力します。例:
docker-host-group。マシングループ識別子:[カスタム識別子] を選択します。
カスタム識別子:コンテナ起動時に設定した
${user_defined_id}を入力します。ID は完全に一致する必要があります。そうでない場合、関連付けは失敗します。
マシングループのハートビートステータスの確認
新しいマシングループの名前をクリックして詳細ページに移動し、 を確認します:
OK:LoongCollector が SLS に接続されていることを示します。
FAIL:問題のトラブルシューティング方法については、「ハートビートエラーのトラブルシューティング」をご参照ください。
ステップ 2:ログ収集ルールの作成と設定
LoongCollector がどのログを収集し、その構造をどのように解析し、コンテンツをフィルタリングし、設定を登録済みのマシングループにバインドするかを定義します。
[
Logstores] ページで、対象の Logstore 名の横にある
アイコンをクリックします。[データ収集] の横にある
をクリックします。[クイックデータインポート] ダイアログボックスで、ログソースに基づいてテンプレートを選択し、[今すぐ統合] をクリックします。Docker 標準出力:[Docker Stdout および Stderr - 新バージョン] を選択します。
コンテナ標準出力を収集するためのテンプレートには、新バージョンと旧バージョンの 2 つがあります。新バージョンの使用を推奨します。新旧バージョンの違いについては、「付録:コンテナ標準出力の新旧バージョンの比較」をご参照ください。旧バージョンで収集するには、「Docker コンテナからの標準出力の収集 (旧バージョン)」をご参照ください。
Docker ファイルログ:[Docker ファイル - コンテナ] を選択します。
[マシングループ] を設定し、[次へ] をクリックします。
シナリオ:[Docker コンテナ] を選択します。
ステップ 1 で作成したマシングループを、ソースマシングループリストから適用済みマシングループリストに移動します。
[Logtail 設定] ページで、次のパラメーターを設定し、[次へ] をクリックします。
1. グローバル設定と入力設定
開始する前に、データインポートテンプレートを選択し、マシングループをバインドしたことを確認してください。このステップでは、収集設定の名前、ログソース、および収集範囲を定義します。
Docker 標準出力の収集
グローバル設定
設定名:収集設定のカスタム名を入力します。名前はプロジェクト内で一意である必要があり、設定作成後に変更できません。名前は次の規則に従う必要があります:
小文字、数字、ハイフン (-)、アンダースコア (_) のみを含めることができます。
小文字または数字で開始および終了する必要があります。
入力設定
[Stdout および Stderr] または [標準エラー] スイッチをオンにします。両方のスイッチはデフォルトでオンになっています。
重要標準出力と標準エラーの両方を同時に有効にすると、収集されたログが混乱する可能性があるため、推奨されません。
Docker コンテナのテキストログの収集
グローバル設定:
設定名:収集設定のカスタム名を入力します。名前はプロジェクト内で一意である必要があり、設定作成後に変更できません。名前は次の規則に従う必要があります:
小文字、数字、ハイフン (-)、アンダースコア (_) のみを含めることができます。
小文字または数字で開始および終了する必要があります。
入力設定:
ファイルパスタイプ:
コンテナ内のパス:コンテナ内からログファイルを収集します。
ホストパス:ホスト上のローカルサービスからログを収集します。
ファイルパス:収集するログファイルの絶対パス。
Linux:パスはスラッシュ (`/`) で始まる必要があります。例:
/data/mylogs/**/*.logは、/data/mylogsディレクトリ内の .log 拡張子を持つすべてのファイルを示します。Windows:パスはドライブ文字で始まる必要があります。例:
C:\Program Files\Intel\**\*.Log。
最大ディレクトリ監視深度:[ファイルパス] のワイルドカード文字
**が一致できる最大ディレクトリ深度。デフォルト値は 0 で、現在のディレクトリを示します。値の範囲は 0 から 1000 です。このパラメーターを 0 に設定し、ファイルを含むディレクトリへのパスを設定することを推奨します。
2. ログの処理と構造化
ログ処理ルールを設定して、生の非構造化ログを構造化データに変換します。これにより、ログのクエリと分析の効率が向上します。ルールを設定する前にログサンプルを追加することを推奨します:
[Logtail 設定] ページの [プロセッサ設定] セクションで、[ログサンプルの追加] をクリックし、収集するログのコンテンツを入力します。システムはサンプルに基づいてログ形式を識別し、正規表現と解析ルールの生成を支援します。これにより、設定が簡素化されます。
シナリオ 1:複数行ログの処理 (Java スタックログなど)
Java の例外スタックや JSON オブジェクトなどのログは、しばしば複数行にまたがります。デフォルトの収集モードでは、これらのログは複数の不完全なレコードに分割され、コンテキストが失われます。この問題に対処するため、複数行収集モードを有効にし、行の開始を示す正規表現を設定して、同じログの連続する行を単一の完全なログエントリにマージします。
効果の例:
未処理の生ログ | デフォルトの収集モードでは、各行が独立したログとして扱われ、スタック情報が分断され、コンテキストが失われる | 複数行モードを有効にすると、行の開始を示す正規表現が完全なログを識別し、完全な意味構造を保持する |
|
|
|
設定:[Logtail 設定] ページの [プロセッサ設定] セクションで、[複数行モード] をオンにします:
タイプ:[カスタム] または [複数行 JSON] を選択します。
カスタム:生ログの形式が固定されていません。[先頭行に一致する正規表現] を設定して、各ログエントリの開始行を識別する必要があります。
先頭行に一致する正規表現:自動生成または手動入力をサポートします。正規表現はデータの完全な行に一致する必要があります。例えば、上記の例の一致する正規表現は
\[\d+-\d+-\w+:\d+:\d+,\d+]\s\[\w+]\s.*です。自動生成:[生成] をクリックします。次に、[ログサンプル] テキストボックスで、抽出するログコンテンツを選択し、[自動生成] をクリックします。
手動入力:[正規表現の手動入力] をクリックします。式を入力した後、[検証] をクリックします。
複数行 JSON:生ログがすべて標準 JSON 形式である場合、SLS は単一の JSON ログ内の改行を自動的に処理します。
分割失敗時の処理方法:
破棄:テキストが先頭行ルールに一致しない場合、破棄されます。
単一行を保持:一致しないテキストはチャンク化され、元の単一行モードで保持されます。
シナリオ 2:構造化ロギング
NGINX アクセスログやアプリケーション出力ログなど、生のログが非構造化または半構造化テキストである場合、直接のクエリと分析はしばしば非効率です。SLS は、さまざまなデータ解析プラグインを提供し、異なる形式の生ログを自動的に構造化データに変換できます。これにより、後続の分析、監視、およびアラートのための堅固なデータ基盤が提供されます。
効果の例:
生ログ | 解析済みログ |
| |
設定手順:[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 レベルのログなど、価値の低いまたは無関係なログを大量に無差別に収集すると、ストレージリソースを浪費し、コストを増加させ、クエリ効率に影響を与え、データ漏洩のリスクをもたらします。これらの問題に対処するため、効率的で安全なログ収集のために、詳細なフィルタリング戦略を実装します。
コンテンツフィルタリングによるコスト削減
フィールドコンテンツに基づいてログをフィルタリングします。例えば、WARNING または ERROR レベルのログのみを収集します。
効果の例:
未処理の生ログ |
|
| |
設定手順:[Logtail 設定] ページの [プロセッサ設定] セクションで:
[プロセッサの追加] をクリックし、] を選択します:
フィールド名:フィルタリングに使用するログフィールド。
フィールド値:フィルタリングに使用する正規表現。全文一致のみがサポートされており、部分的なキーワード一致はサポートされていません。
ブラックリストによる収集範囲の制御
ブラックリストを使用して、指定されたディレクトリやファイルを除外します。これにより、無関係または機密性の高いログがアップロードされるのを防ぎます。
設定手順:[Logtail 設定] ページの [入力設定] セクションで、[収集ブラックリスト] を有効にし、[追加] をクリックします。
ディレクトリとファイル名には、完全一致とワイルドカード一致がサポートされています。サポートされているワイルドカード文字はアスタリスク (`*`) と疑問符 (`?`) です。
ファイルパスブラックリスト:無視するファイルパス。例:
/home/admin/private*.log:収集時に/home/admin/ディレクトリ内の「private」で始まり「.log」で終わるすべてのファイルを無視します。/home/admin/private*/*_inner.log:収集時に/home/admin/ディレクトリ下の「private」で始まるディレクトリ内の「_inner.log」で終わるファイルを無視します。
ファイルブラックリスト:収集時に無視するファイル名。例:
app_inner.log:収集時にapp_inner.logという名前のすべてのファイルを無視します。
ディレクトリブラックリスト:ディレクトリパスはスラッシュ (`/`) で終わることはできません。例:
/home/admin/dir1/:ディレクトリブラックリストは効果がありません。/home/admin/dir*: コレクション中に/home/admin/ディレクトリのすべてのサブディレクトリにある、"dir" で始まるファイルを無視します。/home/admin/*/dir:収集時に/home/admin/ディレクトリの第 2 レベルにある「dir」という名前のすべてのサブディレクトリ内のファイルを無視します。例えば、/home/admin/a/dirディレクトリ内のファイルは無視されますが、/home/admin/a/b/dirディレクトリ内のファイルは収集されます。
コンテナフィルタリング
環境変数、Pod ラベル、名前空間、コンテナ名などのコンテナメタデータに基づいて収集条件を設定し、どのコンテナのログを収集するかを正確に制御します。
設定手順:[Logtail 設定] ページの [プロセッサ設定] セクションで、[コンテナフィルタリング] を有効にし、[追加] をクリックします。
複数の条件は AND 論理演算子を使用して結合されます。すべての正規表現マッチングは Go の RE2 正規表現エンジンに基づいており、PCRE などのエンジンと比較していくつかの制限があります。正規表現を記述する際は、「付録:正規表現の制限 (コンテナフィルタリング)」で説明されている制限に従ってください。
環境変数ブラックリスト/ホワイトリスト:ログを収集したいコンテナの環境変数条件を指定します。
K8s Pod ラベルブラックリスト/ホワイトリスト:収集対象のコンテナが配置されている Pod のラベル条件を指定します。
K8s Pod 名の正規表現マッチング:Pod 名で収集対象のコンテナを指定します。
K8s 名前空間の正規表現マッチング:名前空間名で収集対象のコンテナを指定します。
K8s コンテナ名の正規表現マッチング:コンテナ名で収集対象のコンテナを指定します。
コンテナラベルブラックリスト/ホワイトリスト:指定された条件を満たすラベルを持つコンテナからログを収集します。このパラメーターは Docker シナリオで使用され、Kubernetes シナリオでは推奨されません。
4. ログの分類
複数のアプリケーションやインスタンスが同じログ形式を共有するシナリオでは、ログソースを区別することが困難です。これにより、クエリ時のコンテキストが不足し、分析効率が低下します。この問題に対処するため、トピックとログタグを設定して、自動的なコンテキストの関連付けと論理的な分類を実現します。
トピックの設定
複数のアプリケーションやインスタンスが同じログ形式を持つが、パスが異なる場合 (例:/apps/app-A/run.log と /apps/app-B/run.log)、収集されたログのソースを区別することが困難です。この場合、マシングループ、カスタム名、またはファイルパス抽出に基づいてトピックを生成し、異なるアプリケーションやパスソースからのログを柔軟に区別できます。
設定手順::トピック生成方法を選択します。以下の 3 種類がサポートされています:
マシングループトピック:収集設定が複数のマシングループに適用される場合、LoongCollector はサーバーが属するマシングループの名前を自動的に
__topic__フィールドの値としてアップロードします。これは、ホストクラスターごとにログを分割するシナリオに適しています。カスタム:フォーマットは
customized://<custom_topic_name>です。例:customized://app-login。これは、固定のビジネス識別子を持つ静的なトピックシナリオに適しています。ファイルパス抽出:ログファイルの完全なパスからキー情報を抽出し、ログソースを動的にマークします。これは、複数のユーザーやアプリケーションが同じログファイル名を共有するが、パスが異なる場合に適しています。
複数のユーザーやサービスが異なるトップレベルディレクトリにログを書き込むが、サブパスとファイル名が同じ場合、ファイル名だけではソースを区別できません。例:
/data/logs ├── userA │ └── serviceA │ └── service.log ├── userB │ └── serviceA │ └── service.log └── userC └── serviceA └── service.log[ファイルパス抽出] を設定し、正規表現を使用して完全なパスからキー情報を抽出します。一致した結果はトピックとして Logstore にアップロードされます。
抽出ルール:正規表現のキャプチャグループに基づく
正規表現を設定すると、システムはキャプチャグループの数と命名に基づいて出力フィールド形式を自動的に決定します。ルールは以下の通りです:
ファイルパスの正規表現では、スラッシュ (/) をエスケープする必要があります。
キャプチャグループのタイプ
シナリオ
生成されるフィールド
正規表現の例
一致するパスの例
生成されるフィールド
単一のキャプチャグループ (1 つの
(.*?)のみ)ソースを区別するために1つのディメンションのみが必要 (ユーザー名、環境など)
__topic__フィールドを生成\/logs\/(.*?)\/app\.log/logs/userA/app.log__topic__:userA複数のキャプチャグループ - 名前なし (複数の
(.*?))複数のディメンションが必要だが、意味的なラベルはない
タグフィールド
__tag__:__topic_{i}__を生成。ここで{i}はキャプチャグループの序数\/logs\/(.*?)\/(.*?)\/app\.log/logs/userA/svcA/app.log__tag__:__topic_1__userA;__tag__:__topic_2__svcA複数のキャプチャグループ - 名前付き (
(?P<name>.*?)を使用)複数のディメンションが必要で、クエリと分析を容易にするためにフィールドの意味を明確にしたい
タグフィールド
__tag__:{name}を生成\/logs\/(?P<user>.*?)\/(?P<service>.*?)\/app\.log/logs/userA/svcA/app.log__tag__:user:userA;__tag__:service:svcA
ログタギング
ログタグエンリッチメント機能を有効にして、コンテナの環境変数や Kubernetes の Pod ラベルからキー情報を抽出し、その情報をタグとして付加します。これにより、ログの詳細なグループ化が実現します。
設定手順:[Logtail 設定] ページの [入力設定] セクションで、[ログタグエンリッチメント] を有効にし、[追加] をクリックします。
環境変数:環境変数名とタグ名を設定します。環境変数の値はタグ名に保存されます。
環境変数名:抽出する環境変数の名前を指定します。
タグ名:環境変数タグの名前。
Pod ラベル:Pod ラベル名とタグ名を設定します。Pod ラベルの値はタグ名に保存されます。
Pod ラベル名:抽出する Kubernetes Pod ラベルの名前。
タグ名:タグの名前。
ステップ 3:クエリと分析の設定
ログ処理とプラグイン設定が完了したら、[次へ] をクリックして [クエリと分析の設定] ページに進みます:
システムはデフォルトでフルテキストインデックスを有効にし、元のログコンテンツに対するキーワード検索をサポートします。
フィールドによる正確なクエリを実行するには、ページのプレビューデータが読み込まれた後、[インデックスの自動生成] をクリックします。SLS は、プレビューデータの最初のエントリに基づいてフィールドインデックスを生成します。
設定が完了したら、[次へ] をクリックして、収集プロセス全体の設定を完了します。
ステップ 4:検証とトラブルシューティング
収集設定が完了し、マシングループに適用されると、システムは自動的に設定を配布し、増分ログの収集を開始します。
アップロードされたログの表示
ログファイルに新しいコンテンツがあることを確認する:LoongCollector は増分ログのみを収集します。
tail -f /path/to/your/log/fileを実行し、ビジネス操作をトリガーして、新しいログが書き込まれていることを確認します。ログのクエリ:対象の Logstore のクエリと分析ページに移動し、[検索と分析] (デフォルトの時間範囲は過去 15 分) をクリックし、新しいログが流入しているか確認します。収集された各 Docker コンテナのテキストログには、デフォルトで次のフィールドが含まれています:
フィールド名
説明
__source__
LoongCollector (Logtail) コンテナの IP アドレス。
_container_ip_
アプリケーションコンテナの IP アドレス。
__tag__:__hostname__
LoongCollector (Logtail) が配置されている Docker ホストの名前。
__tag__:__path__
ログ収集パス。
__tag__:__receive_time__
ログがサーバーに到着した時刻。
__tag__:__user_defined_id__
マシングループのカスタム ID。
よくある質問
マシングループのハートビート接続が FAIL
ユーザー ID の確認:サーバータイプが ECS でない場合、または ECS インスタンスとプロジェクトが異なる Alibaba Cloud アカウントに属している場合、次の表に基づいて指定されたディレクトリに正しいユーザー ID が存在するか確認します。
Linux:
cd /etc/ilogtail/users/ && touch <uid>コマンドを実行してユーザー ID ファイルを作成します。Windows:
C:\LogtailData\users\ディレクトリに移動し、<uid>という名前の空のファイルを作成します。
指定されたパスに現在のプロジェクトの Alibaba Cloud アカウント ID で名前が付けられたファイルが存在する場合、ユーザー ID は正しく設定されています。
マシングループ ID の確認:マシングループにカスタム ID を使用している場合、指定されたディレクトリに
user_defined_idファイルが存在するか確認します。存在する場合、ファイルの内容がマシングループに設定されたカスタム ID と一致しているか確認します。システム
指定ディレクトリ
ソリューション
Linux
/etc/ilogtail/user_defined_id# カスタム ID を設定します。ディレクトリが存在しない場合は、手動で作成します。 echo "user-defined-1" > /etc/ilogtail/user_defined_idWindows
C:\LogtailData\user_defined_idC:\LogtailDataディレクトリに新しいuser_defined_idファイルを作成し、カスタム ID を書き込みます。(ディレクトリが存在しない場合は、手動で作成します。)ユーザー ID とマシングループ ID の両方が正しく設定されている場合、さらなるトラブルシューティングについては、「LoongCollector (Logtail) マシングループの問題のトラブルシューティング」をご参照ください。
ログのデータが収集されない
増分ログの確認:LoongCollector (Logtail) を収集用に設定した後、収集対象のログファイルに新しいログがない場合、LoongCollector (Logtail) はそのファイルからログを収集しません。
マシングループのハートビートステータスの確認:[] ページに移動し、対象のマシングループの名前をクリックし、[] セクションで、[ハートビート] ステータスを確認します。
ハートビートが OK の場合、マシングループは SLS プロジェクトに接続されています。
ハートビートが FAIL の場合:問題のトラブルシューティング方法については、「マシングループのハートビート接続が FAIL」をご参照ください。
LoongCollector (Logtail) 収集設定がマシングループに適用されているか確認する:LoongCollector (Logtail) 収集設定が作成されていても、設定がマシングループに適用されていない場合、ログは収集されません。
[] ページに移動し、対象のマシングループの名前をクリックして [マシングループ設定] ページに移動します。
ページで、[設定の管理] を表示します。左側には [すべての Logtail 設定] が表示され、右側には [適用済みの Logtail 設定] が表示されます。対象の LoongCollector (Logtail) 収集設定が右側の適用済みエリアに移動されている場合、設定は対象のマシングループに正常に適用されています。
対象の LoongCollector (Logtail) 収集設定が右側の適用済みエリアに移動されていない場合、[変更] をクリックします。左側の [すべての Logtail 設定] リストで、対象の LoongCollector (Logtail) 設定の名前を選択し、
をクリックして右側の適用済みエリアに移動し、[保存] をクリックします。
ログ収集エラーまたは不正なフォーマット
トラブルシューティングのアプローチ:この状況は、ネットワーク接続と基本設定が正常であることを示します。問題は主にログコンテンツと解析ルールの不一致です。問題を特定するために、具体的なエラーメッセージを表示する必要があります:
[Logtail 設定] ページで、収集エラーのある LoongCollector (Logtail) 設定の名前をクリックします。[ログ収集エラー] タブで、[時間範囲の選択] をクリックしてクエリ時間を設定します。
セクションで、エラーログのアラームメトリックを表示し、「データ収集における一般的なエラータイプ」で対応する解決策を見つけます。
次のステップ
データ可視化:可視化ダッシュボードを使用して、主要なメトリックのトレンドを監視します。
データ異常の自動アラート:アラートポリシーを設定して、システムの異常をリアルタイムで把握します。
一般的なコマンド
LoongCollector (Logtail) の実行ステータスの表示
docker exec ${logtail_container_id} /etc/init.d/ilogtaild statusLoongCollector (Logtail) のバージョン番号、IP アドレス、起動時間などの情報の表示
docker exec ${logtail_container_id} cat /usr/local/ilogtail/app_info.jsonLoongCollector (Logtail) の実行ログの表示
LoongCollector (Logtail) の実行ログは、コンテナ内の /usr/local/ilogtail/ ディレクトリに保存されます。ファイル名は ilogtail.LOG で、ローテーションされたファイルは ilogtail.LOG.x.gz として圧縮保存されます。例:
# LoongCollector の実行ログを表示
docker exec a287de895e40 tail -n 5 /usr/local/ilogtail/loongcollector.LOG
# Logtail の実行ログを表示
docker exec a287de895e40 tail -n 5 /usr/local/ilogtail/ilogtail.LOG出力例:
[2025-08-25 09:17:44.610496] [info] [22] /build/loongcollector/file_server/polling/PollingModify.cpp:75 polling modify resume:succeeded
[2025-08-25 09:17:44.610497] [info] [22] /build/loongcollector/file_server/polling/PollingDirFile.cpp:100 polling discovery resume:starts
[2025-08-25 09:17:44.610498] [info] [22] /build/loongcollector/file_server/polling/PollingDirFile.cpp:103 polling discovery resume:succeeded
[2025-08-25 09:17:44.610499] [info] [22] /build/loongcollector/file_server/FileServer.cpp:117 file server resume:succeeded
[2025-08-25 09:17:44.610500] [info] [22] /build/loongcollector/file_server/EventDispatcher.cpp:1019 checkpoint dump:succeededLoongCollector (Logtail) の再起動
# loongcollector を停止
docker exec a287de895e40 /etc/init.d/ilogtaild stop
# loongcollector を開始
docker exec a287de895e40 /etc/init.d/ilogtaild startよくある質問
一般的なエラーメッセージ
エラー現象 | 原因 | ソリューション |
| プロジェクトのリージョンが LoongCollector (Logtail) コンテナと一致していません。 |
|
| ファイルパスの設定が正しくありません。 | アプリケーションコンテナ内のログパスが収集設定と一致していることを確認してください。 |
エラーログ:The parameter is invalid : uuid=none
問題の説明:LoongCollector (Logtail) のログ (/usr/local/ilogtail/ilogtail.LOG) にエラーログ The parameter is invalid : uuid=none が含まれています。
ソリューション:ホストに product_uuid ファイルを作成し、有効な UUID (例:169E98C9-ABC0-4A92-B1D2-AA6239C0D261) を入力し、このファイルを LoongCollector (Logtail) コンテナの /sys/class/dmi/id/product_uuid ディレクトリにマウントします。
同じログファイルまたはコンテナの標準出力を、複数の収集設定で同時に収集するにはどうすればよいですか?
デフォルトでは、データの重複を防ぐため、SLS は各ログソースが 1 つの収集設定によってのみ収集されるように制限しています:
テキストログファイルは、1 つの Logtail 設定にのみ一致できます。
コンテナ標準出力 (stdout):
標準出力テンプレートの新バージョンを使用している場合、デフォルトでは 1 つの標準出力収集設定によってのみ収集できます。
標準出力テンプレートの旧バージョンを使用している場合、追加の設定は不要で、デフォルトで複数のコピーの収集をサポートします。
Simple Log Service コンソールにログインし、対象のプロジェクトに移動します。
左側のナビゲーションウィンドウで、
[Logstores] を選択し、対象の Logstore を見つけます。その名前の横にある
アイコンをクリックして Logstore を展開します。[Logtail 設定] をクリックします。設定リストで、対象の Logtail 設定を見つけ、[操作] 列の [Logtail 設定の管理] をクリックします。
Logtail 設定ページで、[編集] をクリックし、[入力設定] セクションまでスクロールします:
テキストファイルログを収集する場合:[ファイルの複数回収集を許可] を有効にします。
コンテナの標準出力を収集する場合:[異なる 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 展開後のフィールド名のプレフィックスを指定します。
配列の展開:このスイッチをオンにすると、配列がインデックス付きのキーと値のペアに展開されます。
例:
{"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 Common Log Format |
| |
設定手順:[Logtail 設定] ページの [プロセッサ設定] セクションで、[プロセッサの追加] をクリックし、 を選択します:
ログフォーマット:combined
APACHE LogFormat 設定:システムは [ログフォーマット] に基づいて設定を自動的に入力します。
重要自動入力されたコンテンツを検証し、サーバーの Apache 設定ファイルで定義されている LogFormat と完全に同じであることを確認してください。ファイルは通常 /etc/apache2/apache2.conf にあります。
その他のパラメーターについては、「シナリオ 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 は互換性のために自動的に適応されているため、ユーザーは新旧両バージョンのログを同時に処理するためにクエリ文を変更する必要はありません。
> マシングループの作成





