Otelcol处理器.k8sattributes
otelcol.processor.k8sattributes
接受来自其他otelcol
组件的遥测数据,并将Kubernetes元数据添加到跨度、日志或指标的资源属性中。
注意:
otelcol.processor.k8sattributes
是上游OpenTelemetry Collectork8sattributes
加工器的包装器。如果需要,错误报告或功能请求将被转发到上游仓库。
您可以通过提供不同的标签来指定多个otelcol.processor.k8sattributes
组件。
用法:
otelcol.processor.k8sattributes "LABEL" {
output {
metrics = [...]
logs = [...]
traces = [...]
}
}
参数:
以下参数被支持:
名称 | 类型 | 描述 | 默认值 | 必需 |
---|---|---|---|---|
auth_type | 字符串 | 连接到Kubernetes API时的身份验证方法。 | serviceAccount | 否 |
passthrough | 布尔值 | 按原样传递信号,仅添加一个k8s.pod.ip 资源属性。 | false | 否 |
auth_type
的支持值包括:
none
:不需要身份验证。serviceAccount
:使用Kubernetes为每个Pod自动提供的内置服务帐户。kubeConfig
:使用kubectl使用的本地凭证。tls
:使用客户端TLS身份验证。
将passthrough
设置为true
将启用otelcol.processor.k8sattributes
的“passthrough模式”
- 仅添加一个
k8s.pod.ip
资源属性。 - 不会添加其他元数据。
- 不会访问Kubernetes API。
- 为了正确检测Pod IP,Alloy必须从服务直接接收跨度。
passthrough
设置在将Alloy配置为Kubernetes部署时很有用。作为部署运行的Alloy在没有任何知名IP属性的情况下无法检测生成遥测数据的Pod的IP地址。如果部署Alloy从作为DaemonSet部署的Alloy接收遥测数据,那么有些属性可能缺失。作为解决方案,您可以配置passthrough
设置为true
的DaemonSet Alloy。
阻挡:
在otelcol.processor.k8sattributes
定义中支持以下阻挡:
分层 | 阻挡 | 描述 | 必需 |
---|---|---|---|
output | output | 配置将接收到的遥测数据发送到何处。 | 是 |
extract | extract | 从Kubernetes中提取数据的规定。 | 否 |
extract > annotation | annotation | 从Kubernetes注解中创建资源属性。 | 否 |
extract > label | extract_label | 从Kubernetes标签中创建资源属性。 | 否 |
filter | filter | 过滤从Kubernetes加载的数据。 | 否 |
filter > field | field | 通过通用的Kubernetes字段过滤Pod。 | 否 |
filter > label | filter_label | 通过 Kubernetes 标签过滤 Pod。 | 否 |
pod_association | pod_association | 将 Pod 元数据与遥测信号关联的规则。 | 否 |
pod_association > source | source | 标识 Pod 的源信息。 | 否 |
exclude | exclude | 排除 Pod 被处理。 | 否 |
exclude > pod | pod | Pod 信息。 | 否 |
debug_metrics | debug_metrics | 配置此组件生成的指标以监控其状态。 | 否 |
>
符号表示更深的嵌套级别。例如,extract > annotation
表示在 extract
块内定义的 annotation
块。
extract 块
extract
块配置从 Pod 中提取哪些元数据、注释和标签。
支持以下属性
名称 | 类型 | 描述 | 默认值 | 必需 |
---|---|---|---|---|
metadata | list(string) | 预先配置的元数据键以添加。 | 请参见以下内容 | 否 |
当前支持的 metadata
键包括
k8s.pod.name
k8s.pod_uid
k8s.deployment.name
k8s.node.name
k8s.namespace.name
k8s.pod.start_time
k8s.replicaset.name
k8s.replicaset_uid
k8s.daemonset.name
k8s.daemonset_uid
k8s.job.name
k8s.job_uid
k8s.cronjob.name
k8s.statefulset.name
k8s.statefulset_uid
k8s.container.name
container.image.name
container.image.tag
container.id
默认情况下,如果未指定 metadata
,则以下字段将被提取并添加到跨度、指标和日志中作为资源属性
k8s.pod.name
k8s.pod_uid
k8s.pod.start_time
k8s.namespace.name
k8s.node.name
k8s.deployment.name
(如果 Pod 受部署控制)k8s.container.name
(需要设置附加属性:container.id
)container.image.name
(需要设置以下附加属性之一:container.id
或k8s.container.name
)container.image.tag
(需要设置以下附加属性之一:container.id
或k8s.container.name
)
annotation 块
annotation
块配置如何提取 Kubernetes 注释。
支持以下属性
名称 | 类型 | 描述 | 默认值 | 必需 |
---|---|---|---|---|
from | 字符串 | 标签或注释的来源。允许的值是 pod 、namespace 和 node 。 | pod | 否 |
key_regex | 字符串 | 用于提取与正则表达式匹配的键的正则表达式。 | "" | 否 |
key | 字符串 | 注释或标签名称。此键必须与注释或标签名称完全匹配。 | "" | 否 |
regex | 字符串 | 用于从复杂字段值中提取子字符串的可选字段。 | "" | 否 |
tag_name | 字符串 | 添加到日志、指标或跨度中的资源属性名称。 | "" | 否 |
当您不指定 tag_name
时,将使用以下格式的默认标签名称
k8s.pod.annotations.<annotation key>
k8s.pod.labels.<label key>
例如,如果未指定 tag_name
且键为 git_sha
,则属性名称将为 k8s.pod.annotations.git_sha
。
您可以选择设置 key
属性或 key_regex
属性,但不能同时设置。当存在 key_regex
时,tag_name
支持对命名捕获和定位捕获的回显。
例如,假设您的 Pod 规范包含以下标签
app.kubernetes.io/component: mysql
app.kubernetes.io/version: 5.7.21
如果您想为所有具有前缀 app.kubernetes.io/
的标签添加标签并删除前缀,则可以指定以下提取规则
extract {
label {
from = "pod"
key_regex = "kubernetes.io/(.*)"
tag_name = "$1"
}
}
这些规则将 component
和 version
标签添加到跨度或指标。
您可以将 from
属性设置为 "pod"
或 "namespace"
。
label 块
label
块配置如何提取 Kubernetes 标签。
支持以下属性
名称 | 类型 | 描述 | 默认值 | 必需 |
---|---|---|---|---|
from | 字符串 | 标签或注释的来源。允许的值是 pod 、namespace 和 node 。 | pod | 否 |
key_regex | 字符串 | 用于提取与正则表达式匹配的键的正则表达式。 | "" | 否 |
key | 字符串 | 注释或标签名称。此键必须与注释或标签名称完全匹配。 | "" | 否 |
regex | 字符串 | 用于从复杂字段值中提取子字符串的可选字段。 | "" | 否 |
tag_name | 字符串 | 添加到日志、指标或跨度中的资源属性名称。 | "" | 否 |
当您不指定 tag_name
时,将使用以下格式的默认标签名称
k8s.pod.annotations.<annotation key>
k8s.pod.labels.<label key>
例如,如果未指定 tag_name
且键为 git_sha
,则属性名称将为 k8s.pod.annotations.git_sha
。
您可以选择设置 key
属性或 key_regex
属性,但不能同时设置。当存在 key_regex
时,tag_name
支持对命名捕获和定位捕获的回显。
例如,假设您的 Pod 规范包含以下标签
app.kubernetes.io/component: mysql
app.kubernetes.io/version: 5.7.21
如果您想为所有具有前缀 app.kubernetes.io/
的标签添加标签并删除前缀,则可以指定以下提取规则
extract {
label {
from = "pod"
key_regex = "kubernetes.io/(.*)"
tag_name = "$1"
}
}
这些规则将 component
和 version
标签添加到跨度或指标。
您可以将 from
属性设置为 "pod"
或 "namespace"
。
filter 块
filter
块配置获取数据的节点以及要获取的字段和标签。
支持以下属性
名称 | 类型 | 描述 | 默认值 | 必需 |
---|---|---|---|---|
node | 字符串 | 配置 Kubernetes 节点名或主机名。 | "" | 否 |
namespace | 字符串 | 按提供的命名空间过滤所有 Pod。忽略所有其他 Pod。 | "" | 否 |
如果指定了 node
,则 otelcol.processor.k8sattributes
将忽略指定节点上运行的任何 Pod。
field 块
《字段》块允许您通过通用的Kubernetes字段对Pod进行筛选。
支持以下属性
名称 | 类型 | 描述 | 默认值 | 必需 |
---|---|---|---|---|
key | 字符串 | 过滤器可以使用的键或字段名称或标签。 | 是 | |
值 | 字符串 | 过滤器可以使用与键关联的值。 | 是 | |
操作 | 字符串 | 在给定的键值对上应用筛选操作的操作。 | 等于 | 否 |
对于操作
,允许以下值:
等于
:字段值必须等于提供的值。不等于
:字段值必须不等于提供的值。存在
:字段值必须存在。仅适用于annotation
字段。不存在
:字段值必须不存在。仅适用于annotation
字段。
label 块
label
块允许您通过通用的Kubernetes标签对Pod进行筛选。
支持以下属性
名称 | 类型 | 描述 | 默认值 | 必需 |
---|---|---|---|---|
key | 字符串 | 过滤器可以使用的键或字段名称或标签。 | 是 | |
值 | 字符串 | 过滤器可以使用与键关联的值。 | 是 | |
操作 | 字符串 | 在给定的键值对上应用筛选操作的操作。 | 等于 | 否 |
对于操作
,允许以下值:
等于
:字段值必须等于提供的值。不等于
:字段值必须不等于提供的值。存在
:字段值必须存在。仅适用于annotation
字段。不存在
:字段值必须不存在。仅适用于annotation
字段。
pod_association块
pod_association
块配置将日志/跟踪/度量关联到Pod的规则。
pod_association
块不支持任何参数,并且完全通过子块进行配置。
pod_association
块可以重复多次,以配置额外的规则。
示例
pod_association {
source {
from = "resource_attribute"
name = "k8s.pod.ip"
}
}
pod_association {
source {
from = "resource_attribute"
name = "k8s.pod.uid"
}
source {
from = "connection"
}
}
source块
source
块配置Pod关联规则。这用于k8sattributes
处理器以确定与此遥测信号关联的Pod。
当在pod_association
块内部指定多个source
块时,这两个source
块都必须匹配才能将Pod与遥测信号关联。
支持以下属性
名称 | 类型 | 描述 | 默认值 | 必需 |
---|---|---|---|---|
from | 字符串 | 关联方法。目前支持resource_attribute 和connection | 是 | |
名称 | 字符串 | 名称代表提取出的键名。例如,ip ,pod_uid ,k8s.pod.ip | 否 |
exclude块
exclude
块配置要从处理器中排除的Pod。
注意:
默认排除名称为jaeger-agent
或jaeger-collector
的Pod。
pod块
pod
块配置要从处理器中排除的Pod。
支持以下属性
名称 | 类型 | 描述 | 默认值 | 必需 |
---|---|---|---|---|
名称 | 字符串 | Pod的名称 | 是 |
output块
output
块配置要将结果遥测数据转发到的组件集。
以下参数被支持:
名称 | 类型 | 描述 | 默认值 | 必需 |
---|---|---|---|---|
日志 | otelcol.Consumer列表 | 要发送日志的消费者列表。 | [] | 否 |
度量 | otelcol.Consumer列表 | 要发送度量的消费者列表。 | [] | 否 |
跟踪 | otelcol.Consumer列表 | 要发送跟踪的消费者列表。 | [] | 否 |
您必须指定output
块,但所有参数都是可选的。默认情况下,遥测数据将被丢弃。根据需要配置metrics
,logs
和traces
参数,将遥测数据发送到其他组件。
debug_metrics块
debug_metrics
块配置此组件生成的度量以监控其状态。
以下参数被支持:
名称 | 类型 | 描述 | 默认值 | 必需 |
---|---|---|---|---|
disable_high_cardinality_metrics | 布尔值 | 是否禁用某些高基数度量。 | 是 | 否 |
级别 | 字符串 | 控制包装收集器发出的度量详细程度。 | "详细" | 否 |
disable_high_cardinality_metrics
是Grafana Alloy在OpenTelemetry Collector中的等效于telemetry.disableHighCardinalityMetrics
功能门。它移除可能导致高基数度量的属性。例如,从HTTP和gRPC连接的度量中移除含有IP地址和端口号的属性。
注意:
如果已配置,则disable_high_cardinality_metrics
仅适用于otelcol.exporter.*
和otelcol.receiver.*
组件。
级别
是Alloy在OpenTelemetry Collector中的等效于telemetry.metrics.level
功能门。可能的值有"none"
,"basic"
,"normal"
和"detailed"
。
导出字段
以下字段被导出并可由其他组件引用
名称 | 类型 | 描述 |
---|---|---|
输入 | otelcol.Consumer | 一个其他组件可以使用它来发送遥测数据的值。 |
input
接受任何遥测信号(指标、日志或跟踪)的otelcol.Consumer
数据。
组件健康状态
otelcol.processor.k8sattributes
只有在配置无效时才会报告为不稳定。
调试信息
otelcol.processor.k8sattributes
不公开任何特定组件的调试信息。
示例
基本用法
在大多数情况下,这已经足够开始。它将为所有日志、指标和跟踪添加这些资源属性
k8s.namespace.name
k8s.pod.name
k8s.pod_uid
k8s.pod.start_time
k8s.deployment.name
k8s.node.name
示例
otelcol.receiver.otlp "default" {
http {}
grpc {}
output {
metrics = [otelcol.processor.k8sattributes.default.input]
logs = [otelcol.processor.k8sattributes.default.input]
traces = [otelcol.processor.k8sattributes.default.input]
}
}
otelcol.processor.k8sattributes "default" {
output {
metrics = [otelcol.exporter.otlp.default.input]
logs = [otelcol.exporter.otlp.default.input]
traces = [otelcol.exporter.otlp.default.input]
}
}
otelcol.exporter.otlp "default" {
client {
endpoint = env("OTLP_ENDPOINT")
}
}
添加额外的元数据和标签
otelcol.receiver.otlp "default" {
http {}
grpc {}
output {
metrics = [otelcol.processor.k8sattributes.default.input]
logs = [otelcol.processor.k8sattributes.default.input]
traces = [otelcol.processor.k8sattributes.default.input]
}
}
otelcol.processor.k8sattributes "default" {
extract {
label {
from = "pod"
key_regex = "(.*)/(.*)"
tag_name = "$1.$2"
}
metadata = [
"k8s.namespace.name",
"k8s.deployment.name",
"k8s.statefulset.name",
"k8s.daemonset.name",
"k8s.cronjob.name",
"k8s.job.name",
"k8s.node.name",
"k8s.pod.name",
"k8s.pod.uid",
"k8s.pod.start_time",
]
}
output {
metrics = [otelcol.exporter.otlp.default.input]
logs = [otelcol.exporter.otlp.default.input]
traces = [otelcol.exporter.otlp.default.input]
}
}
otelcol.exporter.otlp "default" {
client {
endpoint = env("OTLP_ENDPOINT")
}
}
将 Kubernetes 元数据添加到 Prometheus 指标
otelcol.processor.k8sattributes
以资源属性的形式向指标信号添加元数据。为了将元数据作为 Prometheus 指标标签显示,必须将 OTLP 属性从资源属性转换为数据点属性。实现该目的的一种方法是通过使用一个otelcol.processor.transform
组件。
otelcol.receiver.otlp "default" {
http {}
grpc {}
output {
metrics = [otelcol.processor.k8sattributes.default.input]
}
}
otelcol.processor.k8sattributes "default" {
extract {
label {
from = "pod"
}
metadata = [
"k8s.namespace.name",
"k8s.pod.name",
]
}
output {
metrics = [otelcol.processor.transform.add_kube_attrs.input]
}
}
otelcol.processor.transform "add_kube_attrs" {
error_mode = "ignore"
metric_statements {
context = "datapoint"
statements = [
"set(attributes[\"k8s.pod.name\"], resource.attributes[\"k8s.pod.name\"])",
"set(attributes[\"k8s.namespace.name\"], resource.attributes[\"k8s.namespace.name\"])",
]
}
output {
metrics = [otelcol.exporter.prometheus.default.input]
}
}
otelcol.exporter.prometheus "default" {
forward_to = [prometheus.remote_write.mimir.receiver]
}
prometheus.remote_write "mimir" {
endpoint {
url = "http://mimir:9009/api/v1/push"
}
}
兼容组件
otelcol.processor.k8sattributes
可以接受以下组件的参数
otelcol.processor.k8sattributes
有可以被以下组件消费的导出项
注意:
某些组件的连接可能不合理,或者组件可能需要进一步配置才能正确工作。请参阅链接的文档以获取更多详细信息。