在 Elastic Agent 上配置 Kubernetes 元数据丰富
编辑在 Elastic Agent 上配置 Kubernetes 元数据丰富编辑
Kubernetes 元数据 指的是从 Kubernetes 资源中提取的上下文信息。元数据信息丰富了从 Kubernetes 集群收集的指标和日志,从而能够更深入地了解 Kubernetes 环境。
当 Elastic Agent 的策略包含 Kubernetes 集成,该集成配置了 Kubernetes 相关指标和容器日志的收集时,用于元数据丰富的机制是
- Kubernetes 提供程序 用于日志收集
- 用于指标的 Kubernetes 元数据丰富器
如果 Elastic Agent 的策略不包含 Kubernetes 集成,但 Elastic Agent 在 Kubernetes 环境中运行,则 Kubernetes 元数据由 add_kubernetes_metadata 收集。当 Elastic Agent 由 Fleet 管理时,处理器是可配置的。
Kubernetes 日志编辑
在容器日志收集方面,使用的是 Kubernetes 提供程序。它监控集群中的 Pod 资源,并将每个容器日志文件与相应的 Pod 的容器对象关联起来。这样,当解析日志文件并将事件发布到 Elasticsearch 时,内部机制就知道该日志文件属于哪个实际容器。链接是通过容器 ID 建立的,容器 ID 是日志文件名的一部分。Kubernetes 自动发现提供程序已经收集了该容器的所有元数据,利用了 Pod、命名空间和节点观察器。因此,事件会使用相关元数据进行丰富。
为了配置元数据收集,需要配置 Kubernetes 提供程序。所有可用的 Kubernetes 提供程序 配置选项可以在 Kubernetes 提供程序 文档中找到。
- 对于 独立 Elastic Agent 配置:
请遵循 Kubernetes 提供程序 的 add_resource_metadata
参数的信息
如何配置 Kubernetes 元数据丰富的示例。
apiVersion: v1 kind: ConfigMap metadata: name: agent-node-datastreams namespace: kube-system labels: k8s-app: elastic-agent data: agent.yml: |- kubernetes.provider add_resource_metadata: namespace: #use_regex_include: false include_labels: ["namespacelabel1"] #use_regex_exclude: false #exclude_labels: ["namespacelabel2"] node: #use_regex_include: false include_labels: ["nodelabel2"] include_annotations: ["nodeannotation1"] #use_regex_exclude: false #exclude_labels: ["nodelabel3"] #deployment: false #cronjob: false
- 管理的 Elastic Agent 配置:
可以按照 由 Fleet 管理的 Elastic Agent 高级配置 中的步骤配置 Kubernetes 提供程序。
Kubernetes 指标编辑
Elastic Agent 指标收集基于观察器实现元数据丰富,观察器是一种用于持续监控 Kubernetes 资源的更改和更新的机制。具体来说,不同的数据集共享一组资源观察器。这些观察器(Pod、节点、命名空间、部署、DaemonSet 等)负责通过订阅 Kubernetes 观察 API 来观察所有不同的资源事件(创建、更新和删除)。这使得应用程序状态能够与 Kubernetes 集群的状态实时同步。因此,它们会维护所有资源信息和元数据的最新共享缓存存储。每当不同的来源(kubelet、kube-state-metrics)收集指标时,在将指标作为事件发布到 Elasticsearch 之前,会使用必要的元数据对其进行丰富。
可以通过编辑 Kubernetes 集成来配置元数据丰富。仅在指标收集中,可以通过关闭每个数据集中的 Add Metadata
切换来禁用元数据丰富。可以为每个数据集配置额外的资源元数据,例如节点、命名空间标签和注释,以及部署和 CronJob 信息。
- 管理的 Elastic Agent 配置:
需要为所有启用的数据集配置 add_resource_metadata 块
- 对于 独立 Elastic Agent 配置
Elastic Agent 独立清单示例。
[output trunctated ...] - data_stream: dataset: kubernetes.state_pod type: metrics metricsets: - state_pod add_metadata: true hosts: - 'kube-state-metrics:8080' period: 10s add_resource_metadata: namespace: enabled: true #use_regex_include: false include_labels: ["namespacelabel1"] #use_regex_exclude: false #exclude_labels: ["namespacelabel2"] node: enabled: true #use_regex_include: false include_labels: ["nodelabel2"] include_annotations: ["nodeannotation1"] #use_regex_exclude: false #exclude_labels: ["nodelabel3"] #deployment: false #cronjob: false
add_resource_metadata
块配置了观察器的丰富功能。有关 add_resource_metadata 的完整描述,请参见 Kubernetes 提供程序。相同的配置参数适用。
注意编辑
虽然 add_kubernetes_metadata
处理器在使用 elastic-agent 时默认启用,但只要检测到 Kubernetes 集成,就会跳过它。