Simple Log Service は、Kubernetes のログ収集のために、DaemonSet とサイドカーという 2 つの Logtail デプロイモードをサポートしています。サイドカーモードでは、各 Pod が専用の Logtail コンテナを実行し、その Pod 内のコンテナからのみログを収集するため、収集は Pod ごとに分離されます。このトピックでは、サイドカーモードで Logtail をデプロイして、ACK マネージドクラスターからテキストログを収集する方法について説明します。
DaemonSet モードと Sidecar モードの比較については、「Kubernetes クラスターに Logtail をインストールしてログを収集する」をご参照ください。
前提条件
開始する前に、次のものが揃っていることを確認してください:
仕組み
サイドカーベースのログ収集の設定は、4 つのステップで構成されます:
各アプリケーション Pod への Logtail コンテナのインジェクト。Logtail はアプリケーションコンテナと並行してサイドカーとして実行され、ボリュームを共有してログファイルにアクセスします。収集は Pod ごとに分離されます。
カスタム識別子を持つマシングループの作成。Simple Log Service はマシングループを使用して、ログを収集する Logtail インスタンスを管理します。各 Pod は、YAML で定義したカスタム識別子を使用して自身を登録します。
Logtail 構成の作成。構成が適用されると、Logtail は増分ログデータを収集し、Logstore にアップロードします。
ログのクエリと分析。収集されたログを Simple Log Service コンソールで表示および検索します。
2 つの値がステップ間で共有され、完全に一致する必要があります:
YAML で設定する ALIYUN_LOGTAIL_USER_DEFINED_ID (ステップ 1) は、マシングループ作成時に入力する [カスタム識別子] (ステップ 2) と一致する必要があります。YAML の ${dir_containing_your_files} マウントパス (ステップ 1) は、Logtail 構成で設定する [ファイルパス] (ステップ 3) と一致する必要があります。ステップ 1: アプリケーション Pod への Logtail コンテナのインジェクト
ログイン方法は、自己管理型クラスターと ACK クラスターで異なります。それ以外のステップはすべて同じです。
Container Service for Kubernetes (ACK) コンソールにログインします。左側のナビゲーションウィンドウで [クラスター] をクリックし、対象クラスターの [操作] 列にある [その他] をクリックしてから、[ACK クラスターの管理] をクリックします。

既存のアプリケーションコンテナの YAML に、以下のスニペットを追加します。この構成により、
logtailサイドカーコンテナがインジェクトされ、ログファイル用と、アプリケーションコンテナと Logtail コンテナ間のライフサイクル調整用の 2 つの共有ボリュームが設定されます。プレースホルダー 説明 例 ${timezone}タイムゾーンコンテナの。 Region/City形式で指定します。無効なタイムゾーンを指定すると、生ログのタイムスタンプと処理済みログのタイムスタンプが一致しなくなり、ログが誤った時点でアーカイブされる原因となります。Asia/Shanghai${your_aliyun_user_id}ご利用の Alibaba Cloud アカウント ID。詳細については、「ユーザー識別子の設定」をご参照ください。 12************80${your_machine_group_user_defined_id}マシングループのカスタム識別子。ご利用のプロジェクトのリージョン内で一意である必要があります。この値は、ステップ 2 で入力する [カスタム識別子] と一致する必要があります。 nginx-log-sidecar${your_region_config}リージョンご利用の Simple Log Service プロジェクトのとネットワークタイプから派生します。内部ネットワークの場合は、リージョン ID を直接使用します (例: ap-southeast-1)。インターネットの場合は、-internetを追加します (例:ap-southeast-1-internet)。ap-southeast-1${logtail_image}Logtail コンテナイメージ。 registry.cn-hangzhou.aliyuncs.com/log-service/logtail:latest${shared_volume_name}ボリューム名。 volumeMountsの下のnameとvolumesの下のnameは同一でなければなりません。これにより、アプリケーションコンテナと Logtail コンテナの両方が同じボリュームをマウントします。test-logs${dir_containing_your_files}Logtail コンテナ内のマウントパス。収集したいテキストログが含まれるディレクトリに設定します。この値は、ステップ 3 で設定する [ファイルパス] と一致する必要があります。 /root/log... # containers: # YAML の containers タグの下に次の内容を追加して、アプリケーションコンテナのログディレクトリを共有ボリュームにマウントします。このボリュームは Logtail コンテナと共有されます。 volumeMounts: - name: ${shared_volume_name} mountPath: ${shared_volume_path} # 共有ボリュームをコンテナのログディレクトリにマウントします。 - mountPath: /tasksite # Logtail コンテナとの通信用の共有ディレクトリ。 name: tasksite # Logtail サイドカーコンテナを追加します。 - name: logtail image: ${logtail_image} command: ["/bin/sh", "-c"] args: - /etc/init.d/ilogtaild start; sleep 10; # Logtail 構成がダウンロードされるまで待機します。 touch /tasksite/cornerstone; until [[ -f /tasksite/tombstone ]]; do sleep 1; done; sleep 10; # Logtail がログの送信を完了するまで待機します。 /etc/init.d/ilogtaild stop; livenessProbe: exec: command: - /etc/init.d/ilogtaild - status initialDelaySeconds: 30 periodSeconds: 30 env: # Kubernetes クラスターが存在するリージョンに基づいて、Region/City 形式でタイムゾーンを指定します。クラスターが中国本土にある場合は、タイムゾーンを Asia/Shanghai に設定できます。 # 指定されたタイムゾーンが無効な場合、生ログと処理済みログのタイムラベルが一致しない可能性があります。その結果、ログが誤った時点に基づいてアーカイブされることがあります。 - name: TZ value: "${timezone}" - name: ALIYUN_LOGTAIL_USER_ID value: "${your_aliyun_user_id}" - name: ALIYUN_LOGTAIL_USER_DEFINED_ID value: "${your_machine_group_user_defined_id}" - name: ALIYUN_LOGTAIL_CONFIG value: "/etc/ilogtail/conf/${your_region_config}/ilogtail_config.json" # Pod 環境情報をログラベルとして指定します。 - name: "ALIYUN_LOG_ENV_TAGS" value: "_pod_name_|_pod_ip_|_namespace_|_node_name_|_node_ip_" # Pod とノードの情報を取得します。 - name: "_pod_name_" valueFrom: fieldRef: fieldPath: metadata.name - name: "_pod_ip_" valueFrom: fieldRef: fieldPath: status.podIP - name: "_namespace_" valueFrom: fieldRef: fieldPath: metadata.namespace - name: "_node_name_" valueFrom: fieldRef: fieldPath: spec.nodeName - name: "_node_ip_" valueFrom: fieldRef: fieldPath: status.hostIP volumeMounts: # Logtail コンテナのログディレクトリを共有ボリュームにマウントします。 - name: ${shared_volume_name} mountPath: ${dir_containing_your_files} # アプリケーションコンテナと対話するためのマウントポイントを作成します。 - mountPath: /tasksite name: tasksite volumes: # ログストレージ用に空の共有ボリュームを定義します。 - name: ${shared_volume_name} emptyDir: {} # コンテナが相互に通信するためのボリュームを定義します。 - name: tasksite emptyDir: medium: Memory次のプレースホルダーを実際の値に置き換えてください:既存のアプリケーションがない場合や、設定をエンドツーエンドでテストしたい場合は、以下の完全な YAML の例を使用してください。
ALIYUN_LOGTAIL_USER_IDをご利用の Alibaba Cloud アカウント ID に置き換え、ALIYUN_LOGTAIL_CONFIGの${region_id}をご利用の Simple Log Service プロジェクトのリージョンに合わせて更新してください。有効な値については、「サポートされているリージョン」をご参照ください。apiVersion: apps/v1 kind: Deployment metadata: annotations: deployment.kubernetes.io/revision: '1' labels: app: deployment-file cluster_label: CLUSTER-LABEL-A name: deployment-file namespace: default spec: progressDeadlineSeconds: 600 replicas: 1 revisionHistoryLimit: 10 selector: matchLabels: app: deployment-file strategy: rollingUpdate: maxSurge: 25% maxUnavailable: 25% type: RollingUpdate template: metadata: labels: app: deployment-file cluster_label: CLUSTER-LABEL-A spec: containers: - name: timestamp-test image: 'mirrors-ssl.aliyuncs.com/busybox:latest' args: - >- while true; mkdir -p /root/log; do date '+%Y-%m-%d %H:%M:%S' >>/root/log/timestamp.log; echo 1 >>/root/log/timestamp.log; echo 2 >>/root/log/timestamp.log; echo 3 >>/root/log/timestamp.log; echo 4 >>/root/log/timestamp.log; echo 5 >>/root/log/timestamp.log; echo 6 >>/root/log/timestamp.log; echo 7 >>/root/log/timestamp.log; echo 8 >>/root/log/timestamp.log; echo 9 >>/root/log/timestamp.log; sleep 10; done command: - /bin/sh - '-c' - '--' env: - name: cluster_id value: CLUSTER-A imagePullPolicy: IfNotPresent resources: {} terminationMessagePath: /dev/termination-log terminationMessagePolicy: File volumeMounts: # アプリケーションコンテナのログディレクトリを共有ボリュームにマウントします。 - name: test-logs mountPath: /root/log # Logtail コンテナと対話するためのマウントポイントを作成します。 - mountPath: /tasksite name: tasksite - name: tz-config mountPath: /etc/localtime readOnly: true # Logtail サイドカーコンテナ - name: logtail image: registry.cn-hangzhou.aliyuncs.com/log-service/logtail:v1.8.7.0-aliyun command: ["/bin/sh", "-c"] args: - /etc/init.d/ilogtaild start; sleep 10; touch /tasksite/cornerstone; until [[ -f /tasksite/tombstone ]]; do sleep 1; done; sleep 10; /etc/init.d/ilogtaild stop; livenessProbe: exec: command: - /etc/init.d/ilogtaild - status initialDelaySeconds: 30 periodSeconds: 30 resources: limits: cpu: 500m memory: 512Mi requests: cpu: 10m memory: 30Mi env: # Kubernetes クラスターが存在するリージョンに基づいて、Region/City 形式でタイムゾーンを指定します。クラスターが中国本土にある場合は、タイムゾーンを Asia/Shanghai に設定できます。 # 指定されたタイムゾーンが無効な場合、生ログと処理済みログのタイムラベルが一致しない可能性があります。その結果、ログが誤った時点に基づいてアーカイブされることがあります。 - name: TZ value: "Asia/Shanghai" # 環境変数を実際の値に置き換えます。 - name: ALIYUN_LOGTAIL_USER_ID value: "12************80" - name: ALIYUN_LOGTAIL_USER_DEFINED_ID value: "nginx-log-sidecar" - name: ALIYUN_LOGTAIL_CONFIG value: "/etc/ilogtail/conf/${region_id}-internet/ilogtail_config.json" # Pod 環境情報をログラベルとして指定します。 - name: "ALIYUN_LOG_ENV_TAGS" value: "_pod_name_|_pod_ip_|_namespace_|_node_name_|_node_ip_" # Pod とノードの情報を取得します。 - name: "_pod_name_" valueFrom: fieldRef: fieldPath: metadata.name - name: "_pod_ip_" valueFrom: fieldRef: fieldPath: status.podIP - name: "_namespace_" valueFrom: fieldRef: fieldPath: metadata.namespace - name: "_node_name_" valueFrom: fieldRef: fieldPath: spec.nodeName - name: "_node_ip_" valueFrom: fieldRef: fieldPath: status.hostIP volumeMounts: # Logtail コンテナのログディレクトリを共有ボリュームにマウントします。 - name: test-logs mountPath: /root/log volumes: # ログストレージ用に空の共有ボリュームを定義します。 - name: test-logs emptyDir: {} # コンテナが相互に通信するためのボリュームを定義します。 - name: tasksite emptyDir: medium: Memory - name: tz-config hostPath: path: /usr/share/zoneinfo/Asia/Shanghai # サーバー上のタイムゾーンファイルを指定します。 dnsPolicy: ClusterFirst restartPolicy: Always schedulerName: default-scheduler securityContext: {} terminationGracePeriodSeconds: 30kubectl apply -f <your-yaml-file>を実行して構成を適用します。kubectl describe pod <pod-name>を実行して、Logtail コンテナが正常にインジェクトされたことを確認します。出力には、Pod の仕様にlogtailコンテナが含まれているはずです。
ステップ 2: カスタム識別子を持つマシングループの作成
ここで入力するカスタム識別子は、ステップ 1 で設定した ALIYUN_LOGTAIL_USER_DEFINED_ID の値と一致する必要があります。例の YAML では、この値は nginx-log-sidecar です。
Simple Log Service コンソールにログインします。[プロジェクト] セクションで、目的のプロジェクトをクリックします。
左側のナビゲーションウィンドウで、[リソース] > [マシングループ] を選択します。[マシングループ] リストで、
をクリックし、[マシングループの作成] を選択します。
[マシングループの作成] パネルで、以下のフィールドを入力し、[OK] をクリックします。
パラメーター 説明 名前 マシングループ名には、小文字、数字、ハイフン ( -)、アンダースコア (_) のみを使用できます。先頭と末尾は小文字または数字である必要があり、長さは 2~128 文字です。名前は作成後に変更できません。マシングループ識別子 [カスタム識別子] を選択します。 [マシングループ Topic] トピック(オプション) 異なるサーバーからのログを識別するための。 [カスタム識別子] ステップ 1 の ALIYUN_LOGTAIL_USER_DEFINED_IDと同じ値を入力します。例:nginx-log-sidecar。
ステップ 3: Logtail 構成の作成
Logtail 構成の作成には約 3 分かかります。
Simple Log Service コンソールにログインします。
[クイックデータインポート] セクションで、[データのインポート] をクリックします。ダイアログボックスで、[Kubernetes - ファイル] カードをクリックします。

対象のプロジェクトと Logstore を選択し、[次へ] をクリックします。
[マシングループ構成] ページで、次の操作を行います:
[シナリオ] を [Kubernetes クラスター] に、[デプロイ方法] を [サイドカー] に設定します。
ステップ 2 で作成したマシングループが [適用済みサーバーグループ] リストに表示されていることを確認し、[次へ] をクリックします。ハートビートステータスが FAIL と表示される場合、またはマシン情報が表示されない場合は、[自動再試行] をクリックします。それでも失敗する場合は、ご利用の YAML の
ALIYUN_LOGTAIL_CONFIGのリージョンが、ご利用の Simple Log Service プロジェクトのリージョンと一致していることを確認してください。さらなるトラブルシューティングについては、「ホスト環境の Logtail マシングループに関連するエラーのトラブルシューティング方法」をご参照ください。
Logtail を設定します。利用可能なすべてのオプションについては、「Logtail 構成」をご参照ください。以下の設定が必要です。
[グローバル構成] [構成名]:プロジェクト内で一意である必要があります。名前は作成後に変更できません。

[入力構成]
[Logtail デプロイモード]:[サイドカー] を選択します。
[ファイルパス]:ディレクトリとファイル名を、完全なパスまたはワイルドカード (
*および?) を使用して指定します。これは、ステップ 1 の YAML の `${dir_containing_your_files}` と同じパスに設定してください。例えば、/apsara/nuwa/**/*.logは/apsara/nuwaおよびそのサブディレクトリ配下のすべての.logファイルに一致します。
[プロセッサー構成]
[ログサンプル]:ログサンプルを入力すると、処理パラメーターを正確に構成するのに役立ちます。
[複数行モード]:複数行のログに対してこれを有効にします。
[タイプ]:[カスタム] を選択します。
[分割失敗時の処理方法]:[単一行として保持] を選択します。
[最初の行に一致する正規表現]:正規表現を入力して [検証] をクリックするか、[生成] > [自動生成] をクリックします。
処理方法:[なし]を選択します。その他のオプションについては、「データ処理用 Logtail プラグインの概要」をご参照ください。
インデックスを作成して収集したデータをプレビューし、[次へ] をクリックします。 全文インデックスはデフォルトで有効になっています。 特定のフィールドにインデックスを作成するには、フィールドインデックスを手動で作成するか、[インデックスの自動生成] をクリックします。 詳細については、「インデックスの作成」をご参照ください。 インデックスを作成するときは、Logtail が各ログエントリに自動的にアタッチする K8s メタデータフィールドを考慮してください。 これらのフィールドのフィールドインデックスを作成すると、Pod、名前空間、またはノードでログをフィルターおよび分析できます。 [次へ] をクリックすると、Simple Log Service がログの収集を開始します。
重要フルテキストインデックスを使用して、ログ内のすべてのフィールドをクエリします。フィールドインデックスを使用して、特定のフィールドをクエリし、インデックストラフィックを削減します。フィールドインデックスは、SELECT 文を使用したフィールド分析にも必要です。
フィールド 説明 __tag__:__hostname__コンテナホストの名前。 __tag__:__path__コンテナ内のログファイルパス。 __tag__:_container_ip_コンテナの IP アドレス。 __tag__:_image_name_コンテナイメージの名前。複数のイメージが同じハッシュを共有しているが、名前やタグが異なる場合、Logtail はハッシュに基づいて 1 つの名前を選択します。これは YAML で定義された名前と一致しない場合があります。 __tag__:_pod_name_Pod の名前。 __tag__:_namespace_Pod の名前空間。 __tag__:_pod_uid_Pod の一意の識別子 (UID)。
ステップ 4: ログのクエリと分析
Simple Log Service コンソールの [プロジェクト] セクションで、対象のプロジェクトをクリックします。

対象の Logstore にカーソルを合わせ、
アイコンをクリックし、[検索と分析] を選択します。
次のステップ
ログの可視化:Simple Log Service のダッシュボードを使用して、ログデータを集約し、探索します。詳細については、「ダッシュボードの作成」をご参照ください。
アラートの設定:ログに異常が現れたときに自動的に通知を受け取ります。詳細については、「Simple Log Service でのアラートルールの設定」をご参照ください。
履歴ログのインポート:Logtail は増分ログのみを収集します。既存のログファイルをインポートするには、「ログファイルから履歴ログをインポートする」をご参照ください。
収集問題のトラブルシューティング:
コンソールで Logtail エラーメッセージを確認してください。詳細については、「Logtail 診断」をご参照ください。
エラーが表示されない場合は、マシングループのハートビートと Logtail 構成を調査します。 詳細については、「コンテナからログを収集する際にエラーが発生した場合」をご参照ください。