opentelemetry-rust icon indicating copy to clipboard operation
opentelemetry-rust copied to clipboard

Add k8s ResourceDetector

Open sergeyshaykhullin opened this issue 3 years ago • 0 comments

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"),
  ]));

sergeyshaykhullin avatar Jan 15 '22 09:01 sergeyshaykhullin