-
Notifications
You must be signed in to change notification settings - Fork 3
/
resource.go
90 lines (81 loc) · 2.68 KB
/
resource.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
package gke
import (
"fmt"
"cloud.google.com/go/compute/metadata"
"cloud.google.com/go/logging"
"go.opentelemetry.io/otel/attribute"
"go.opentelemetry.io/otel/sdk/resource"
semconv "go.opentelemetry.io/otel/semconv/v1.7.0"
"google.golang.org/genproto/googleapis/api/monitoredres"
)
func MonitoredResource(l *logging.Client, project, clusterName, namespace, pod, containerName string) *monitoredres.MonitoredResource {
instanceId := "unknown"
zone := "unknown"
res := &monitoredres.MonitoredResource{
Type: "gke_container",
Labels: map[string]string{
"project_id": project,
"cluster_name": clusterName,
"namespace_id": namespace,
"instance_id": instanceId,
"pod_id": pod,
"container_name": containerName,
"zone": zone,
},
}
logger := l.Logger("MonitoredResource")
defer logger.Flush()
// Refine labels
var err error
instanceId, err = metadata.InstanceID()
if instanceId == "" {
logger.Log(logging.Entry{
Severity: logging.Info,
Payload: fmt.Sprintf("Error getting instance ID: %s", err),
Resource: res,
})
} else {
res.Labels["instance_id"] = instanceId
}
zone, err = metadata.Zone()
if zone == "" {
logger.Log(logging.Entry{
Severity: logging.Info,
Payload: fmt.Sprintf("Error getting zone: %s", err),
Resource: res,
})
} else {
res.Labels["zone"] = zone
}
return res
}
func MonitoredResourceFromMetaData(metadata *GKEMetaData) *monitoredres.MonitoredResource {
return &monitoredres.MonitoredResource{
Type: "gke_container",
Labels: map[string]string{
"project_id": metadata.ProjectID,
"cluster_name": metadata.ClusterName,
"namespace_id": metadata.Namespace,
"instance_id": string(metadata.InstanceID),
"pod_id": metadata.PodName,
"container_name": metadata.ContainerName,
"zone": metadata.Zone,
},
}
}
func TraceResourceFromMetaData(serviceName string, metadata *GKEMetaData) *resource.Resource {
return resource.NewWithAttributes(
"",
semconv.CloudProviderGCP,
semconv.CloudPlatformGCPKubernetesEngine,
semconv.ServiceNameKey.String(serviceName),
attribute.String("g.co/r/k8s_container/project_id", metadata.ProjectID),
attribute.String("g.co/r/k8s_container/cluster_name", metadata.ClusterName),
attribute.String("g.co/r/k8s_container/namespace", metadata.Namespace),
attribute.String("g.co/r/k8s_container/location", metadata.ClusterLocation),
attribute.String("g.co/r/k8s_container/node_name", metadata.InstanceName),
attribute.String("g.co/r/k8s_container/pod_name", metadata.PodName),
attribute.String("g.co/r/k8s_container/container_name", metadata.ContainerName),
attribute.String("g.co/r/k8s_container/zone", metadata.Zone),
)
}