如何在OpenTelemetry的K8s属性处理器中添加k8s.service.name及自定义属性
无需修改代码添加K8s属性的实现方案
1. 直接配置获取k8s.cluster.name
K8s Attributes Processor本身支持通过配置指定集群名称,无需修改代码。在处理器配置中添加cluster字段即可:
processors: k8sattributes: # 直接设置集群名称 cluster: "your-cluster-identifier" # 保留原有的Pod关联、元数据提取配置 pod_association: - sources: - from: resource_attribute name: k8s.pod.ip extract: metadata: - k8s.pod.name - k8s.pod.namespace - k8s.node.name # 其他需要提取的元数据项
2. 借助Transform Processor生成k8s.service.name
如果你的Pod通过标签(如app)与Service关联,可以用Transform Processor从已提取的Pod标签属性中生成k8s.service.name:
processors: transform: log_statements: - context: log statements: # 假设Pod的app标签对应Service名称,将其复制为k8s.service.name - set(attributes["k8s.service.name"], attributes["k8s.labels.app"]) where attributes["k8s.labels.app"] != nil
如果Service与Pod的关联规则不同(比如使用特定标签service-name),只需修改表达式中的标签键即可。
3. 添加自定义属性的通用方法
使用Attributes Processor可以直接插入固定值或从环境变量、现有属性派生的自定义属性:
processors: attributes: actions: # 添加固定值自定义属性 - action: insert key: "custom.team" value: "devops" # 从环境变量提取属性(需确保Collector容器能访问该环境变量) - action: insert key: "deployment.env" from_env: "DEPLOYMENT_ENV" # 从现有属性派生新属性 - action: insert key: "k8s.pod.fullname" value: "{{k8s.pod.namespace}}/{{k8s.pod.name}}"
串联处理器到Pipeline
将上述处理器按顺序加入日志Pipeline,确保K8s属性先提取,再做转换和自定义属性添加:
service: pipelines: logs: receivers: [your-log-receiver] # 替换为实际的日志接收器(如filelog、journald等) processors: [k8sattributes, transform, attributes] exporters: [your-exporter] # 替换为实际的导出器(如otlp、prometheus等)
内容的提问来源于stack exchange,提问作者Ramu Mangalarapu
相关产品推荐
相关产品推荐

