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

Elastic Container Instance:Simple Log Service CRD を使用したログの収集

最終更新日:Oct 14, 2025

このトピックでは、Container Service for Kubernetes (ACK) Serverless クラスターで Simple Log Service のカスタムリソース定義 (CRD) を使用してログ収集を設定し、コンテナーログの自動収集を実装する方法について説明します。

背景情報

Simple Log Service は、エンドツーエンドのデータロギングサービスです。Simple Log Service を使用すると、追加の開発を行うことなく、ログデータの収集、消費、配信、クエリ、分析ができます。詳細については、「Simple Log Service とは」をご参照ください。

前提条件

ACK Serverless クラスターで Simple Log Service が有効化されていること。Simple Log Service コンソールにログインします。クラスターで Simple Log Service が有効化されていない場合は、画面の指示に従ってサービスを有効化するように求められます。

使用上の注意

Simple Log Service CRD を使用して有効化されたログ収集機能は、CRD の作成後に作成された Elastic Container Instance Pod に対してのみ有効です。既存の Pod のログを収集する場合は、既存の Pod のローリングリリースを実行する必要があります。

ログ収集の設定

クラスターに alibaba-log-controller コンポーネントをデプロイした後、AliyunLogConfig CRD (ログ収集設定用の CRD) を使用してログ収集を設定できます。

クラスターに alibaba-log-controller コンポーネントをデプロイする

  1. ACK コンソールにログインします。

  2. 上部のナビゲーションバーで、リージョンを選択します。

  3. [クラスター] ページで、コンテナーログを収集する ACK Serverless クラスターの名前をクリックして、クラスターの管理ページに移動します。

  4. クラスターに alibaba-log-controller コンポーネントをデプロイします。

    1. 詳細ページの左側のナビゲーションウィンドウで、[操作] > [アドオン] を選択します。

    2. [ログとモニタリング] タブをクリックし、[Alibaba-log-controller] コンポーネントのカードを見つけて、[インストール] をクリックします。

    3. 表示されるメッセージで、[OK] をクリックします。

      alibaba-log-controller がインストールされると、[alibaba-log-controller] のカードの右上に「インストール済み」の文字が表示されます。

AliyunLogConfig CRD の作成

  1. ACK Serverless クラスターに接続します。

  2. AliyunLogConfig CRD の YAML 構成ファイルをコンパイルします。

    重要

    AliyunLogConfig CRD を作成すると、生成された Logstore と Logtail 構成を Simple Log Service コンソールで表示できます。CRD を使用して Logtail 構成を作成し、Simple Log Service コンソールで構成を変更した場合、その変更は CRD に同期されません。Logtail 構成を更新する場合は、AliyunLogConfig CRD リソースを変更してください。構成の不整合を防ぐため、Simple Log Service コンソールで操作を実行しないでください。

    AliyunLogConfig CRD YAML テンプレート

    apiVersion: log.alibabacloud.com/v1alpha1     
    kind: AliyunLogConfig                         
    metadata:
      name: simple-stdout-example                 
    spec:
      project: k8s-my-project                      
      logstore: k8s-stdout                         
      logstoreMode: standard                       
      shardCount: 2                               
      lifeCycle: 90                               
      logtailConfig:                            
        inputType: plugin                          
        configName: simple-stdout-example          
        inputDetail:                               
          ...
    • 基本パラメーター

      パラメーター

      タイプ

      必須

      説明

      project

      string

      いいえ

      プロジェクトの名前。デフォルト値は、Logtail コンポーネントのインストールに使用するプロジェクトの名前です。

      プロジェクトを作成する場合は、プロジェクトの名前を指定します。プロジェクトが存在しない場合、システムは自動的にプロジェクトを作成します。

      logstore

      string

      はい

      Logstore の名前。指定した Logstore が存在しない場合、システムは自動的に Logstore を作成します。

      logstoreMode

      string

      いいえ

      Logstore のタイプ。このパラメーターは、Logstore を作成する場合にのみ有効です。有効な値:

      • query: クエリ用の Logstore

      • standard: 標準 Logstore

      詳細については、「Logstore の管理」をご参照ください。

      shardCount

      int

      いいえ

      シャードの数。有効な値: 1~10。デフォルト値: 2。

      lifeCycle

      int

      いいえ

      Logstore 内のデータの保持期間。有効な値: 1~3650。デフォルト値: 90。単位: 日。値 3650 は、データが Logstore に永続的に保存されることを指定します。このパラメーターは、Logstore を作成する場合にのみ有効です。

      machineGroups

      array

      いいえ

      マシングループ。Logtail コンポーネントをインストールすると、Simple Log Service は自動的に k8s-group-${your_k8s_cluster_id} という名前のマシングループを作成します。

      logtailConfig

      object

      はい

      Logtail 構成。この構成には次のパラメーターが含まれます:

      • configName: Logtail 構成の名前。名前は metadata.name で指定された名前と同じである必要があります。

      • inputType: ログ入力のタイプ。有効な値:

        • plugin: Logtail プラグインを使用して、MySQL バイナリログなどのログを収集します。

        • file: 正規表現モードや区切り文字モードなど、固定モードでテキストログを収集します。

      • inputDetail: ログ入力の構成。

      • outputType: ログ出力のタイプ。値を LogService に設定します。ログは Simple Log Service にのみアップロードできます。

      • outputDetail: ログ出力の構成。

      • logSample: サンプルログ。

      パラメーター設定の詳細については、「Logtail 構成」をご参照ください。

    • コンテナーのフィルタリング

      • v1.0.34 より前の Logtail を使用している場合、環境変数とコンテナーラベルを使用してのみコンテナーをフィルタリングできます。

        Kubernetes クラスターの名前空間と Kubernetes クラスター内のコンテナーの名前は、コンテナーラベルにマッピングできます。名前空間のラベル名の値は io.kubernetes.pod.namespace です。コンテナー名のラベル名の値は io.kubernetes.container.name です。これら 2 つのコンテナーラベルを使用してコンテナーをフィルタリングすることをお勧めします。コンテナーラベルがビジネス要件を満たさない場合は、環境変数のホワイトリストまたは環境変数のブラックリストを使用してコンテナーをフィルタリングできます。

      • Logtail 1.0.34 以降のバージョンを使用している場合、Pod 名、名前空間、コンテナー名、コンテナーラベルなどの Kubernetes レベルの情報に基づいてコンテナーをフィルタリングできます。

        コンテナーフィルタリングパラメーターは、logtailConfig.inputDetail.advanced.k8s フィールドで設定する必要があります。サポートされているパラメーター:

        • IncludeK8sLabel: データを収集するコンテナーを指定する Kubernetes ラベルのホワイトリスト。

        • ExcludeK8sLabel: データを収集しないコンテナーを指定する Kubernetes ラベルのブラックリスト。

        • K8sNamespaceRegex: 名前空間。

        • K8sPodRegex: Pod の名前。

        • K8sContainerRegex: コンテナー名。

    詳細については、「DaemonSet モードで Kubernetes コンテナーからテキストログを収集する」および「DaemonSet モードで Kubernetes コンテナーから stdout と stderr を収集する (旧バージョン)」をご参照ください。

    AliyunLogConfig CRD のサンプル YAML 構成ファイル

    テキストログの収集に使用される CRD のサンプル YAML 構成ファイル

    log-file.yaml という名前のファイルを作成し、次のテンプレートをファイルにコピーします。

    apiVersion: log.alibabacloud.com/v1alpha1  # デフォルト値を使用します。このパラメーターを変更する必要はありません。
    kind: AliyunLogConfig                      # デフォルト値を使用します。このパラメーターを変更する必要はありません。
    metadata:
      name: test-file                  # リソース名。現在の Kubernetes クラスター内で一意である必要があります。
    spec:
      project: k8s-log-c326bc86****    # オプション。プロジェクト名。プロジェクトが存在しない場合、システムは自動的にプロジェクトを作成します。
      logstore: test-file              # 必須。Logstore 名。Logstore が存在しない場合、システムは自動的に Logstore を作成します。
      logtailConfig:                   # Logtail 構成。
        inputType: file                # データソースのタイプ。値 file はテキストログを指定し、値 plugin は stdout ログを指定します。
        configName: test-file          # Logtail 構成の名前。名前は metadata.name で指定されたリソース名と同じである必要があります。
        inputDetail:                   # Logtail 構成の詳細。
          logType: common_reg_log      # シンプルモードでテキストログを収集します。
          logPath: /log/               # ログファイルのパス。
          filePattern: "*.log"         # ログファイルの名前。名前にアスタリスク (*) と疑問符 (?) を含めることができます。例: log_*.log。
          dockerFile: true             # Docker コンテナーからログを収集するかどうかを指定します。
          advanced:                    # コンテナーのフィルター条件を設定します。
            k8s:
              K8sNamespaceRegex: ^(default)$
              K8sPodRegex: '^(eci-sls-demo.*)$'

    stdout ログの収集に使用される CRD のサンプル YAML 構成ファイル

    log-stdout.yaml という名前のファイルを作成し、次のテンプレートをファイルにコピーします。

    apiVersion: log.alibabacloud.com/v1alpha1   # デフォルト値を使用します。このパラメーターを変更する必要はありません。
    kind: AliyunLogConfig                       # デフォルト値を使用します。このパラメーターを変更する必要はありません。
    metadata:
      name: test-stdout               # リソース名。現在の Kubernetes クラスター内で一意である必要があります。
    spec:
      project: k8s-log-c326bc86****   # オプション。プロジェクト名。プロジェクトが存在しない場合、システムは自動的にプロジェクトを作成します。
      logstore: test-stdout           # 必須。Logstore 名。Logstore が存在しない場合、システムは自動的に Logstore を作成します。
      shardCount: 2                   # オプション。シャードの数。デフォルト値: 2。有効な値: 1、2、3、4、5、6、7、8、9、10。
      lifeCycle: 90                   # オプション。Logstore 内のログの保持期間。このパラメーターは、Logstore を作成する場合にのみ有効です。有効な値: 1~3650。デフォルト値: 90。単位: 日。値 3650 は、ログが永続的に予約されることを示します。
      logtailConfig:                  # Logtail 構成。
        inputType: plugin             # データソースのタイプ。値 file はテキストログを指定し、値 plugin は stdout ログを指定します。
        configName: test-stdout       # Logtail 構成の名前。名前は metadata.name で指定されたリソース名と同じである必要があります。
        inputDetail:                  # Logtail 構成の詳細。
          plugin:
            inputs:
              - type: service_docker_stdout
                detail:
                  Stdout: true
                  Stderr: true
    #              IncludeEnv:
    #                aliyun_logs_test-stdout: "stdout"
  3. AliyunLogConfig CRD を作成します。

    次のコードはサンプルコマンドです。Logtail 構成が適用されると、Logtail は各コンテナーから stdout またはテキストログを収集し、収集したログを Simple Log Service に送信します。

    kubectl apply -f log-file.yaml
    kubectl apply -f log-stdout.yaml
    重要

    ログが収集された後、インデックスを作成する必要があります。その後、Logstore でログをクエリおよび分析できます。詳細については、「インデックスの作成」をご参照ください。

ログ収集のテスト

AliyunLogConfig CRD を作成すると、Simple Log Service は後で作成される Pod のログを自動的に収集します。次のアプリケーションを作成して、ログ収集の効果をテストできます。

  1. アプリケーションを作成します。

    次のサンプル YAML ファイルは、Deployment の作成方法を説明しています。この例では、コンテナーの起動後に関連コマンドを実行して、stdout とログファイルを継続的に表示します。

    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: eci-sls-demo
      labels:
        app: sls
    spec:
      replicas: 1
      selector:
        matchLabels:
          app: sls
      template:
        metadata:
          name: sls-test
          labels:
            app: sls
            alibabacloud.com/eci: "true" 
        spec:
          containers:
          - args:
            - -c
            - mkdir -p /log;while true; do echo hello world; date; echo hello sls >> /log/busy.log; sleep 1;done
            command:
            - /bin/sh
            image: registry-vpc.cn-beijing.aliyuncs.com/eci_open/busybox:1.30
            imagePullPolicy: Always
            name: busybox

    test-sls-crd.yaml という名前のファイルを作成し、上記の YAML ファイルテンプレートをファイルにコピーします。次のコマンドを実行してアプリケーションを作成します:

    kubectl create -f test-sls-crd.yaml
  2. アプリケーションのステータスを確認します。

    kubetcl get pod

    期待される出力:

    NAME                            READY   STATUS    RESTARTS   AGE
    eci-sls-demo-7bf8849b9f-cgpbn   1/1     Running   0          2m14s
  3. ログを表示します。

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

    2. プロジェクトの名前をクリックします。

    3. コンテナーのログが保存されている Logstore を見つけます。Logstore の名前をクリックしてログを表示します。

      テキストログの収集

      日志crd1

      stdout ログの収集

      日志crd0

ログ収集の無効化

AliyunLogConfig CRD を作成すると、システムは条件を満たすすべての Pod のログを自動的に収集します。特定の Pod のログを収集したくない場合は、Pod の metadata セクションに k8s.aliyun.com/eci-sls-enable: "false" アノテーションを追加してログ収集を無効にできます。これにより、Logtail 構成の自動作成によるリソースの浪費を防ぎます。

重要
  • アノテーションは、Pod の構成ファイルの metadata に追加する必要があります。たとえば、Deployment を作成する場合、spec.template.metadata セクションにアノテーションを追加する必要があります。

  • Elastic Container Instance 関連のアノテーションは、Pod の作成時にのみ適用されます。既存の Pod にこれらのアノテーションを追加または変更しても効果はありません。

サンプル構成:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: eci-sls-demo2
  labels:
    app: sls
spec:
  replicas: 1
  selector:
    matchLabels:
      app: sls
  template:
    metadata:
      name: sls-test
      labels:
        app: sls
        alibabacloud.com/eci: "true"
      annotations:
        k8s.aliyun.com/eci-sls-enable: "false"    # ログ収集を無効にします。
    spec:
      containers:
      - args:
        - -c
        - mkdir -p /log;while true; do echo hello world; date; echo hello sls >> /log/busy.log; sleep 1;
          done
        command:
        - /bin/sh
        image: registry.cn-shanghai.aliyuncs.com/eci_open/busybox:1.30
        imagePullPolicy: Always
        name: busybox