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

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

最終更新日:Nov 11, 2024

Alibaba Cloud Simple Log Serviceは、ワンストップのログサービスです。 コンソールでログデータを直接収集、消費、配信、クエリ、分析できます。 ACKサーバーレスクラスターは、Simple Log Serviceを管理できます。 このトピックでは、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. Container Service for Kubernetes (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テンプレート

    AliyunLogConfig CRD YAML template
    apiVersion: log.alibabacloud.com/v1alpha1      # The default value is used. You do not need to modify this parameter. 
    kind: AliyunLogConfig                          # The default value is used. You do not need to modify this parameter. 
    metadata:
      name: simple-stdout-example                  # The name of the resource. The name must be unique in the current Kubernetes cluster. 
    spec:
      project: k8s-my-project                      # Optional. The name of the project. The default value is the name of the project that you use to install the Logtail components. 
      logstore: k8s-stdout                         # The name of the Logstore. If the specified Logstore does not exist, Simple Log Service automatically creates a Logstore. 
      logstoreMode: standard                       # Optional. The type of the Logstore. The value of this parameter takes effect only if you configure the parameter when you create the Logstore. 
      shardCount: 2                                # Optional. The number of shards. Valid values: 1 to 10. Default value: 2. 
      lifeCycle: 90                                # The data retention period of the Logstore. The value of this parameter takes effect only if you configure the parameter when you create the Logstore. Valid values: 1 to 3650. Default value: 90. Unit: days. The value 3650 specifies that data is permanently stored in the Logstore. 
      logtailConfig:                               # The Logtail configuration. 
        inputType: plugin                          # The type of the data source. Valid values: file and plugin. The value file specifies text logs. The value plugin specifies stdout. 
        configName: simple-stdout-example          # The name of the Logtail configuration. The name must be the same as the resource name that is specified in metadata.name. 
        inputDetail:                               # The detailed settings of the Logtail configuration. For more information, see the following configuration examples. 
          ...

    パラメーターの説明

    • 基本パラメータ

      パラメーター

      タイプ

      必須

      説明

      project

      String

      選択可能

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

      logstore

      String

      必須

      ログストアの名前 指定されたLogstoreが存在しない場合、Simple Log Serviceは自動的に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設定の名前。

      • 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コンテナからテキストログを収集する」および「Simple Log Serviceコンソールを使用してDaemonSetモードでコンテナのstdoutとstderrを収集する」をご参照ください。

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

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

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

    apiVersion: log.alibabacloud.com/v1alpha1
    kind: AliyunLogConfig
    metadata:
      name: test-file                  # resource name, which is unique in the current Kubernetes cluster. 
    spec:
      project: k8s-log-c326bc86****    # Optional. The custom project name. We recommend that you name the project in the format of <k8s-log-custer ID>.
      logstore: test-file              # Required. The name of the Logstore. If no Logstore exists, Simple Log Service 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 indicates stdout.
        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: '^(nginx-log-demo.*)$'
              K8sContainerRegex: ^(nginx-log-demo-0)$
              IncludeK8sLabel:
                job-name: "^(nginx-log-demo.*)$"

    ストップアウトの収集に使用されるCRDのサンプルYAML構成ファイル。

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

    apiVersion: log.alibabacloud.com/v1alpha1
    kind: AliyunLogConfig
    メタデータ:
      name: test-stdout# リソースの名前。 名前は、現在のKubernetesクラスターで一意である必要があります。 
    仕様:
      プロジェクト: k8s-log-c326bc86 ****# オプション。 カスタムプロジェクト名。 プロジェクトに <k8s-log-custer ID> の形式で名前を付けることを推奨します。
      logstore: test-stdout# 必須です。 ログストアの名前 Logstoreが存在しない場合、Simple Log Serviceは自動的に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。 値ファイルはテキストログを指定します。 value pluginはstdoutを指定します。                                
        configName: test-stdout# Logtail設定の名前。 名前は、n metadata.nameで指定されたリソース名と同じである必要があります。 
        inputDetail: # Logtail設定の詳細。
          プラグイン:
            入力:
              - type: service_docker_stdout
                詳細:
                  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に収集されたら、インデックスを作成する必要があります。 次に、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