在 Elastic Agent 上配置 Kubernetes 元数据增强

编辑

Kubernetes 元数据 指的是从 Kubernetes 资源中提取的上下文信息。元数据信息丰富了从 Kubernetes 集群收集的指标和日志,从而能够更深入地了解 Kubernetes 环境。

当 Elastic Agent 的策略包含 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、节点、命名空间、部署、守护程序集等)负责通过订阅 Kubernetes 监视 API 来监视所有不同的资源事件(创建、更新和删除)。这使得应用程序状态与 Kubernetes 集群状态的实时同步成为可能。因此,它们保持所有资源信息和元数据的最新共享缓存存储。每当不同的来源(kubelet、kube-state-metrics)收集指标时,它们在作为事件发布到 Elasticsearch 之前,都会使用所需的元数据进行增强。

可以通过编辑 Kubernetes 集成来配置元数据增强。 仅在指标收集中,可以通过在每个数据集中关闭 添加元数据 开关来禁用元数据增强。额外的资源元数据(如节点、命名空间标签和注释)以及部署和 cronjob 信息可以按数据集进行配置。

  • 托管 Elastic Agent 配置:
metadata configuration

需要为所有已启用的数据集配置 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 提供程序。相同的配置参数适用。

注意
编辑

尽管在使用 elastic-agent 时默认启用 add_kubernetes_metadata 处理器,但只要检测到 Kubernetes 集成,就会跳过该处理器。