Skip to content

Commit

Permalink
receiver/k8scluster: Use OTel conventions for metadata (#2530)
Browse files Browse the repository at this point in the history
  • Loading branch information
asuresh4 authored Mar 3, 2021
1 parent 45d909c commit c0a618d
Show file tree
Hide file tree
Showing 5 changed files with 34 additions and 27 deletions.
12 changes: 6 additions & 6 deletions receiver/k8sclusterreceiver/collection/collector_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -102,10 +102,10 @@ func TestDataCollectorSyncMetadata(t *testing.T) {
resourceIDKey: "k8s.pod.uid",
resourceID: "test-pod-0-uid",
metadata: allPodMetadata(map[string]string{
"k8s.workload.kind": "StatefulSet",
"k8s.workload.name": "test-statefulset-0",
"statefulset": "test-statefulset-0",
"statefulset_uid": "test-statefulset-0-uid",
"k8s.workload.kind": "StatefulSet",
"k8s.workload.name": "test-statefulset-0",
"k8s.statefulset.name": "test-statefulset-0",
"k8s.statefulset.uid": "test-statefulset-0-uid",
}),
},
},
Expand Down Expand Up @@ -139,8 +139,8 @@ func TestDataCollectorSyncMetadata(t *testing.T) {
resourceIDKey: "k8s.pod.uid",
resourceID: "test-pod-0-uid",
metadata: allPodMetadata(map[string]string{
"kubernetes_service_test-service": "",
"k8s-app": "my-app",
"k8s.service.test-service": "",
"k8s-app": "my-app",
}),
},
},
Expand Down
17 changes: 12 additions & 5 deletions receiver/k8sclusterreceiver/collection/metadata.go
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,8 @@ const (
// Keys for K8s metadata
k8sKeyWorkLoadKind = "k8s.workload.kind"
k8sKeyWorkLoadName = "k8s.workload.name"

k8sServicePrefix = "k8s.service."
)

// KubernetesMetadata associates a resource to a set of properties.
Expand All @@ -54,19 +56,24 @@ func getGenericMetadata(om *v1.ObjectMeta, resourceType string) *KubernetesMetad
rType)] = om.GetCreationTimestamp().Format(time.RFC3339)

for _, or := range om.OwnerReferences {
metadata[strings.ToLower(or.Kind)] = or.Name
metadata[strings.ToLower(or.Kind)+"_uid"] = string(or.UID)
kind := strings.ToLower(or.Kind)
metadata[getOTelNameFromKind(kind)] = or.Name
metadata[getOTelUIDFromKind(kind)] = string(or.UID)
}

return &KubernetesMetadata{
resourceIDKey: getResourceIDKey(rType),
resourceIDKey: getOTelUIDFromKind(rType),
resourceID: metadataPkg.ResourceID(om.UID),
metadata: metadata,
}
}

func getResourceIDKey(rType string) string {
return fmt.Sprintf("k8s.%s.uid", rType)
func getOTelUIDFromKind(kind string) string {
return fmt.Sprintf("k8s.%s.uid", kind)
}

func getOTelNameFromKind(kind string) string {
return fmt.Sprintf("k8s.%s.name", kind)
}

// mergeKubernetesMetadataMaps merges maps of string (resource id) to
Expand Down
8 changes: 4 additions & 4 deletions receiver/k8sclusterreceiver/collection/metadata_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -58,10 +58,10 @@ func Test_getGenericMetadata(t *testing.T) {
"k8s.workload.name": "test-name",
"k8s.workload.kind": "ResourceType",
"resourcetype.creation_timestamp": now.Format(time.RFC3339),
"owner-kind-1": "owner1",
"owner-kind-1_uid": "owner1",
"owner-kind-2": "owner2",
"owner-kind-2_uid": "owner2",
"k8s.owner-kind-1.name": "owner1",
"k8s.owner-kind-1.uid": "owner1",
"k8s.owner-kind-2.name": "owner2",
"k8s.owner-kind-2.uid": "owner2",
"foo": "bar",
"foo1": "",
}, rm.metadata)
Expand Down
13 changes: 7 additions & 6 deletions receiver/k8sclusterreceiver/collection/pods.go
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@
package collection

import (
"fmt"
"strings"
"time"

Expand Down Expand Up @@ -146,8 +147,9 @@ func getMetadataForPod(pod *corev1.Pod, mc *metadataStore, logger *zap.Logger) m
metadata[podCreationTime] = pod.CreationTimestamp.Format(time.RFC3339)

for _, or := range pod.OwnerReferences {
metadata[strings.ToLower(or.Kind)] = or.Name
metadata[strings.ToLower(or.Kind)+"_uid"] = string(or.UID)
kind := strings.ToLower(or.Kind)
metadata[getOTelNameFromKind(kind)] = or.Name
metadata[getOTelUIDFromKind(kind)] = string(or.UID)

// defer syncing replicaset and job workload metadata.
if or.Kind == k8sKindReplicaSet || or.Kind == k8sKindJob {
Expand Down Expand Up @@ -256,7 +258,7 @@ func getPodServiceTags(pod *corev1.Pod, services cache.Store) map[string]string
serObj := ser.(*corev1.Service)
if serObj.Namespace == pod.Namespace &&
labels.Set(serObj.Spec.Selector).AsSelectorPreValidated().Matches(labels.Set(pod.Labels)) {
properties["kubernetes_service_"+serObj.Name] = ""
properties[fmt.Sprintf("%s%s", k8sServicePrefix, serObj.Name)] = ""
}
}

Expand All @@ -265,10 +267,9 @@ func getPodServiceTags(pod *corev1.Pod, services cache.Store) map[string]string

// getWorkloadProperties returns workload metadata for provided owner reference.
func getWorkloadProperties(ref *v1.OwnerReference, labelKey string) map[string]string {
kind := ref.Kind
uidKey := strings.ToLower(kind) + "_uid"
uidKey := getOTelUIDFromKind(strings.ToLower(ref.Kind))
return map[string]string{
k8sKeyWorkLoadKind: kind,
k8sKeyWorkLoadKind: ref.Kind,
k8sKeyWorkLoadName: ref.Name,
labelKey: ref.Name,
uidKey: string(ref.UID),
Expand Down
11 changes: 5 additions & 6 deletions receiver/k8sclusterreceiver/collection/pods_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -322,14 +322,15 @@ func expectedKubernetesMetadata(to testCaseOptions) map[metadata.ResourceID]*Kub
kindObjName := fmt.Sprintf("test-%s-0", kindLower)
kindObjUID := fmt.Sprintf("test-%s-0-uid", kindLower)
kindNameLabel := fmt.Sprintf("k8s.%s.name", kindLower)
kindUIDLabel := fmt.Sprintf("k8s.%s.uid", kindLower)

out := map[metadata.ResourceID]*KubernetesMetadata{
metadata.ResourceID(podUIDLabel): {
resourceIDKey: "k8s.pod.uid",
resourceID: metadata.ResourceID(podUIDLabel),
metadata: map[string]string{
kindLower: kindObjName,
kindLower + "_uid": kindObjUID,
kindNameLabel: kindObjName,
kindUIDLabel: kindObjUID,
},
},
}
Expand All @@ -340,21 +341,19 @@ func expectedKubernetesMetadata(to testCaseOptions) map[metadata.ResourceID]*Kub
if !withoutInfoFromCache {
out[metadata.ResourceID(podUIDLabel)].metadata["k8s.workload.kind"] = to.kind
out[metadata.ResourceID(podUIDLabel)].metadata["k8s.workload.name"] = kindObjName
out[metadata.ResourceID(podUIDLabel)].metadata[kindNameLabel] = kindObjName
}

// If the Pod's Owner Kind is not the actual owner (CronJobs -> Jobs and Deployments -> ReplicaSets),
// add metadata additional metadata to expected values.
if to.withParentOR {
delete(out[metadata.ResourceID(podUIDLabel)].metadata, kindNameLabel)
switch to.kind {
case "Job":
out[metadata.ResourceID(podUIDLabel)].metadata["cronjob_uid"] = "test-cronjob-0-uid"
out[metadata.ResourceID(podUIDLabel)].metadata["k8s.cronjob.uid"] = "test-cronjob-0-uid"
out[metadata.ResourceID(podUIDLabel)].metadata["k8s.cronjob.name"] = "test-cronjob-0"
out[metadata.ResourceID(podUIDLabel)].metadata["k8s.workload.name"] = "test-cronjob-0"
out[metadata.ResourceID(podUIDLabel)].metadata["k8s.workload.kind"] = "CronJob"
case "ReplicaSet":
out[metadata.ResourceID(podUIDLabel)].metadata["deployment_uid"] = "test-deployment-0-uid"
out[metadata.ResourceID(podUIDLabel)].metadata["k8s.deployment.uid"] = "test-deployment-0-uid"
out[metadata.ResourceID(podUIDLabel)].metadata["k8s.deployment.name"] = "test-deployment-0"
out[metadata.ResourceID(podUIDLabel)].metadata["k8s.workload.name"] = "test-deployment-0"
out[metadata.ResourceID(podUIDLabel)].metadata["k8s.workload.kind"] = "Deployment"
Expand Down

0 comments on commit c0a618d

Please sign in to comment.