github.com/galamsiva2020/kubernetes-heapster-monitoring@v0.0.0-20210823134957-3c1baa7c1e70/metrics/core/labels.go (about)

     1  // Copyright 2015 Google Inc. All Rights Reserved.
     2  //
     3  // Licensed under the Apache License, Version 2.0 (the "License");
     4  // you may not use this file except in compliance with the License.
     5  // You may obtain a copy of the License at
     6  //
     7  //     http://www.apache.org/licenses/LICENSE-2.0
     8  //
     9  // Unless required by applicable law or agreed to in writing, software
    10  // distributed under the License is distributed on an "AS IS" BASIS,
    11  // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    12  // See the License for the specific language governing permissions and
    13  // limitations under the License.
    14  
    15  package core
    16  
    17  // Definition of labels supported in MetricSet.
    18  
    19  var (
    20  	LabelMetricSetType = LabelDescriptor{
    21  		Key:         "type",
    22  		Description: "Type of the metrics set (container, pod, namespace, node, cluster)",
    23  	}
    24  	MetricSetTypeSystemContainer = "sys_container"
    25  	MetricSetTypePodContainer    = "pod_container"
    26  	MetricSetTypePod             = "pod"
    27  	MetricSetTypeNamespace       = "ns"
    28  	MetricSetTypeNode            = "node"
    29  	MetricSetTypeCluster         = "cluster"
    30  
    31  	LabelPodId = LabelDescriptor{
    32  		Key:         "pod_id",
    33  		Description: "The unique ID of the pod",
    34  	}
    35  	LabelPodName = LabelDescriptor{
    36  		Key:         "pod_name",
    37  		Description: "The name of the pod",
    38  	}
    39  	LabelNamespaceName = LabelDescriptor{
    40  		Key:         "namespace_name",
    41  		Description: "The name of the namespace",
    42  	}
    43  	LabelPodNamespaceUID = LabelDescriptor{
    44  		Key:         "namespace_id",
    45  		Description: "The UID of namespace of the pod",
    46  	}
    47  	LabelContainerName = LabelDescriptor{
    48  		Key:         "container_name",
    49  		Description: "User-provided name of the container or full container name for system containers",
    50  	}
    51  	LabelLabels = LabelDescriptor{
    52  		Key:         "labels",
    53  		Description: "Comma-separated list of user-provided labels",
    54  	}
    55  	LabelNodename = LabelDescriptor{
    56  		Key:         "nodename",
    57  		Description: "nodename where the container ran",
    58  	}
    59  	LabelHostname = LabelDescriptor{
    60  		Key:         "hostname",
    61  		Description: "Hostname where the container ran",
    62  	}
    63  	LabelResourceID = LabelDescriptor{
    64  		Key:         "resource_id",
    65  		Description: "Identifier(s) specific to a metric",
    66  	}
    67  	LabelHostID = LabelDescriptor{
    68  		Key:         "host_id",
    69  		Description: "Identifier specific to a host. Set by cloud provider or user",
    70  	}
    71  	LabelContainerBaseImage = LabelDescriptor{
    72  		Key:         "container_base_image",
    73  		Description: "User-defined image name that is run inside the container",
    74  	}
    75  	// The label is populated only for GCM
    76  	LabelCustomMetricName = LabelDescriptor{
    77  		Key:         "custom_metric_name",
    78  		Description: "User-defined name of the exported custom metric",
    79  	}
    80  	LabelGCEResourceID = LabelDescriptor{
    81  		Key:         "resource_id",
    82  		Description: "Resource id for nodes specific for GCE.",
    83  	}
    84  	LabelGCEResourceType = LabelDescriptor{
    85  		Key:         "resource_type",
    86  		Description: "Resource types for nodes specific for GCE.",
    87  	}
    88  	LabelNodeSchedulable = LabelDescriptor{
    89  		Key:         "schedulable",
    90  		Description: "Node schedulable status.",
    91  	}
    92  	LabelVolumeName = LabelDescriptor{
    93  		Key:         "volume_name",
    94  		Description: "The name of the volume.",
    95  	}
    96  	LabelAcceleratorMake = LabelDescriptor{
    97  		Key:         "make",
    98  		Description: "Make of the accelerator (nvidia, amd, google etc.)",
    99  	}
   100  	LabelAcceleratorModel = LabelDescriptor{
   101  		Key:         "model",
   102  		Description: "Model of the accelerator (tesla-p100, tesla-k80 etc.)",
   103  	}
   104  	LabelAcceleratorID = LabelDescriptor{
   105  		Key:         "accelerator_id",
   106  		Description: "ID of the accelerator",
   107  	}
   108  )
   109  
   110  type LabelDescriptor struct {
   111  	// Key to use for the label.
   112  	Key string `json:"key,omitempty"`
   113  
   114  	// Description of the label.
   115  	Description string `json:"description,omitempty"`
   116  }
   117  
   118  var commonLabels = []LabelDescriptor{
   119  	LabelNodename,
   120  	LabelHostname,
   121  	LabelHostID,
   122  }
   123  
   124  var containerLabels = []LabelDescriptor{
   125  	LabelContainerName,
   126  	LabelContainerBaseImage,
   127  }
   128  
   129  var podLabels = []LabelDescriptor{
   130  	LabelPodName,
   131  	LabelPodId,
   132  	LabelPodNamespaceUID,
   133  	LabelLabels,
   134  }
   135  
   136  var metricLabels = []LabelDescriptor{
   137  	LabelResourceID,
   138  }
   139  
   140  var customMetricLabels = []LabelDescriptor{
   141  	LabelCustomMetricName,
   142  }
   143  
   144  var acceleratorLabels = []LabelDescriptor{
   145  	LabelAcceleratorMake,
   146  	LabelAcceleratorModel,
   147  	LabelAcceleratorID,
   148  }
   149  
   150  // Labels exported to GCM. The number of labels that can be exported to GCM is limited by 10.
   151  var gcmLabels = []LabelDescriptor{
   152  	LabelMetricSetType,
   153  	LabelPodName,
   154  	LabelNamespaceName,
   155  	LabelHostname,
   156  	LabelHostID,
   157  	LabelContainerName,
   158  	LabelContainerBaseImage,
   159  	LabelCustomMetricName,
   160  	LabelResourceID,
   161  }
   162  
   163  var gcmNodeAutoscalingLabels = []LabelDescriptor{
   164  	LabelGCEResourceID,
   165  	LabelGCEResourceType,
   166  	LabelHostname,
   167  }
   168  
   169  func CommonLabels() []LabelDescriptor {
   170  	result := make([]LabelDescriptor, len(commonLabels))
   171  	copy(result, commonLabels)
   172  	return result
   173  }
   174  
   175  func ContainerLabels() []LabelDescriptor {
   176  	result := make([]LabelDescriptor, len(containerLabels))
   177  	copy(result, containerLabels)
   178  	return result
   179  }
   180  
   181  func PodLabels() []LabelDescriptor {
   182  	result := make([]LabelDescriptor, len(podLabels))
   183  	copy(result, podLabels)
   184  	return result
   185  }
   186  
   187  func MetricLabels() []LabelDescriptor {
   188  	result := make([]LabelDescriptor, len(metricLabels)+len(customMetricLabels))
   189  	copy(result, metricLabels)
   190  	copy(result, customMetricLabels)
   191  	return result
   192  }
   193  
   194  func SupportedLabels() []LabelDescriptor {
   195  	result := CommonLabels()
   196  	result = append(result, PodLabels()...)
   197  	return append(result, MetricLabels()...)
   198  }
   199  
   200  func GcmLabels() map[string]LabelDescriptor {
   201  	result := make(map[string]LabelDescriptor, len(gcmLabels))
   202  	for _, l := range gcmLabels {
   203  		result[l.Key] = l
   204  	}
   205  	return result
   206  }
   207  func GcmNodeAutoscalingLabels() map[string]LabelDescriptor {
   208  	result := make(map[string]LabelDescriptor, len(gcmNodeAutoscalingLabels))
   209  	for _, l := range gcmNodeAutoscalingLabels {
   210  		result[l.Key] = l
   211  	}
   212  	return result
   213  }