Logtail 構成の入力構成セクションでパラメーターを構成して、コンテナーの stdout および stderr を収集できます。 このトピックでは、Logtail 構成を作成し、それを使用してコンテナーの stdout および stderr を収集する方法について説明します(新バージョン)。
特徴
Logtail は、コンテナーの stdout および stderr を収集し、コンテナーのメタデータと共に Simple Log Service にアップロードできます。 Logtail には次の機能があります。
stdout および stderr を収集します。
コンテナーラベルのホワイトリストを使用して、ログを収集するコンテナーを指定します。
コンテナーラベルのブラックリストを使用して、ログを収集しないコンテナーを指定します。
環境変数のホワイトリストを使用して、ログを収集するコンテナーを指定します。
環境変数のブラックリストを使用して、ログを収集しないコンテナーを指定します。
複数行のログを収集します。 たとえば、Logtail は Java スタックログを収集できます。
収集されたコンテナーログと共にアップロードする必要があるコンテナーメタデータを自動的に関連付けます。 メタデータには、コンテナー名、イメージ名、ポッド名、名前空間、環境変数が含まれます。
コンテナーが Kubernetes クラスタで実行されている場合、Logtail は次の機能もサポートします。
Kubernetes 名前空間、ポッド名、コンテナー名を使用して、ログを収集するコンテナーを指定します。
Kubernetes ラベルのホワイトリストを使用して、ログを収集するコンテナーを指定します。
Kubernetes ラベルのブラックリストを使用して、ログを収集しないコンテナーを指定します。
収集されたコンテナーログと共にアップロードする必要がある Kubernetes ラベルを自動的に関連付けます。
制限
stdout および stderr 収集プラグインの新バージョンは、Logtail が V2.1.5 以降で Linux 上で実行されている場合にのみ使用できます。 サーバーからコンテナーの stdout および stderr を収集するために Logtail を使用する場合は、このプラグインは使用できません。 Logtail のバージョンとバージョンアップデートの詳細については、「ACK クラスタに Logtail コンポーネントをインストールする」および「自己管理型 Kubernetes クラスタに Logtail コンポーネントをインストールする」をご参照ください。
Logtail は、Docker または containerd エンジンを使用するコンテナーからのみデータを収集できます。
Docker: Logtail は /run/docker.sock ディレクトリにある Docker エンジンにアクセスします。 ディレクトリが存在し、Logtail にディレクトリへのアクセス許可があることを確認してください。
containerd: Logtail は /run/containerd/containerd.sock ディレクトリにある containerd エンジンにアクセスします。 ディレクトリが存在し、Logtail にディレクトリへのアクセス許可があることを確認してください。
Logtail が読み取ることができるログの最大サイズには制限があります。 単位: バイト。 デフォルト値: 524288。 デフォルト値 524288 は、最大サイズが 512 KB であることを示します。 最大値: 8388608。 値 8388608 は、最大サイズが 8 MB であることを示します。 ログのサイズが 524,288 バイトを超える場合は、Logtail コンテナーに max_read_buffer_size 環境変数を追加して、変数を変更できます。
Logtail が停止されたコンテナーで
die
イベントを検出した場合、Logtail はそのコンテナーから stdout または stderr を収集しなくなります。 収集のレイテンシが存在する場合、コンテナーが停止される前に収集された stdout および stderr の一部が失われる可能性があります。コンテナーが Docker エンジンを使用する場合、ロギングドライバーは JSON 形式でのみ stdout および stderr を収集できます。
デフォルトでは、収集されたデータは
content
フィールドに保存されます。 Logtail は、収集されたコンテナーの stdout および stderr を処理できます。 詳細については、「データ処理用 Logtail プラグインの概要」をご参照ください。 stdout および stderr 収集プラグインの新バージョンは、ネイティブプラグインと拡張プラグインの組み合わせをサポートしています。 ネイティブプラグインは高性能で、マルチスレッドをサポートしています。AliyunPipelineConfig CRD を使用できます。
CreateLogtailPipelineConfig および UpdateLogtailPipelineConfig 操作を呼び出して、Logtail パイプライン構成を管理できます。 詳細については、「CreateLogtailPipelineConfig」および「UpdateLogtailPipelineConfig」をご参照ください。
利点
stdout および stderr 収集プラグインの旧バージョンと比較して、新バージョンにはさまざまな利点があります。 次の表に、利点を示します。
項目 | stdout および stderr 収集プラグインの新バージョン(C++)の利点 |
劇的に向上したパフォーマンス | stdout および stderr 収集プラグインの新バージョンは、再構築に C++ を使用しています。 パフォーマンスは、stdout および stderr 収集プラグインの旧バージョンと比較して 100% 以上向上しています。 |
stdout および stderr 収集プラグインの新バージョンは、データ処理におけるネイティブプラグインと同時マルチスレッディングをサポートしています。 これにより、システムリソースが完全に活用されます。 | |
stdout および stderr 収集プラグインの新バージョンは、ネイティブプラグインと Go プラグインの柔軟な組み合わせをサポートしています。 | |
より強力な信頼性 | stdout および stderr 収集プラグインの新バージョンは、ログファイルのローテーションをサポートしています。 stdout および stderr 収集プラグインの新バージョンを使用した stdout および stderr 収集のメカニズムは、テキストログ収集のメカニズムと一致しています。 stdout および stderr のファイルが迅速にローテーションされる場合、新バージョンは高い信頼性を保証します。 |
低いリソース消費量 | CPU 使用率は 20% 削減されます。 |
メモリ使用量は 20% 削減されます。 | |
O&M の一貫性 | stdout および stderr 収集プラグインの新バージョンのパラメーターと、テキストログ収集プラグインのパラメーターは一貫しています。 |
コンテナーメタデータフィールドの名前と、タグが追加されたログが保存される場所は、テキストログ収集シナリオのものと一貫しています。 同じ処理ロジックのセットを維持するだけで済みます。 |
構成の説明
フォーム構成(コンソール構成)
パラメーター | 説明 |
Stdout および Stderr | コンテナーの stdout を収集するかどうかを指定します。 |
標準エラー | コンテナーの stderr を収集するかどうかを指定します。 |
異なる Logtail 構成による収集を許可する | デフォルトでは、stdout および stderr 収集プラグインの新バージョンが構成されている Logtail 構成を 1 つだけ使用して、コンテナーから stdout および stderr を収集できます。 stdout および stderr 収集プラグインの新バージョンが構成されている複数の Logtail 構成を使用して、コンテナーから stdout および stderr を収集するには、異なる Logtail 構成による収集を許可する をオンにします。 |
コンテナーメタデータプレビューを有効にする | コンテナーメタデータのプレビューを有効にするかどうかを指定します。 コンテナーメタデータプレビューを有効にする をオンにすると、Logtail 構成の作成後に、一致するコンテナー情報と完全なコンテナー情報を含むコンテナーメタデータを表示できます。 |
コンテナーフィルタリング |
重要
|
ログタグエンリッチメント | 環境変数または Kubernetes ラベルをログタグとしてログに追加できます。 |
初回収集サイズ | Logtail が初めてファイルからデータを収集するときに、stdout および stderr のファイルから収集できるデータのサイズです。デフォルト値:1024。単位:KB。
ビジネス要件に基づいて [初回収集サイズ] パラメーターを変更できます。有効な値:0 ~ 10485760。単位:KB。 |
[詳細パラメーター] | Logtail 構成の特定のパラメーターを手動で構成するかどうかを指定します。詳細については、「CreateLogtailPipelineConfig」をご参照ください。 |
設定例
CRD - AliyunPipelineConfig
AliyunPipelineConfig CRD を使用して Logtail 構成を管理する場合、alibaba-log-controller のイメージバージョンは V0.5.1 以降である必要があります。
パラメーター | タイプ | 必須 | デフォルト値 | 説明 |
Type | string | はい | / | プラグインのタイプ。値を input_container_stdio に設定します。 |
IgnoringStdout | Boolean | いいえ | false | stdout を無視するかどうかを指定します。 |
IgnoringStderr | Boolean | いいえ | false | stderr を無視するかどうかを指定します。 |
TailSizeKB | uint | いいえ | 1024 | Logtail が stdout および stderr のファイルから初めてデータを収集するときに、Logtail が収集できるデータサイズ。ファイルサイズがこの値より小さい場合、Logtail はファイルの先頭からデータを収集します。有効な値: 0 ~ 10485760 。単位: KB 。 |
Multiline | object | いいえ | なし | 複数行集約オプション。詳細については、「表 1:複数行集約オプション」をご参照ください。 |
ContainerFilters | object | いいえ | なし | コンテナフィルターオプション。複数のオプションは論理 AND を使用して評価されます。詳細については、「表 2:コンテナフィルターオプション」をご参照ください。 |
ExternalK8sLabelTag | map | いいえ | なし | 収集したログに追加するタグ。タグは、必要なコンテナが属するポッドのラベルに関連付けられています。コンテナとは、データを収集する Kubernetes コンテナのことです。マップを作成するには、ポッドラベルの名前をマップのキーとして指定し、必要なタグの名前をマップの値として指定します。たとえば、 |
ExternalEnvTag | map | いいえ | なし | 収集したログに追加するタグ。タグは、必要なコンテナの環境変数に関連付けられています。コンテナとは、データを収集する Kubernetes コンテナのことです。マップを作成するには、環境変数の名前をマップのキーとして指定し、必要なタグの名前をマップの値として指定します。たとえば、 |
FlushTimeoutSecs | uint | いいえ | 5 | タイムアウト期間。このパラメーターで指定されたタイムアウト期間に達したときに、データを読み取るファイルに対して完全なログが生成されない場合、キャッシュから読み取ったコンテンツがログとして収集されます。 |
AllowingIncludedByMultiConfigs | bool | いいえ | false | 別の Logtail 構成で一致するファイルから Logtail が stdout および stderr を収集することを許可するかどうかを指定します。 |
表 1:複数行集約オプション
パラメーター
タイプ
必須
デフォルト値
説明
Mode
string
いいえ
custom
複数行集約モード。 custom のみがサポートされています。
StartPattern
string
Mode を custom に設定する場合は、このパラメーターが必須です。
なし
ログの最初の行の先頭と一致するために使用される正規表現。
UnmatchedContentTreatment
string
いいえ
single_line
一致しないログコンテンツの処理方法を指定します。有効な値:
discard: コンテンツを破棄します。
single_line: 一致しないログコンテンツの各行を別々のイベントとして配置します。
表 2:コンテナフィルターオプション
パラメーター
タイプ
必須
デフォルト値
説明
K8sNamespaceRegex
string
いいえ
なし
必要なコンテナが属するポッドの名前空間。コンテナとは、データを収集する Kubernetes コンテナのことです。このパラメーターを指定しない場合、Logtail はすべてのコンテナからデータを収集します。正規表現マッチングがサポートされています。
K8sPodRegex
string
いいえ
なし
必要なコンテナが属するポッドの名前。コンテナとは、データを収集する Kubernetes コンテナのことです。このパラメーターを指定しない場合、Logtail はすべてのコンテナからデータを収集します。正規表現マッチングがサポートされています。
IncludeK8sLabel
map
いいえ
なし
必要なコンテナが属するポッドのラベル。コンテナとは、データを収集する Kubernetes コンテナのことです。ラベルは条件とも呼ばれます。複数の条件は論理 OR を使用して評価されます。このパラメーターを指定しない場合、Logtail はすべてのコンテナからデータを収集します。正規表現マッチングがサポートされています。マップを作成するには、ポッドラベルの名前をマップのキーとして指定し、ポッドラベルの値をマップの値として指定します。
マップの値が空の場合、ラベルにキーが含まれるポッドが照合されます。
マップの値が空でない場合は、次の情報に注意してください。
値がキャレット(
^
)で始まり、ドル記号($
)で終わる場合、次の条件を満たすポッドが照合されます。ポッドラベルの名前にマップのキーが含まれ、ポッドラベルの値がマップの値で指定された正規表現と一致します。それ以外の場合は、ラベルがマップのキーと値と完全に一致するポッドが照合されます。
ExcludeK8sLabel
map
いいえ
なし
必要なコンテナが属さないポッドのラベル。コンテナとは、データを収集する Kubernetes コンテナのことです。複数の条件は論理 OR を使用して評価されます。このパラメーターを指定しない場合、Logtail はすべてのコンテナからデータを収集します。正規表現マッチングがサポートされています。マップを作成するには、ポッドラベルの名前をマップのキーとして指定し、ポッドラベルの値をマップの値として指定します。
マップの値が空の場合、ラベルにキーが含まれるポッドが照合されます。
マップの値が空でない場合は、次の情報に注意してください。
値がキャレット(
^
)で始まり、ドル記号($
)で終わる場合、次の条件を満たすポッドが照合されます。ポッドラベルの名前にマップのキーが含まれ、ポッドラベルの値がマップの値で指定された正規表現と一致します。それ以外の場合は、ラベルがマップのキーと値と完全に一致するポッドが照合されます。
K8sContainerRegex
string
いいえ
なし
必要なコンテナの名前。コンテナとは、データを収集する Kubernetes コンテナのことです。このパラメーターを指定しない場合、Logtail はすべてのコンテナからデータを収集します。正規表現マッチングがサポートされています。
IncludeEnv
map
いいえ
なし
データを収集するコンテナの環境変数。環境変数は条件とも呼ばれます。複数の条件は論理 OR を使用して評価されます。このパラメーターを指定しない場合、Logtail はすべてのコンテナからデータを収集します。正規表現マッチングがサポートされています。マップを作成するには、環境変数の名前をマップのキーとして指定し、環境変数の値をマップの値として指定します。
マップの値が空の場合、環境変数にキーが含まれるコンテナが照合されます。
マップの値が空でない場合は、次の情報に注意してください。
値がキャレット(
^
)で始まり、ドル記号($
)で終わる場合、次の条件を満たすコンテナが照合されます。環境変数の名前はマップのキーであり、環境変数の値はマップの値で指定された正規表現と一致します。それ以外の場合は、環境変数がマップのキーと値と完全に一致するコンテナが照合されます。
ExcludeEnv
map
いいえ
なし
データを収集しないコンテナの環境変数。複数の条件は論理 OR を使用して評価されます。このパラメーターを指定しない場合、Logtail はすべてのコンテナからデータを収集します。正規表現マッチングがサポートされています。マップを作成するには、環境変数の名前をマップのキーとして指定し、環境変数の値をマップの値として指定します。
マップの値が空の場合、環境変数にキーが含まれるコンテナが照合されます。
マップの値が空でない場合は、次の情報に注意してください。
値がキャレット(
^
)で始まり、ドル記号($
)で終わる場合、次の条件を満たすコンテナが照合されます。環境変数の名前はマップのキーであり、環境変数の値はマップの値で指定された正規表現と一致します。それ以外の場合は、環境変数がマップのキーと値と完全に一致するコンテナが照合されます。
IncludeContainerLabel
map
いいえ
なし
データを収集するコンテナのラベル。複数の条件は論理 OR を使用して評価されます。このパラメーターを指定しない場合、このパラメーターはデフォルトで空のままになり、Logtail がすべてのコンテナからデータを収集することを示します。正規表現マッチングがサポートされています。マップを作成するには、コンテナラベルの名前をマップのキーとして指定し、コンテナラベルの値をマップの値として指定します。
マップの値が空の場合、ラベルにキーが含まれるコンテナが照合されます。
マップの値が空でない場合は、次の情報に注意してください。
値がキャレット(
^
)で始まり、ドル記号($
)で終わる場合、次の条件を満たすコンテナが照合されます。コンテナラベルの名前にマップのキーが含まれ、コンテナラベルの値がマップの値で指定された正規表現と一致します。それ以外の場合は、ラベルがマップのキーと値と完全に一致するコンテナが照合されます。
ExcludeContainerLabel
map
いいえ
なし
データを収集しないコンテナのラベル。複数の条件は論理 OR を使用して評価されます。このパラメーターを指定しない場合、このパラメーターはデフォルトで空のままになり、Logtail がすべてのコンテナからデータを収集することを示します。正規表現マッチングがサポートされています。マップを作成するには、コンテナラベルの名前をマップのキーとして指定し、コンテナラベルの値をマップの値として指定します。
マップの値が空の場合、ラベルにキーが含まれるコンテナが照合されます。
マップの値が空でない場合は、次の情報に注意してください。
値がキャレット(
^
)で始まり、ドル記号($
)で終わる場合、次の条件を満たすコンテナが照合されます。コンテナラベルの名前にマップのキーが含まれ、コンテナラベルの値がマップの値で指定された正規表現と一致します。それ以外の場合は、ラベルがマップのキーと値と完全に一致するコンテナが照合されます。
構成例
詳細については、「AliyunPipelineConfig を使用して Logtail 構成を管理する」をご参照ください。
apiVersion: telemetry.alibabacloud.com/v1alpha1 # カスタムリソース(CR)を ClusterAliyunPipelineConfig CRD から作成します。 kind: ClusterAliyunPipelineConfig metadata: # リソースの名前を指定します。名前は、現在の Kubernetes クラスター内で一意である必要があります。名前は、作成される Logtail 構成の名前と同じです。 name: example-k8s-stdout spec: # ログが収集されるプロジェクトを指定します。 project: name: k8s-log-clusterid # ログを格納するログストアを作成します。 logstores: - name: k8s-stdout # Logtail 構成のパラメーターを構成します。 config: # サンプルログを指定します。このパラメーターは空のままにすることができます。 sample: | 2024-06-19 16:35:00 INFO test log line-1 line-2 end # 入力プラグインを構成します。 inputs: # input_container_stdio プラグインを使用して、コンテナーの stdout を収集します。 - Type: input_container_stdio # stdout を収集します。 IgnoringStdout: false # stderr を収集しません。 IgnoringStderr: true # コンテナをフィルタリングするための条件を構成します。複数のオプションは論理 AND を使用して評価されます。 ContainerFilters: # 必要なコンテナが属するポッドの名前空間を指定します。正規表現マッチングがサポートされています。 K8sNamespaceRegex: "^(default)$" # 必要なコンテナの名前を指定します。正規表現マッチングがサポートされています。 K8sContainerRegex: "^(.*app.*)$" # 複数行ログ収集の設定を構成します。 # ログの最初の行の先頭と一致するために使用される正規表現を指定します。 Multiline: Mode: custom StartPattern: \d+-\d+-\d+.* UnmatchedContentTreatment: single_line # 出力プラグインを構成します。 flushers: # flusher_sls プラグインを使用して、ログを特定のログストアに配信します。 - Type: flusher_sls Logstore: k8s-stdout Endpoint: cn-hangzhou.log.aliyuncs.com Region: cn-hangzhou TelemetryType: logs
コンテナメタデータのプレビュー
Logtail 構成を作成した後、Logtail 構成ページでコンテナメタデータと、特定のコンテナがフィルター条件に一致しなかった理由を確認できます。
[プロジェクト] セクションで、目的のプロジェクトをクリックします。
左側のナビゲーションウィンドウで、[ログストレージ] をクリックします。[ログストア] リストで、目的のログストアを見つけ、ログストアの左側にある [>] ドロップダウン矢印をクリックし、
を選択します。Logtail 構成ページで、作成した Logtail 構成をクリックします。
[Logtail 構成] ページで、[編集] をクリックします。
[コンテナメタデータプレビューを有効にする] をオンにします。
[コンテナメタデータプレビュー] をクリックします。
コンテナープレビュー ダイアログボックスで、コンテナメタデータを表示します。
マッチングコンテナー タブには、指定されたフィルター条件に一致するコンテナのメタデータが表示されます。
フルコンテナー タブには、現在の Kubernetes クラスタ内のすべてのコンテナのメタデータと、特定のコンテナがフィルター条件に一致しなかった理由が表示されます。
ログフィールド
次の表は、Kubernetes クラスターの各ログについてデフォルトでアップロードされるフィールドを示しています。
フィールド | 説明 |
_time_ | ログが収集された時間。 |
_source_ | ログソースの種類。有効な値: stdout および stderr 。 |
__tag__:_image_name_ | イメージの名前。 |
__tag__:_container_name_ | コンテナーの名前。 |
__tag__:_pod_name_ | ポッドの名前。 |
__tag__:_namespace_ | ポッドの名前空間。 |
__tag__:_pod_uid_ | ポッドの一意の識別子。 |
トラブルシューティング
Logtail を使用して、標準コンテナーや Kubernetes コンテナーなどのコンテナーからログを収集するときにエラーが発生した場合は、次のリファレンスに基づいてエラーをトラブルシューティングします。
stderr がアクセスログとは異なる形式であるために解析できない場合は、エラー関連のログレコードのクエリを容易にするために、ログコンテンツにインデックスを追加することをお勧めします。Simple Log Service は、フィールドを抽出するプラグインを使用した解析をサポートしていません。詳細については、「インデックスを作成する」をご参照ください。