Resource attributes and the VerOps entity model
The attribute contract: which OpenTelemetry resource attributes turn telemetry into Services, Servers and Containers.
The contract
VerOps discovers entities from OpenTelemetry semantic-convention resource attributes — nothing proprietary. Set the standard attribute and the entity appears; that's the whole rule. Dots in attribute names become underscores internally (host.name → the host_name label), but you always set the dotted semantic-convention name on your resource.
| Resource attribute | Entity | Where it appears | Required? |
|---|---|---|---|
service.name | Service | Service map, APM, trace search | Always set it |
host.name | Server | Infrastructure → Servers | For hosts |
container.name | Container | Infrastructure → Containers | For containers |
k8s.namespace.name, k8s.pod.name, k8s.deployment.name, k8s.container.name, k8s.node.name | Kubernetes context | Enriches containers/servers | In Kubernetes |
Services — service.name
Every span and every metric should carry service.name. It's how traces form a service map and how metrics are attributed. Without it, data is labelled unknown-service. Set it once, at the resource level:
export OTEL_SERVICE_NAME=payments-api
# or in a Collector:
processors:
resource:
attributes:
- { key: service.name, value: payments-api, action: upsert }
Servers — host.name
A host appears under Infrastructure → Servers when its system.* metrics carry host.name. The Servers tab discovers hosts by grouping on that attribute; metrics with an empty host.name are stored but never listed as a server.
Don't hard-code it — let the Collector detect it with the resourcedetection processor:
processors:
resourcedetection:
detectors: [env, system]
system:
hostname_sources: [os]
Put resourcedetection in front of batch in your metrics pipeline and every host reports under its real name.
Containers — container.name
A container appears under Infrastructure → Containers when its container-level metrics carry container.name. That attribute is the entire requirement — set it and the container is listed, whether the metrics come from Kubernetes/cAdvisor or from the OpenTelemetry docker_stats receiver for a standalone Docker host.
Standard container-metrics receivers set container.name for you automatically:
- Standalone Docker → the
docker_statsreceiver. - Kubernetes → the
kubeletstatsreceiver (per-container cAdvisor metrics).
Useful companion attributes that enrich a container when present: container.id, container.image.name, container.image.tag, plus the k8s.* set in Kubernetes.
Kubernetes — k8s.*
In Kubernetes, add the k8sattributes processor so pods, deployments, namespaces and nodes are attached to your telemetry. Combined with container.name, containers show their namespace/pod/deployment in the Containers tab and can be filtered by them.
Rule of thumb
Name the thing you want to see.service.namefor a service,host.namefor a server,container.namefor a container. Use the standard receivers/processors (resourcedetection,docker_stats,kubeletstats,k8sattributes) and these attributes are set for you — no VerOps-specific configuration.