基于提示的自动发现

编辑

Heartbeat 支持基于提供程序提示的自动发现。提示系统会在 Kubernetes Pod 注释或 Docker 标签中查找前缀为 co.elastic.monitor 的提示。容器启动后,Heartbeat 会立即检查它是否包含任何提示,并为其启动正确的配置。提示会告诉 Heartbeat 如何获取给定容器的日志。默认情况下,将为暴露要监控的端口的容器创建监控器。您可以使用提示来修改此行为。这是支持的完整提示列表

co.elastic.monitor/type
编辑

定义要使用的监控器类型。例如:http、tcp、icmp

co.elastic.monitor/hosts
编辑

要监控的 URI。示例

co.elastic.monitor/type: icmp
co.elastic.monitor/hosts: ${data.host}

这将确保每个主机都启用了 ICMP 监控器。

co.elastic.monitor/schedule
编辑

定义应该执行监控器的计划。

co.elastic.monitor/schedule: "@every 5s"
co.elastic.monitor/processors
编辑

定义要添加到 Heartbeat 监控器配置中的处理器。有关支持的处理器列表,请参阅处理器

为了提供处理器定义的排序,可以提供数字。如果没有,提示构建器将进行任意排序

co.elastic.monitor/processors.1.drop_fields.fields: "field1, field2"
co.elastic.monitor/processors.drop_fields.fields: "field3"

在上面的示例中,标记为 1 的处理器定义将首先执行。

当提示与模板一起使用时,仅当没有解析为 true 的模板条件时才会评估提示。例如

heartbeat.autodiscover:
    - type: docker
      hints.enabled: true
      templates:
        - condition:
            contains:
              docker.container.image: redis
          config:
            - type: tcp
              hosts: ["${data.host}:${data.port}"]
              schedule: "@every 1s"
              timeout: 1s

在此示例中,首先评估条件 docker.container.image: redis,如果未匹配,则将处理提示,如果仍然没有有效的配置,则将使用 hints.default_config

Kubernetes

编辑

Kubernetes 自动发现提供程序支持 Pod 注释中的提示。要启用它,只需设置 hints.enabled

heartbeat.autodiscover:
  providers:
    - type: kubernetes
      hints.enabled: true

您可以使用有用的信息注释 Kubernetes Pod,以启动 Heartbeat 监控器

annotations:
  co.elastic.monitor/type: icmp
  co.elastic.monitor/hosts: ${data.host}
  co.elastic.monitor/schedule: "@every 5s"
多个容器
编辑

当 Pod 有多个容器时,除非您在提示中添加容器名称,否则设置是共享的。例如,这些提示配置暴露端口 8080 的容器进行 HTTP 检查,并让 sidecar 容器进行 TCP 检查。

annotations:
  co.elastic.monitor/type: http
  co.elastic.monitor/hosts: ${data.host}:8080/healthz
  co.elastic.monitor/schedule: "@every 5s"
  co.elastic.monitor.sidecar/type: tcp
  co.elastic.monitor.sidecar/hosts: ${data.host}:8081
  co.elastic.monitor.sidecar/schedule: "@every 5s"
多组提示
编辑

当容器需要在其上定义多个监控器时,可以提供带有数字前缀的注释集。没有数字前缀的注释将默认到一个监控器配置中。

annotations:
  co.elastic.monitor/type: http
  co.elastic.monitor/hosts: ${data.host}:8080/healthz
  co.elastic.monitor/schedule: "@every 5s"
  co.elastic.monitor/1.type: tcp
  co.elastic.monitor/1.hosts: ${data.host}:8080
  co.elastic.monitor/1.schedule: "@every 5s"

Docker

编辑

Docker 自动发现提供程序支持标签中的提示。要启用它,只需设置 hints.enabled

heartbeat.autodiscover:
  providers:
    - type: docker
      hints.enabled: true

您可以像 Kubernetes 示例一样,使用有用的信息标记 Docker 容器以启动 Heartbeat 监控器

LABEL co.elastic.monitor/1.type=tcp co.elastic.monitor/1.hosts='${data.host}:6379' co.elastic.monitor/1.schedule='@every 10s'
LABEL co.elastic.monitor/2.type=icmp co.elastic.monitor/2.hosts='${data.host}' co.elastic.monitor/2.schedule='@every 10s'