このページでは、ログコレクタの collectors-values.yaml でカスタマイズできるさまざまな設定について説明します

このページは、collectors-values.yaml の高度なレイアウトを使用するログコレクタ展開にのみ適用されます。ログコレクタの詳細設定について説明しています。collectors-values.yaml が 2022 年 6 月以降に利用可能な簡略化された YAML レイアウトの場合は、「AppDynamics Log Collector Settings」を参照してください。

ログコレクタは、appdynamics-cloud-k8s-monitoring.logCollectorConfig.filebeatYaml 全体を文字列として Filebeat に送信します。appdynamics-cloud-k8s-monitoring.logCollectorConfig.filebeatYaml には、次の 7 つのトップレベルキーがあります。

logCollectorConfig:
  filebeatYaml: |-
    filebeat.autodiscover: ...
    processors: ...
    output.otlploggrpc: ...
    filebeat.registry: ...
    path.data: ...
    logging: ...
    monitoring: ...
YML

このページでは、これらのキーと logCollectorPod にあるキーについて説明します。

appdynamics-cloud-k8s-monitoring.logCollectorPod.env

appdynamics-cloud-k8s-monitoring.logCollectorPod.env セクションでは、ログコレクタのオペレーティングシステム固有のイメージの場所を指定できます。

パラメータ説明

env

環境変数のセクション。

linux




image

Linux のログコレクタイメージの場所。

例:

env:
  linux:
    image: <image-url>
YML

windows




image

Windows のログコレクタイメージの場所。

例:

env:
   windows:
    image: <image-url>
YML

appdynamics-cloud-k8s-monitoring.logCollectorConfig.os

複数のオペレーティングシステムにログコレクタイメージを展開する必要がある場合は、appdynamics-cloud-k8s-monitoring.logCollectorConfig.os でイメージの URL を指定します。

パラメータ説明

os

このポッドを展開するオペレーティングシステムの配列。有効な値:windowslinux

例:

os: [linux,windows]
YML

appdynamics-cloud-k8s-monitoring.logCollectorConfig.env

appdynamics-cloud-k8s-monitoring.logCollectorConfig.env セクションを使用して、オペレーティングシステム固有のオーバーライドを指定します。  

パラメータ説明

env

OS 固有のオーバーライド設定を指定します。

<linux or windows>




filebeatYaml

シンタックスが appdynamics-cloud-k8s-monitoring.logCollectorConfig.filebeatYaml と同じ Linux 固有の filebeatYaml セクション。

例:


  logCollectorConfig:
    os: [linux,windows]
    env:
      linux:
        filebeatYaml: |-
          ...
      windows:
        filebeatYaml: |-
          ...
YML

filebeatYaml の次のセクションでは、完全なオーバーライドが必要です。すべてのパラメータを含める必要があります。

  • filebeatYaml.filebeat.autodiscover

filebeatYaml の次のセクションでは、値のオーバーライドのみが必要です。オーバーライドする値のみを含める必要があります。

  • filebeatYaml.processors

  • filebeatYaml.otlploggrpc

  • filebeatYaml.filebeat.registry

  • filebeatYaml.path.data

  • filebeatYaml.logging

  • filebeatYaml.monitoring

appdynamics-cloud-k8s-monitoring.logCollectorConfig.filebeatYaml.filebeat.autodiscover

このセクションは、Kubernetes® コンテナの検出とファイルログ入力用です。

パラメータ説明

providers



hints.default_config

クラスタ上の任意のコンテナからログを収集するためのデフォルト(「フォールバック」)条件を指定します。これにより、より迅速なセットアップが可能になります。有効な値:truefalse。デフォルト:false

hints.default_configtrue に設定した場合は、次の例の hints.default_configadd_fields リスト(これらを含む)の間のすべてのパラメータも含める必要があります。デフォルトのログ収集と解析に必要な条件に一致するように、必要に応じてこれらのパラメータを変更します。

filebeat.autodiscover:
  providers:
    - type: kubernetes
      ...
      hints.enabled: true
      hints.default_config:
        enabled: true
        type: filestream
        id: fsid-${data.kubernetes.pod.name}-${data.kubernetes.container.id}
        close_removed: false
        clean_removed: false
        paths:
          - /var/log/containers/${data.kubernetes.pod.name}*${data.kubernetes.container.id}.log
        parsers:
          - container:
              stream: all
              format: auto
          - multiline:
              type: pattern:
              pattern: '^\d{4}-\d{2}-\d{2}'
              match: after
              negate: true
        prospector.scanner.symlinks: true
        processors:
          - copy_fields:
              fields:
                - from: kubernetes.pod.name
                  to: fields.k8s.pod.name
              fail_on_error: false
              ignore_missing: true
          - copy_fields:
              fields:
                - from: kubernetes.deployment.name
                  to: fields.k8s.workload.name
              fail_on_error: false
              ignore_missing: true
          - add_fields:
              target: _message_parser
              fields:
                ... # user provided, based on the particular message parser used
      templates:
        ...
processors:
  ...
YML

templates特定のログソース、タイプ、およびパターンのすべての設定を含む condition ブロックが含まれます。複数の条件ブロックを作成するには、templates を複製します。


- condition

ログコレクタによってログを収集するために、アプリケーションが一致する必要がある条件。サポートされている条件のリストについては、「Filebeat: Conditions」を参照してください。条件に使用できるフィールドのリストについては、「Filebeat: Autodiscover: Generic fields」を参照してください。

条件は、次の 3 項目のリストです。

  • 演算子(equals または contains
  • キー(プロパティの名前)
  • 値(一致する必要があるプロパティの値)

条件リストは、次の 3 項目の複数の順序をサポートします。

Filebeat order:

- condition:
    <filebeat-operator>:
      <key-name>: <value-to-match>
YML

例:

- condition:
    equals:
      kubernetes.container.name: log-gen-app-log4j1
YML


Boolean logical operator (and, or, not):

- condition:
    <boolean>:
      - <filebeat-operator>:
          <key-name>: <value-to-match>
      - <filebeat-operator>:
          <key-name>: <value-to-match> 
YML

例:

- condition:
    or:
      - equals:
          kubernetes.container.name: log-gen-app-log4j1
      - equals:
          kubernetes.container.name: log-gen-app-log4j2 
YML


Nested conditions:

例:

- condition:
    not:
      equals:
        kubernetes.container.name: log-gen-app-logback2
YML
- condition:
    or:
      - equals: 
          kubernetes.container.name: log-gen-app-log4j2
      - and:         
          - equals: 
              kubernetes.container.name: log-gen-app-log4j1 
          - equals: 
              kubernetes.namespace: appdynamics
YML


config



- type: filestream RENAMED






idデフォルト値(fsid-${data.kubernetes.pod.name}-${data.kubernetes.container.id})のままにします。




close_removedデフォルト値(false)のままにします。




clean_removed

デフォルト値(false)のままにします。




paths

ログファイルの完全パス名の glob パターン。1 つ以上のポッド内の複数のコンテナからログを収集する場合は、この glob パターンを変更するか、別の行に追加のパス名を追加します。 

デフォルト値:

paths:                     
- /var/log/containers/${data.kubernetes.pod.name}*${data.kubernetes.container.id}.log
YML

例:

paths:                     
- /var/log/containers/${data.kubernetes.pod.name}*mycontainer-id-1.log
- /var/log/containers/${data.kubernetes.pod.name}*mycontainer-id-2.log
- /var/log/containers/${data.kubernetes.pod.name}*mycontainer-id-3.log
YML




parsers

パーサーブロックのシンタックス:

parsers:
  - container:
      stream: ***
      format: ***
  - multiline:
      type: pattern
      pattern: ****
      match: ****
      negate: ****
YML

複数行のログ メッセージのパターンを指定する場合は、parsers の次の値を使用します。

parsers:
  - container:
      stream: all
      format: auto
  - multiline:
      type: pattern
      pattern: ****
      match: ****
      negate: **** 
YML

それ以外の場合は、次を使用します。

parsers:
  - container:
      stream: all
      format: auto
YML





- container

https://www.elastic.co/guide/en/beats/filebeat/current/filebeat-input-filestream.html#_container を参照してください。






stream

指定されたストリーム(allstdout、または stderr)からのみ読み取ります。デフォルト:all。 







format

ログの解析時に指定された形式(autodocker、または cri)を使用します。デフォルト:auto(フォーマットは自動的に検出されます)。自動検出を無効にするには、他の値のいずれかを指定します。 






- multiline 

メッセージが複数行にまたがる場合は、このブロックのすべてのパラメータを指定して、複数行のログメッセージの開始位置と終了位置を特定する必要があります。「Manage multiline messages」を参照してください。

YYYY-MM-DD 形式の日付またはタイムスタンプで始まる log4j、logback、または grok ログの例:

config:
  - type: filestream    
    ...
    parsers:
      - container:
          ...
      - multiline:
          type: pattern
          pattern: '^\d{4}-\d{2}-\d{2}'
          negate: true
          match: after
YML

JSON ログの例:

config:
  - type: filestream    
    ...
    parsers:
      - container:
          ...
      - multiline:
          type: pattern
          pattern: '^{'
          negate: true
          match: after
YML






typeデフォルト値(pattern)のままにします。






pattern:複数行メッセージのパターン。これは、RE2 シンタックスの正規表現である必要があります。引用符で囲む必要があります。






match:複数行メッセージの否定を有効または無効にします。デフォルト:false






negate:複数行の分割の位置。デフォルト:aftermultiline.pattern を指定する場合は、multiline.match も指定する必要があります




prospector.scanner.symlinks

デフォルト値(true)のままにします。




processors





- copy_fields

変更しないでください。

               processors:
                - copy_fields:
                    fields:
                      - from: kubernetes.pod.name
                        to: fields.k8s.pod.name
                    fail_on_error: false
                    ignore_missing: true
YML





- copy_fields UPDATED


この copy_fields ブロックにより、ログコレクタはログメッセージをワークロードエンティティに関連付けることができます。

変更しないでください。

               processors:
                - copy_fields:
                    ...
                - copy_fields:
                    fields:
                      - from: "kubernetes.deployment.name"
                        to: "kubernetes.workload.name"
                      - from: "kubernetes.daemonset.name"
                        to: "kubernetes.workload.name"
                      - from: "kubernetes.statefulset.name"
                        to: "kubernetes.workload.name"
                      - from: "kubernetes.replicaset.name"
                        to: "kubernetes.workload.name"
                      - from: "kubernetes.cronjob.name"
                        to: "kubernetes.workload.name"
                      - from: "kubernetes.job.name"
                        to: "kubernetes.workload.name"
                    fail_on_error: false
                    ignore_missing: true 
YML





- add_fields








target: appd

fields: log.format NEW

Required. ログの「名前空間」とソースの論理グループを指定します。機密データのマスキングルールは、このパラメータの値に一致する範囲にのみ適用されます。このパラメータを指定しない場合、この構成で取り込まれたログメッセージに含まれる機密データをマスクすることはできません。詳細については、機密データのマスキングを参照してください。 

シンタックス:<log-namespace>:<log-description>

<log-namespace> の候補:awsK8smicrosoft

<log-source>の候補:apacheLogsalb_logscis_logsexchange_server_logs

共通取り込みサービス(CIS)エンドポイントからの Kubernetes ログの例:

config:
  - type: filestream
    ...
    processors:
    ...
      - add_fields:
          target: appd
          fields:
            log.format: logs:email_logs
YML






target: _message_parser

fields: type, pattern

このコンテナからの単一行ログのログタイプと単一行メッセージのパターン。 

ロギング構成ファイル(通常は log4j.xmllog4j2.xml または logback.xml))からパターンを取得します。ここでは、ロギング構成ファイルとまったく同じパターンを指定する必要があります。そうしないと、Cisco Cloud Observability によりログを受信したときにログが解析されません。ロギング構成ファイルがない場合は、アプリケーション開発者にパターンを問い合わせてください。

type の有効な値:log4jlogbacktimestampjsoninframultigrok

Log4j ログの例:

config:
  - type: filestream
    ...
    processors:
    ...
      - add_fields:
          target: _message_parser
          fields:
            type: log4j
            pattern: "%d{yyyy-MM-dd'T'HH:mm:ss} %p %C{1.} [%t] %m%n"
YML


Logback ログの例:

config:
  - type: filestream
    ...
    processors:
    ...
      - add_fields:
          target: _message_parser
          fields:
            type: logback
            pattern: "%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n"
YML


format パラメータは、タイムスタンプの形式を指定します。format の有効な値:

タイムスタンプログの例:

この例では、format という名前のフィールドを使用します。このフィールドは、タイムスタンプログ専用です。format パラメータは、タイムスタンプの形式を指定します。format の有効な値:

  • ABSOLUTEHH:mm:ss,SSS
  • ABSOLUTE_MICROSHH:mm:ss,nnnnnn
  • ABSOLUTE_NANOSHH:mm:ss,nnnnnnnnn
  • ABSOLUTE_PERIODHH:mm:ss.SSS
  • COMPACTyyyyMMddHHmmssSSS
  • DATEdd MMM yyyy HH:mm:ss,SSS
  • DATE_PERIODdd MMM yyyy HH:mm:ss.SSS
  • DEFAULTyyyy-MM-dd HH:mm:ss,SSS
  • DEFAULT_MICROSyyyy-MM-dd HH:mm:ss,nnnnnn
  • DEFAULT_NANOSyyyy-MM-dd HH:mm:ss,nnnnnnnnn
  • DEFAULT_PERIODyyyy-MM-dd HH:mm:ss.SSS
  • ISOyyyy-MM-dd'T'HH:mm:ss
  • ISO8601_BASICyyyyMMdd'T'HHmmss,SSS
  • ISO8601_BASIC_PERIODyyyyMMdd'T'HHmmss.SSS
  • ISO8601yyyy-MM-dd'T'HH:mm:ss,SSS
  • ISO8601_OFFSET_DATE_TIME_HHyyyy-MM-dd'T'HH:mm:ss,SSSX
  • ISO8601_OFFSET_DATE_TIME_HHMMyyyy-MM-dd'T'HH:mm:ss,SSSXX
  • ISO8601_OFFSET_DATE_TIME_HHCMMyyyy-MM-dd'T'HH:mm:ss,SSSXXX
  • ISO8601_PERIODyyyy-MM-dd'T'HH:mm:ss.SSS
  • java.time.format.DateTimeFormatter によってサポートされる有効なパターン

例:

config:
  - type: filestream
    ...
    processors:
    ...
      - add_fields:
          target: _message_parser
          fields:
            type: timestamp
            format: ISO8601_BASIC
YML

JSON ログの例:

JSON ログの詳細設定」を参照してください。少なくとも、type のみを指定し、format は省略します。また、ログメッセージのタイムスタンプを使用するには、timestamp_fieldtimestamp_pattern を指定します。timestamp_field および timestamp_pattern を指定しない場合、ログメッセージのタイムスタンプは取り込み時刻に設定されます。 

config:
  - type: filestream
    ...
    processors:
    ...
      - add_fields:
          target: _message_parser
          fields:
            type: json
            timestamp_field: "transactionDetails.timestamp"
            timestamp_pattern: "yyyy-MM-dd HH:mm:ss"
YML


Grok ログの例:

Grok ログの詳細設定を参照してください。

config:
  - type: filestream
    ...
    processors:
    ...
      - add_fields:
          target: _message_parser
          fields:
            type: grok
            pattern: 
            - '%{DATESTAMP:time} %{LOGLEVEL:severity} %{WORD:class}:%{NUMBER:line} - %{GREEDYDATA:data}'
            - '%{DATESTAMP_RFC2822:time} %{LOGLEVEL:severity} %{GREEDYDATA:data}'
            - '%{TOMCAT_DATESTAMP:time} \| %{LOGLEVEL:level} \| %{JAVACLASS:class} - %{JAVALOGMESSAGE:logmessage}'
            - '%{IP:clientIP} %{WORD:httpMethod} %{URIPATH:url}'
            timestamp_field: time
            timestamp_format: yyyy-MM-dd HH:mm:ss,SSS
YML






target: _message_parser

fields: parsers

複数のパーサーを適用します。parsersa stringified JSON that is minified, escaped twice, enclosed in double quotes として指定します。

縮小するには、Code Beautify などのツールを使用します。二重エスケープするには、JSON formatter などのツールを使用します。

parsers のシンタックス:

config:
  - type: filestream
    ...
    processors:
    ...
      - add_fields:
          target: _message_parser
          fields:
            parsers: "{
	          "apply_all": <true-or-false>,
	          "parsers_list": [{
		        "_message_parser.type": "<parser-type>",
		        "_message_parser.name": "<parser-name>",
		        "_message_parser.pattern": "<pattern>"
	            }, {
		        "_message_parser.type": "<parser-type>",
		        "_message_parser.name": "<parser-name>",
		        "_message_parser.pattern": "<pattern>"
	            }, 
                {...}]
              }"
YML

parsers_list の各項目について:

  • _message_parser.type は、log4jlogbackjsongroktimestamp、または infra でなければなりません。_message_parser.type がない場合、ログコレクタはこのエントリをスキップします。 
  • _message_parser.name は、一意でなければなりません。_message_parser.name がない場合、ログコレクタはこのエントリをスキップします。
  • _message_parser.pattern は、前の行で説明されています。
  • parsers_list に重複する項目がある場合、ログコレクタは最初のエントリを使用し、重複を無視します。

縮小して二重エスケープする前の例:

            parsers: "{
	          "apply_all": false,
	          "parsers_list": [{
		        "_message_parser.type": "log4j",
		        "_message_parser.name": "log4j001",
		        "_message_parser.pattern": "%d {yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n"
	            }, {
		        "_message_parser.type": "logback",
		        "_message_parser.name": "logback001",
		        "_message_parser.pattern": "%-5level [%class]: %msg%n"
	            }, {
		        "_message_parser.type": "json",
		        "_message_parser.name": "json001",
		        "_message_parser.flatten_sep": "/"
	            }]
             }"
YML


縮小して二重エスケープした後の例:

            parsers: "{\\\"apply_all\\\":false,\\\"parsers_list\\\":[{\\\"_message_parser.type\\\":\\\"log4j\\\",\\\"_message_parser.name\\\":\\\"log4j001\\\",\\\"_message_parser.pattern\\\":\\\"%d {yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n\\\"},{\\\"_message_parser.type\\\":\\\"logback\\\",\\\"_message_parser.name\\\":\\\"logback001\\\",\\\"_message_parser.pattern\\\":\\\"%-5level [%class]: %msg%n\\\"},{\\\"_message_parser.type\\\":\\\"json\\\",\\\"_message_parser.name\\\":\\\"json001\\\",\\\"_message_parser.flatten_sep\\\":\\\"/\\\"}]}"
YML






target: _message_parser

fields: subparsers

各 Grok ログメッセージにサブパーサーを適用します。サブパーサーは、Grok ログメッセージのさまざまな部分からより多くのフィールドを抽出するのに役立ちます。たとえば、Grok パーサーを使用してフィールドを抽出して名前を付けた後、その名前付きフィールドを JSON パーサーで解析できます。

この設定は、collectors_values.yaml_message_parser.type: grok がある場合にのみ適用されます。

subparsersa stringified JSON that is minified, escaped twice, and enclosed in double quotes として指定します。

縮小するには、Code Beautify などのツールを使用します。二重エスケープするには、JSON formatter などのツールを使用します

subparsers のシンタックス:

config:
  - type: filestream
    ...
    processors:
    ...
      - add_fields:
          target: _message_parser
          fields:
            subparsers: "{
	          "parsersList": [{
		        "_message_parser.type": "<parser-type>",
		        "_message_parser.field": "<field-name-to-apply-subparser-to>",
		        "_message_parser.pattern": "<parser-pattern>"
	            }, {...}, 
                ]
              }"
YML

parsersList の各項目について:

  • _message_parser.type は、log4jlogbackjsongroktimestamp、または infra でなければなりません。_message_parser.type がない場合、ログコレクタはこのエントリをスキップします。 
  • _message_parser.field は、フォーカスされている Grok メッセージからすでに抽出されているフィールドの名前である必要があります。_message_parser.field がない場合、ログコレクタはこのエントリをスキップします。
  • _message_parser.pattern は、_message_parser.field で指定されたフィールドから抽出するデータに一致するパターンである必要があります。This parameter is only applicable if _message_parser.type is log4j, logback, or grok.
  • parsersList に重複する項目がある場合、ログコレクタは最後のエントリのみを使用します。
  • サブパーサーの解析が失敗した場合、このログメッセージの解析ステータスは false です。
  • 抽出されたフィールドに既存のフィールドと同じ名前を付けるようにサブパーサーを構成すると、フィールド名にプレフィックスが追加されます。 
  • サブパーサーを使用してタイムスタンプフィールドを抽出することはできません。

縮小して二重エスケープする前の例:

config:
  - type: filestream
    ...
    processors:
    ...
      - add_fields:
          target: _message_parser
          fields:
            type: grok
            pattern: 
            - '%{GREEDYDATA:k8Log}'
            timestamp_field: time
            timestamp_format: yyyy-MM-dd HH:mm:ss,SSS
       - add_fields:
          target: _message_parser
          fields:
            subparsers: "{
              "parsersList": [{
                "_message_parser.type": "infra",
                "_message_parser.field": "k8Log"
               }]
            }" 
YML

縮小して二重エスケープした後の例:

config:
  - type: filestream
    ...
    processors:
    ...
      - add_fields:
          target: _message_parser
          fields:
            type: grok
            pattern: 
            - '%{GREEDYDATA:k8Log}'
            timestamp_field: time
            timestamp_format: yyyy-MM-dd HH:mm:ss,SSS
       - add_fields:
          target: _message_parser
          fields:
            subparsers: "{\\\"parsersList\\\":[{\\\"_message_parser.type\\\":\\\"infra\\\",\\\"_message_parser.field\\\":\\\"k8Log\\\"}]}" 
YML

appdynamics-cloud-k8s-monitoring.logCollectorConfig.filebeatYaml.processors

このセクションは、プロセッサの定義と構成用です。Filebeat については、「Filter and enhance data with processors」を参照してください。

パラメータ説明

- add_cloud_metadata: ~

変更しないでください。
- add_kubernetes_metadata:変更しないでください。
- rename:

変更しないでください。

   - rename:
      fields:
        - from: "kubernetes.namespace"
          to: "kubernetes.namespace.name"
        - from: "kubernetes"
          to: "k8s"
        - from: k8s.annotations.appdynamics.lca/filebeat.parser
          to: "_message_parser"
        - from: "cloud.instance.id"
          to: "host.id"
      ignore_missing: true
      fail_on_error: false
 
YML
- add_fields:


target: k8s
fields: cluster.name

クラスタの名前。Cisco Cloud Observability に表示されているクラスタ名と一致する必要があります。

例:

add_fields:
  target: k8s
  fields:
  cluster.name: <cluster-name>
YML

cluster.name に基づいて、ログコレクタは次のフィールドを自動的に抽出します。k8s.pod.namek8s.namespace.namek8s.container.namek8s.node.name


target: k8s
fields: cluster.id

クラスタの ID。次のコマンドを実行して、クラスタ ID を取得できます。

kubectl get ns kube-system -o json
BASH

例:

add_fields:
  target: k8s
  fields:
  cluster.id: <cluster-id>
YML
- add_fields:



target: source
fields: name

変更しないでください。

例:

   - add_fields:
      target: source
      fields:
        name: log-agent
YML
- add_fields:



target: telemetry
fields: sdk.name

変更しないでください。

   - add_fields:
      target: telemetry
      fields:
        sdk.name: log-agent
YML

- script: 

変更しないでください。collectors-values.yaml でこれが欠落している場合は、追加する必要があります。<cluster-name> をクラスタの名前に置き換え、コロンのサフィックスは保持します。

  - script:
      lang: javascript
      source: >
        function process(event) {
          var podUID = event.Get("k8s.pod.uid");
          if (podUID) {
            event.Put("internal.container.encapsulating_object_id", "<cluster-name>:" + podUID);
          }
          return event;
        }
YML
- drop_fields:



fields: <list>
ignore_missing: <true_or_false>

Cisco Cloud Observability にエクスポートしないフィールドのリスト。

例:

   - drop_fields:
      fields: ["agent", "stream", "ecs", "input", "orchestrator", "k8s.annotations.appdynamics", "k8s.labels", "k8s.node.labels", "cloud"]
      ignore_missing: true
YML

appdynamics-cloud-k8s-monitoring.logCollectorConfig.filebeatYaml.output.otlploggrpc RENAMED

このセクションは、gRPC または HTTP のいずれかを介して OpenTelemetry Line Protocol(OTLP)ログデータモデルを使用して、OTLP レシーバに直接 Filebeat ログの OTLP 出力を構成します。 

パラメータ説明

include_resources RENAMED










変更しないでください。

include_resources:
 - k8s
 - source
 - host
 - container
 - log
 - telemetry
 - internal
 - os
YML
hosts

OTLP 受信側エンドポイント。デフォルトは otel-collector エンドポイント ["${APPD_OTELCOL_GRPC_RECEIVER_HOST}:${APPD_OTELCOL_GRPC_RECEIVER_PORT}"] です

ssl.enabled

OTLP レシーバへの Filebeat ログのエクスポートで SSL 通信を有効または無効にします。ここで SSL を有効または無効にしても、monitoring.ssl.enabled に影響はありません(OTLP レシーバへの Filebeat メトリックのエクスポートに関する SSL 設定)。有効な値:truefalse。デフォルト:false

例:

ssl.enabled: true
YML
ssl.certificate_authorities

ルート CA 証明書のリスト。

Linux の例:

ssl.certificate_authorities: ["/opt/appdynamics/certs/ca/ca.pem"]
YML

Windows の例:

C:/filebeat/certs/ca/ca.pem
YML
ssl.certificate

SSL クライアント認証の証明書のフルパス名。

Linux の例:

ssl.certificate: "/opt/appdynamics/certs/client/client.pem"
YML

Windows の例:

C:/filebeat/certs/client/client.pem
YML
ssl.key

プライベートクライアント証明書の SSL キーのフルパス名。

Linux の例:

ssl.key: "/opt/appdynamics/certs/client/client-key.pem"
YML

Windows の例:

C:/filebeat/certs/client/client-key.pem
YML
protocolエクスポートに使用するプロトコル。有効な値:httpgrpc。デフォルト:grpc

grpc_config DELETED


wait_for_ready

壊れた接続または到達不能なサーバーで RPC が試行されたときに実行するアクションを構成します。有効な値:truefalse。デフォルト:true

false で接続が TRANSIENT_FAILURE 状態の場合、RPC はすぐに失敗します。それ以外の場合、RPC クライアントは、接続が使用可能になるまで(または呼び出しがキャンセルされるかタイムアウトになるまで)呼び出しをブロックし、一時的なエラーが原因で失敗した場合は呼び出しを再試行します。  

protocol が grpc の場合は、データがワイヤに書き込まれた場合、サーバーがデータを処理しなかったことを示さない限り、再試行は行われません。「gRPC Wait for Ready Semantics」を参照してください。

batch_size

単一のバッチで一緒に送信されるログレコードの数。これにより、パフォーマンスが向上します。デフォルトおよび強く推奨される値:1000。 

ベストプラクティスは、batch_sizemax_bytes の両方を指定することです。実際のバッチサイズは、バッチ内のバイト数が max_bytes より大きい場合、batch_size より小さいことに注意してください。

max_bytes

パブリッシュされる OTLP ログパケット(バッチに存在するすべてのログレコードを含む)のバイト数が max_bytes を超えると、ログコレクタはバッチを分割します。max_bytes が null の場合、ログコレクタはバッチを分割しません。

Strongly recommended value: 1000000. この値は、科学的 E 表記で 1e+06 と指定することもできます。

otel-collector で 413 レスポンスコードエラーが発生した場合は、max_bytes および batch_size を設定して otel-collector に送信されるログバッチサイズを制限します。

summary_debug_logs_interval

logging.level がデバッグに設定されている場合に出力される要約ログの期間(秒単位)を指定します。有効な値:10ms、2s、3m など。

要約ログの例:

{"log.level":"debug","@timestamp":"2022-10-10T03:15:51.648+0530","log.logger":"otlploggrpc","log.origin":{"file.name":"otlploggrpc/debug_metrics_logger.go","file.line":68},"message":"100 logs serialized by OTLP Log gRPC Exporter in 1.120411ms","service.name":"filebeat","ecs.version":"1.6.0"}

{"log.level":"debug","@timestamp":"2022-10-10T03:15:51.652+0530","log.logger":"otlploggrpc","log.origin":{"file.name":"otlplog/debug_metrics_logger.go","file.line":73},"message":"100 logs exported by OTLP Log gRPC Exporter in 4.333174ms","service.name":"filebeat","ecs.version":"1.6.0"} 
CODE

appdynamics-cloud-k8s-monitoring.logCollectorConfig.filebeatYaml.filebeat.registry

このセクションには、filebeat.registry.pathfilebeat.registry.file_permissions の 2 つのキーがあります。

パラメータ説明

filebeat.registry.path

Filebeat レジストリファイル名。変更しないでください。

例:

filebeat.registry.path: registry1
YML
filebeat.registry.file_permissions
Filebeat レジストリファイルの権限。変更しないでください。

例:

filebeat.registry.file_permissions: 0640
YML

appdynamics-cloud-k8s-monitoring.logCollectorConfig.filebeatYaml.path.data

このセクションでは、Filebeat がレジストリファイルを検索する場所を構成します。「Configure project paths」を参照してください。

パラメータ説明

path.data

Filebeat レジストリのマウント場所。この場所は固定されていて、更新するべきではありませんが、この設定が collectors-values.yaml に見つからない場合、ログコレクタが再起動すると、古い(すでに収集された)ログが収集されます。

以下のコードスニペットは、追加する場所を正確に理解できるように、隣接する行のコンテキストに新しい行を示しています。

Linux の例:

logCollectorConfig:
  filebeatYaml: |-
    ...
    filebeat.registry.path: registry7
    filebeat.registry.file_permissions: 0640
    path.data: /opt/appdynamics/logcollector-agent/data
YML

Windows の例:

logCollectorConfig:
  filebeatYaml: |-
    ...
    filebeat.registry.path: registry7
    filebeat.registry.file_permissions: 0640
    path.data: C:/ProgramData/filebeat/data
YML

appdynamics-cloud-k8s-monitoring.logCollectorConfig.filebeatYaml.logging

このセクションでは、Filebeat アクティビティをログに記録するようにログコレクタを構成します。

パラメータ説明

level

ロギングレベル。有効な値:infodebugwarnerror。デフォルト:info

to_filesファイルへの Filebeat ログの書き込みを有効または無効にします。有効な値:truefalse。デフォルト:false
files

pathログファイルへのパス。デフォルトでは60000。 /opt/appdynamics/logcollector-agent/log

nameログファイルのプレフィックス。デフォルトでは60000。 lca-log

keepfiles

Filebeat ロギングが有効になっている場合に保持するログファイルの数。デフォルト:5


permissionsログファイルに対するファイル権限。デフォルトでは60000。 0640
selectors

一致するコンポーネントのみにロギングを制限するセレクタ(フィルタ)。有効な値:monitoringotlp。デフォルトでは60000。 []

metrics 

enabledメトリックのロギングを有効または無効にします。有効な値:truefalse。デフォルト:falsetrue の場合は、logging.files.enabledtrue の場合にログコレクタはメトリックをログファイルに書き込み、logging.files.enabledfalse の場合にコンソールに書き込みます。

periodメトリック収集の頻度。有効な値:0-99s0-99m。デフォルト:30s(30 秒)。logging.metrics.enabledfalse の場合は無視されます。

appdynamics-cloud-k8s-monitoring.logCollectorConfig.filebeatYaml.monitoring

このセクションは、メトリックをログに記録するようにログコレクタを構成するためのものです。

パラメータ説明

enabled

ログコレクタメトリックのバックエンドへのエクスポートを有効または無効にします。デフォルト:false

otlpmetric RENAMED


このセクションには、gRPC または HTTP API のいずれかを介して、OTLP メトリックデータモデルを使用して、ログコレクタ独自のメトリックを OTLP レシーバに直接エクスポートするための設定が含まれています。


endpoint

OTLP 受信側エンドポイント。デフォルトは otel-collector エンドポイント "${APPD_OTELCOL_GRPC_RECEIVER_HOST}:${APPD_OTELCOL_GRPC_RECEIVER_PORT}" です


protocolエクスポートに使用するプロトコル。有効な値:httpgrpc。デフォルト:grpc

collect_period内部収集期間。デフォルト:10s

report_periodOTLP バックエンドへのレポート期間。デフォルト:60s

resource_attrs

メトリックパケットに追加されるリソース属性のリスト。デフォルト:なし(空のリスト)。

例:

resource_attrs:
  - key: resource-key-1
    value: resource-value-1
  - key: resource-key-2
    value: resource-value-2     
YML


k8s.cluster.name

クラスタ名。

例:

k8s.cluster.name: "<cluster-name>"   
YML


k8s.pod.name: "${POD_NAME}"

ポッド名。変更しないでください。

例:

k8s.pod.name: "${POD_NAME}"
YML

metrics

キャプチャするメトリックのリスト。このリストが空の場合、ログコレクタはすべてのメトリックをキャプチャします。このパラメータを省略すると、ログコレクタは、例のデフォルトのメトリックリストをキャプチャします。

例:

    metrics:
      - beat.memstats.memory_alloc
      - filebeat.events.active
      - filebeat.harvester.running
      - filebeat.harvester.skipped
      - filebeat.input.log.files.truncated
      - libbeat.output.read.errors
      - libbeat.output.write.bytes
      - libbeat.output.write.errors
      - system.load.norm.5
      - system.load.norm.15
YML

retryメトリックバックエンドへのエクスポートが失敗したときに使用されるメトリックエクスポータの再試行設定。


enabled失敗したバッチの再試行を有効または無効にします。有効な値:truefalse。デフォルト:false


initial_interval最初の失敗後、再試行する前に待機する時間。単位サフィックス付きの int64 として指定します。たとえば、500ms のようになります。


max_interval連続する失敗間の最大待機時間。単位サフィックス付きの int64 として指定します。たとえば、500ms のようになります。この値に達すると、連続した再試行間の遅延は常にこの値になります。


max_elapsed_timeリクエストまたはバッチの送信にかかった最大時間(再試行を含む)。この値に達すると、データは破棄されます。

ssl.enabled

OTLP レシーバへの Filebeat メトリックのエクスポートで SSL 通信を有効または無効にします。ここで SSL を有効または無効にしても、output.otlplog.ssl.enabled に影響はありません(OTLP レシーバへの Filebeat ログのエクスポートに関する SSL 設定)。有効な値:truefalse。デフォルト:false

設定例

global:
  clusterName: <ClusterName>
appdynamics-otel-collector:
  clientId: <client-id>
  clientSecret: <client-secret>
  endpoint: <endpoint>
  tokenUrl: <token-url>
  
  spec:
    image: <image-url>
    imagePullPolicy: IfNotPresent
  config:
    exporters:
      logging:
        loglevel: debug
  
appdynamics-cloud-k8s-monitoring:
  install:
    logCollector: true
    defaultInfraCollectors: false
    clustermon: false
  
  clustermonPod:
    image: <image-url>
    nodeSelector:
      kubernetes.io/os: linux
  
  inframonPod:
    image: <image-url>
    nodeSelector:
      kubernetes.io/os: linux
  
  logCollectorPod:
    imagePullPolicy: IfNotPresent
  
  logCollectorConfig:
    filebeatYaml: |-
      filebeat.autodiscover:
        providers:
          - type: kubernetes
            node: ${NODE_NAME}
            labels.dedot: false
            annotations.dedot: false
            hints.enabled: true
            hints.default_config.enabled: false
            templates:
              - condition:
                  equals:
                    kubernetes.container.name: log-generator-logback
                config:
                  - type: filestream
                    id: fsid-${data.kubernetes.pod.name}-${data.kubernetes.container.id}
                    close_removed: false
                    clean_removed: false
                    paths:
                      - /var/log/containers/${data.kubernetes.pod.name}*${data.kubernetes.container.id}.log
                    parsers:
                      - container:
                          stream: all
                          format: auto
                      - multiline:
                          type: pattern
                          pattern: "^[0-9]{4}"
                          negate: true
                          match: after
                    prospector.scanner.symlinks: true
                    processors:
                      - add_fields:
                          target: appd
                          fields:
                              log.format: logs:logback_logs
                      - add_fields:
                          target: _message_parser
                          fields:
                            type: logback
                            pattern: "%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n"
      processors:
        - add_cloud_metadata: ~
        - add_kubernetes_metadata:
            in_cluster: true
            host: ${NODE_NAME}
            matchers:
              - logs_path:
                  logs_path: "/var/log/containers/"
        - copy_fields:
            fields:
              - from: "kubernetes.deployment.name"
                to: "kubernetes.workload.name"
              - from: "kubernetes.daemonset.name"
                to: "kubernetes.workload.name"
              - from: "kubernetes.statefulset.name"
                to: "kubernetes.workload.name"
              - from: "kubernetes.replicaset.name"
                to: "kubernetes.workload.name"
              - from: "kubernetes.cronjob.name"
                to: "kubernetes.workload.name"
              - from: "kubernetes.job.name"
                to: "kubernetes.workload.name"
            fail_on_error: false
            ignore_missing: true
        - rename:
            fields:
              - from: "kubernetes.namespace"
                to: "kubernetes.namespace.name"
              - from: "kubernetes"
                to: "k8s"
              - from: k8s.annotations.appdynamics.lca/filebeat.parser
                to: "_message_parser"
              - from: "cloud.instance.id"
                to: "host.id"
            ignore_missing: true
            fail_on_error: false
        - add_fields:
            target: k8s
            fields:
              cluster.name: <ClusterName>
        - add_fields:
            target: k8s
            fields:
              cluster.id: <ClusterId>
        - add_fields:
            target: source
            fields:
              name: log-agent
        - add_fields:
            target: telemetry
            fields:
              sdk.name: log-agent
        - add_fields:
            target: os
            fields:
              type: linux
        - script:
            lang: javascript
            source: >
              function process(event) {
                var podUID = event.Get("k8s.pod.uid");
                if (podUID) {
                  event.Put("internal.container.encapsulating_object_id", "<ClusterId>:" + podUID);
                }
                return event;
              }
        - drop_fields:
            fields: ["agent", "stream", "ecs", "input", "orchestrator", "k8s.annotations.appdynamics", "k8s.labels", "k8s.node.labels", "cloud"]
            ignore_missing: true
      output.otlploggrpc:
        include_resources:
          - k8s
          - source
          - host
          - container
          - log
          - telemetry
          - internal
          - os
        hosts: ["${APPD_OTELCOL_GRPC_RECEIVER_HOST}:14317"]
        worker: 1
        max_bytes: 1e+06
        ssl.enabled: false
        wait_for_ready: true
        batch_size: 1000
        summary_debug_logs_interval: 10s
      filebeat.registry.path: registry1
      filebeat.registry.file_permissions: 0640
      path.data: /opt/appdynamics/logcollector-agent/data
      logging:
        level: info
        to_files: false
        files:
          path: /opt/appdynamics/logcollector-agent/log
          name: lca-log
          keepfiles: 5
          permissions: 0640
        selectors: []
        metrics:
          enabled: false
          period: 30s
      monitoring:
        enabled: true
        otlpmetric:
          endpoint: ${APPD_OTELCOL_GRPC_RECEIVER_HOST}:${APPD_OTELCOL_GRPC_RECEIVER_PORT}
          protocol: grpc
          collect_period: 30s
          report_period:
          resource_attrs:
            k8s.cluster.name: "<ClusterName>"
            k8s.cluster.id: "<ClusterId>"
            k8s.pod.name: "${POD_NAME}"
            k8s.pod.uid: "${POD_UID}"
            service.instance.id: "${POD_UID}"
            service.version: "23.4.0-567"
            source.name: "log-agent"
            service.namespace: "log-agent"
            service.name: "log-collector-agent"
          metrics:
            - beat.memstats.memory_alloc
            - filebeat.events.active
            - filebeat.harvester.running
            - filebeat.harvester.skipped
            - filebeat.input.log.files.truncated
            - libbeat.output.read.errors
            - libbeat.output.write.bytes
            - libbeat.output.write.errors
            - system.load.norm.5
            - system.load.norm.15
            - libbeat.pipeline.events.filtered
          retry:
            enabled: true
            initial_interval: 1s
            max_interval: 1m
            max_elapsed_time: 5m
          ssl.enabled: false
YML
global:
    clusterName: <ClusterName>
  appdynamics-otel-collector:
    clientId: <client-id>
    clientSecret: <client-secret>
    endpoint: <endpoint>
    tokenUrl: <token-url>
    
    spec:
      image: <image-url>
      imagePullPolicy: IfNotPresent
    config:
      exporters:
        logging:
          loglevel: debug
    
  appdynamics-cloud-k8s-monitoring:
    install:
      logCollector: true
      defaultInfraCollectors: false
      clustermon: false
    
    clustermonPod:
      image: <image-url>
      nodeSelector:
        kubernetes.io/os: linux
    
    inframonPod:
      image: <image-url>
      nodeSelector:
        kubernetes.io/os: linux
    
    logCollectorPod:
      imagePullPolicy: IfNotPresent
      env:
        linux:
          image: <image-url>
    
    logCollectorConfig:
      os: [linux]
      env:
        linux:
          filebeatYaml: |-
            filebeat.autodiscover:
              providers:
                - type: kubernetes
                  node: ${NODE_NAME}
                  labels.dedot: false
                  annotations.dedot: false
                  hints.enabled: true
                  hints.default_config.enabled: false
                  templates:
                    - condition:
                        equals:
                          kubernetes.container.name: log-generator-logback
                      config:
                        - type: filestream
                          id: fsid-${data.kubernetes.pod.name}-${data.kubernetes.container.id}
                          close_removed: false
                          clean_removed: false
                          paths:
                            - /var/log/containers/${data.kubernetes.pod.name}*${data.kubernetes.container.id}.log
                          parsers:
                            - container:
                                stream: all
                                format: auto
                            - multiline:
                                type: pattern
                                pattern: "^[0-9]{4}"
                                negate: true
                                match: after
                          prospector.scanner.symlinks: true
                          processors:
                            - add_fields:
                                target: appd
                                fields:
                                    log.format: logs:logback_logs
                            - add_fields:
                                target: _message_parser
                                fields:
                                  type: logback
                                  pattern: "%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n"
            processors:
              - add_cloud_metadata: ~
              - add_kubernetes_metadata:
                  in_cluster: true
                  host: ${NODE_NAME}
                  matchers:
                    - logs_path:
                        logs_path: "/var/log/containers/"
              - copy_fields:
                  fields:
                    - from: "kubernetes.deployment.name"
                      to: "kubernetes.workload.name"
                    - from: "kubernetes.daemonset.name"
                      to: "kubernetes.workload.name"
                    - from: "kubernetes.statefulset.name"
                      to: "kubernetes.workload.name"
                    - from: "kubernetes.replicaset.name"
                      to: "kubernetes.workload.name"
                    - from: "kubernetes.cronjob.name"
                      to: "kubernetes.workload.name"
                    - from: "kubernetes.job.name"
                      to: "kubernetes.workload.name"
                  fail_on_error: false
                  ignore_missing: true
              - rename:
                  fields:
                    - from: "kubernetes.namespace"
                      to: "kubernetes.namespace.name"
                    - from: "kubernetes"
                      to: "k8s"
                    - from: k8s.annotations.appdynamics.lca/filebeat.parser
                      to: "_message_parser"
                    - from: "cloud.instance.id"
                      to: "host.id"
                  ignore_missing: true
                  fail_on_error: false
              - add_fields:
                  target: k8s
                  fields:
                    cluster.name: <ClusterName>
              - add_fields:
                  target: k8s
                  fields:
                    cluster.id: <ClusterId>
              - add_fields:
                  target: source
                  fields:
                    name: log-agent
              - add_fields:
                  target: telemetry
                  fields:
                    sdk.name: log-agent
              - add_fields:
                  target: os
                  fields:
                    type: linux
              - script:
                  lang: javascript
                  source: >
                    function process(event) {
                      var podUID = event.Get("k8s.pod.uid");
                      if (podUID) {
                        event.Put("internal.container.encapsulating_object_id", "<ClusterId>:" + podUID);
                      }
                      return event;
                    }
              - drop_fields:
                  fields: ["agent", "stream", "ecs", "input", "orchestrator", "k8s.annotations.appdynamics", "k8s.labels", "k8s.node.labels", "cloud"]
                  ignore_missing: true
            output.otlploggrpc:
              include_resources:
                - k8s
                - source
                - host
                - container
                - log
                - telemetry
                - internal
                - os
              hosts: ["${APPD_OTELCOL_GRPC_RECEIVER_HOST}:14317"]
              worker: 1
              max_bytes: 1e+06
              ssl.enabled: false
              wait_for_ready: true
              batch_size: 1000
              summary_debug_logs_interval: 10s
            filebeat.registry.path: registry1
            filebeat.registry.file_permissions: 0640
            path.data: /opt/appdynamics/logcollector-agent/data
            logging:
              level: info
              to_files: false
              files:
                path: /opt/appdynamics/logcollector-agent/log
                name: lca-log
                keepfiles: 5
                permissions: 0640
              selectors: []
              metrics:
                enabled: false
                period: 30s
            monitoring:
              enabled: true
              otlpmetric:
                endpoint: ${APPD_OTELCOL_GRPC_RECEIVER_HOST}:${APPD_OTELCOL_GRPC_RECEIVER_PORT}
                protocol: grpc
                collect_period: 30s
                report_period:
                resource_attrs:
                  k8s.cluster.name: "<ClusterName>"
                  k8s.cluster.id: "<ClusterId>"
                  k8s.pod.name: "${POD_NAME}"
                  k8s.pod.uid: "${POD_UID}"
                  service.instance.id: "${POD_UID}"
                  service.version: "23.4.0-567"
                  source.name: "log-agent"
                  service.namespace: "log-agent"
                  service.name: "log-collector-agent"
                metrics:
                  - beat.memstats.memory_alloc
                  - filebeat.events.active
                  - filebeat.harvester.running
                  - filebeat.harvester.skipped
                  - filebeat.input.log.files.truncated
                  - libbeat.output.read.errors
                  - libbeat.output.write.bytes
                  - libbeat.output.write.errors
                  - system.load.norm.5
                  - system.load.norm.15
                  - libbeat.pipeline.events.filtered
                retry:
                  enabled: true
                  initial_interval: 1s
                  max_interval: 1m
                  max_elapsed_time: 5m
                ssl.enabled: false
YML
global:
    clusterName: <ClusterName>
  appdynamics-otel-collector:
    clientId: <client-id>
    clientSecret: <client-secret>
    endpoint: <endpoint>
    tokenUrl: <token-url>
    
    spec:
      image: <image-url>
      imagePullPolicy: IfNotPresent
    config:
      exporters:
        logging:
          loglevel: debug
    
  appdynamics-cloud-k8s-monitoring:
    install:
      logCollector: true
      defaultInfraCollectors: false
      clustermon: false
    
    clustermonPod:
      image: <image-url>
      nodeSelector:
        kubernetes.io/os: linux
    
    inframonPod:
      image: <image-url>
      nodeSelector:
        kubernetes.io/os: linux
    
    logCollectorPod:
      imagePullPolicy: IfNotPresent
      env:
        windows:
          image: <image-url>
    
    logCollectorConfig:
      os: [windows]
      env:
        windows:
          filebeatYaml: |-
            filebeat.autodiscover:
              providers:
                - type: kubernetes
                  node: ${NODE_NAME}
                  labels.dedot: false
                  annotations.dedot: false
                  hints.enabled: true
                  hints.default_config.enabled: false
                  templates:
                    - condition:
                        equals:
                          kubernetes.container.name: log-generator-logback
                      config:
                        - type: filestream
                          id: fsid-${data.kubernetes.pod.name}-${data.kubernetes.container.id}
                          close_removed: false
                          clean_removed: false
                          paths:
                            - C:/var/log/containers/${data.kubernetes.pod.name}*${data.kubernetes.container.id}.log
                          parsers:
                            - container:
                                stream: all
                                format: auto
                            - multiline:
                                type: pattern
                                pattern: "^[0-9]{4}"
                                negate: true
                                match: after
                          prospector.scanner.symlinks: true
                          processors:
                            - add_fields:
                                target: appd
                                fields:
                                    log.format: logs:logback_logs
                            - add_fields:
                                target: _message_parser
                                fields:
                                  type: logback
                                  pattern: "%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n"
            processors:
              - add_cloud_metadata: ~
              - add_kubernetes_metadata:
                  in_cluster: true
                  host: ${NODE_NAME}
                  matchers:
                    - logs_path:
                        logs_path: "C:/ProgramData/docker/containers/"
              - copy_fields:
                  fields:
                    - from: "kubernetes.deployment.name"
                      to: "kubernetes.workload.name"
                    - from: "kubernetes.daemonset.name"
                      to: "kubernetes.workload.name"
                    - from: "kubernetes.statefulset.name"
                      to: "kubernetes.workload.name"
                    - from: "kubernetes.replicaset.name"
                      to: "kubernetes.workload.name"
                    - from: "kubernetes.cronjob.name"
                      to: "kubernetes.workload.name"
                    - from: "kubernetes.job.name"
                      to: "kubernetes.workload.name"
                  fail_on_error: false
                  ignore_missing: true
              - rename:
                  fields:
                    - from: "kubernetes.namespace"
                      to: "kubernetes.namespace.name"
                    - from: "kubernetes"
                      to: "k8s"
                    - from: k8s.annotations.appdynamics.lca/filebeat.parser
                      to: "_message_parser"
                    - from: "cloud.instance.id"
                      to: "host.id"
                  ignore_missing: true
                  fail_on_error: false
              - add_fields:
                  target: k8s
                  fields:
                    cluster.name: <ClusterName>
              - add_fields:
                  target: k8s
                  fields:
                    cluster.id: <ClusterId>
              - add_fields:
                  target: source
                  fields:
                    name: log-agent
              - add_fields:
                  target: telemetry
                  fields:
                    sdk.name: log-agent
              - add_fields:
                  target: os
                  fields:
                    type: windows
              - script:
                  lang: javascript
                  source: >
                    function process(event) {
                      var podUID = event.Get("k8s.pod.uid");
                      if (podUID) {
                        event.Put("internal.container.encapsulating_object_id", "<ClusterId>:" + podUID);
                      }
                      return event;
                    }
              - drop_fields:
                  fields: ["agent", "stream", "ecs", "input", "orchestrator", "k8s.annotations.appdynamics", "k8s.labels", "k8s.node.labels", "cloud"]
                  ignore_missing: true
            output.otlploggrpc:
              include_resources:
                - k8s
                - source
                - host
                - container
                - log
                - telemetry
                - internal
                - os
              hosts: ["${APPD_OTELCOL_GRPC_RECEIVER_HOST}:14317"]
              worker: 1
              max_bytes: 1e+06
              ssl.enabled: false
              wait_for_ready: true
              batch_size: 1000
              summary_debug_logs_interval: 10s
            filebeat.registry.path: registry1
            filebeat.registry.file_permissions: 0640
            path.data: C:/ProgramData/filebeat/data
            logging:
              level: info
              to_files: false
              files:
                path: C:/ProgramData/filebeat/log
                name: lca-log
                keepfiles: 5
                permissions: 0640
              selectors: []
              metrics:
                enabled: false
                period: 30s
            monitoring:
              enabled: true
              otlpmetric:
                endpoint: ${APPD_OTELCOL_GRPC_RECEIVER_HOST}:${APPD_OTELCOL_GRPC_RECEIVER_PORT}
                protocol: grpc
                collect_period: 30s
                report_period:
                resource_attrs:
                  k8s.cluster.name: "<ClusterName>"
                  k8s.cluster.id: "<ClusterId>"
                  k8s.pod.name: "${POD_NAME}"
                  k8s.pod.uid: "${POD_UID}"
                  service.instance.id: "${POD_UID}"
                  service.version: "23.4.0-567"
                  source.name: "log-agent"
                  service.namespace: "log-agent"
                  service.name: "log-collector-agent"
                metrics:
                  - beat.memstats.memory_alloc
                  - filebeat.events.active
                  - filebeat.harvester.running
                  - filebeat.harvester.skipped
                  - filebeat.input.log.files.truncated
                  - libbeat.output.read.errors
                  - libbeat.output.write.bytes
                  - libbeat.output.write.errors
                  - system.load.norm.5
                  - system.load.norm.15
                  - libbeat.pipeline.events.filtered
                retry:
                  enabled: true
                  initial_interval: 1s
                  max_interval: 1m
                  max_elapsed_time: 5m
                ssl.enabled: false
YML
global:
    clusterName: <ClusterName>
  appdynamics-otel-collector:
    clientId: <client-id>
    clientSecret: <client-secret>
    endpoint: <endpoint>
    tokenUrl: <token-url>
    
    spec:
      image: <image-url>
      imagePullPolicy: IfNotPresent
    config:
      exporters:
        logging:
          loglevel: debug
    
  appdynamics-cloud-k8s-monitoring:
    install:
      logCollector: true
      defaultInfraCollectors: false
      clustermon: false
    
    clustermonPod:
      image: <image-url>
      nodeSelector:
        kubernetes.io/os: linux
    
    inframonPod:
      image: <image-url>
      nodeSelector:
        kubernetes.io/os: linux
    
    logCollectorPod:
      imagePullPolicy: IfNotPresent
      env:
        windows:
          image: <image-url>
        linux:
          image: <image-url>          
    
    logCollectorConfig:
      os: [linux, windows]
      env:
        linux:
          filebeatYaml: |-
            filebeat.autodiscover:
              providers:
                - type: kubernetes
                  node: ${NODE_NAME}
                  labels.dedot: false
                  annotations.dedot: false
                  hints.enabled: true
                  hints.default_config.enabled: false
                  templates:
                    - condition:
                        equals:
                          kubernetes.container.name: log-generator-logback
                      config:
                        - type: filestream
                          id: fsid-${data.kubernetes.pod.name}-${data.kubernetes.container.id}
                          close_removed: false
                          clean_removed: false
                          paths:
                            - /var/log/containers/${data.kubernetes.pod.name}*${data.kubernetes.container.id}.log
                          parsers:
                            - container:
                                stream: all
                                format: auto
                            - multiline:
                                type: pattern
                                pattern: "^[0-9]{4}"
                                negate: true
                                match: after
                          prospector.scanner.symlinks: true
                          processors:
                            - add_fields:
                                target: appd
                                fields:
                                    log.format: logs:logback_logs
                            - add_fields:
                                target: _message_parser
                                fields:
                                  type: logback
                                  pattern: "%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n"
            processors:
              - add_cloud_metadata: ~
              - add_kubernetes_metadata:
                  in_cluster: true
                  host: ${NODE_NAME}
                  matchers:
                    - logs_path:
                        logs_path: "/var/log/containers/"
              - copy_fields:
                  fields:
                    - from: "kubernetes.deployment.name"
                      to: "kubernetes.workload.name"
                    - from: "kubernetes.daemonset.name"
                      to: "kubernetes.workload.name"
                    - from: "kubernetes.statefulset.name"
                      to: "kubernetes.workload.name"
                    - from: "kubernetes.replicaset.name"
                      to: "kubernetes.workload.name"
                    - from: "kubernetes.cronjob.name"
                      to: "kubernetes.workload.name"
                    - from: "kubernetes.job.name"
                      to: "kubernetes.workload.name"
                  fail_on_error: false
                  ignore_missing: true
              - rename:
                  fields:
                    - from: "kubernetes.namespace"
                      to: "kubernetes.namespace.name"
                    - from: "kubernetes"
                      to: "k8s"
                    - from: k8s.annotations.appdynamics.lca/filebeat.parser
                      to: "_message_parser"
                    - from: "cloud.instance.id"
                      to: "host.id"
                  ignore_missing: true
                  fail_on_error: false
              - add_fields:
                  target: k8s
                  fields:
                    cluster.name: <ClusterName>
              - add_fields:
                  target: k8s
                  fields:
                    cluster.id: <ClusterId>
              - add_fields:
                  target: source
                  fields:
                    name: log-agent
              - add_fields:
                  target: telemetry
                  fields:
                    sdk.name: log-agent
              - add_fields:
                  target: os
                  fields:
                    type: linux
              - script:
                  lang: javascript
                  source: >
                    function process(event) {
                      var podUID = event.Get("k8s.pod.uid");
                      if (podUID) {
                        event.Put("internal.container.encapsulating_object_id", "<ClusterId>:" + podUID);
                      }
                      return event;
                    }
              - drop_fields:
                  fields: ["agent", "stream", "ecs", "input", "orchestrator", "k8s.annotations.appdynamics", "k8s.labels", "k8s.node.labels", "cloud"]
                  ignore_missing: true
            output.otlploggrpc:
              include_resources:
                - k8s
                - source
                - host
                - container
                - log
                - telemetry
                - internal
                - os
              hosts: ["${APPD_OTELCOL_GRPC_RECEIVER_HOST}:14317"]
              worker: 1
              max_bytes: 1e+06
              ssl.enabled: false
              wait_for_ready: true
              batch_size: 1000
              summary_debug_logs_interval: 10s
            filebeat.registry.path: registry1
            filebeat.registry.file_permissions: 0640
            path.data: /opt/appdynamics/logcollector-agent/data
            logging:
              level: info
              to_files: false
              files:
                path: /opt/appdynamics/logcollector-agent/log
                name: lca-log
                keepfiles: 5
                permissions: 0640
              selectors: []
              metrics:
                enabled: false
                period: 30s
            monitoring:
              enabled: true
              otlpmetric:
                endpoint: ${APPD_OTELCOL_GRPC_RECEIVER_HOST}:${APPD_OTELCOL_GRPC_RECEIVER_PORT}
                protocol: grpc
                collect_period: 30s
                report_period:
                resource_attrs:
                  k8s.cluster.name: "<ClusterName>"
                  k8s.cluster.id: "<ClusterId>"
                  k8s.pod.name: "${POD_NAME}"
                  k8s.pod.uid: "${POD_UID}"
                  service.instance.id: "${POD_UID}"
                  service.version: "23.4.0-567"
                  source.name: "log-agent"
                  service.namespace: "log-agent"
                  service.name: "log-collector-agent"
                metrics:
                  - beat.memstats.memory_alloc
                  - filebeat.events.active
                  - filebeat.harvester.running
                  - filebeat.harvester.skipped
                  - filebeat.input.log.files.truncated
                  - libbeat.output.read.errors
                  - libbeat.output.write.bytes
                  - libbeat.output.write.errors
                  - system.load.norm.5
                  - system.load.norm.15
                  - libbeat.pipeline.events.filtered
                retry:
                  enabled: true
                  initial_interval: 1s
                  max_interval: 1m
                  max_elapsed_time: 5m
                ssl.enabled: false      
        windows:
          filebeatYaml: |-
            filebeat.autodiscover:
              providers:
                - type: kubernetes
                  node: ${NODE_NAME}
                  labels.dedot: false
                  annotations.dedot: false
                  hints.enabled: true
                  hints.default_config.enabled: false
                  templates:
                    - condition:
                        equals:
                          kubernetes.container.name: log-generator-logback
                      config:
                        - type: filestream
                          id: fsid-${data.kubernetes.pod.name}-${data.kubernetes.container.id}
                          close_removed: false
                          clean_removed: false
                          paths:
                            - C:/var/log/containers/${data.kubernetes.pod.name}*${data.kubernetes.container.id}.log
                          parsers:
                            - container:
                                stream: all
                                format: auto
                            - multiline:
                                type: pattern
                                pattern: "^[0-9]{4}"
                                negate: true
                                match: after
                          prospector.scanner.symlinks: true
                          processors:
                            - add_fields:
                                target: appd
                                fields:
                                    log.format: logs:logback_logs
                            - add_fields:
                                target: _message_parser
                                fields:
                                  type: logback
                                  pattern: "%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n"
            processors:
              - add_cloud_metadata: ~
              - add_kubernetes_metadata:
                  in_cluster: true
                  host: ${NODE_NAME}
                  matchers:
                    - logs_path:
                        logs_path: "C:/ProgramData/docker/containers/"
              - copy_fields:
                  fields:
                    - from: "kubernetes.deployment.name"
                      to: "kubernetes.workload.name"
                    - from: "kubernetes.daemonset.name"
                      to: "kubernetes.workload.name"
                    - from: "kubernetes.statefulset.name"
                      to: "kubernetes.workload.name"
                    - from: "kubernetes.replicaset.name"
                      to: "kubernetes.workload.name"
                    - from: "kubernetes.cronjob.name"
                      to: "kubernetes.workload.name"
                    - from: "kubernetes.job.name"
                      to: "kubernetes.workload.name"
                  fail_on_error: false
                  ignore_missing: true
              - rename:
                  fields:
                    - from: "kubernetes.namespace"
                      to: "kubernetes.namespace.name"
                    - from: "kubernetes"
                      to: "k8s"
                    - from: k8s.annotations.appdynamics.lca/filebeat.parser
                      to: "_message_parser"
                    - from: "cloud.instance.id"
                      to: "host.id"
                  ignore_missing: true
                  fail_on_error: false
              - add_fields:
                  target: k8s
                  fields:
                    cluster.name: <ClusterName>
              - add_fields:
                  target: k8s
                  fields:
                    cluster.id: <ClusterId>
              - add_fields:
                  target: source
                  fields:
                    name: log-agent
              - add_fields:
                  target: telemetry
                  fields:
                    sdk.name: log-agent
              - add_fields:
                  target: os
                  fields:
                    type: windows
              - script:
                  lang: javascript
                  source: >
                    function process(event) {
                      var podUID = event.Get("k8s.pod.uid");
                      if (podUID) {
                        event.Put("internal.container.encapsulating_object_id", "<ClusterId>:" + podUID);
                      }
                      return event;
                    }
              - drop_fields:
                  fields: ["agent", "stream", "ecs", "input", "orchestrator", "k8s.annotations.appdynamics", "k8s.labels", "k8s.node.labels", "cloud"]
                  ignore_missing: true
            output.otlploggrpc:
              include_resources:
                - k8s
                - source
                - host
                - container
                - log
                - telemetry
                - internal
                - os
              hosts: ["${APPD_OTELCOL_GRPC_RECEIVER_HOST}:14317"]
              worker: 1
              max_bytes: 1e+06
              ssl.enabled: false
              wait_for_ready: true
              batch_size: 1000
              summary_debug_logs_interval: 10s
            filebeat.registry.path: registry1
            filebeat.registry.file_permissions: 0640
            path.data: C:/ProgramData/filebeat/data
            logging:
              level: info
              to_files: false
              files:
                path: C:/ProgramData/filebeat/log
                name: lca-log
                keepfiles: 5
                permissions: 0640
              selectors: []
              metrics:
                enabled: false
                period: 30s
            monitoring:
              enabled: true
              otlpmetric:
                endpoint: ${APPD_OTELCOL_GRPC_RECEIVER_HOST}:${APPD_OTELCOL_GRPC_RECEIVER_PORT}
                protocol: grpc
                collect_period: 30s
                report_period:
                resource_attrs:
                  k8s.cluster.name: "<ClusterName>"
                  k8s.cluster.id: "<ClusterId>"
                  k8s.pod.name: "${POD_NAME}"
                  k8s.pod.uid: "${POD_UID}"
                  service.instance.id: "${POD_UID}"
                  service.version: "23.4.0-567"
                  source.name: "log-agent"
                  service.namespace: "log-agent"
                  service.name: "log-collector-agent"
                metrics:
                  - beat.memstats.memory_alloc
                  - filebeat.events.active
                  - filebeat.harvester.running
                  - filebeat.harvester.skipped
                  - filebeat.input.log.files.truncated
                  - libbeat.output.read.errors
                  - libbeat.output.write.bytes
                  - libbeat.output.write.errors
                  - system.load.norm.5
                  - system.load.norm.15
                  - libbeat.pipeline.events.filtered
                retry:
                  enabled: true
                  initial_interval: 1s
                  max_interval: 1m
                  max_elapsed_time: 5m
                ssl.enabled: false
YML

env 設定は必要ありません。

global:
  clusterName: sample-cluster
appdynamics-otel-collector:
  clientId: <client-id>
  clientSecret: <client-secret>
  endpoint: <endpoint>
  tokenUrl: <token-url>
 
  spec:
    image: <image-url>
    imagePullPolicy: IfNotPresent
  config:
    exporters:
      logging:
        loglevel: debug
 
appdynamics-cloud-k8s-monitoring:
  install:
    logCollector: true
    defaultInfraCollectors: false
    clustermon: false
 
  clustermonPod:
    image: <image-url>
    nodeSelector:
      kubernetes.io/os: linux
 
  inframonPod:
    image: <image-url>
    nodeSelector:
      kubernetes.io/os: linux
 
  logCollectorPod:
    imagePullPolicy: IfNotPresent
    env:
      linux:
        image: <image-url>
      windows:
        image: <image-url>
 
  logCollectorConfig:
    os: [linux,windows]
    filebeatYaml: |-
      filebeat.autodiscover:
        providers:
          - type: kubernetes
            node: ${NODE_NAME}
            labels.dedot: false
            annotations.dedot: false
            hints.enabled: true
            hints.default_config.enabled: false
            templates:
              - condition:
                  equals:
                    kubernetes.container.name: log-generator-logback
                config:
                  - type: container
                    close_removed: false
                    paths:
                      - /var/log/containers/${data.kubernetes.pod.name}*${data.kubernetes.container.id}.log
                    multiline.pattern: '^[[:space:]]+(at|\.{3})[[:space:]]+\b|^Caused by:'
                    multiline.negate: false
                    multiline.match: after
                    processors:
                      - copy_fields:
                          fields:
                            - from: kubernetes.pod.name
                              to: fields.k8s.pod.name
                          fail_on_error: false
                          ignore_missing: true
                      - copy_fields:
                          fields:
                            - from: kubernetes.deployment.name
                              to: fields.k8s.workload.name
                          fail_on_error: false
                          ignore_missing: true
                      - add_fields:
                          target: _message_parser
                          fields:
                            type: logback
                            pattern: "%date{yyyy-MM-dd HH:mm:ss.SSS} %-5level %m %n"
      processors:
        - add_cloud_metadata: ~
        - add_kubernetes_metadata:
            in_cluster: true
            host: ${NODE_NAME}
            matchers:
              - logs_path:
                  logs_path: "/var/log/containers/"
        - rename:
            fields:
              - from: "kubernetes.namespace"
                to: "kubernetes.namespace.name"
              - from: "kubernetes"
                to: "k8s"
              - from: k8s.annotations.appdynamics.lca/filebeat.parser
                to: "_message_parser"
              - from: "cloud.instance.id"
                to: "host.id"
            ignore_missing: true
            fail_on_error: false
        - add_fields:
            target: k8s
            fields:
              cluster.name: sample-cluster
        - add_fields:
            target: source
            fields:
              name: log-agent
        - add_fields:
            target: telemetry
            fields:
              sdk.name: log-agent
        - script:
            lang: javascript
            source: >
              function process(event) {
                var podUID = event.Get("k8s.pod.uid");
                if (podUID) {
                  event.Put("internal.container.encapsulating_object_id", "sample-cluster:" + podUID);
                }
                return event;
              }
        - drop_fields:
            fields: ["agent", "stream", "ecs", "input", "orchestrator", "k8s.annotations.appdynamics", "k8s.labels", "k8s.node.labels", "cloud"]
            ignore_missing: true
      output.otlploggrpc:
        include_resources:
          - k8s
          - source
          - host
          - container
          - log
          - telemetry
          - internal
          - os
        hosts: ["${APPD_OTELCOL_GRPC_RECEIVER_HOST}:${APPD_OTELCOL_GRPC_RECEIVER_PORT}"]
        worker: 1
        max_bytes:
        #hosts: ["otel-collector-local-service.appdynamics.svc.cluster.local:8080"]
        ssl.enabled: false
        protocol: grpc
        wait_for_ready: true
        batch_size: 100
        summary_debug_logs_interval: 10s
      filebeat.registry.path: registry1
      filebeat.registry.file_permissions: 0640
      path.data: /opt/appdynamics/logcollector-agent/data
      logging:
        level: debug
        to_files: false
        files:
          path: /opt/appdynamics/logcollector-agent/log
          name: lca-log
          keepfiles: 5
          permissions: 0640
        selectors: []
        metrics:
          enabled: false
          period: 30s

YML



filebeat.autodiscover:
  providers:
    - type: kubernetes
      node: ${NODE_NAME}
      labels.dedot: false
      annotations.dedot: false
      hints.enabled: true
      hints.default_config.enabled: false
      templates:
        - condition:
            equals:
              kubernetes.container.name: log-generator-logback
          config:
            type: filestream
            id: fsid-${data.kubernetes.pod.name}-${data.kubernetes.container.id}
            close_removed: false
            clean_removed: false
            paths:
              - /var/log/containers/${data.kubernetes.pod.name}*${data.kubernetes.container.id}.log
            parsers:
              - container:
                  stream: all
                  format: auto
              - multiline:
                  type: pattern:
                  pattern: '^\d{4}-\d{2}-\d{2}'
                  match: after
                  negate: true
            prospector.scanner.symlinks: true 
            processors:
              - copy_fields:
                  fields:
                    - from: kubernetes.pod.name
                      to: fields.k8s.pod.name
                  fail_on_error: false
                  ignore_missing: true
              - copy_fields:
                  fields:
                    - from: kubernetes.deployment.name
                      to: fields.k8s.workload.name
                  fail_on_error: false
                  ignore_missing: true
              - add_fields:
                  target: _message_parser
                  fields:
                    type: logback
                    pattern: "%date{yyyy-MM-dd HH:mm:ss.SSS} %-5level %m %n"
processors:
  - add_cloud_metadata: ~
  - add_kubernetes_metadata:
      in_cluster: true
      host: ${NODE_NAME}
      matchers:
        - logs_path:
            logs_path: "/var/log/containers/"
  - rename:
      fields:
        - from: "kubernetes.namespace"
          to: "kubernetes.namespace.name"
        - from: "kubernetes"
          to: "k8s"
        - from: k8s.annotations.appdynamics.lca/filebeat.parser
          to: "_message_parser"
        - from: "cloud.instance.id"
          to: "host.id"
      ignore_missing: true
      fail_on_error: false
  - add_fields:
      target: k8s
      fields:
        cluster.name: sample-cluster
  - add_fields:
      target: source
      fields:
        name: log-agent
  - add_fields:
      target: telemetry
      fields:
        sdk.name: log-agent
  - script:
      lang: javascript
      source: &gt;
        function process(event) {
          var podUID = event.Get("k8s.pod.uid");
          if (podUID) {
            event.Put("internal.container.encapsulating_object_id", "sample-cluster:" + podUID);
          }
          return event;
        }
  - drop_fields:
      fields: ["agent", "stream", "ecs", "input", "orchestrator", "k8s.annotations.appdynamics", "k8s.labels", "k8s.node.labels", "cloud"]
      ignore_missing: true
output.otlplog:
  include_resources:
    - k8s
    - source
    - host
    - container
    - log
    - telemetry
    - internal
  hosts: ["${APPD_OTELCOL_GRPC_RECEIVER_HOST}:14317"]
  worker: 1
  max_bytes:
  #hosts: ["otel-collector-local-service.appdynamics.svc.cluster.local:8080"]
  ssl.enabled: false
  protocol: grpc
  grpc_config:
    wait_for_ready: true
  batch_size: 1000
  summary_debug_logs_interval: 10s
filebeat.registry.path: registry1
filebeat.registry.file_permissions: 0640
path.data: /opt/appdynamics/logcollector-agent/data
logging:
  level: debug
  to_files: false
  files:
    path: /opt/appdynamics/logcollector-agent/log
    name: lca-log
    keepfiles: 5
    permissions: 0640
  selectors: [otlplog,monitoring.otlpmetric,]
  metrics:
    enabled: false
    period: 30s
monitoring:
  enabled: true
  otlpmetric:
    endpoint: ${APPD_OTELCOL_GRPC_RECEIVER_HOST}:${APPD_OTELCOL_GRPC_RECEIVER_PORT}
    protocol: grpc
    collect_period:
    report_period: 20s
    resource_attrs:
      k8s.cluster.name: "sample-cluster"
      k8s.pod.name: "${POD_NAME}"
    metrics:
      - beat.memstats.memory_alloc
      - filebeat.events.active
      - filebeat.harvester.running
      - filebeat.harvester.skipped
      - filebeat.input.log.files.truncated
      - libbeat.output.read.errors
      - libbeat.output.write.bytes
      - libbeat.output.write.errors
      - system.load.norm.5
      - system.load.norm.15
    ssl.enabled: false
YML
filebeat.autodiscover:
  providers:
    - type: kubernetes
      node: ${NODE_NAME}
      labels.dedot: false
      annotations.dedot: false
      hints.enabled: true
      hints.default_config:
        enabled: true
        type: container
        close_removed: false
        paths:
          - /var/log/containers/${data.kubernetes.pod.name}*${data.kubernetes.container.id}.log
        multiline.pattern: ... # user provided
        multiline.negate: ... # user provided
        multiline.match: ... # user provided
        processors:
          - copy_fields:
              fields:
                - from: kubernetes.pod.name
                  to: fields.k8s.pod.name
              fail_on_error: false
              ignore_missing: true
          - copy_fields:
              fields:
                - from: kubernetes.deployment.name
                  to: fields.k8s.workload.name
              fail_on_error: false
              ignore_missing: true
          - add_fields:
              target: _message_parser
              fields:
                ... # user provided, based on the particular message parser used
      templates:
        ...
processors:
  ...
output.otlp:
  ...
filebeat.registry.path: registry1
filebeat.registry.file_permissions: 0640
path.data: /opt/appdynamics/logcollector-agent/data
logging:
  ...
monitoring:
  ...
YML
filebeat.autodiscover:
  providers:
    - type: kubernetes
      node: ${NODE_NAME}
      labels.dedot: false
      annotations.dedot: false
      hints.enabled: true
      hints.default_config.enabled: false
      templates:
        - condition:
            equals:
              kubernetes.container.name: log-generator-logback
          config:
            - type: container
              close_removed: false
              paths:
                - /var/log/containers/${data.kubernetes.pod.name}*${data.kubernetes.container.id}.log
              multiline.pattern: ''
              multiline.negate: false
              multiline.match: after
              processors:
                - copy_fields:
                    fields:
                      - from: kubernetes.pod.name
                        to: fields.k8s.pod.name
                    fail_on_error: false
                    ignore_missing: true
                - copy_fields:
                    fields:
                      - from: kubernetes.deployment.name
                        to: fields.k8s.workload.name
                    fail_on_error: false
                    ignore_missing: true
                - add_fields:
                    target: _message_parser
                    fields:
                      type: logback
                      pattern: "%date{yyyy-MM-dd HH:mm:ss.SSS} %-5level %m %n"
processors:
  - add_cloud_metadata: ~
  - add_kubernetes_metadata:
      in_cluster: true
      host: ${NODE_NAME}
      matchers:
        - logs_path:
            logs_path: "/var/log/containers/"
  - rename:
      fields:
        - from: "kubernetes.namespace"
          to: "kubernetes.namespace.name"
        - from: "kubernetes"
          to: "k8s"
        - from: k8s.annotations.appdynamics.lca/filebeat.parser
          to: "_message_parser"
        - from: "cloud.instance.id"
          to: "host.id"
      ignore_missing: true
      fail_on_error: false
  - add_fields:
      target: k8s
      fields:
        cluster.name: sampleCluster
  - add_fields:
      target: source
      fields:
        name: log-agent
  - add_fields:
      target: telemetry
      fields:
        sdk.name: log-agent
  - script:
      lang: javascript
      source: &gt;
        function process(event) {
          var podUID = event.Get("k8s.pod.uid");
          if (podUID) {
            event.Put("internal.container.encapsulating_object_id", "sampleCluster:" + podUID);
          }
          return event;
        }
  - drop_fields:
      fields: ["agent", "stream", "ecs", "input", "orchestrator", "k8s.annotations.appdynamics", "k8s.labels", "k8s.node.labels", "cloud"]
      ignore_missing: true
output.otlplog:
  include_resources:
    - k8s
    - source
    - host
    - container
    - log
    - telemetry
    - internal
  hosts: ["${APPD_OTELCOL_GRPC_RECEIVER_HOST}:${APPD_OTELCOL_GRPC_RECEIVER_PORT}"]
  #hosts: ["otel-collector-local-service.appdynamics.svc.cluster.local:8080"]
  ssl.enabled: false
  protocol: grpc
  grpc_config:
    wait_for_ready: true
  batch_publish: true
  batch_size: 1000
  logmax: 100
  ticktime: 1
  enableDebugTimer: true
filebeat.registry.path: registry1
filebeat.registry.file_permissions: 0640
path.data: /opt/appdynamics/logcollector-agent/data
logging:
  level: debug
  to_files: false
  files:
    path: /opt/appdynamics/logcollector-agent/log
    name: lca-log
    keepfiles: 5
    permissions: 0640
  selectors: []
  metrics:
    enabled: false
    period: 30s
monitoring:
  enabled: true
  otlp:
    endpoint: "${APPD_OTELCOL_GRPC_RECEIVER_HOST}:${APPD_OTELCOL_GRPC_RECEIVER_PORT}"
    protocol: grpc
    collect_period:
    report_period:
    resource_attrs:
      k8s.cluster.name: "sampleCluster"
      k8s.pod.name: "${POD_NAME}"
    metrics:
      - beat.memstats.memory_alloc
      - filebeat.events.active
      - filebeat.harvester.running
      - filebeat.harvester.skipped
      - filebeat.input.log.files.truncated
      - libbeat.output.read.errors
      - libbeat.output.write.bytes
      - libbeat.output.write.errors
      - system.load.norm.5
      - system.load.norm.15
    ssl.enabled: false
YML
filebeat.autodiscover:
  providers:
    - type: kubernetes
      node: ${NODE_NAME}
      labels.dedot: false
      annotations.dedot: false
      hints.enabled: true
      hints.default_config.enabled: false
      templates:
        - condition:
            equals:
              kubernetes.container.name: log-generator-logback
          config:
            - type: container
              close_removed: false
              paths:
                - /var/log/containers/${data.kubernetes.pod.name}*${data.kubernetes.container.id}.log
              multiline.pattern: ''
              multiline.negate: false
              multiline.match: after
              processors:
                - copy_fields:
                    fields:
                      - from: kubernetes.pod.name
                        to: fields.k8s.pod.name
                    fail_on_error: false
                    ignore_missing: true
                - copy_fields:
                    fields:
                      - from: kubernetes.deployment.name
                        to: fields.k8s.workload.name
                    fail_on_error: false
                    ignore_missing: true
                - add_fields:
                    target: _message_parser
                    fields:
                      type: logback
                      pattern: "%date{yyyy-MM-dd HH:mm:ss.SSS} %-5level %m %n"
processors:
  - add_cloud_metadata: ~
  - add_kubernetes_metadata:
      in_cluster: true
      host: ${NODE_NAME}
      matchers:
        - logs_path:
            logs_path: "/var/log/containers/"
  - rename:
      fields:
        - from: "kubernetes.namespace"
          to: "kubernetes.namespace.name"
        - from: "kubernetes"
          to: "k8s"
        - from: k8s.annotations.appdynamics.lca/filebeat.parser
          to: "_message_parser"
        - from: "cloud.instance.id"
          to: "host.id"
      ignore_missing: true
      fail_on_error: false
  - add_fields:
      target: k8s
      fields:
        cluster.name: sample-cluster
  - add_fields:
      target: source
      fields:
        name: log-agent
  - add_fields:
      target: telemetry
      fields:
        sdk.name: log-agent
  - script:
      lang: javascript
      source: &gt;
        function process(event) {
          var podUID = event.Get("k8s.pod.uid");
          if (podUID) {
            event.Put("internal.container.encapsulating_object_id", "sample-cluster:" + podUID);
          }
          return event;
        }
  - drop_fields:
      fields: ["agent", "stream", "ecs", "input", "orchestrator", "k8s.annotations.appdynamics", "k8s.labels", "k8s.node.labels", "cloud"]
      ignore_missing: true
output.otlplog:
  codec.otlp:
    resources:
      - k8s
      - source
      - host
      - container
      - log
      - telemetry
      - internal
  hosts: ["${APPD_OTELCOL_GRPC_RECEIVER_HOST}:${APPD_OTELCOL_GRPC_RECEIVER_PORT}"]
  #hosts: ["otel-collector-local-service.appdynamics.svc.cluster.local:8080"]
  ssl.enabled: false
  protocol: grpc
  grpc_config:
    wait_for_ready: true
  batch_publish: true
  batch_size: 100
  logmax: 100
  ticktime: 1
  enableDebugTimer: true
filebeat.registry.path: registry1
filebeat.registry.file_permissions: 0640
path.data: /opt/appdynamics/logcollector-agent/data
logging:
  level: debug
  to_files: false
  files:
    path: /opt/appdynamics/logcollector-agent/log
    name: lca-log
    keepfiles: 5
    permissions: 0640
  selectors: []
  metrics:
    enabled: false
    period: 30s
monitoring:
  enabled: true
  otlp:
    endpoint: "${APPD_OTELCOL_GRPC_RECEIVER_HOST}:${APPD_OTELCOL_GRPC_RECEIVER_PORT}"
    protocol: grpc
    collect_period:
    report_period:
    resource_attrs:
      k8s.cluster.name: "sample-cluster"
      k8s.pod.name: "${POD_NAME}"
    metrics:
      - beat.memstats.memory_alloc
      - filebeat.events.active
      - filebeat.harvester.running
      - filebeat.harvester.skipped
      - filebeat.input.log.files.truncated
      - libbeat.output.read.errors
      - libbeat.output.write.bytes
      - libbeat.output.write.errors
      - system.load.norm.5
      - system.load.norm.15
    ssl.enabled: false
YML

OpenTelemetry™ と Kubernetes®(該当する場合)は、The Linux Foundation® の商標です。