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

Elastic Container Instance:SLS CRD を使用したログの収集

最終更新日:Dec 25, 2025

このトピックでは、Container Service for Kubernetes (ACK) サーバーレスクラスターで Simple Log Service (SLS) のカスタムリソース定義 (CRD) を使用して、コンテナログ収集を構成および自動化する方法について説明します。

背景情報

Alibaba Cloud の Simple Log Service (SLS) は、ログデータのためのオールインワンサービスです。開発不要で、ログデータの収集、消費、配信、クエリ、分析が可能です。詳細については、「Simple Log Service とは」をご参照ください。

前提条件

Simple Log Service が有効化されていることを確認してください。Simple Log Service コンソールにログインしたときにサービスが有効化されていない場合は、プロンプトが表示されます。画面の指示に従ってサービスを有効化できます。

注意事項

SLS CRD によって有効化されたログ収集は、CRD の構成後に作成された Elastic Container Instance (ECI) Pod にのみ適用されます。既存の Pod からログを収集するには、ローリングデプロイを実行する必要があります。

ログ収集の構成

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

alibaba-log-controller コンポーネントのデプロイ

  1. Container Service for Kubernetes (ACK) コンソールにログインします。

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

  3. [クラスター] ページで、対象の ACK サーバーレスクラスターの名前をクリックして、その管理ページを開きます。

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

    1. 左側のナビゲーションウィンドウで、[運用管理] > [アドオン] を選択します。

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

    3. 表示されたダイアログボックスで、[確認] をクリックします。

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

Logtail 収集構成の作成

  1. ACK サーバーレスクラスターに接続します。

  2. ログ収集構成 CRD の YAML ファイルを作成できます。

    重要

    AliyunLogConfig CRD を作成した後、生成された Logstore と Logtail 構成を Simple Log Service コンソールで表示できます。ただし、コンソールで行われた変更は CRD に同期されません。構成を更新するには、CRD リソースを直接変更する必要があります。構成の不整合を引き起こす可能性があるため、コンソールで構成を変更しないでください。

    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:                               
          ...

    次の表では、一般的な基本パラメーターについて説明します。パラメーター設定の詳細については、「AliyunLogConfig を使用したコレクション構成の管理」をご参照ください。

    • 基本パラメーター

      パラメーター

      タイプ

      必須

      説明

      project

      文字列

      いいえ

      プロジェクトの名前。デフォルト値は、Logtail コンポーネントをインストールするときに指定されたプロジェクトです。

      新しいプロジェクトを作成するには、カスタム名を入力します。プロジェクトが存在しない場合、システムは自動的に作成します。

      logstore

      文字列

      はい

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

      logstoreMode

      文字列

      いいえ

      Logstore のタイプ。このパラメーターは、新しい Logstore が作成されるときにのみ有効になります。有効値:

      • query:クエリ Logstore。

      • standard:標準 Logstore。

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

      shardCount

      int

      いいえ

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

      lifeCycle

      int

      いいえ

      Logstore 内のデータの保存期間 (日数)。デフォルト値:90。有効値:1~3650。値 3650 は永続的なストレージを指定します。このパラメーターは、新しい Logstore が作成されるときにのみ有効になります。

      machineGroups

      配列

      いいえ

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

      logtailConfig

      オブジェクト

      はい

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

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

      • inputType:ログ入力メソッド。有効値:

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

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

      • inputDetail:ログ入力の構成。

      • outputType:ログ出力メソッド。LogService のみがサポートされており、データは SLS にのみアップロードできることを意味します。

      • outputDetail:ログ出力の構成。

      • logSample:ログサンプル。

      パラメーターの詳細については、「Logtail 構成(レガシー)」をご参照ください。

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

      • Logtail バージョン 1.0.34 より前では、環境変数とコンテナラベルのみを使用してコンテナをフィルタリングできます。

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

      • Logtail 1.0.34 以降では、Pod 名、名前空間、コンテナ名、コンテナラベルなどの Kubernetes レベルの情報を使用してコンテナをフィルタリングできます。

        logtailConfig.inputDetail.advanced.k8s フィールドでコンテナフィルタリングパラメーターを構成します。次のパラメーターがサポートされています:

        • IncludeK8sLabel:Kubernetes ラベルのホワイトリスト。ログを収集するコンテナを指定します。

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

        • K8sNamespaceRegex:名前空間を指定します。

        • K8sPodRegex:Pod 名を指定します。

        • K8sContainerRegex:コンテナ名を指定します。

    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 が存在しない場合、システムは自動的に作成します。
      logtailConfig:                   # Logtail 構成。
        inputType: file                # データソースのタイプ。値 file はテキストログを指定し、値 plugin は標準出力を指定します。
        configName: test-file          # Logtail 構成の名前。リソース名 (metadata.name) と同じである必要があります。
        inputDetail:                   # Logtail 構成の詳細。
          logType: common_reg_log      # シンプルモードでテキストログを収集します。
          logPath: /log/               # ログファイルが保存されているパス。
          filePattern: "*.log"         # ログファイルの名前。アスタリスク (*) や疑問符 (?) などのワイルドカード文字がサポートされています。例:log_*.log。
          dockerFile: true             # コンテナからファイルを収集します。dockerFile を true に設定します。
          advanced:                    # コンテナのフィルター条件を設定します。
            k8s:
              K8sNamespaceRegex: ^(default)$
              K8sPodRegex: '^(eci-sls-demo.*)$'

    標準出力 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 が存在しない場合、システムは自動的に作成します。
      shardCount: 2                   # オプション。シャードの数。デフォルト値:2。有効値:1~10。
      lifeCycle: 90                   # オプション。Logstore 内のログの保存期間 (日数)。このパラメーターは、新しい Logstore が作成されるときにのみ有効になります。デフォルト値:90。有効値:1~3650。値 3650 は永続的な保持を示します。
      logtailConfig:                  # Logtail 構成。
        inputType: plugin             # データソースのタイプ。値 file はテキストログを指定し、値 plugin は標準出力を指定します。
        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 を作成します。

    適切なコマンドを実行して AliyunLogConfig CRD を作成します。Logtail 構成が有効になると、Logtail は各コンテナから標準出力またはテキストログの収集を開始し、SLS に送信します。

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

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

ログ収集のテスト

AliyunLogConfig CRD を作成すると、SLS はその後に作成された Pod から自動的にログを収集します。次のアプリケーションを作成して、このログ収集機能をテストできます。

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

    次の YAML ファイルは、Deployment を作成する方法の例です。この例では、コンテナが起動した後、標準出力とログファイルを継続的に出力するコマンドを実行します。

    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

    上記 YAML の内容を test-sls-crd.yaml として保存し、次のコマンドを実行してアプリケーションを作成します。

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

    kubectl 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 を見つけて、その名前をクリックしてログを表示します。

      テキストログ

      日志crd1

      標準出力

      日志crd0

ログ収集の無効化

AliyunLogConfig CRD を作成すると、システムは指定された条件を満たすすべての Pod から自動的にログを収集します。特定の Pod からのログ収集を防ぐには、Pod のメタデータに k8s.aliyun.com/eci-sls-enable: "false" アノテーションを追加します。この方法により、Logtail 構成の自動作成によるリソースの無駄を防ぐことができます。

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

  • ECI 関連のアノテーションは、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