基于提示的自动发现

编辑

Metricbeat 支持基于提供程序提示的自动发现。 hints 系统会在 Kubernetes Pod 注解或 Docker 标签中查找带有前缀 co.elastic.metrics 的提示。一旦容器启动,Metricbeat 将检查它是否包含任何提示并为其启动正确的配置。提示告诉 Metricbeat 如何获取给定容器的指标。以下是支持的提示的完整列表

co.elastic.metrics/module
编辑

用于获取指标的 Metricbeat 模块。 有关支持的模块列表,请参阅模块

co.elastic.metrics/hosts
编辑

与给定模块一起使用的主机设置。 主机可以包含来自自动发现事件的 ${data.host}${data.port}${data.ports.<port_name>} 值,例如:${data.host}:80。 对于 Kubernetes 自动发现事件,用户还可以利用端口名称,例如 http://${data.host}:${data.ports.prometheus}/metrics。 在最后一个示例中,我们引用名为 prometheus 的容器端口。

为了定位一个特定的公开端口,可以在模板配置中使用 localhost:{data.ports.8222},其中 8222 是公开目标端口的内部容器端口。

co.elastic.metrics/metricsets
编辑

要使用的指标集列表,以逗号分隔。 如果未提供指标集,则使用该模块的默认指标集。

co.elastic.metrics/metrics_path
编辑

Prometheus 模块检索指标的路径(默认为 /metrics)。

co.elastic.metrics/period
编辑

指标检索的时间间隔,例如:10s

co.elastic.metrics/timeout
编辑

指标检索超时,默认值:3s

co.elastic.metrics/username
编辑

用于身份验证的用户名

co.elastic.metrics/password
编辑

用于身份验证的密码。 建议从 ENV 变量中检索此敏感信息,并避免将密码以纯文本形式放置。 与静态自动发现配置不同,基于提示的自动发现无法访问 Metricbeat 的密钥库,因为它可能存在潜在的安全问题。但是,基于提示的自动发现可以使用 Kubernetes Secrets,如Metricbeat 自动发现 Secret 管理中所述。

co.elastic.metrics/ssl.*
编辑

SSL 参数,如 SSL 中所示。

co.elastic.metrics/metrics_filters.*
编辑

指标过滤器(仅适用于 Prometheus 模块)。

co.elastic.metrics/module: prometheus
co.elastic.metrics/metrics_filters.include: node_filesystem_*
co.elastic.metrics/metrics_filters.exclude: node_filesystem_device_foo,node_filesystem_device_bar
co.elastic.metrics/raw
编辑

当需要完全设置整个模块配置时,可以使用 raw 提示。您可以提供输入配置的字符串化 JSON。 raw 会覆盖所有其他提示,并且可以用于创建单个或多个配置。

co.elastic.metrics/raw: "[{\"enabled\":true,\"metricsets\":[\"default\"],\"module\":\"mockmoduledefaults\",\"period\":\"1m\",\"timeout\":\"3s\"}]"
co.elastic.metrics/processors
编辑

定义要添加到 Metricbeat 模块配置的处理器。 有关支持的处理器列表,请参阅 处理器

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

co.elastic.logs/processors.1.add_locale.abbrevation: "MST"
co.elastic.logs/processors.add_locale.abbrevation: "PST"

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

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

metricbeat.autodiscover.providers:
  - type: kubernetes
    hints.enabled: true
    templates:
        - condition:
            contains:
              kubernetes.annotations.prometheus.io/scrape: "true"
          config:
            - module: prometheus
              metricsets: ["collector"]
              hosts: "${data.host}:${data.port}"

在此示例中,首先评估条件 kubernetes.annotations.prometheus.io/scrape: "true",如果未匹配,则将处理提示。

Kubernetes

编辑

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

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

此配置为 Kubernetes 启用 hints 自动发现。hints 系统会在 Kubernetes 注解或 Docker 标签中查找带有前缀 co.elastic.metrics 的提示。

您可以使用有用的信息注释 Kubernetes Pod 以启动 Metricbeat 模块

annotations:
  co.elastic.metrics/module: prometheus
  co.elastic.metrics/metricsets: collector
  co.elastic.metrics/hosts: '${data.host}:9090'
  co.elastic.metrics/period: 1m

上述注解用于启动 Prometheus 收集器指标集,它以 1 分钟的间隔轮询父容器的端口 9090

多个容器
编辑

当 Pod 具有多个容器时,这些设置是共享的。 要设置特定于 Pod 中容器的提示,可以将容器名称放在提示中。

当 Pod 具有多个容器时,除非您将容器名称放在提示中,否则这些设置是共享的。 例如,这些提示为 Pod 中的所有容器配置了通用行为,并为名为 sidecar 的容器设置了特定的 hosts 提示。

annotations:
  co.elastic.metrics/module: apache
  co.elastic.metrics/hosts: '${data.host}:80'
  co.elastic.metrics.sidecar/hosts: '${data.host}:8080'
多组提示
编辑

当容器端口需要在其上定义多个模块时,可以提供带有数字前缀的注解集。 如果存在没有数字前缀的提示,则它们将被分组到单个配置中。

annotations:
  co.elastic.metrics/1.module: prometheus
  co.elastic.metrics/1.hosts: '${data.host}:80/metrics'
  co.elastic.metrics/1.period: 60s
  co.elastic.metrics/module: prometheus
  co.elastic.metrics/hosts: '${data.host}:80/metrics/p1'
  co.elastic.metrics/period: 5s

上面的配置将启动两个 metricbeat 模块配置,以确保每 5 秒轮询一次端点 "/metrics/p1",而每 60 秒轮询一次 "/metrics" 端点。

命名空间默认值
编辑

可以在命名空间的注解上配置提示,作为 Pod 级别注解缺失时使用的默认值。 生成的提示是 Pod 注解和命名空间注解的组合,其中 Pod 的优先级更高。 要启用命名空间默认值,请按如下方式为命名空间对象配置 add_resource_metadata

metricbeat.autodiscover:
  providers:
    - type: kubernetes
      hints.enabled: true
      add_resource_metadata:
        namespace:
          include_annotations: ["nsannotation1"]

Docker

编辑

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

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

您可以使用有用的信息标记 Docker 容器以启动 Metricbeat 模块,例如

  co.elastic.metrics/module: nginx
  co.elastic.metrics/metricsets: stubstatus
  co.elastic.metrics/hosts: '${data.host}:80'
  co.elastic.metrics/period: 10s

上述标签将允许 Metricbeat 运行 nginx 模块,并每 10 秒轮询一次 Docker 容器的端口 80