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
node

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

  1. 如果 Elastic Agent 作为 Pod 部署在 Kubernetes 集群中,请使用 Pod 的主机名作为 Pod 名称来查询 Pod 元数据以获取节点名称。
  2. 如果步骤 1 失败或 Elastic Agent 部署在 Kubernetes 集群外部,请使用 machine-id 来匹配 Kubernetes 节点以获取节点名称。
  3. 如果无法通过步骤 1 或 2 发现节点,则回退到 NODE_NAME 环境变量作为默认值。如果未设置,则返回错误。
cleanup_timeout
(可选)指定停止容器正在运行的配置之前的不活动时间。默认为 60 秒
sync_period
(可选)指定列出历史资源的超时时间。
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
(可选)指定自动发现的级别。scope 可以采用 nodecluster 作为值。node 范围允许发现指定节点中的资源。cluster 范围允许集群范围的发现。在节点范围内,只能发现 podnode 资源。
resources
(可选)指定要启动自动发现的资源。可以是 podnodeservice 之一。默认情况下启用 nodepodservice 资源要求将 scope 设置为 cluster
namespace
(可选)选择要从中收集元数据的命名空间。如果未设置,处理器将从所有命名空间收集元数据。默认情况下未设置。
include_annotations
(可选)如果添加到提供程序配置中,则配置中存在的注释列表将添加到事件中。
include_labels
(可选)如果添加到提供程序配置中,则配置中存在的标签列表将添加到事件中。
exclude_labels
(可选)如果添加到提供程序配置中,则配置中存在的标签列表将从事件中排除。
labels.dedot
(可选)如果在提供程序配置中设置为 true,则标签中的 . 将替换为 _。默认情况下为 true
annotations.dedot
(可选)如果在提供程序配置中设置为 true,则注释中的 . 将替换为 _。默认情况下为 true
add_resource_metadata

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

  • nodenamespace:为来自节点和命名空间的额外元数据指定标签和注释过滤器。默认情况下包含所有标签,而注释不包含。要更改默认行为,可以定义 include_labelsexclude_labelsinclude_annotations。当存储需要特殊处理以避免存储输出过载的标签和注释时,这些设置非常有用。可以通过设置 enabled: false 来单独禁用 nodenamespace 元数据的丰富。通过将 use_regex_include: trueinclude_labels 结合使用,并在设置 use_regex_exclude: true 时与 exclude_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.* 未去点,不应与最终 Elasticsearch 文档中添加的默认情况下已去点的标签和注释混淆。有关示例,请参阅 基于条件的自动发现

请注意,并非所有这些字段都默认可用,需要特殊配置选项才能将其包括在内。

例如,如果 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 自动发现