添加 Docker 元数据

编辑

默认情况下,收集日志和指标的输入会使用此处理器,因此您无需显式配置它。

add_docker_metadata 处理器使用来自 Docker 容器的相关元数据注释每个事件。启动时,处理器会检测 Docker 环境并缓存元数据。

要使用 Docker 元数据注释事件,配置必须有效,并且处理器必须能够访问 Docker API。

每个事件都使用以下信息进行注释

  • 容器 ID
  • 名称
  • 镜像
  • 标签

当在容器中运行 Elastic Agent 时,您需要提供对 Docker 的 unix 套接字的访问权限,以便 add_docker_metadata 处理器正常工作。您可以通过将套接字挂载到容器内部来实现。例如

docker run -v /var/run/docker.sock:/var/run/docker.sock ...

为了避免权限问题,您可能还需要将 --user=root 添加到 docker run 标志。因为用户必须是 Docker 组的成员才能访问 /var/run/docker.sock,如果 Elastic Agent 在容器内以非 root 用户身份运行,则需要 root 访问权限。

如果 Docker 守护进程重新启动,则已挂载的套接字将失效,并且元数据将停止工作。发生这种情况时,您可以执行以下操作之一

  • 每次 Docker 重新启动时重新启动 Elastic Agent
  • 挂载整个 /var/run 目录(而不仅仅是套接字)

示例

编辑
  - add_docker_metadata:
      host: "unix:///var/run/docker.sock"
      #match_fields: ["system.process.cgroup.id"]
      #match_pids: ["process.pid", "process.parent.pid"]
      #match_source: true
      #match_source_index: 4
      #match_short_id: true
      #cleanup_timeout: 60
      #labels.dedot: false
      # To connect to Docker over TLS you must specify a client and CA certificate.
      #ssl:
      #  certificate_authority: "/etc/pki/root/ca.pem"
      #  certificate:           "/etc/pki/client/cert.pem"
      #  key:                   "/etc/pki/client/cert.key"

配置设置

编辑

Elastic Agent 处理器在摄取管道之前执行,这意味着它们处理的是原始事件数据,而不是发送到 Elasticsearch 的最终事件。有关相关限制,请参阅 使用处理器的局限性有哪些?

名称 必需 默认值 描述

host

unix:///var/run/docker.sock

Docker 套接字(UNIX 或 TCP 套接字)。

ssl

连接到 Docker 套接字时要使用的 SSL 配置。有关可用设置的列表,请参阅 SSL/TLS,特别是 表 7,“通用配置选项”表 8,“客户端配置选项” 下的设置。

match_fields

用于匹配容器 ID 的字段列表。至少其中一个字段必须包含容器 ID 才能使事件得到丰富。

match_pids

["process.pid", "process.parent.pid"]

包含进程 ID 的字段列表。如果该进程在 Docker 中运行,则该事件将被丰富。

match_source

true

是否从 log.file.path 字段中存在的日志路径匹配容器 ID。

match_short_id

false

是否从 log.file.path 字段中存在的日志路径匹配容器短 ID。此设置允许您匹配具有容器 ID 的前 12 个字符的目录名称。例如,/var/log/containers/b7e3460e2b21/*.log

match_source_index

4

在由正斜杠 (/) 分割的源路径中查找容器 ID 的索引。例如,默认值 4 匹配 /var/lib/docker/containers/<container_id>/*.log 中的容器 ID。

cleanup_timeout

60秒

容器元数据被清理和遗忘之前的不活动时间。

labels.dedot

false

是否将标签中的点 (.) 替换为下划线 (_)。