opentelemetry-rust
opentelemetry-rust copied to clipboard
Add k8s ResourceDetector
I need a way to specify pod/namespace/node as otel attributes from env vars
OTEL_RESOURCE_ATTRIBUTES
will not work for k8s with dynamic values, because k8s can't map(k=v).join(',') required attributes. It should be separate envs
- name: K8S_POD_NAME
valueFrom:
fieldRef:
fieldPath: metadata.name
- name: K8S_NAMESPACE_NAME
valueFrom:
fieldRef:
fieldPath: metadata.namespace
- name: K8S_NODE_NAME
valueFrom:
fieldRef:
fieldPath: spec.nodeName
I can do it manually, but may be i can get a better solution
// Use default resource
let resource = Resource::from_detectors(Duration::from_secs(0), vec![
Box::new(SdkProvidedResourceDetector),
Box::new(EnvResourceDetector::new()),
])
// Merge with custom or write own ResourceDetector
.merge(&Resource::new(vec![
opentelemetry_semantic_conventions::resource::K8S_POD_NAME.string(std::env::var("K8S_POD_NAME")?),
opentelemetry_semantic_conventions::resource::K8S_NAMESPACE_NAME.string("K8S_NAMESPACE_NAME"),
opentelemetry_semantic_conventions::resource::K8S_NODE_NAME.string("K8S_NODE_NAME"),
]));