個別の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ストレージドライバーのみがサポートされます。 他のストレージドライバを使用する場合は、ログのディレクトリにボリュームをマウントする必要があります。 そして、一時ディレクトリが生成される。
ボリュームのマウント: File Storage 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コンポーネントのインストール」をご参照ください。
アウトバウンドトラフィックのポート80 (HTTP) と443 (HTTPS) は、Logtailがインストールされているサーバーで有効になっています。 サーバーが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コンソールの使用」をご参照ください。
マシングループのハートビートステータスが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 # Create a CR from the ClusterAliyunPipelineConfig CRD. kind: ClusterAliyunPipelineConfig metadata: # Specify the name of the resource. The name must be unique in the current Kubernetes cluster. The name is the same as the name of the Logtail configuration that is created. name: example-k8s-file spec: # Specify the project to which logs are collected. project: name: k8s-log-test # Create a Logstore to store logs. logstores: - name: k8s-file # Configure the parameters for the Logtail configuration. config: # Configure the Logtail input plug-ins. inputs: # Use the input_file plug-in to collect text logs from containers. - Type: input_file # Specify the file path in the containers. FilePaths: - /data/logs/app_1/**/test.LOG # Enable the container discovery feature. EnableContainerDiscovery: true # Add conditions to filter containers. Multiple conditions are evaluated by using a logical AND. ContainerFilters: # Specify the namespace of the pod to which the required containers belong. Regular expression matching is supported. K8sNamespaceRegex: default # Specify the name of the required containers. Regular expression matching is supported. K8sContainerRegex: ^(.*app.*)$ # Configure the Logtail output plug-ins. flushers: # Use the flusher_sls plug-in to send logs to a specific Logstore. - Type: flusher_sls # Make sure that the Logstore exists. Logstore: k8s-file # Make sure that the endpoint is valid. Endpoint: cn-hangzhou.log.aliyuncs.com Region: cn-hangzhou TelemetryType: logs
すべてのコンテナから複数行のテキストログを収集し、正規表現を使用してログを解析する
この例では、クラスター内のすべてのコンテナーから複数行のテキストログを収集するために、
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 # Create a CR from the ClusterAliyunPipelineConfig CRD. kind: ClusterAliyunPipelineConfig metadata: # Specify the name of the resource. The name must be unique in the current Kubernetes cluster. The name is the same as the name of the Logtail configuration that is created. name: example-k8s-file spec: # Specify the project to which logs are collected. project: name: k8s-log-test # Create a Logstore to store logs. logstores: - name: k8s-file # Configure the parameters for the Logtail configuration. config: # Specify the sample log. You can leave this parameter empty. sample: | 2024-06-19 16:35:00 INFO test log line-1 line-2 end # Configure the Logtail input plug-ins. inputs: # Use the input_file plug-in to collect multi-line text logs from containers. - Type: input_file # Specify the file path in the containers. FilePaths: - /data/logs/app_1/**/test.LOG # Enable the container discovery feature. EnableContainerDiscovery: true # Enable multi-line log collection. Multiline: # Specify the custom mode to match the beginning of the first line of a log based on a regular expression. Mode: custom # Specify the regular expression that is used to match the beginning of the first line of a log. StartPattern: \d+-\d+-\d+.* # Specify the Logtail processing plug-ins. processors: # Use the processor_parse_regex_native plug-in to parse logs based on the specified regular expression. - Type: processor_parse_regex_native # Specify the name of the input field. SourceKey: content # Specify the regular expression that is used for the parsing. Use capturing groups to extract fields. Regex: (\d+-\d+-\d+\s*\d+:\d+:\d+)\s*(\S+)\s*(.*) # Specify the fields that you want to extract. Keys: ["time", "level", "msg"] # Configure the Logtail output plug-ins. flushers: # Use the flusher_sls plug-in to send logs to a specific Logstore. - Type: flusher_sls # Make sure that the Logstore exists. Logstore: k8s-file # Make sure that the endpoint is valid. Endpoint: cn-hangzhou.log.aliyuncs.com Region: cn-hangzhou TelemetryType: logs
次のコマンドを実行して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を収集する」をご参照ください。