基于提示的自动发现
编辑基于提示的自动发现编辑
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
。对于 Kuberentes 自动发现事件,用户也可以利用端口名称,例如 http://${data.host}:${data.ports.prometheus}/metrics
。在最后一个中,我们指的是名为 prometheus
的容器端口。
为了定位一个特定的暴露端口,可以在模板配置中使用 localhost:{data.ports.8222}
,其中 8222
是暴露的目标端口的内部容器端口。
co.elastic.metrics/metricsets
编辑
要使用的指标集列表,用逗号分隔。如果未提供任何指标集,则使用模块的默认指标集。
co.elastic.metrics/metrics_path
编辑
从(默认情况下为 /metrics)检索指标的路径,用于 Prometheus 模块。
co.elastic.metrics/period
编辑
指标检索的时间间隔,例如:10s
co.elastic.metrics/timeout
编辑
指标检索超时,默认:3s
co.elastic.metrics/username
编辑
用于身份验证的用户名
co.elastic.metrics/password
编辑
用于身份验证的密码。建议从 ENV 变量中检索此敏感信息,并避免将密码放置在纯文本中。与静态自动发现配置不同,基于提示的自动发现无法访问 Metricbeat 的密钥库,因为它可能存在潜在的安全问题。但是,基于提示的自动发现可以使用 Kubernetes 密钥,如 Metricbeat 自动发现密钥管理 中所述。
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 Pods 以启动 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 模块配置,以确保端点 "/metrics/p1" 每 5 秒轮询一次,而 "/metrics" 端点每 60 秒轮询一次。
命名空间默认值编辑
可以在命名空间的注释中配置提示作为默认值,在 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
。