基于提示的自动发现
编辑基于提示的自动发现
编辑Filebeat 支持基于提供程序提示的自动发现。提示系统查找 Kubernetes Pod 注解或 Docker 标签中的前缀为 co.elastic.logs
的提示。容器启动后,Filebeat 将检查其是否包含任何提示并启动相应的配置。提示告诉 Filebeat 如何获取给定容器的日志。默认情况下,日志将使用 filestream
输入从容器中检索。您可以使用提示来修改此行为。以下是受支持提示的完整列表:
co.elastic.logs/enabled
编辑Filebeat 默认情况下会从所有容器获取日志,您可以将此提示设置为 false
以忽略容器的输出。Filebeat 不会读取或发送来自它的日志。如果默认配置被禁用,您可以使用此注解仅为设置为 true
的容器启用日志检索。如果您打算将其与 Kubernetes 一起使用,请记住注解值只能是字符串类型,因此您需要将其显式定义为 "true"
或 "false"
。
co.elastic.logs/multiline.*
编辑多行设置。有关所有受支持选项的完整列表,请参见 多行消息。
co.elastic.logs/json.*
编辑JSON 设置。对于 filestream
输入(默认),请参见 ndjson
以获取所有受支持选项的完整列表。对于 container
或 log
输入,请参见 json
以获取所有受支持选项的完整列表。
例如,以下带有 json 选项的提示:
co.elastic.logs/json.message_key: "log" co.elastic.logs/json.add_error_key: "true"
将导致以下输入配置:
-
filestream
parsers: - ndjson: message_key: "log" add_error_key: "true"
-
log
json.message_key: "log" json.add_error_key: "true"
log
输入的 keys_under_root
json 选项在 filestream 输入中被 target
选项替换。阅读文档 (ndjson
)了解如何正确使用它。
co.elastic.logs/include_lines
编辑要匹配 Filebeat 要包含的行的一组正则表达式。有关更多信息,请参见 输入。
co.elastic.logs/exclude_lines
编辑要匹配 Filebeat 要排除的行的一组正则表达式。有关更多信息,请参见 输入。
co.elastic.logs/module
编辑指定要用来解析容器日志的模块,而不是使用原始 docker
输入。有关受支持模块的列表,请参见 模块。
co.elastic.logs/fileset
编辑配置模块时,将容器日志映射到模块文件集。您可以像这样配置单个文件集:
co.elastic.logs/fileset: access
或者为容器中的每个流(stdout 和 stderr)配置一个文件集:
co.elastic.logs/fileset.stdout: access co.elastic.logs/fileset.stderr: error
co.elastic.logs/raw
编辑当需要完全设置整个输入/模块配置时,可以使用 raw
提示。您可以提供输入配置的字符串化 JSON。raw
覆盖所有其他提示,可用于创建单个或多个配置。
co.elastic.logs/raw: "[{\"containers\":{\"ids\":[\"${data.container.id}\"]},\"multiline\":{\"negate\":\"true\",\"pattern\":\"^test\"},\"type\":\"docker\"}]"
co.elastic.logs/processors
编辑定义要添加到 Filebeat 输入/模块配置的处理器。有关受支持处理器的列表,请参见 处理器。
如果处理器配置使用列表数据结构,则必须枚举对象字段。例如,以下 rename
处理器配置的提示:
processors: - rename: fields: - from: "a.g" to: "e.d" fail_on_error: true
将如下所示:
co.elastic.logs/processors.rename.fields.0.from: "a.g" co.elastic.logs/processors.rename.fields.1.to: "e.d" co.elastic.logs/processors.rename.fail_on_error: 'true'
如果处理器配置使用映射数据结构,则不需要枚举。例如,以下 add_fields
配置的等效项:
processors: - add_fields: target: project fields: name: myproject
是:
co.elastic.logs/processors.1.add_fields.target: "project" co.elastic.logs/processors.1.add_fields.fields.name: "myproject"
为了提供处理器定义的顺序,可以提供数字。如果没有,提示构建器将进行任意排序。
co.elastic.logs/processors.1.dissect.tokenizer: "%{key1} %{key2}" co.elastic.logs/processors.dissect.tokenizer: "%{key2} %{key1}"
在上面的示例中,标记为 1
的处理器定义将首先执行。
co.elastic.logs/pipeline
编辑定义要添加到 Filebeat 输入/模块配置的摄取管道 ID。
co.elastic.logs/pipeline: custom-pipeline
当提示与模板一起使用时,只有在没有解析为 true 的模板条件的情况下才会评估提示。例如:
filebeat.autodiscover.providers: - type: docker hints.enabled: true hints.default_config: type: container paths: - /var/lib/docker/containers/${data.container.id}/*.log templates: - condition: equals: docker.container.labels.type: "pipeline" config: - type: container paths: - "/var/lib/docker/containers/${data.docker.container.id}/*.log" pipeline: my-pipeline
在此示例中,首先评估条件 docker.container.labels.type: "pipeline"
,如果未匹配,则处理提示,如果再次没有有效的配置,则使用 hints.default_config
。
Kubernetes
编辑Kubernetes 自动发现提供程序支持 Pod 注解中的提示。要启用它,只需设置 hints.enabled
filebeat.autodiscover: providers: - type: kubernetes hints.enabled: true
您可以配置在看到新容器时将启动的默认配置,如下所示:
filebeat.autodiscover: providers: - type: kubernetes hints.enabled: true hints.default_config: type: container paths: - /var/log/containers/*-${data.container.id}.log # CRI path
您还可以完全禁用默认设置,以便仅检索标注为 co.elastic.logs/enabled: true
的 Pod。
filebeat.autodiscover: providers: - type: kubernetes hints.enabled: true hints.default_config.enabled: false
您可以使用有用的信息来注解 Kubernetes Pod 以启动 Filebeat 输入或模块。
annotations: co.elastic.logs/multiline.pattern: '^\[' co.elastic.logs/multiline.negate: true co.elastic.logs/multiline.match: after
多个容器
编辑当 Pod 具有多个容器时,除非您将容器名称放入提示中,否则设置将共享。例如,这些提示为 Pod 中的所有容器配置多行设置,但为名为 sidecar
的容器设置特定的 exclude_lines
提示。
annotations: co.elastic.logs/multiline.pattern: '^\[' co.elastic.logs/multiline.negate: true co.elastic.logs/multiline.match: after co.elastic.logs.sidecar/exclude_lines: '^DBG'
多组提示
编辑当容器需要在其上定义多个输入时,可以使用数字前缀提供一组注解。如果没有数字前缀的提示,则它们将组合到单个配置中。
annotations: co.elastic.logs/exclude_lines: '^DBG' co.elastic.logs/1.include_lines: '^DBG' co.elastic.logs/1.processors.dissect.tokenizer: "%{key2} %{key1}"
上述配置将生成两个输入配置。第一个输入只处理调试日志并将其通过 dissect tokenizer 传递。第二个输入处理除调试日志以外的所有内容。
命名空间默认值
编辑可以在命名空间的注解中配置提示作为默认值,在缺少 Pod 级注解时使用。生成的提示是 Pod 注解和命名空间注解的组合,Pod 注解优先。要启用命名空间默认值,请按如下方式为命名空间对象配置 add_resource_metadata
:
filebeat.autodiscover: providers: - type: kubernetes hints.enabled: true add_resource_metadata: namespace: include_annotations: ["nsannotation1"]
Docker
编辑Docker 自动发现提供程序支持标签中的提示。要启用它,只需设置 hints.enabled
filebeat.autodiscover: providers: - type: docker hints.enabled: true
您可以配置在看到新容器时将启动的默认配置,如下所示:
filebeat.autodiscover: providers: - type: docker hints.enabled: true hints.default_config: type: container paths: - /var/log/containers/*-${data.container.id}.log # CRI path
您还可以完全禁用默认设置,以便仅检索标记为 co.elastic.logs/enabled: true
的容器。
filebeat.autodiscover: providers: - type: docker hints.enabled: true hints.default_config.enabled: false
您可以使用有用的信息来标记 Docker 容器以启动 Filebeat 输入,例如:
co.elastic.logs/module: nginx co.elastic.logs/fileset.stdout: access co.elastic.logs/fileset.stderr: error
上述标签配置 Filebeat 使用 Nginx 模块来收集此容器的日志。访问日志将从 stdout 流检索,错误日志将从 stderr 检索。
您可以使用有用的信息来标记 Docker 容器以解码结构化为 JSON 消息的日志,例如:
co.elastic.logs/json.keys_under_root: true co.elastic.logs/json.add_error_key: true co.elastic.logs/json.message_key: log
Nomad
编辑Nomad 自动发现提供程序使用 meta
节 支持提示。要启用它,只需设置 hints.enabled
filebeat.autodiscover: providers: - type: nomad hints.enabled: true
您可以配置在看到新作业时将启动的默认配置,如下所示:
filebeat.autodiscover: providers: - type: nomad hints.enabled: true hints.default_config: type: log paths: - /opt/nomad/alloc/${data.nomad.allocation.id}/alloc/logs/${data.nomad.task.name}.*
您还可以禁用默认配置,以便仅收集明确标注为 "co.elastic.logs/enabled" = "true"
的作业的日志。
filebeat.autodiscover: providers: - type: nomad hints.enabled: true hints.default_config: enabled: false type: log paths: - /opt/nomad/alloc/${data.nomad.allocation.id}/alloc/logs/${data.nomad.task.name}.*
您可以使用 meta
节使用有用的信息来注解 Nomad 作业以启动 Filebeat 输入或模块。
meta { "co.elastic.logs/enabled" = "true" "co.elastic.logs/multiline.pattern" = "^\\[" "co.elastic.logs/multiline.negate" = "true" "co.elastic.logs/multiline.match" = "after" }
如果您使用的是自动发现,那么在大多数情况下,您需要使用 add_nomad_metadata
处理器来使用 Nomad 元数据丰富事件。此示例配置 {Filebeat} 以通过 HTTPS 连接到本地 Nomad 代理,并将 Nomad 分配 ID 添加到输入的所有事件。稍后,add_nomad_metadata
处理器将使用该 ID 来丰富事件。
filebeat.autodiscover: providers: - type: nomad address: https://127.0.0.1:4646 hints.enabled: true hints.default_config: enabled: false type: log paths: - /opt/nomad/alloc/${data.nomad.allocation.id}/alloc/logs/${data.nomad.task.name}.* processors: - add_fields: target: nomad fields: allocation.id: ${data.nomad.allocation.id} processors: - add_nomad_metadata: when.has_fields.fields: [nomad.allocation.id] address: https://127.0.0.1:4646 default_indexers.enabled: false default_matchers.enabled: false indexers: - allocation_uuid: matchers: - fields: lookup_fields: - 'nomad.allocation.id'