コンテナにDaemonSetモードでLogtailをインストールした後、カスタムリソース定義 (CRD) を使用してLogtail設定を作成し、Logtail設定を使用してコンテナログを収集できます。

始める前に

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

機能

Logtailは、コンテナーテキストログまたはstdoutとstderrを収集し、テキストログまたはstdoutとstderrをコンテナメタデータと一緒にLog Serviceにアップロードできます。 Logtailは次の機能をサポートしています。
  • テキストログを収集するときに、コンテナー内のログファイルパスを指定できます。 ログファイルのパスをホスト上のパスに手動でマップする必要はありません。
  • stdoutとstderrを収集します。
  • コンテナーラベルのホワイトリストを使用して、ログを収集するコンテナーを指定します。
  • コンテナーラベルブラックリストを使用して、ログが収集されないコンテナーを指定します。
  • 環境変数ホワイトリストを使用して、ログを収集するコンテナーを指定します。
  • 環境変数ブラックリストを使用して、ログが収集されないコンテナを指定します。
  • 複数行のログを収集します。 たとえば、LogtailはJavaスタックログを収集できます。
  • 収集したコンテナログと一緒にアップロードする必要があるコンテナメタデータを自動的に関連付けます。 メタデータには、コンテナ名、イメージ名、ポッド名、名前空間、環境変数が含まれます。
  • コンテナーがKubernetesクラスターで実行される場合、Logtailは次の機能もサポートします。
    • Kubernetes名前空間、ポッド名、およびコンテナー名を使用して、ログを収集するコンテナーを指定します。
    • Kubernetesラベルホワイトリストを使用して、ログを収集するコンテナーを指定します。
    • Kubernetesラベルブラックリストを使用して、ログが収集されないコンテナーを指定します。
    • 収集したコンテナログと一緒にアップロードする必要があるKubernetesラベルを自動的に関連付けます。

実装

Kubernetes-CRDの実装
次のリストは、CRDを使用してログを収集するプロセスを示しています。
  1. kubectlツールまたはその他のツールを使用して、AliyunLogConfig CRDを適用します。
  2. alibaba-log-controllerはCRD設定の更新を検出します。
  3. alibaba-log-controllerは、CRDの内容とLog ServiceのLogtail設定のステータスに基づいて、Logstoreを作成し、Logtail設定を作成し、マシングループにLogtail設定を適用するためのリクエストをLog Serviceに送信します。
  4. Logtailは、Log Serviceにリクエストを定期的に送信して、新しいまたは更新されたLogtail設定を取得し、ホットリロードを実行します。
  5. Logtailは、取得したLogtail設定に基づいて、各コンテナからstdoutおよびstderrまたはテキストログを収集します。
  6. Logtailは、収集したコンテナログをLog Serviceに送信します。

制限事項

  • テキストログ収集の制限
    • Logtailが停止したコンテナでdieイベントを検出した場合、Logtailはコンテナからテキストログを収集しなくなります。 収集待ち時間が存在する場合、コンテナが停止する前に収集された一部のテキストログが失われる可能性があります。
    • Logtailはコンテナのシンボリックリンクにアクセスできません。 収集ディレクトリとして実際のパスを指定する必要があります。
    • ボリュームがコンテナのデータディレクトリにマウントされている場合、Logtailはデータディレクトリの親ディレクトリからデータを収集できません。 データディレクトリの完全なパスをコレクションディレクトリとして指定する必要があります。

      たとえば、ボリュームが /var/log/serviceディレクトリにマウントされ、収集ディレクトリを /var/logに設定した場合、Logtailは /var/logディレクトリからログを収集できません。 収集ディレクトリとして /var/log/serviceを指定する必要があります。

    • デフォルトでは、Kubernetesはホストのルートディレクトリをlogtailコンテナの /Logtail_hostディレクトリにマウントします。 ホストからテキストログを収集する場合は、ログファイルパスのプレフィックスとして /logtail_hostを指定する必要があります。

      たとえば、ホストの /home/logs/app_log/ ディレクトリからログを収集する場合は、ログファイルパスとして /logtail_host/home/logs/app_log/ を指定する必要があります。

    • For Docker容器、のみオーバーレイとoverlay2収納ドライバサポートされている。 If他収納ドライバ使用されている、必要がありマウントボリュームにディレクトリのログ。 そして、一時ディレクトリが生成される。

      PersistentVolumeClaim (PVC) を使用してApsara File Storage NAS (NAS) ファイルシステムがログのディレクトリにマウントされている場合、DaemonSetモードではログを収集できません。 この場合、Sidecarモードでログを収集することを推奨します。 詳細については、「SidecarモードでCRDを使用してコンテナテキストログを収集する」および「Log Serviceコンソールを使用してSidecarモードでコンテナテキストログを収集する」をご参照ください。

  • stdoutおよびstderrコレクションの制限

    ロギングドライバーは、Dockerエンジンを使用するコンテナーからJSON形式でのみstdoutとstderrを収集します。

  • 一般的な制限事項
    Logtailは、Dockerエンジンまたはcontainerdエンジンを使用するコンテナーからデータを収集します。
    • Docker: Logtailは、/run /Docker. sockディレクトリのdockerエンジンにアクセスします。 ディレクトリが存在し、Logtailにディレクトリにアクセスする権限があることを確認します。
    • containerd: Logtailアクセスcontainerdエンジンに /実行 /containerd/containerd。靴下ディレクトリ。 Makeことを確認ディレクトリ存在とLogtailは権限ディレクトリにアクセスする。

Logtail構成の作成

Logtail設定を作成するには、AliyunLogConfig CRDを作成するだけです。 Logtail設定が作成されると、システムは自動的にLogtail設定を適用します。 Logtail設定を削除する場合は、CRDを削除するだけです。

  1. Kubernetesクラスターにログインします。
  2. 次のコマンドを実行して、YAMLファイルを作成します。

    この例では、ファイル名はcube.yamlです。 ビジネス要件に基づいてファイル名を指定できます。

    vim cube.yaml
  3. YAMLファイルに次のスクリプトを入力し、ビジネス要件に基づいてパラメーターを設定します。
    重要
    • configNameパラメーターの値は、使用するLog Serviceプロジェクトで一意である必要があります。
    • 複数のCRDが同じLogtail設定に関連付けられている場合、いずれかのCRDを削除または変更すると、Logtail設定が影響を受けます。 削除または変更後、Logtail設定に関連付けられている他のCRDのステータスが、Log ServiceのLogtail設定のステータスと一致しなくなります。
    apiVersion: log.alibabacloud.com/v1alpha1# デフォルト値が使用されます。 このパラメーターを変更する必要はありません。 
    kind: AliyunLogConfig# デフォルト値が使用されます。 このパラメーターを変更する必要はありません。 
    metadata:
      name: simple-stdout-example# リソースの名前。 名前は、現在のKubernetesクラスターで一意である必要があります。 
    仕様:
      プロジェクト: k8s-my-project# オプション。 プロジェクトの名前。 デフォルト値は、Logtailコンポーネントのインストールに使用するプロジェクトの名前です。 
      logstore: k8s-stdout# Logstoreの名前。 指定したLogstoreが存在しない場合、Log Serviceは自動的にLogstoreを作成します。 
      logstoreMode: 標準# オプション。 Logstoreのタイプ。 このパラメーターの値は、Logstoreの作成時にパラメーターを設定した場合にのみ有効になります。 
      shardCount: 2# オプション。 シャードの数。 有効な値: 1 ~ 10。 デフォルト値:2 
      lifeCycle: 90# Logstoreのデータ保持期間。 The値このパラメータの場合にのみ有効パラメータ設定を作成するときLogstore。 有効な値: 1 ~ 3650 単位:日 デフォルト値: 90。 値3650は、ログデータがLogstoreに永続的に格納されることを指定します。 
      logtailConfig: # Logtailの設定。 
        inputType: plugin# データソースのタイプ。 有効な値: fileとplugin。 fileの値はテキストログを指定します。 pluginの値は、stdoutおよびstderrを指定する。 
        configName: simple-stdout-example# Logtail設定の名前。 名前は、n metadata.nameで指定されたリソース名と同じである必要があります。 
        inputDetail: # Logtail設定の詳細設定。 詳細については、次の設定例をご参照ください。 
          ...
    パラメーターデータ型必須/任意説明
    projectString任意プロジェクトの名前。 デフォルト値は、Logtailコンポーネントのインストールに使用するプロジェクトの名前です。
    logstoreString必須ログストアの名前

    指定したLogstoreが存在しない場合、Log Serviceは自動的にLogstoreを作成します。

    logstoreModeString任意Logstoreのタイプ。 詳細については、「Logstore の作成」をご参照ください。 有効な値:
    • query: Logstoreのクエリ
    • 標準: 標準Logstore
    重要
    • The値このパラメータの場合にのみ有効パラメータ設定を作成するときLogstore。 Logstoreパラメーターで指定されている既存のlogstoreのこのパラメーターの値を変更しても、新しい値は有効になりません。
    • このパラメーターの値は、alibaba-log-controller V0.3.3以降でのみ有効です。
    shardCountint任意シャードの数。 有効な値: 1 ~ 10。 デフォルト値:2
    lifeCycleint任意Logstoreのデータ保持期間。 有効な値: 1 ~ 3650 単位:日 デフォルト値: 90。 値3650は、ログデータがLogstoreに永続的に格納されることを指定します。
    重要 The値このパラメータの場合にのみ有効パラメータ設定を作成するときLogstore。 Logstoreパラメーターで指定されている既存のlogstoreのこのパラメーターの値を変更しても、新しい値は有効になりません。
    machineGroupsarray任意Logtail設定が適用されるマシングループ。 Theデフォルト値は、マシングループ名前k8s-group-${your_k8s_cluster_id} 。 このマシングループは、Logtailコンポーネントをインストールすると、Log Serviceによって自動的に作成されます。
    logtailConfigobject必須Logtail設定の詳細設定。 ほとんどの場合、inputTypeconfigName、およびinputDetailパラメーターのみを設定する必要があります。 inputDetailパラメーターで、ログフィルタリング、データ書き込みモード、データマスキング、ログトピックなどの項目を設定できます。 パラメーターの詳細については、「Logtail の設定」をご参照ください。

    logtailConfigの設定例の詳細については、「stdoutとstderrの収集に使用されるLogtail設定の例テキストログの収集に使用されるLogtail設定の例」をご参照ください。

  4. 次のコマンドを実行して、Logtail設定を適用します。

    この例では、ファイル名はcube.yamlです。 ビジネス要件に基づいてファイル名を指定できます。

    kubectl apply -f cube.yaml
    Logtail設定が適用されると、Logtailは各コンテナからstdoutおよびstderrまたはテキストログを収集し、収集したログをLog Serviceに送信します。
    重要 ログを収集したら、インデックスを作成する必要があります。 次に、Logstore内のログを照会および分析できます。 詳細については、「インデックスの作成」をご参照ください。

Logtail設定の表示

Logtail設定は、Log ServiceコンソールまたはCRDを使用して表示できます。 Log ServiceコンソールでLogtail設定を表示する方法の詳細については、「Logtail 設定リストを表示する」をご参照ください。
重要 Log ServiceコンソールでLogtail設定の設定を変更し、CRDを使用してLogtail設定を表示した場合、変更はCRDの返された結果に表示されません。 CRDを使用してLogtail設定の設定を変更し、Log ServiceコンソールでLogtail設定を表示すると、変更がLog Serviceコンソールに表示されます。

現在のKubernetesクラスターのすべてのLogtail設定を表示する

kubectl get aliyunlogconfigsコマンドを実行して、すべてのLogtail設定を表示できます。 以下の図に結果を示します。 Logtail設定の表示

Logtail構成の詳細とステータスの表示

kubectl get aliyunlogconfigs config_name -o yamlコマンドを実行して、Logtail構成の詳細とステータスを表示できます。 コマンドのconfig_nameパラメーターには、表示するLogtail設定の名前を指定します。 ビジネス要件に基づいて名前を指定できます。 以下の図に結果を示します。

結果のstatusパラメーターとstatusCodeパラメーターは、Logtail設定のステータスを示します。
  • statusCodeパラメーターの値が200の場合、Logtail設定が適用されます。
  • statusCodeパラメーターの値が200でない場合、Logtail設定は適用されません。
Logtail設定の表示

stdoutとstderrの収集に使用されるLogtail設定の例

コンテナのstdoutとstderrを収集する場合は、inputTypeパラメーターをpluginに設定し、inputDetailパラメーターのpluginフィールドに詳細設定を追加する必要があります。 パラメーターとパラメーターの説明の詳細については、「コンテナ標準出力」をご参照ください。

コンテナのstdoutとstderrをシンプルモードで収集する

  • 説明

    Collect stdoutとstderrすべて容器から除くコンテナその環境可変構成はCOLLECT_STDOUT_FLAG=偽。 コンテナの環境変数を表示するには、コンテナが存在するホストにログインします。 詳細については、「環境変数の取得」をご参照ください。

  • 設定例
    apiVersion: log.alibabacloud.com/v1alpha1
    kind: AliyunLogConfig
    メタデータ:
      # リソースの名前。 名前は、現在のKubernetesクラスターで一意である必要があります。 
      name: simple-stdout-example
    spec:
      # 指定したLogstoreが存在しない場合、Log Serviceは自動的にLogstoreを作成します。 
      logstore:k8s-stdout
      # Logtailの設定。 
      logtailConfig:
        # データソースのタイプ。 stdoutとstderrを収集する場合は、値をpluginに設定する必要があります。 
        inputType:プラグイン
        # Logtail設定の名前。 名前は、n metadata.nameで指定されたリソース名と同じである必要があります。 
        configName:simple-stdout-example
        inputDetail:
          プラグイン:
            入力:
              -
                # 入力方式
                タイプ:service_docker_stdout
                詳細:
                  # Logtailがstdoutとstderrの両方を収集できるようにする設定。 
                  Stdout:true
                  Stderr:true
                  # 環境変数ブラックリスト。 この例では、環境変数設定がCOLLECT_STDOUT_FLAG=falseであるコンテナを除くすべてのコンテナからstdoutとstderrを収集します。 
                  ExcludeEnv:
                    COLLECT_STDOUT_FLAG: "false"

コンテナのstdoutとstderrをシンプルモードで収集し、正規表現を使用してログを処理する

  • 説明

    シンプルモードでコンテナからGrafanaのアクセスログを収集し、正規表現を使用してアクセスログを構造化データに解析します。 Grafanaのアクセスログを収集できるコンテナの環境変数設定には、GF_INSTALL_PLUGINS=grafana-piechart-... があります。 コンテナの環境変数を表示するには、コンテナが存在するホストにログインします。 詳細については、「環境変数の取得」をご参照ください。

  • サンプルログ
    t=2018-03-09T07:14:03+0000 lvl=info msg="Request Completed" logger=context userId=0 orgId=0 uname= method=GET path=/ status=302 remote_addr=172.16.64.154 time_ms=0 size=29 referer=
  • 設定例
    apiVersion: log.alibabacloud.com/v1alpha1
    kind: AliyunLogConfig
    メタデータ:
      # リソースの名前。 名前は、現在のKubernetesクラスターで一意である必要があります。 
      名前: regex-stdout-example
    spec:
      # 指定したLogstoreが存在しない場合、Log Serviceは自動的にLogstoreを作成します。 
      logstore:k8s-stdout-regex
      # Logtailの設定。 
      logtailConfig:
        # データソースのタイプ。 stdoutとstderrを収集する場合は、値をpluginに設定する必要があります。 
        inputType:プラグイン
        # Logtail設定の名前。 名前は、n metadata.nameで指定されたリソース名と同じである必要があります。 
        configName: regex-stdout-example
        inputDetail:
          プラグイン:
            入力:
              -
                # 入力方式
                タイプ:service_docker_stdout
                詳細:
                  # Logtailがstdoutのみを収集できるようにする設定。 
                  Stdout:true
                  標準エラー:false
                  # 環境変数ホワイトリスト。 この例では、環境変数設定にGF_INSTALL_PLUGINSのキーが含まれているコンテナからのみstdoutが収集されます。 
                  IncludeEnv:
                    GF_INSTALL_PLUGINS: ''
            プロセッサ:
              -
                # processor_regexプラグインを使用して、正規表現を使用して収集されたstdoutを解析します。 
                タイプ:processor_regex
                詳細:
                  # ソースフィールドの名前。 デフォルトでは、収集されたstdoutはcontentフィールドに格納されます。 
                  SourceKey: content
                  # ログコンテンツの抽出に使用される正規表現。 
                  正規表現: 't=(\d +-\d +-\w +:\d +:\d +\d +) lvl=(\w +) msg="([^"]+)"logger=(\w +) userId=(\w +) orgId=(\w +) uname=(\S *) method=(\w +) path=(\S +) status=(\d +) remo_addr=S +) time_ms=(\d +) size=(\d +) referer=(\S *).*'
                  # ログから抽出するキー。 
                  キー:[時刻、レベル、メッセージ、ロガー、userId、orgId、uname、method、path、status、remote_addr、time_ms、、'size'、'referer']
                  # Logtailがソースフィールドを保持できるようにする設定。 
                  KeepSource:true
                  # 指定されたソースフィールドが存在しない場合にLogtailがエラーを報告できるようにする設定。 
                  NoKeyError:true
                  # 指定された正規表現が指定されたソースフィールドの値と一致しない場合にLogtailがエラーを報告できるようにする設定。 
                  NoMatchError: true
  • 解析後に取得した新しいログ解析後に取得した新しいログ

Kubernetesラベルを使用したコンテナーのフィルタリング

  • 説明
    Kubernetesラベルにジョブ名キーと特定の値が含まれているコンテナーからstdoutとstderrを収集します。 値はnginx-log-demoで始まります。
    説明 Logtail V1.0.34以降では、Kubernetesラベルがフィルターコンテナーにサポートされています。
  • 設定例
    1. Kubernetesラベルを取得します。 Kubernetesリソース
    2. Logtail設定を作成します。
      次のコードは、Logtail設定の例を示しています。 詳細については、「Log Serviceコンソールを使用してDaemonSetモードでコンテナのstdoutとstderrを収集する」をご参照ください。
      apiVersion: log.alibabacloud.com/v1alpha1
      kind: AliyunLogConfig
      メタデータ:
        # リソースの名前。 名前は、現在のKubernetesクラスターで一意である必要があります。 
        name: simple-stdout-example
      spec:
        # 指定したLogstoreが存在しない場合、Log Serviceは自動的にLogstoreを作成します。 
        logstore:k8s-stdout
        # Logtailの設定。 
        logtailConfig:
          # データソースのタイプ。 stdoutとstderrを収集する場合は、値をpluginに設定する必要があります。 
          inputType:プラグイン
          # Logtail設定の名前。 名前は、n metadata.nameで指定されたリソース名と同じである必要があります。 
          configName: k8s-stdout-example
          inputDetail:
            プラグイン:
              入力:
                -
                  # 入力方式
                  タイプ:service_docker_stdout
                  詳細:
                    # Logtailがstdoutとstderrの両方を収集できるようにする設定。 
                    Stdout:true
                    Stderr:true
                    # Kubernetesラベルのホワイトリスト。 この例では、stdoutとstderrは、Kubernetesラベルにジョブ名キーと特定の値が含まれているコンテナーからのみ収集されます。 値はnginx-log-demoで始まります。 
                    IncludeK8sLabel:
                      job-name: "^(nginx-log-demo.*)$"

Kubernetes名前空間、ポッド名、およびコンテナー名を使用したコンテナーのフィルタリング

  • 説明
    デフォルトの名前空間で名前がnginx-log-demoで始まるポッドのnginx-log-demo-0コンテナからstdoutとstderrを収集します。
    説明 Logtail V1.0.34以降では、Kubernetes名前空間、ポッド名、およびコンテナー名がフィルターコンテナーとしてサポートされています。
  • 設定例
    1. さまざまなレベルのKubernetes情報を取得します。
      1. ポッドに関する情報を取得します。 Kubernetesリソース
      2. 名前空間に関する情報を取得します。 Kubernetesリソース
    2. Logtail設定を作成します。
      次のコードは、Logtail設定の例を示しています。 詳細については、「Log Serviceコンソールを使用してDaemonSetモードでコンテナのstdoutとstderrを収集する」をご参照ください。
      apiVersion: log.alibabacloud.com/v1alpha1
      kind: AliyunLogConfig
      メタデータ:
        # リソースの名前。 名前は、現在のKubernetesクラスターで一意である必要があります。 
        name: simple-stdout-example
      spec:
        # 指定したLogstoreが存在しない場合、Log Serviceは自動的にLogstoreを作成します。 
        logstore:k8s-stdout
        # Logtailの設定。 
        logtailConfig:
          # データソースのタイプ。 stdoutとstderrを収集する場合は、値をpluginに設定する必要があります。 
          inputType:プラグイン
          # Logtail設定の名前。 名前は、n metadata.nameで指定されたリソース名と同じである必要があります。 
          configName: k8s-stdout-example
          inputDetail:
            プラグイン:
              入力:
                -
                  # 入力方式
                  タイプ:service_docker_stdout
                  詳細:
                    # Logtailがstdoutとstderrの両方を収集できるようにする設定。 
                    Stdout:true
                    Stderr:true
                    K8sNamespaceRegex: ^ (デフォルト) $
                    K8sPodRegex: '^(nginx-log-demo.*)$'
                    K8sContainerRegex: ^(nginx-log-demo-0)$
                              

テキストログの収集に使用されるLogtail設定の例

コンテナテキストログを収集する場合は、inputTypeパラメーターをfileに設定し、詳細設定をinputDetailパラメーターに追加する必要があります。 パラメーターとパラメーターの説明の詳細については、「Log Serviceコンソールを使用してDaemonSetモードでコンテナテキストログを収集する」をご参照ください。

シンプルモードでログを収集する

  • 説明

    環境変数設定にALIYUN_LOGTAIL_USER_DEFINED_IDのキーが含まれるコンテナーからテキストログを収集します。 ログファイルパスは /data/logs/app_1/simple. logです。

  • 設定例
    apiVersion: log.alibabacloud.com/v1alpha1
    kind: AliyunLogConfig
    メタデータ:
      # リソースの名前。 名前は、現在のKubernetesクラスターで一意である必要があります。 
      name: simple-file-example
    spec:
       # Logstoreの名前。 指定したLogstoreが存在しない場合、Log Serviceは自動的にLogstoreを作成します。 
      logstore:k8s-file
      # Logtailの設定。 
      logtailConfig:
        # データソースのタイプ。 テキストログを収集する場合は、値をfileに設定する必要があります。 
        inputType:ファイル
        # Logtail設定の名前。 名前は、n metadata.nameで指定されたリソース名と同じである必要があります。 
        configName:シンプルファイル - 例
        inputDetail:
          # Logtailがシンプルモードでテキストログを収集できるようにする設定。 
          logType:common_reg_log
          # ログファイルのパス。 
          logPath:/ data / logs / app_1
          # ログファイル名。 ログファイル名を指定するときに、アスタリスク (*) や疑問符 (?) などのワイルドカード文字を使用できます。 例: log_*.log。 
          filePattern:simple.LOG
          # コンテナテキストログを収集する場合は、dockerFileをtrueに設定する必要があります。 
          dockerFile:true
          # 環境変数ホワイトリスト。 この例では、環境変数設定にALIYUN_LOGTAIL_USER_DEFINED_IDのキーが含まれているコンテナーからのみテキストログが収集されます。 
          dockerIncludeEnv:
            ALIYUN_LOGTAIL_USER_DEFINED_ID: ""

フル正規表現モードでログを収集する

  • 説明

    Javaプログラムは、エラースタック情報を含む複数行のログを生成します。 フル正規表現モードでログを収集し、Logtail構成のログの最初の行の先頭と一致する正規表現を指定できます。

  • サンプルログ
    [2018-05-11T20:10:16、000] [INFO] [SessionTracker] [SessionTrackerImpl.java:148] Expiringセッション
    java.sql.SQLException: 文字列の値が正しくありません: 行1の列 'data' の場合、'\xF0\x9F\x8E\x8F "、...'
    でorg。springframework。jdbc.support。AbstractFallbackSQLExceptionTranslator。翻訳 (AbstractFallbackSQLExceptionTranslator.java:84)
    org.springframework.jdbc.support.AbstractFallbackSQLExceptionで
  • 設定例
    apiVersion: log.alibabacloud.com/v1alpha1
    kind: AliyunLogConfig
    メタデータ:
      # リソースの名前。 名前は、現在のKubernetesクラスターで一意である必要があります。 
      name: regex-file-example
    spec:
      # Logstoreの名前。 指定したLogstoreが存在しない場合、Log Serviceは自動的にLogstoreを作成します。 
      logstore:k8s-file
      logtailConfig:
        # データソースのタイプ。 テキストログを収集する場合は、値をfileに設定する必要があります。 
        inputType:ファイル
        # Logtail設定の名前。 名前は、n metadata.nameで指定されたリソース名と同じである必要があります。 
        configName:regex-file-example
        inputDetail:
          # Logtailがフル正規表現モードでテキストログを収集できるようにする設定。 
          logType:common_reg_log
          # ログファイルのパス。 
          logPath:/ app / logs
          # ログファイル名。 ログファイル名を指定するときに、アスタリスク (*) や疑問符 (?) などのワイルドカード文字を使用できます。 例: log_*.log。 
          filePattern:error.LOG
          # ログの最初の行の先頭を一致させるために使用される正規表現。 
          logBeginRegex: '\[\d +-\d +-\w +:\d +:\d +,\d +]\s\[\w +]\s.*'
          # ログコンテンツの抽出に使用される正規表現。 
          regex: '\[([^]]+)]\s\[(\w +)]\s\[(\w +)]\s\[([^:]+):(\d +)]\s(.*)'
          # ログから抽出するキー。 
          キー: ["time", "level", "method", "file", "line", "message"]
          # The形式の時間値から抽出されログ。 ログがフル正規表現モードで収集されると、デフォルトではログの時間フィールドから時間値が抽出されます。 時間値を抽出したくない場合は、このパラメーターを空のままにすることができます。 timeFormatパラメーターを設定する場合は、adjustTimezoneパラメーターとlogTimezoneパラメーターも設定する必要があります。 
          timeFormat: '%Y-%m-%dT%H:%M:%S'
          # デフォルトでは、LogtailはUTCを使用します。 タイムゾーンを強制的に変更するには、次のパラメーター設定を設定する必要があります。 
          adjustTimezone: true
          # タイムゾーンのオフセット。 ログのタイムゾーンはUTC + 8です。 このパラメーターの値を変更して、タイムゾーンを変更できます。 
          logTimezone: "GMT + 08:00"
          # The設定許可Logtailにアップロード場合生ログログparsedに失敗。 
          discardUnmatch: false
          # コンテナテキストログを収集する場合は、dockerFileをtrueに設定する必要があります。 
          dockerFile:true
          # 環境変数ホワイトリスト。 この例では、環境変数設定にkeyが含まれているコンテナーからのみテキストログが収集されます。 
          dockerIncludeEnv:
            ALIYUN_LOGTAIL_USER_DEFINED_ID: ""
  • 解析後に取得した新しいログCollect regexでログモード

区切り文字モードでログを収集する

  • 説明

    収集するコンテナーテキストログに区切り文字が含まれている場合は、区切り文字モードでコンテナーテキストログを収集できます。 デリミタ区切り値 (DSV) 形式のログは、改行を境界として使用します。 各ログは別々の行に配置されます。 各ログは、区切り文字を使用して複数のフィールドに解析されます。

  • 設定例
    apiVersion: log.alibabacloud.com/v1alpha1
    kind: AliyunLogConfig
    メタデータ:
      # リソースの名前。 名前は、現在のKubernetesクラスターで一意である必要があります。 
      name: delimiter-file-example
    spec:
      # Logstoreの名前。 指定したLogstoreが存在しない場合、Log Serviceは自動的にLogstoreを作成します。 
      logstore:k8s-file
      logtailConfig:
        # データソースのタイプ。 テキストログを収集する場合は、値をfileに設定する必要があります。 
        inputType:ファイル
        configName:区切り文字 - ファイル例
        # Logtail設定の名前。 名前は、n metadata.nameで指定されたリソース名と同じである必要があります。 
        inputDetail:
          # Logtailが区切り文字モードでテキストログを収集できるようにする設定。 
          logType:delimiter_log
          # ログファイルのパス。 
          logPath:/ usr / local / ilogtail
          # ログファイル名。 ログファイル名を指定するときに、アスタリスク (*) や疑問符 (?) などのワイルドカード文字を使用できます。 例: log_*.log。 
          filePattern:delimiter_log.LOG
          # 区切り文字。 
          セパレータ: '|&|'
          # ログから抽出するキー。 
          キー: ['time', 'level', 'method', 'file', 'line', 'message']
          # 時間値が抽出されるフィールドの名前。 
          timeKey: '時刻'
          # ログから抽出される時間値の形式。 区切り文字モードでログを収集する場合、デフォルトではログの時間フィールドから時間値が抽出されます。 時間値を抽出したくない場合は、このパラメーターを空のままにすることができます。 timeFormatパラメーターを設定する場合は、adjustTimezoneパラメーターとlogTimezoneパラメーターも設定する必要があります。 
          timeFormat: '%Y-%m-%dT%H:%M:%S'
          # デフォルトでは、LogtailはUTCを使用します。 タイムゾーンを強制的に変更するには、次のパラメーター設定を設定する必要があります。 
          adjustTimezone: true
          # タイムゾーンのオフセット。 ログのタイムゾーンはUTC + 8です。 このパラメーターの値を変更して、タイムゾーンを変更できます。 
          logTimezone: "GMT + 08:00"
          # The設定許可Logtailにアップロード場合生ログログparsedに失敗。 
          discardUnmatch: false
          # コンテナテキストログを収集する場合は、dockerFileをtrueに設定する必要があります。 
          dockerFile:true
          # 環境変数ホワイトリスト。 この例では、環境変数設定にkeyが含まれているコンテナーからのみテキストログが収集されます。 
          dockerIncludeEnv:
            ALIYUN_LOGTAIL_USER_DEFINED_ID: ''

Collect JSONでログモード

  • 説明

    収集するコンテナーテキストログがObjectタイプのJSONログの場合、JSONモードでコンテナーテキストログを収集できます。

  • サンプルログ
    {"url": "POST /PutData?Category=YunOsAccountOpLog&AccessKeyId=U0Ujpek * * * * *&Date=Fri % 2C % 2028% 20Jun % 202013% 2006% 3A53% 3A30% 20GMT&Topic=生&Signature=pD12XYLmGxKQ % 2Bmkd6x7hAgQ7b1c % 3D HTTP/1.1" 、"ip": "10.200.98.220" 、"ユーザーエージェント": "aliyun-sdk-ジャワ" 、"要求": {"ステータス」:" 200 "、" レイテンシ ": " 18204 "} 、" 時間 ": " 05/Jan/2020:13:30:28 "}
  • 設定例
    apiVersion: log.alibabacloud.com/v1alpha1
    kind: AliyunLogConfig
    メタデータ:
      # リソースの名前。 名前は、現在のKubernetesクラスターで一意である必要があります。 
      名前: json-file-example
    spec:
      # Logstoreの名前。 指定したLogstoreが存在しない場合、Log Serviceは自動的にLogstoreを作成します。 
      logstore:k8s-file
      logtailConfig:
        # データソースのタイプ。 テキストログを収集する場合は、値をfileに設定する必要があります。 
        inputType:ファイル
        # Logtail設定の名前。 名前は、n metadata.nameで指定されたリソース名と同じである必要があります。 
        configName:json-file-example
        inputDetail:
          # LogtailがJSONモードでテキストログを収集できるようにする設定。 
          logType:json_log
          # ログファイルのパス。 
          logPath:/ usr / local / ilogtail
          # ログファイル名。 ログファイル名を指定するときに、アスタリスク (*) や疑問符 (?) などのワイルドカード文字を使用できます。 例: log_*.log。 
          filePattern:json_log.LOG
          # 時間値が抽出されるフィールドの名前。 要件が指定されていない場合は、timeKey: ''設定を使用します。 
          timeKey: '時刻'
          # The形式の時間値から抽出されログ。 Ifなし要件指定されている、使用timeFormat: '' 設定。 
          timeFormat: '%Y-%m-%dT%H:%M:%S'
          # コンテナテキストログを収集する場合は、dockerFileをtrueに設定する必要があります。 
          dockerFile:true
          # 環境変数ホワイトリスト。 この例では、環境変数設定にkeyが含まれているコンテナーからのみテキストログが収集されます。 
          dockerIncludeEnv:
            ALIYUN_LOGTAIL_USER_DEFINED_ID: ""

Kubernetes情報を使用したコンテナーのフィルタリング

  • 説明
    指定したコンテナーの /data/logs/app_1ディレクトリにあるsimple.LOGファイルからログを収集します。 コンテナは次の条件を満たす必要があります。
    • コンテナーはデフォルトの名前空間に属します。
    • コンテナーは、名前がnginx-log-demoで始まるポッドに属します。
    • コンテナーの名前はnginx-log-demo-0です。
    • コンテナーには、ジョブ名キーと特定の値を含むKubernetesラベルがあります。 値はnginx-log-demoで始まります。
    説明 In Logtail V1.0.34以降、Kubernetes namespaces、ポッド名、容器名、とKubernetesラベルにサポートされているフィルター容器。
  • 設定例
    1. さまざまなレベルのKubernetes情報を取得します。
      1. ポッドに関する情報を取得します。 Kubernetesリソース
      2. 名前空間に関する情報を取得します。 Kubernetesリソース
      3. Kubernetesラベルを取得します。 Kubernetesリソース
    2. Logtail構成の作成

      次のコードは、Logtail設定の例を示しています。 詳細については、「Log Serviceコンソールを使用してDaemonSetモードでコンテナのstdoutとstderrを収集する」をご参照ください。

      説明 advancedの下のk8sパラメーターでKubernetes関連のパラメーターを設定する必要があります。 Kubernetes関連のパラメーターには、IncludeK8sLabelExcludeK8sLabelK8sNamespaceRegexK8sPodRegexK8sContainerRegexExternalEnvTag、およびExternalK8sLabelTagが含まれます。 詳しくは、「コンテナ標準出力」をご参照ください。
      apiVersion: log.alibabacloud.com/v1alpha1
      kind: AliyunLogConfig
      メタデータ:
        # リソースの名前。 名前は、現在のKubernetesクラスターで一意である必要があります。 
        name: simple-file-example
      spec:
         # Logstoreの名前。 指定したLogstoreが存在しない場合、Log Serviceは自動的にLogstoreを作成します。 
        logstore:k8s-file
        # Logtailの設定。 
        logtailConfig:
          # データソースのタイプ。 テキストログを収集する場合は、値をfileに設定する必要があります。 
          inputType:ファイル
          # Logtail設定の名前。 名前は、n metadata.nameで指定されたリソース名と同じである必要があります。 
          configName:シンプルファイル - 例
          inputDetail:
            # Logtailがシンプルモードでテキストログを収集できるようにする設定。 
            logType:common_reg_log
            # ログファイルのパス。 
            logPath:/ data / logs / app_1
            # ログファイル名。 ログファイル名を指定するときに、アスタリスク (*) や疑問符 (?) などのワイルドカード文字を使用できます。 例: log_*.log。 
            filePattern:simple.LOG
            # コンテナテキストログを収集する場合は、dockerFileをtrueに設定する必要があります。 
            dockerFile:true
            # コンテナのフィルタリングに使用される条件。 
            高度な:
              k8s:
                K8sNamespaceRegex: ^ (デフォルト) $
                K8sPodRegex: '^(nginx-log-demo.*)$'
                K8sContainerRegex: ^(nginx-log-demo-0)$
                IncludeK8sLabel:
                  job-name: "^(nginx-log-demo.*)$"

トラブルシューティング

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

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