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
(可选) 指定停止容器运行配置之前的空闲时间。默认为 60s
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。当存储需要特殊处理以避免过载存储输出的标签和注释时,这些设置非常有用。nodenamespace 元数据的丰富功能可以通过设置 enabled: false 来单独禁用。通过结合使用 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.* 未进行去点处理,不应与添加到最终 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 自动发现