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

Container Service for Kubernetes:Simple Log Service CRDを使用したアプリケーションログの収集

最終更新日:Jan 23, 2025

このトピックでは、ACKサーバーレスクラスターにSimple Log Service CustomResourceDefinition (CRD) を設定し、それを使用してアプリケーションログを収集および管理する方法について説明します。

前提条件

  • ACKサーバーレスクラスターが作成されます。 詳細については、「ACKサーバーレスクラスターの作成」をご参照ください。

  • ack-virtual-node 2.7.0以降がクラスターにインストールされています。 ack-virtual-nodeの詳細については、「ack-virtual-node」をご参照ください。

使用上の注意

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

ログ収集の設定

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

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

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

  2. [クラスター] ページで、管理するクラスターを見つけ、クラスター名をクリックします。 クラスターの詳細ページが表示されます。

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

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

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

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

      alibaba-log-controllerをインストールすると、alibaba-log-controllerのカードの右上隅に「installed」という文字が表示されます。

AliyunLogConfig CRDの作成

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

  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を作成します。

      logstoreMode

      String

      非対象

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

      • query: クエリ用のLogstore

      • 標準: 標準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設定の名前。 名前は、n metadata.nameで指定された名前と同じである必要があります。

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

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

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

      • inputDetail: ログ入力の設定。

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

      • outputDetail: ログ出力の設定。

      • logSample: サンプルログ。

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

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

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

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

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

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

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

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

        • K8sNamespaceRegex: 名前空間。

        • K8sPodRegex: ポッドの名前。

        • K8sContainerRegex: コンテナ名。

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

    AliyunLogConfig CRDのサンプルYAML設定ファイル

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

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

    apiVersion: log.alibabacloud.com/v1alpha1  # Use the default value. You do not need to modify this parameter. 
    kind: AliyunLogConfig                      # Use the default value. You do not need to modify this parameter. 
    metadata:
      name: test-file                  # The resource name, which is unique in the current Kubernetes cluster. 
    spec:
      project: k8s-log-c326bc86****    # Optional. The project name. If the project does not exist, the system automatically creates the project.
      logstore: test-file              # Required. The Logstore name. If the Logstore does not exist, the system automatically creates a Logstore.   
      logtailConfig:                   # The Logtail configuration.
        inputType: file                # The type of the data source. The value file specifies text logs, and the value plugin specifies stdout logs.
        configName: test-file          # The name of the Logtail configuration. The name must be the same as the resource name that is specified in metadata.name. 
        inputDetail:                   # The details of the Logtail configuration.
          logType: common_reg_log      # Collect text logs in simple mode.
          logPath: /log/               # The path of the log file.
          filePattern: "*.log"         # The name of the log file. The name can contain asterisks (*) and question marks (?). Example: log_*.log. 
          dockerFile: true             # Specify whether to collect logs from docker containers.
          advanced:                    # Configure filter conditions for containers.
            k8s:
              K8sNamespaceRegex: ^(default)$
              K8sPodRegex: '^(eci-sls-demo.*)$'

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

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

    apiVersion: log.alibabacloud.com/v1alpha1   # Use the default value. You do not need to modify this parameter. 
    kind: AliyunLogConfig                       # Use the default value. You do not need to modify this parameter. 
    metadata:
      name: test-stdout               # The resource name. The name must be unique in the current Kubernetes cluster. 
    spec:
      project: k8s-log-c326bc86****   # Optional. The project name. If the project does not exist, the system automatically creates the project.
      logstore: test-stdout           # Required. The Logstore name. If the Logstore does not exist, the system automatically creates a Logstore.                  
      shardCount: 2                   # Optional. The number of shards. Default value: 2. Valid values: 1, 2, 3, 4, 5, 6, 7, 8, 9, and 10.                         
      lifeCycle: 90                   # Optional. The retention period of logs in the Logstore. This parameter takes effect only when you create a Logstore. Valid values: 1 to 3650. Default value: 90. Unit: days. The value of 3650 indicates that logs are permanently reserved.
      logtailConfig:                  # The Logtail configuration.
        inputType: plugin             # The type of the data source. The value file specifies text logs. The value plugin specifies stdout logs.                                
        configName: test-stdout       # The name of the Logtail configuration. The name must be the same as the resource name that is specified in metadata.name. 
        inputDetail:                  # The details of the Logtail configuration.
          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は後で作成されるポッドのログを自動的に収集します。 次のアプリケーションを作成して、ログ収集効果をテストできます。

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

    次のサンプルYAMLファイルでは、デプロイを作成する方法について説明します。 この例では、関連するコマンドを実行して、コンテナーの起動後に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を作成すると、条件を満たすすべてのポッドのログが自動的に収集されます。 特定のポッドのログを収集しない場合は、ポッドのメタデータセクションにk8s.aliyun.com/eci-sls-enable: "false" アノテーションを追加して、ログ収集を無効にすることができます。 これにより、Logtail設定の自動作成によるリソースの無駄を防ぎます。

重要
  • ポッドの構成ファイルのメタデータに注釈を追加する必要があります。 たとえば、配置を作成するときは、spec.template.metadataセクションに注釈を追加する必要があります。

  • Elastic Container Instanceの機能を使用するには、Elastic Container Instanceベースのポッドを作成する場合にのみアノテーションを追加できます。 ポッドを更新するときにアノテーションを追加または変更しても、これらのアノテーションは有効になりません。

次のコードは、サンプル設定を提供します。

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"    # Disables log collection.
    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