すべてのプロダクト
Search
ドキュメントセンター

Container Service for Kubernetes:サイドカーを介したクラスタログの収集

最終更新日:Sep 09, 2025

Simple Log Service は、Kubernetes ログを収集するために Logtail をデプロイする 2 つの方法 (DaemonSet と Sidecar) を提供しています。それぞれの違いについては、「Kubernetes クラスタからログを収集するために Logtail をインストールする」をご参照ください。このトピックでは、サイドカーモードを使用して Logtail をデプロイし、Kubernetes クラスタからテキストログを収集する方法について説明します。

前提条件

  • プロジェクトログストア が作成されている。

  • 自己管理型 Kubernetes クラスタを使用する場合は、kubectl がインストールされていることを確認してください。

手順

このトピックでは、ACK マネージドクラスター を例として使用して、サイドカーモードでテキストログを収集する手順について説明します。

  1. アプリケーション ポッドに Logtail コンテナを挿入する: 各ポッドは Logtail コンテナを実行して、現在のポッド内のすべてのコンテナからログを収集します。各ポッドからのログ収集は分離されています。

  2. カスタム識別子を持つマシン グループを作成する: ポッドごとにマシン グループを作成します。Simple Log Service は、Logtail を使用してログを収集する必要があるすべてのコンテナを、マシン グループを使用して管理します。

  3. Logtail 構成を作成する: Logtail 構成が作成されると、Logtail は Logtail 構成に基づいて増分ログを収集し、収集されたログを処理して作成されたログストアにアップロードします。

  4. ログをクエリおよび分析する: ログストア内のログデータを表示します。

ステップ 1: アプリケーション ポッドに Logtail コンテナを挿入する

ログイン方法は自己管理型クラスタと ACK クラスタで異なりますが、その他の手順はすべて同じです。

  1. Container Service for Kubernetes コンソール にログインします。 左側のナビゲーションウィンドウで、[クラスタ] をクリックし、 対象のクラスタの [アクション] 列にある [詳細] をクリックし、[ACK クラスタの管理] をクリックします。processed_6

  2. 既存のアプリケーション コンテナ YAML に以下を追加します。

    Logtail コンテナを挿入するために必要な YAML 構成

    ...
        #  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 クラスタが存在するリージョンに基づいて、リージョン/都市の形式でタイムゾーンを指定します。クラスタが中国本土にある場合は、タイムゾーンを 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"
                # ポッド環境情報をログラベルとして指定します。
                - name: "ALIYUN_LOG_ENV_TAGS"
                  value: "_pod_name_|_pod_ip_|_namespace_|_node_name_|_node_ip_"
                # ポッドとノードの情報を取得します。
                - 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

    主要なパラメータ

    変数

    説明

    ${timezone}

    コンテナの タイムゾーン

    ${your_aliyun_user_id}

    Alibaba Cloud アカウントの ID。詳細については、「ユーザー識別子の構成」をご参照ください。

    ${your_machine_group_user_defined_id}

    マシン グループのカスタム識別子。例: nginx-log-sidecar

    重要

    識別子は、プロジェクトが属するリージョン内で一意である必要があります。

    ${your_region_config}

    プロジェクトが属する リージョン の ID とプロジェクトのネットワークのタイプに基づいて値を指定します。

    • 例: プロジェクトがシンガポール リージョンに属している場合、値は内部ネットワークの場合は ap-southeast-1、インターネットの場合は ap-southeast-1-internet です。

    ${logtail_image}

    Logtail イメージ アドレス。例: registry.cn-hangzhou.aliyuncs.com/log-service/logtail:latest

    ${shared_volume_name}

    ボリュームの名前。

    重要

    volumeMounts ノード配下の name パラメーターは、volumes ノード配下の name パラメーターと一致させる必要があります。これにより、Logtail コンテナとアプリケーションコンテナが同じボリュームにマウントされます。

    ${dir_containing_your_files}

    マウント パス。収集するコンテナ テキストログのディレクトリを指定します。

    既存のアプリケーション コンテナがない場合、または手順をテストする場合は、このトピックで YAML の例も提供しています。例の ALIYUN_LOGTAIL_USER_ID を Alibaba Cloud アカウント ID に変更し、ALIYUN_LOGTAIL_CONFIG のリージョン ${region_id} が Simple Log Service プロジェクトのリージョンと同じであることを確認します。値については、「サポートされているリージョン」をご参照の上、置き換えてください。

    YAML の例

    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 クラスタが存在するリージョンに基づいて、リージョン/都市の形式でタイムゾーンを指定します。クラスタが中国本土にある場合は、タイムゾーンを 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"
                # ポッド環境情報をログラベルとして指定します。
                - name: "ALIYUN_LOG_ENV_TAGS"
                  value: "_pod_name_|_pod_ip_|_namespace_|_node_name_|_node_ip_"
                # ポッドとノードの情報を取得します。
                - 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: 30
  3. kubectl apply -f を実行して構成を適用します。

  4. kubectl describe pod を実行して以下の情報を取得します。これは、Logtail コンテナが正常に挿入されたことを示しています。image

ステップ 2: カスタム識別子を持つマシン グループを作成する

重要

YAML${your_machine_group_user_defined_id} はカスタム識別子です。この例では、値は nginx-log-sidecar です。

  1. Simple Log Service コンソール にログインします。[プロジェクト] セクションで、目的のプロジェクトをクリックします。

  2. 左側のナビゲーションウィンドウで、[リソース] > [マシン グループ] を選択します。[マシン グループ] リストで、机器组 > [マシン グループの作成] を選択します。image

  3. [マシン グループの作成] パネルで、以下の情報を入力し、[OK] をクリックします。

    パラメータ

    説明

    名前

    マシン グループの名前は、以下の要件を満たしている必要があります。

    • 小文字、数字、ハイフン (-)、アンダースコア (_) のみを含む。

    • 小文字または数字で始まり、小文字または数字で終わる。

    • 長さが 2 ~ 128 文字である。

    重要

    マシン グループを作成した後、その名前を変更することはできません。注意して進めてください。

    マシン グループ識別子

    [カスタム識別子] を選択します。

    マシン グループ トピック

    オプション。 トピック は、異なるサーバーによって生成されたログを識別するために使用されます。

    カスタム識別子

    ステップ 1 で構成したカスタム識別子 (例: nginx-log-sidecar) を入力します。

ステップ 3: Logtail 構成を作成する

  1. Simple Log Service コンソール にログインします。

  2. [クイック データ インポート] セクションで、[データのインポート] をクリックします。[データのインポート] ダイアログボックスで、[Kubernetes - ファイル] カードをクリックします。

    image

  3. 対象のプロジェクトとログストアを選択し、[次へ] をクリックします。

  4. [マシン グループの構成] ページで、以下の操作を実行します。マシン グループについては、「マシン グループ」をご参照ください。

    1. [シナリオ][Kubernetes クラスタ] に設定し、[デプロイ方法][サイドカー] に設定します。

    2. 対象のマシン グループが [適用済みサーバー グループ] リストに表示されていることを確認し、[次へ] をクリックします。マシン グループは、ステップ 2 で作成したものです。

      マシン グループのハートビート ステータスが FAIL であるか、マシン情報が存在しない場合は、[自動再試行] をクリックします。ステータスがまだ FAIL の場合は、YAML の ALIYUN_LOGTAIL_CONFIG のリージョンがプロジェクトのリージョンと同じであるかどうかを確認します。

      問題が解決しない場合は、「ホスト環境の Logtail マシン グループに関連するエラーのトラブルシューティング方法」をご参照ください。

  5. Logtail 構成を作成し、[次へ] をクリックします。Simple Log Service はログの収集を開始します。

    説明

    Logtail 構成の作成には約 3 分かかります。

    このセクションでは、必要な構成のみを説明します。すべての構成については、「Logtail 構成」をご参照ください。

    • グローバル構成

      構成名: Logtail 構成の名前。名前は、Logtail 構成が属するプロジェクト内で一意である必要があります。作成後は、名前を変更することはできません。

      image

    • 入力構成

      • Logtail デプロイ モード: [サイドカー] を選択します。

      • ファイル パス: ディレクトリ名とファイル名は、完全なパスまたはワイルドカード文字を含むパスにすることができます。ワイルドカード文字には、アスタリスク (*) と疑問符 (?) が含まれます。この例では、ディレクトリ値は、YAML${dir_containing_your_files} です。

        • /apsara/nuwa/**/*.log は、/apsara/nuwa フォルダ (再帰的なサブディレクトリを含む) 内の .log 拡張子を持つファイルを指します。

      image

    • プロセッサ構成

      • ログ サンプル: 複数のログを入力できます。処理パラメータの構成を支援し、複雑さを軽減するために、ログ サンプルを入力することをお勧めします。

      • 複数行モード: この例では、複数行のログが収集されます。この機能を有効にします。

        • タイプ: [カスタム] を選択します。

        • 分割に失敗した場合の処理方法: [単一行を保持] を選択します。

      • 最初の行に一致する正規表現: 正規表現を指定して [検証] をクリックするか、[生成][自動生成] をクリックします。

      • 処理方法: [なし] を選択します。詳細については、「データ処理用 Logtail プラグインの概要」をご参照ください。

  6. インデックスを作成してデータをプレビューし、[次へ] をクリックします。デフォルトでは、Simple Log Service で [フルテキスト インデックス] が有効になっています。収集されたログに基づいてフィールド インデックスを手動で作成することも、[自動インデックス生成] をクリックしてフィールド インデックスを自動的に生成することもできます。詳細については、「インデックスの作成」をご参照ください。

重要

ログ内のすべてのフィールドをクエリするには、フルテキスト インデックスを使用します。特定のフィールドをクエリするには、フィールド インデックスを使用してインデックストラフィックを削減します。フィールド分析 (SELECT 文) の場合は、フィールド インデックスを作成します。

ステップ 4: ログをクエリおよび分析する

  1. Simple Log Service コンソールの [プロジェクト] セクションで、管理するプロジェクトをクリックして詳細ページに移動します。

    image

  2. 管理するログストアを見つけ、ポインタをログストアの上に移動し、图标 アイコンをクリックして、[検索と分析] を選択し、Kubernetes クラスタのログを表示します。

    image

K8s ログフィールド

次の表は、Kubernetes の各コンテナ テキストログに含まれるデフォルト フィールドについて説明しています。

フィールド

説明

__tag__:__hostname__

コンテナ ホストの名前。

__tag__:__path__

コンテナ内のログファイル パス。

__tag__:_container_ip_

コンテナの IP アドレス。

__tag__:_image_name_

コンテナで使用されるイメージの名前。

説明

同じハッシュで名前またはタグが異なるイメージが複数ある場合、収集構成は収集のためにハッシュに基づいて 1 つの名前を選択します。選択された名前が YAML ファイルで定義された名前と一致することを保証するものではありません。

__tag__:_pod_name_

ポッドの名前。

__tag__:_namespace_

ポッドが属する名前空間。

__tag__:_pod_uid_

ポッドの一意の識別子 (UID)。

関連情報