Kubernetes 提供程序编辑

提供来自 Kubernetes 的清单信息。

提供程序配置编辑

providers.kubernetes:
  node: ${NODE_NAME}
  scope: node
  #kube_config: /Users/elastic-agent/.kube/config
  #sync_period: 600s
  #cleanup_timeout: 60s
  resources:
    pod:
      enabled: true
节点

(可选) 指定要将 Elastic Agent 范围限定到的节点,以防默认发现方法无法准确检测到节点

  1. 如果 Elastic Agent 在 Kubernetes 集群中作为 Pod 部署,请使用 Pod 的主机名作为 Pod 名称来查询 Pod 元数据以获取节点名称。
  2. 如果步骤 1 失败或 Elastic Agent 部署在 Kubernetes 集群之外,请使用机器 ID 与 Kubernetes 节点匹配以获取节点名称。
  3. 如果无法通过步骤 1 或 2 发现节点,则回退到 NODE_NAME 环境变量作为默认值。如果未设置,则返回错误。
清理超时
(可选) 指定在停止容器的运行配置之前的非活动时间。默认情况下为 60s
同步周期
(可选) 指定列出历史资源的超时时间。
kube_config

(可选) 使用给定的配置文件作为 Kubernetes 客户端的配置。如果未设置 kube_config,则将检查 KUBECONFIG 环境变量,如果不存在,则回退到 InCluster。InCluster 模式意味着如果 Elastic Agent 作为 Pod 运行,它将尝试使用默认情况下安装在 Pod 中的令牌和证书来初始化客户端

  • /var/run/secrets/kubernetes.io/serviceaccount/token
  • /var/run/secrets/kubernetes.io/serviceaccount/ca.crt

以及使用环境变量 KUBERNETES_SERVICE_HOSTKUBERNETES_SERVICE_PORT 来访问 API 服务器。 kube_client_options:: (可选) 可以为 Kubernetes 客户端配置其他选项。目前支持客户端 QPS 和突发,如果未设置,将使用 Kubernetes 客户端的 默认 QPS 和突发。示例

      kube_client_options:
        qps: 5
        burst: 10
范围
(可选) 指定自动发现的级别。 scope 可以取 nodecluster 作为值。 node 范围允许发现指定节点中的资源。 cluster 范围允许集群范围的发现。只有 podnode 资源可以在节点范围内发现。
资源
(可选) 指定要启动自动发现的资源。其中之一是 podnodeservice。默认情况下,nodepod 已启用。 service 资源要求 scope 设置为 cluster
命名空间
(可选) 选择要从中收集元数据的命名空间。如果未设置,则处理器将从所有命名空间收集元数据。默认情况下未设置。
包含注释
(可选) 如果添加到提供程序配置中,则配置中存在的注释列表将添加到事件中。
包含标签
(可选) 如果添加到提供程序配置中,则配置中存在的标签列表将添加到事件中。
排除标签
(可选) 如果添加到提供程序配置中,则配置中存在的标签列表将从事件中排除。
标签.dedot
(可选) 如果在提供程序配置中设置为 true,则标签中的 . 将替换为 _。默认情况下为 true
注释.dedot
(可选) 如果在提供程序配置中设置为 true,则注释中的 . 将替换为 _。默认情况下为 true
添加资源元数据

(可选) 指定将添加到事件中的额外元数据的过滤器和配置。配置参数

  • nodenamespace: 指定来自节点和命名空间的额外元数据的标签和注释过滤器。默认情况下,所有标签都包含在内,而注释则不包含。要更改默认行为,可以定义 include_labelsexclude_labelsinclude_annotations。这些设置在存储需要特殊处理以避免过度加载存储输出的标签和注释时很有用。可以通过将 enabled: false 设置为禁用 nodenamespace 元数据的丰富。通过将 use_regex_include: trueinclude_labels 结合使用,以及通过将 use_regex_exclude: trueexclude_labels 结合使用,在这些设置中支持通配符。
  • deployment: 如果资源是 pod 并且它是从 deployment 创建的,默认情况下不会添加部署名称,可以通过将 deployment: true 设置为启用。
  • cronjob: 如果资源是 pod 并且它是从 cronjob 创建的,默认情况下不会添加 cronjob 名称,可以通过将 cronjob: true 设置为启用。示例
      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

Pod 资源的提供程序编辑

可用的键是

类型 描述

kubernetes.namespace

字符串

Pod 的命名空间

kubernetes.namespace_uid

字符串

Pod 的命名空间的 UID

kubernetes.namespace_labels.*

对象

Pod 的命名空间的标签

kubernetes.namespace_annotations.*

对象

Pod 的命名空间的注释

kubernetes.pod.name

字符串

Pod 的名称

kubernetes.pod.uid

字符串

Pod 的 UID

kubernetes.pod.ip

字符串

Pod 的 IP

kubernetes.labels.*

对象

Pod 标签的对象

kubernetes.annotations.*

对象

Pod 注释的对象

kubernetes.container.name

字符串

容器的名称

kubernetes.container.runtime

字符串

容器的运行时

kubernetes.container.id

字符串

容器的 ID

kubernetes.container.image

字符串

容器的镜像

kubernetes.container.port

字符串

容器的端口(如果定义)

kubernetes.container.port_name

字符串

容器的端口名称(如果定义)

kubernetes.node.name

字符串

节点的名称

kubernetes.node.uid

字符串

节点的 UID

kubernetes.node.hostname

字符串

节点的主机名

kubernetes.node.labels.*

字符串

节点的标签

kubernetes.node.annotations.*

字符串

节点的注释

kubernetes.deployment.name.*

字符串

Pod 的部署名称(如果存在)

kubernetes.statefulset.name.*

字符串

Pod 的 StatefulSet 名称(如果存在)

kubernetes.replicaset.name.*

字符串

Pod 的 ReplicaSet 名称(如果存在)

这些是在配置模板中可用的字段。 kubernetes.* 字段将在每个发出的事件中可用。

kubernetes.labels.*kubernetes.annotations.* 在配置模板中使用时不会被 dedote,不应与最终 Elasticsearch 文档中添加的标签和注释混淆,这些标签和注释默认情况下会被 dedote。有关示例,请参阅 基于条件的自动发现

请注意,并非所有这些字段默认情况下都可用,需要特殊的配置选项才能包含它们。

例如,如果 Kubernetes 提供程序提供以下清单

[
    {
       "id": "1",
       "mapping:": {"namespace": "kube-system", "pod": {"name": "kube-controllermanger"}},
       "processors": {"add_fields": {"kuberentes.namespace": "kube-system", "kubernetes.pod": {"name": "kube-controllermanger"}}
    {
        "id": "2",
        "mapping:": {"namespace": "kube-system", "pod": {"name": "kube-scheduler"}},
        "processors": {"add_fields": {"kubernetes.namespace": "kube-system", "kubernetes.pod": {"name": "kube-scheduler"}}
    }
]

Elastic Agent 会自动在结果前面加上 kubernetes

[
    {"kubernetes": {"id": "1", "namespace": {"name": "kube-system"}, "pod": {"name": "kube-controllermanger"}},
    {"kubernetes": {"id": "2", "namespace": {"name": "kube-system"}, "pod": {"name": "kube-scheduler"}},
]

此外,Kubernetes 元数据默认情况下会添加到每个事件中。

节点资源的提供程序编辑

providers.kubernetes:
  node: ${NODE_NAME}
  scope: node
  #kube_config: /Users/elastic-agent/.kube/config
  #sync_period: 600s
  #cleanup_timeout: 60s
  resources:
    node:
      enabled: true

此资源默认情况下已启用,但在本示例中,我们为了清晰起见明确定义了它。

可用的键是

类型 描述

kubernetes.labels.*

对象

节点标签的对象

kubernetes.annotations.*

对象

节点标签的对象

kubernetes.node.name

字符串

节点的名称

kubernetes.node.uid

字符串

节点的 UID

kubernetes.node.hostname

字符串

节点的主机名

服务资源的提供程序编辑

providers.kubernetes:
  node: ${NODE_NAME}
  scope: cluster
  #kube_config: /Users/elastic-agent/.kube/config
  #sync_period: 600s
  #cleanup_timeout: 60s
  resources:
    service:
      enabled: true

请注意,此资源仅在 scope: cluster 设置下可用,而 node 不能用作范围。

可用的键是

类型 描述

kubernetes.namespace

字符串

服务的命名空间

kubernetes.namespace_uid

字符串

服务的命名空间的 UID

kubernetes.namespace_labels.*

对象

服务的命名空间的标签

kubernetes.namespace_annotations.*

对象

服务的命名空间的注释

kubernetes.labels.*

对象

服务的标签的对象

kubernetes.annotations.*

对象

服务的标签的对象

kubernetes.service.name

字符串

服务的名称

kubernetes.service.uid

字符串

服务的 UID

kubernetes.selectors.*

字符串

Kubernetes 选择器

有关为自动发现塑造动态输入的更多信息,请参阅 使用 Elastic Agent 进行 Kubernetes 自动发现