in prometheus-to-sd/translator/translator.go [482:553]
func getMonitoredResourceFromLabels(config *config.CommonConfig, labels []*dto.LabelPair) *monitoredres.MonitoredResource {
if config.SourceConfig.CustomResourceType != "" {
return getCustomMonitoredResource(config)
}
container, pod, namespace := config.SourceConfig.PodConfig.GetPodInfo(labels)
prefix := config.MonitoredResourceTypePrefix
if prefix == "" {
return &monitoredres.MonitoredResource{
Type: "gke_container",
Labels: map[string]string{
"project_id": config.GceConfig.Project,
"cluster_name": config.GceConfig.Cluster,
"zone": config.GceConfig.Zone,
"instance_id": config.GceConfig.Instance,
"namespace_id": namespace,
"pod_id": pod,
"container_name": container,
},
}
}
resourceLabels := make(map[string]string)
for k, v := range config.MonitoredResourceLabels {
resourceLabels[k] = v
}
if _, found := resourceLabels["project_id"]; !found {
resourceLabels["project_id"] = config.GceConfig.Project
}
if _, found := resourceLabels["cluster_name"]; !found {
resourceLabels["cluster_name"] = config.GceConfig.Cluster
}
if _, found := resourceLabels["location"]; !found {
resourceLabels["location"] = config.GceConfig.ClusterLocation
}
// When MonitoredResource type is not "k8s_*", default "instance_id" label to GCE instance name.
if prefix != "k8s_" {
if _, found := resourceLabels["instance_id"]; !found {
resourceLabels["instance_id"] = config.GceConfig.InstanceId
}
}
// When namespace and pod are unspecified, it should be written to node type.
if namespace == "" || pod == "" || pod == "machine" {
// When MonitoredResource is "k8s_node", default "node_name" label to GCE instance name.
if prefix == "k8s_" {
if _, found := resourceLabels["node_name"]; !found {
resourceLabels["node_name"] = config.GceConfig.Instance
}
}
return &monitoredres.MonitoredResource{
Type: prefix + "node",
Labels: resourceLabels,
}
}
resourceLabels["namespace_name"] = namespace
resourceLabels["pod_name"] = pod
if container == "" {
return &monitoredres.MonitoredResource{
Type: prefix + "pod",
Labels: resourceLabels,
}
}
resourceLabels["container_name"] = container
return &monitoredres.MonitoredResource{
Type: prefix + "container",
Labels: resourceLabels,
}
}