別のLogtailプロセスを使用してポッド内のすべてのコンテナからログを収集する場合は、SidecarモードでKubernetesクラスターにLogtailをインストールできます。 このトピックでは、Sidecarモードでコンテナテキストログを収集する実装、制限、前提条件、および手順について説明します。
実装
サイドカーモード
Sidecarモードでは、各ポッドはLogtailコンテナを実行します。 Logtailを使用して、ポッド内のすべてのコンテナからログを収集できます。 この場合、各ポッドからのログ収集は分離されます。
Logtailがポッド内の他のコンテナからログを収集できるようにするには、Logtailコンテナとアプリケーションコンテナが同じボリュームを共有していることを確認します。 Sidecarモードでコンテナログを収集する方法の詳細については、「ロギングエージェントを持つSidecarコンテナ」および「複数のコンテナを持つポッド」をご参照ください。 ボリュームの詳細については、「ストレージの基本」をご参照ください。
前提条件
アウトバウンドトラフィックのポート80 (HTTP) と443 (HTTPS) は、Logtailがインストールされているサーバーで有効になっています。 サーバーがElastic Computing Service (ECS) インスタンスの場合、関連するセキュリティグループルールを再設定してポートを有効にすることができます。 セキュリティグループルールの設定方法の詳細については、「セキュリティグループルールの追加」をご参照ください。
ログは、ログを収集するコンテナーで継続的に生成されます。 Logtailは増分ログのみを収集します。 Logtail構成がサーバーに配信されて適用された後にサーバー上のログファイルが更新されない場合、Logtailはファイルからログを収集しません。 詳細については、「ログファイルの読み取り」をご参照ください。
ログを収集するファイルは、必要なLogtailコンテナにマウントされているボリュームに保存されます。
ステップ1: Logtailコンテナをビジネスポッドに注入する
Kubernetesクラスターにログインします。
YAMLファイルを作成します。 次のコマンドでは、
sidecar.yaml
はサンプルファイル名です。 ビジネス要件に基づいて別のファイル名を指定できます。vim sidecar.yaml
YAMLファイルに次のスクリプトを入力し、ビジネス要件に基づいてパラメーターを設定します。
警告次のYAMLテンプレートで、
${}
形式のすべてのプレースホルダーを実際の値に置き換えます。 他のパラメータを変更または削除しないでください。次のコマンドを実行して、
sidecar.yaml
ファイルの設定を適用します。次のコマンドでは、
sidecar.yaml
はサンプルファイル名です。 ビジネス要件に基づいて別のファイル名を指定できます。kubectl apply -f sidecar.yaml
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設定の表示
コンソール
にログインします。Simple Log Serviceコンソール.
[プロジェクト] セクションで、対象のプロジェクトをクリックします。
を選択します。 対象のLogtail設定の > アイコンをクリックします。 を選択します。
対象のLogtail設定をクリックして、設定の詳細を表示します。
(推奨) CRD - AliyunPipelineConfig
AliyunPipelineConfig CRDを使用して作成されたすべてのLogtail設定を表示する
AliyunPipelineConfig CRDを使用して作成されたLogtail設定の詳細を表示する
CRD - AliyunLogConfig
AliyunLogConfig CRDを使用して作成されたすべてのLogtail設定を表示する
AliyunLogConfig CRDを使用して作成されたLogtail構成の詳細を表示する
収集したログの照会と分析
Simple Log Serviceコンソールの [プロジェクト] セクションで、管理するプロジェクトをクリックして、プロジェクトの詳細ページに移動します。
管理するLogstoreを見つけ、Logstoreの上にポインターを移動し、アイコンをクリックしてから、[検索と分析] を選択してKubernetesクラスターのログを表示します。
トラブルシューティング
Logtailを使用して標準コンテナやKubernetesコンテナなどのコンテナからログを収集するときに例外が発生した場合、次のトピックに基づいて問題のトラブルシューティングを行うことができます。