個別のLogtailプロセスを使用してKubernetesノード上のすべてのコンテナからログを収集する場合は、DaemonSetモードでKubernetesクラスターにLogtailをインストールできます。 このトピックでは、DaemonSetモードでコンテナテキストログを収集する実装、制限、前提条件、および手順について説明します。
実装
DaemonSetモード
DaemonSetモードでは、Kubernetesクラスター内のノードで1つのLogtailコンテナのみが実行されます。 Logtailを使用して、ノード上のすべてのコンテナからログを収集できます。
ノードがKubernetesクラスターに追加されると、クラスターは新しいノードにLogtailコンテナーを自動的に作成します。 Kubernetesクラスターからノードが削除されると、クラスターはノード上のLogtailコンテナーを自動的に破棄します。 DaemonSetsとカスタム識別子ベースのマシングループにより、Logtailプロセスを手動で管理する必要がなくなります。
コンテナ検出
Logtailコンテナが他のコンテナからログを収集する前に、Logtailコンテナは実行中のコンテナを特定して判断する必要があります。 このプロセスはコンテナ検出と呼ばれます。 コンテナー検出フェーズでは、LogtailコンテナーはKubernetesクラスターのkube-apiserverコンポーネントと通信しません。 代わりに、Logtailコンテナは、Logtailコンテナが実行されているノードのコンテナランタイムデーモンと通信して、ノード上のすべてのコンテナに関する情報を取得します。 これにより、コンテナ検出プロセスでkube-apiserverコンポーネントに圧力が発生するのを防ぎます。
Logtailを使用してログを収集する場合、名前空間、ポッド名、ポッドラベル、コンテナー環境変数などの条件を指定して、Logtailがログを収集するコンテナーを特定できます。
コンテナーのファイルパスマッピング
Kubernetesクラスター内のポッドは分離されています。 その結果、ポッド内のLogtailコンテナは、別のポッド内のコンテナのファイルに直接アクセスできません。 コンテナのファイルシステムは、コンテナホストのファイルシステムをコンテナにマウントすることによって作成される。 Logtailコンテナは、コンテナホストのルートディレクトリを含むファイルシステムがLogtailコンテナにマウントされた後にのみ、コンテナホスト上の任意のファイルにアクセスできます。 これにより、Logtailコンテナはファイルシステム内のファイルからログを収集できます。 コンテナ内のファイルパスとコンテナホスト上のファイルパスの関係は、ファイルパスマッピングと呼ばれます。
たとえば、コンテナ内のファイルパスは /log/app.log
です。 ファイルパスマッピング後、コンテナーホスト上のファイルパスは /var/lib/docker/containers/<container-id>/log/app.log
になります。 既定では、コンテナーホストのルートディレクトリを含むファイルシステムは、logtailコンテナーの /Logtail_host
ディレクトリにマウントされます。 したがって、Logtailコンテナは /logtail_host/var/lib/docker/containers/<container-id>/log/app.log
からログを収集します。
制限事項
コンテナランタイム: Logtailは、Dockerエンジンまたはcontainerdエンジンを使用するコンテナーからのみデータを収集できます。 Dockerコンテナーの場合、オーバーレイおよびoverlay2ストレージドライバーのみがサポートされます。 他のストレージドライバを使用する場合は、ログのディレクトリにボリュームをマウントする必要があります。 そして、一時ディレクトリが生成される。
ボリュームのマウント: Apsara File Storage NAS (NAS) ファイルシステムがPersistentVolumeClaim (PVC) を使用してログのディレクトリにマウントされている場合、DaemonSetモードでLogtailをインストールすることはできません。 この場合、SidecarまたはDeploymentモードでLogtailをインストールすることを推奨します。 その後、Logtailはログを収集できます。 詳細については、「SidecarモードでのKubernetesコンテナーからのテキストログの収集」をご参照ください。.
ログファイルパス:
コンテナ内のファイルパスのシンボリックリンクはサポートされていません。 収集ディレクトリとして実際のパスを指定する必要があります。
アプリケーションコンテナのデータディレクトリにボリュームがマウントされている場合は、データディレクトリまたはそのサブディレクトリをコレクションディレクトリとして指定する必要があります。 たとえば、ボリュームが
/var/log/service
ディレクトリにマウントされ、収集ディレクトリを/var/log
に設定した場合、Logtailは /var/logディレクトリからログを収集できません。 収集ディレクトリとして/var/log/service
またはそのサブディレクトリを指定する必要があります。
ログ収集の停止:
Docker: コンテナが停止すると、Logtailは現在のコンテナファイルハンドルを直ちに解放します。 その後、コンテナは予想通りに出ることができる。 コンテナが停止する前にネットワークの待ち時間やリソースの過剰消費などの問題により収集待ち時間が存在する場合、コンテナが停止する前に収集された一部のログが失われる可能性があります。
containerd: コンテナーが停止すると、すべてのログが送信されるまで、Logtailは現在のコンテナーファイルハンドルを解放しません。 この期間中、ファイルは開いたままです。 ネットワーク待ち時間やリソースの過剰消費などの問題により収集待ち時間が存在する場合、コンテナはタイムリーに破壊されない可能性があります。
前提条件
Logtailコンポーネントがインストールされます。 詳細については、「ACKクラスターへのLogtailコンポーネントのインストール」をご参照ください。
Logtailがインストールされているサーバーでは、ポート80と443が有効になります。 サーバーがElastic Computing Service (ECS) インスタンスの場合、関連するセキュリティグループルールを再設定してポートを有効にすることができます。 セキュリティグループルールの設定方法の詳細については、「セキュリティグループルールの追加」をご参照ください。
ログは、ログを収集するコンテナーで継続的に生成されます。 Logtailは増分ログのみを収集します。 Logtail構成がサーバーに配信されて適用された後にサーバー上のログファイルが更新されない場合、Logtailはファイルからログを収集しません。 詳細については、「ログファイルの読み取り」をご参照ください。
必要なUNIXドメインソケットが存在し、LogtailにはUNIXドメインソケットに対するアクセス権限があります。 UNIXドメインソケットは、コンテナエンジンによって異なります。
Docker:
/run/docker.sock
containerd:
/run/containerd/containerd.sock
Logtail構成の作成
CustomResourceDefinition (CRD) を使用してLogtail設定を作成し、Simple Log ServiceコンソールでLogtail設定を変更した場合、変更はCRDと同期されません。 CRDを使用して作成されたLogtail構成を変更する場合は、CRDを変更する必要があります。 Simple Log Serviceコンソールで設定を変更すると、Logtail設定の不整合が発生する可能性があります。
コンソール
にログインします。Simple Log Serviceコンソール.
[クイックデータのインポート] セクションで、[データのインポート] をクリックします。 [データのインポート] ダイアログボックスで、[Kubernetes-ファイル] カードをクリックします。
必要なプロジェクトとLogstoreを選択します。 [次へ] をクリックします。 この例では、Logtailコンポーネントのインストールに使用するプロジェクトと、作成するLogstoreを選択します。
[マシングループの設定] ステップで、次の操作を実行します。
ビジネス要件に基づいて、次のいずれかの設定を使用します。
- 重要
以降の設定は、前述の設定によって異なります。
必要なマシングループが [応用サーバーグループ] セクションに追加されていることを確認します。 そして、[次へ] をクリックします。 Container Service for Kubernetes (ACK) クラスターにLogtailコンポーネントをインストールすると、Simple Log Serviceは
k8s-group-${your_k8s_cluster_id}
という名前のマシングループを自動的に作成します。 このマシングループを直接使用できます。重要マシングループを作成する場合は、[マシングループの作成] をクリックします。 表示されるパネルで、パラメーターを設定してマシングループを作成します。 詳細については、「ACKコンソールでウィザードを使用してアプリケーションを作成し、Simple Log Serviceを設定する」をご参照ください。
マシングループのハートビートステータスがFAILの場合、[自動再試行] をクリックします。 問題が解決しない場合は、ホスト環境のLogtailマシングループに関連するエラーのトラブルシューティングを行うにはどうすればよいですか?
Logtail設定を作成し、[次へ] をクリックします。 Simple Log Serviceは、Logtail設定の作成後にログの収集を開始します。
説明Logtail設定を有効にするには、最大3分かかります。
インデックスの作成とプレビュー 次に、[次へ] をクリックします。 デフォルトでは、Simple Log Serviceでフルテキストインデックスが有効になっています。 手動モードまたは自動モードで収集したログに基づいてフィールドインデックスを設定することもできます。 自動モードでフィールドインデックスを設定するには、[自動インデックス生成] をクリックします。 これにより、Simple Log Serviceは自動的にフィールドインデックスを作成します。 詳細については、「インデックスの作成」をご参照ください。
重要ログのすべてのフィールドをクエリする場合は、フルテキストインデックスを使用することを推奨します。 特定のフィールドのみをクエリする場合は、フィールドインデックスを使用することを推奨します。 これは、インデックストラフィックを減らすのに役立ちます。 フィールドを分析する場合は、フィールドインデックスを作成する必要があります。 分析のために、クエリ文にSELECT文を含める必要があります。
[クエリログ] をクリックします。 次に、Logstoreのクエリと分析ページにリダイレクトされます。
インデックスが有効になるまで約1分待つ必要があります。 次に、収集したログを [生ログ] タブで表示できます。 詳細については、「ログの照会と分析」をご参照ください。
(推奨) CRD - AliyunPipelineConfig
Logtail設定の作成
LogtailコンポーネントV0.5.1以降のみがAliyunPipelineConfigをサポートしています。
Logtail設定を作成するには、AliyunPipelineConfig CRDからCRを作成するだけです。 Logtail設定が作成されると、自動的に適用されます。 CRに基づいて作成されたLogtail設定を変更する場合は、CRを変更する必要があります。
次のコマンドを実行して、YAMLファイルを作成します。
次のコマンドで、
cube.yaml
はサンプルファイル名です。 ビジネス要件に基づいて別のファイル名を指定できます。vim cube.yaml
YAMLファイルに次のスクリプトを入力し、ビジネス要件に基づいてパラメーターを設定します。
重要configName
パラメーターの値は、Logtailコンポーネントのインストールに使用するSimple Log Serviceプロジェクトで一意である必要があります。Logtail設定ごとにCRを設定する必要があります。 複数のCRが同じLogtail設定に関連付けられている場合、最初のCR以外のCRは有効になりません。
AliyunPipelineConfig
CRDに関連するパラメーターの詳細については、「 (推奨) AliyunPipelineConfigを使用してLogtail構成を管理する」をご参照ください。 この例では、Logtail設定にテキストログ収集の設定が含まれています。 詳細については、「CreateLogtailPipelineConfig」をご参照ください。config.flushers.Logstoreパラメーターで指定されたLogstoreが存在することを確認します。 spec.logstoreパラメーターを設定して、Logstoreを自動的に作成できます。
特定のコンテナから単一行のテキストログを収集する
この例では、
example-k8s-file
という名前のLogtail設定が作成され、クラスター内のapp
を含む名前のコンテナーから1行のテキストログが収集されます。 ファイルはtest.LOG
で、パスは/data/logs/app_1
です。収集されたログは、
k8s-log-test
という名前のプロジェクトに属するk8s-file
という名前のLogstoreに保存されます。apiVersion: telemetry.alibabacloud.com/v1alpha1 # ClusterAliyunPipelineConfig CRDからCRを作成します。 種類: ClusterAliyunPipelineConfig メタデータ: # リソースの名前を指定します。 名前は、現在のKubernetesクラスターで一意である必要があります。 この名前は、作成されたLogtail設定の名前と同じです。 名前: example-k8s-file spec: # ログを収集するプロジェクトを指定します。 プロジェクト: 名前: k8s-log-test # ログを保存するLogstoreを作成します。 logstore: -name: k8s-file # Logtail設定のパラメーターを設定します。 config: # Logtail入力プラグインを設定します。 入力: # input_fileプラグインを使用して、コンテナからテキストログを収集します。 -タイプ: input_file # コンテナ内のファイルパスを指定します。 FilePaths: - /data/logs/app_1/**/test.LOG # コンテナー検出機能を有効にします。 EnableContainerDiscovery: true # フィルターコンテナーに条件を追加します。 複数の条件は、論理ANDを使用して評価されます。 ContainerFilters: # 必要なコンテナが属するポッドの名前空間を指定します。 正規表現マッチングがサポートされています。 K8sNamespaceRegex: デフォルト # 必要なコンテナの名前を指定します。 正規表現マッチングがサポートされています。 K8sContainerRegex: ^(.* app.*)$ # Logtail出力プラグインを設定します。 flushers: # flusher_slsプラグインを使用して、特定のLogstoreにログを送信します。 -タイプ: flusher_sls # Logstoreが存在することを確認します。 Logstore: k8s-file # エンドポイントが有効であることを確認します。 エンドポイント: cn-hangzhou.log.aliyuncs.com リージョン: cn-hangzhou TelemetryType: ログ
すべてのコンテナから複数行のテキストログを収集し、正規表現を使用してログを解析する
この例では、クラスター内のすべてのコンテナーから複数行のテキストログを収集するために、
example-k8sファイル
という名前のLogtail設定が作成されます。 ファイルはtest.LOG
で、パスは/data/logs/app_1
です。 収集されたログはJSONモードで解析され、k8s-log-test
という名前のプロジェクトに属するk8s-file
という名前のLogstoreに保存されます。次の例で提供されるサンプルログは、
{"content": "2024-06-19 16:35:00 INFOテストログ \nline-1\nline-2\nend"}
の形式でinput_fileプラグインによって読み取られます。 次に、ログは正規表現に基づいて{"time": "2024-06-19 16:35:00" 、"level": "INFO" 、"msg": "test log\nline-1\nline-2\nend"}
に解析されます。apiVersion: telemetry.alibabacloud.com/v1alpha1 # ClusterAliyunPipelineConfig CRDからCRを作成します。 種類: ClusterAliyunPipelineConfig メタデータ: # リソースの名前を指定します。 名前は、現在のKubernetesクラスターで一意である必要があります。 この名前は、作成されたLogtail設定の名前と同じです。 名前: example-k8s-file spec: # ログを収集するプロジェクトを指定します。 プロジェクト: 名前: k8s-log-test # ログを保存するLogstoreを作成します。 logstore: -name: k8s-file # Logtail設定のパラメーターを設定します。 config: # サンプルログを指定します。 このパラメーターは空のままにできます。 サンプル: | 2024-06-19 16:35:00 INFOテストログ ライン-1 ライン-2 end # Logtail入力プラグインを設定します。 入力: # input_fileプラグインを使用して、コンテナから複数行のテキストログを収集します。 -タイプ: input_file # コンテナ内のファイルパスを指定します。 FilePaths: - /data/logs/app_1/**/test.LOG # コンテナー検出機能を有効にします。 EnableContainerDiscovery: true # 複数行のログ収集を有効にします。 マルチライン: # 正規表現に基づいて、ログの最初の行の先頭に一致するようにカスタムモードを指定します。 モード: カスタム # ログの最初の行の先頭を一致させるために使用される正規表現を指定します。 StartPattern: \d +-\d +-\d +.* # Logtail処理プラグインを指定します。 プロセッサ: # processor_parse_regex_nativeプラグインを使用して、指定された正規表現に基づいてログを解析します。 -タイプ: processor_parse_regex_native # 入力フィールドの名前を指定します。 SourceKey: content # 解析に使用される正規表現を指定します。 キャプチャグループを使用してフィールドを抽出します。 正規表現: (\d +-\d +-\d +\s *\d +:\d +:\d +)\s *(\S +)\s *(.*) # 抽出するフィールドを指定します。 キー: ["time", "level", "msg"] # Logtail出力プラグインを設定します。 flushers: # flusher_slsプラグインを使用して、特定のLogstoreにログを送信します。 -タイプ: flusher_sls # Logstoreが存在することを確認します。 Logstore: k8s-file # エンドポイントが有効であることを確認します。 エンドポイント: cn-hangzhou.log.aliyuncs.com リージョン: cn-hangzhou TelemetryType: ログ
次のコマンドを実行してLogtail設定を適用します。 Logtail設定が適用されると、Logtailは指定されたコンテナからテキストログの収集を開始し、そのログをSimple Log Serviceに送信します。
次のコマンドで、
cube.yaml
はサンプルファイル名です。 ビジネス要件に基づいて別のファイル名を指定できます。kubectl apply -f cube.yaml
重要ログを収集したら、インデックスを作成する必要があります。 次に、Logstore内のログを照会および分析できます。 詳細については、「インデックスの作成」をご参照ください。
CRD - AliyunLogConfig
Logtail設定を作成するには、AliyunLogConfig CRDからCRを作成するだけです。 Logtail設定が作成されると、自動的に適用されます。 CRに基づいて作成されたLogtail設定を変更する場合は、CRを変更する必要があります。
次のコマンドを実行して、YAMLファイルを作成します。
次のコマンドで、
cube.yaml
はサンプルファイル名です。 ビジネス要件に基づいて別のファイル名を指定できます。vim cube.yaml
YAMLファイルに次のスクリプトを入力し、ビジネス要件に基づいてパラメーターを設定します。
重要configName
パラメーターの値は、Logtailコンポーネントのインストールに使用するSimple Log Serviceプロジェクトで一意である必要があります。複数のCRが同じLogtail設定に関連付けられている場合、いずれかのCRを削除または変更すると、Logtail設定が影響を受けます。 CRが削除または変更されると、関連する他のCRのステータスがSimple Log ServiceのLogtail設定のステータスと一致しなくなります。
CRパラメーターの詳細については、「AliyunLogConfigを使用したLogtail設定の管理」をご参照ください。 この例では、Logtail設定にテキストログ収集の設定が含まれています。 詳細については、「CreateConfig」をご参照ください。
特定のコンテナから単一行のテキストログを収集する
この例では、
example-k8s-file
という名前のLogtail構成が作成され、クラスター内の名前がapp
で始まるすべてのポッドのコンテナーから単一行のテキストログが収集されます。 ファイルはtest.LOG
で、パスは/data/logs/app_1
です。 収集されたログは、k8s-log-test
という名前のプロジェクトに属するk8s-file
という名前のLogstoreに保存されます。apiVersion: log.alibabacloud.com/v1alpha1 kind: AliyunLogConfig metadata: # Specify the name of the resource. The name must be unique in the current Kubernetes cluster. name: example-k8s-file namespace: kube-system spec: # Specify the name of the project. If you leave this parameter empty, the project named k8s-log-<your_cluster_id> is used. project: k8s-log-test # Specify the name of the Logstore. If the specified Logstore does not exist, Simple Log Service automatically creates a Logstore. logstore: k8s-file # Configure the parameters for the Logtail configuration. logtailConfig: # Specify the type of the data source. If you want to collect text logs, set the value to file. inputType: file # Specify the name of the Logtail configuration. configName: example-k8s-file inputDetail: # Specify the simple mode to collect text logs. logType: common_reg_log # Specify the log file path. logPath: /data/logs/app_1 # Specify the log file name. You can use wildcard characters (* and ?) when you specify the log file name. Example: log_*.log. filePattern: test.LOG # Set the value to true if you want to collect text logs from containers. dockerFile: true # Specify conditions to filter containers. advanced: k8s: K8sPodRegex: '^(app.*)$'
次のコマンドを実行してLogtail設定を適用します。 Logtail設定が適用されると、Logtailは指定されたコンテナからテキストログの収集を開始し、そのログをSimple Log Serviceに送信します。
次のコマンドで、
cube.yaml
はサンプルファイル名です。 ビジネス要件に基づいて別のファイル名を指定できます。kubectl apply -f cube.yaml
重要ログを収集したら、インデックスを作成する必要があります。 次に、Logstore内のログを照会および分析できます。 詳細については、「インデックスの作成」をご参照ください。
Logtail設定の表示
コンソール
[プロジェクト] セクションで、対象のプロジェクトをクリックします。
を選択します。 対象のLogtail設定の > アイコンをクリックします。 を選択します。
対象のLogtail設定をクリックして、設定の詳細を表示します。
(推奨) CRD - AliyunPipelineConfig
AliyunPipelineConfig CRDを使用して作成されたすべてのLogtail設定を表示する
AliyunPipelineConfig CRDを使用して作成されたLogtail設定の詳細を表示する
CRD - AliyunLogConfig
AliyunLogConfig CRDを使用して作成されたすべてのLogtail設定を表示する
AliyunLogConfig CRDを使用して作成されたLogtail構成の詳細を表示する
収集したログの照会と分析
Simple Log Serviceコンソールの [プロジェクト] セクションで、管理するプロジェクトをクリックして、プロジェクトの詳細ページに移動します。
管理するLogstoreを見つけ、Logstoreの上にポインターを移動し、アイコンをクリックしてから、[検索と分析] を選択してKubernetesクラスターのログを表示します。
コンテナテキストログのデフォルトフィールド
次の表に、各コンテナテキストログにデフォルトで含まれるフィールドを示します。
フィールド名 | 説明 |
__タグ __:__ ホスト名__ | コンテナーホストの名前。 |
__tag __:__ path__ | コンテナー内のログファイルのパス。 |
__tag __:_ container_ip_ | コンテナーのIPアドレス。 |
__タグ __:_ image_name_ | コンテナーで使用されるイメージの名前。 |
__tag __:_ pod_name_ | ポッドの名前。 |
__tag __:_ 名前空間_ | ポッドが属する名前空間。 |
__tag __:_ pod_uid_ | ポッドの一意識別子 (UID) 。 |
関連ドキュメント
Logtailを使用して標準コンテナーやKubernetesコンテナーなどのコンテナーからログを収集する際に例外が発生した場合は、「コンテナーからログを収集する際にエラーが発生した場合の対処方法」をご参照ください。
Kubernetesコンテナからstdoutとstderrを収集する方法については、「DaemonSetモードでKubernetesコンテナからstdoutとstderrを収集する」をご参照ください。