このトピックでは、Log ServiceコンソールでSidecarモードでコンテナテキストログを収集する方法について説明します。 コンテナテキストログを収集するには、Sidecarをインストールし、マシングループを作成してからLogtail設定を作成する必要があります。

始める前に

  • Logtailコンポーネントがインストールされています。 詳細については、「KubernetesクラスターへのLogtailコンポーネントのインストール」をご参照ください。
  • Logtailコンポーネントのインストールに使用するプロジェクトにLogstoreが作成されます。 詳細については、「Logstore の作成」をご参照ください。
  • ログを収集するコンテナーは、継続的にログを生成します。
    重要 Logtailは増分ログのみを収集します。 適用されたLogtail設定がサーバーに配信された後にサーバー上のログファイルが更新されない場合、Logtailはファイルからログを収集しません。 詳細については、「ログファイルの読み取り」をご参照ください。

このタスクについて

Sidecarモードでは、Logtailコンテナはアプリケーションコンテナとログディレクトリを共有します。 アプリケーションコンテナは、ログを共有ディレクトリに書き込みます。 Logtailは、共有ディレクトリ内のログファイルへの変更を監視し、ログを収集します。 詳細については、「ロギングエージェントを使用したSidecarコンテナー」および「ポッドによる複数のコンテナーの管理方法」をご参照ください。

ステップ1: Sidecarのインストール

  1. Kubernetesクラスターにログインします。
  2. YAMLファイルを作成します。

    このコマンドでは、ファイル名はsidecar.yamlです。 ファイル名を実際のファイル名に置き換えます。

    vim sidecar.yaml
  3. YAMLファイルに次のスクリプトを入力し、ビジネスシナリオに基づいてパラメーターを設定します。
    重要 envパラメーターのTZフィールドに指定したタイムゾーンが有効であることを確認します。 Log Serviceプロジェクトの生ログと処理済みログのタイムゾーンに矛盾がある場合、収集されたログに記録される時刻は、過去または未来の時点である可能性があります。 たとえば、Log Serviceプロジェクトが中国にある場合、タイムゾーンをAsia/Shanghaiに設定できます。
    apiVersion: batch/v1
    種類: 仕事
    メタデータ:
      name: nginx-log-sidecar-demo
      namespace: デフォルト
    spec:
      template:
        metadata:
          name: nginx-log-sidecar-demo
        仕様:
          restartPolicy: Never
          コンテナ:
          - name: nginx-log-demo
            image: registry.cn-hangzhou.aliyuncs.com/log-service/docker-log-test:latest
            command: ["/bin/mock_log"]
            args: ["--log-type=nginx", "--stdout=false", "--stderr=true", "--path=/var/log/nginx/access.log", "--total-count=1000000000", "--logs-per-sec=100"]
            volumeMounts:
            - name: nginx-log
              mountPath: /var/log/nginx
          ##### logtail sidecar container
          - name: logtail
            # more info: https://cr.console.aliyun.com/repository/cn-hangzhou/log-service/logtail/detail
            # this images is released for every region
            image: registry.cn-hangzhou.aliyuncs.com/log-service/logtail:latest
            # recevie sigterm、logtailが10秒遅れてから停止する場合
            command:
            - sh
            - -c
            - /usr/local/ilogtail/run_logtail.sh 10
            livenessProbe:
              exec:
                command:
                - /etc/init.d/ilogtaild
                - status
              initialDelaySeconds: 30
              periodSeconds: 30
            resources:
              limits:
                memory: 512Mi
              requests:
                cpu: 10m
                memory: 30Mi
            env:
              ##### base config
              # user id
              value: "${your_aliyun_user_id}"
                value: "${your_aliyun_user_id}"
              # user defined id
              - name: "ALIYUN_LOGTAIL_USER_DEFINED_ID"
                value: "${your_machine_group_user_defined_id}"
              # config file path in logtail's container
              - name: "ALIYUN_LOGTAIL_CONFIG"
                value: "/etc/ilogtail/conf/${your_region_config}/ilogtail_config.json"
              ##### env tags config
              - 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:
            - name: nginx-log
              mountPath: /var/log/nginx
          ##### share this volume
          volumes:
          - name: nginx-log
            emptyDir: {}
    1. 設定スクリプトで基本変数を設定します。 次の表に変数を示します。
      ##### base config
                # user id
                value: "${your_aliyun_user_id}"
                  値: "${your_aliyun_user_id}"
                # user defined id
                - name: "ALIYUN_LOGTAIL_USER_DEFINED_ID"
                  値: "${your_machine_group_user_defined_id}"
                # config file path in logtail's container
                - name: "ALIYUN_LOGTAIL_CONFIG"
                  値: "/etc/ilogtail/conf/ ${your_region_config} /ilogtail_config.json"
      変数説明
      ${your_aliyun_user_id}Alibaba CloudアカウントのID。 詳細については、「Alibaba Cloud ECS インスタンス以外または他のアカウントの ECS インスタンスからログを収集する」をご参照ください。
      ${your_machine_group_user_defined_id}マシングループのカスタム識別子。 例: nginx-log-sidecar.
      重要 識別子は、プロジェクトが存在するリージョンで一意である必要があります。
      ${your_region_config}プロジェクトが存在するリージョンのIDと、プロジェクトが使用するネットワークのタイプ。 リージョンの詳細については、「Logtailインストールのリージョン名」をご参照ください。
      • インターネット経由でプロジェクトにログを収集する場合は、region-Internet形式で値を指定します。 たとえば、プロジェクトが中国 (杭州) リージョンにある場合は、cn-Hangzhou-internetを指定します。
      • Alibaba Cloudの内部ネットワークを介してプロジェクトにログを収集する場合は、region形式で値を指定します。 たとえば、プロジェクトが中国 (杭州) リージョンにある場合は、cn-Hangzhouを指定します。
    2. 構成スクリプトでマウントパスを指定します。
      説明 emptyDirタイプのボリュームにコンテナーをマウントすることを推奨します。
      volumeMounts:
      -name: nginx-log
        mountPath: /var/log/nginx
        ##### このボリュームを共有する
      ボリューム:
      -name: nginx-log
        emptyDir: {}
      パラメーター説明
      nameボリュームの名前。 ビジネス要件に基づいて名前を指定できます。
      重要 volumeMountsノードのnameパラメーターの値とvolumesノードのnameパラメーターの値は同じである必要があります。 これにより、Logtailコンテナとアプリケーションコンテナが同じボリュームに確実にマウントされます。
      mountPathマウントパス。 コンテナテキストログが記録されているファイルのパスを入力できます。
    3. 構成スクリプトでLogtailコンテナの待機期間を指定します。
      ほとんどの場合、待機期間は10秒です。 この値は、コンテナーがstopコマンドを受信してから10秒後にLogtailコンテナーが終了することを示します。 この設定は、不完全なデータ収集を防ぐのに役立ちます。
      コマンド:
      -sh
      - -c
      - /usr/local/ilogtail/run_logtail.sh 10
  4. 次のコマンドを実行して、sidecar.yamlファイルの設定を適用します。

    このコマンドでは、ファイル名はsidecar.yamlです。 ファイル名を実際のファイル名に置き換えます。

    kubectl apply -f sidecar.yaml

ステップ2: マシングループを作成する

  1. Log Service コンソールにログインします。
  2. [プロジェクト] セクションで、Logtailコンポーネントのインストールに使用したプロジェクトをクリックします。
  3. 左側のナビゲーションウィンドウで、[リソース] > [マシングループ] を選択します。
  4. マシングループリストで、マシングループ > マシングループの作成を選択します。
  5. [マシングループの作成] パネルでパラメーターを設定し、[OK] をクリックします。 次の表は、各パラメーターの説明です。
    項目説明
    Nameマシングループの名前。
    重要 マシングループを作成した後、マシングループの名前を変更することはできません。 操作は慎重に行ってください。
    IDマシングループの識別子。 [カスタムID] を選択します。
    トピックマシングループのトピック。 トピックは、異なるサーバーによって生成されるログを区別するために使用されます。 詳細については、「ログトピック」をご参照ください。
    カスタム識別子マシングループのカスタム識別子。 識別子は、Sidecarのインストール時に設定した ${your_machine_group_user_defined_id} パラメーターの値と同じである必要があります。 例: nginx-log-sidecar. 詳細については、「ステップ1: Sidecarのインストール」をご参照ください。

ステップ3: Logtail設定の作成

  1. Log Service コンソールにログインします。
  2. [データのインポート] セクションで、[区切り文字モード-テキストログ] をクリックします。
    この例では、デリミタモードが使用されています。 その他の収集モードについては、「テキストファイルの収集」をご参照ください。
  3. プロジェクトとLogstoreを選択します。 [次へ] をクリックします。
    Logtailコンポーネントのインストールに使用したプロジェクトと、作成したLogstoreを選択します。
  4. [既存のマシングループを使用] をクリックします。
  5. [ソースサーバーグループ] セクションからマシングループを選択し、マシングループを [応用サーバーグループ] セクションに移動します。 次に、次へ をクリックします。

    ステップ2: マシングループを作成する で作成したマシングループを選択します。

    重要 マシングループを作成した直後にマシングループを有効にすると、マシングループのハートビートステータスがFAILになる可能性があります。 この問題は、マシングループがLog Serviceに接続されていない場合に発生します。 この問題を解決するには、[自動再試行] をクリックします。 問題が解決しない場合は、「Logtailマシングループにハートビートがない場合の対処方法」をご参照ください。
  6. Logtail設定を作成し、[次へ] をクリックします。
    シンプルモード、NGINXモード、デリミタモード、JSONモード、またはフル正規表現モードでログを収集できます。 詳細については、「テキストログの収集」をご参照ください。
    重要 Sidecarモードでは、Dockerファイルをオフにする必要があります。
    収集モードの指定
  7. データをプレビューし、インデックスを設定し、[次へ] をクリックします。
    デフォルトでは、Log Serviceでフルテキストインデックスが有効になっています。 手動モードまたは自動モードで収集したログに基づいてフィールドインデックスを設定することもできます。 自動モードでフィールドインデックスを設定するには、[自動インデックス生成] をクリックします。 これにより、Log Serviceは自動的にフィールドインデックスを作成します。 詳細については、「インデックスの作成」をご参照ください。
    重要 ログをクエリおよび分析する場合は、フルテキストインデックス作成またはフィールドインデックス作成を有効にする必要があります。 フルテキストインデックスとフィールドインデックスの両方を有効にすると、フィールドインデックスのみが使用されます。
  8. [ログクエリ] をクリックします。 Logstoreのクエリと分析ページにリダイレクトされます。
    インデックスが有効になるまで約1分待つ必要があります。 そして、収集したログを Raw Logsタブで確認することができます。 詳細については、「データのクエリと分析」をご参照ください。

トラブルシューティング

Logtailを使用して標準コンテナやKubernetesコンテナなどのコンテナからログを収集するときに例外が発生した場合、次のトピックに基づいて問題のトラブルシューティングを行うことができます。

Logtailを使用してコンテナからログを収集するときにエラーが発生した場合はどうすればよいですか?