Documentation ¶
Overview ¶
Copyright 2016 Google Inc. All Rights Reserved.
Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License.
Index ¶
- Constants
- Variables
- func ClusterKey() string
- func GcmLabels() map[string]LabelDescriptor
- func GcmNodeAutoscalingLabels() map[string]LabelDescriptor
- func IsNodeAutoscalingMetric(name string) bool
- func NamespaceKey(namespace string) string
- func NodeContainerKey(node, container string) string
- func NodeKey(node string) string
- func PodContainerKey(namespace, podName, containerName string) string
- func PodKey(namespace, podName string) string
- type AggregationType
- type AggregationValue
- type AsHistoricalSource
- type DataBatch
- type DataProcessor
- type DataSink
- type HistoricalKey
- type HistoricalSource
- type LabelDescriptor
- type LabeledMetric
- type Metric
- type MetricDescriptor
- type MetricFamily
- type MetricSet
- type MetricType
- type MetricValue
- type MetricsSource
- type MetricsSourceProvider
- type TimestampedAggregationValue
- type TimestampedMetricValue
- type UnitsType
- type ValueType
Constants ¶
const ( MetricFamilyCpu MetricFamily = "cpu" MetricFamilyFilesystem = "filesystem" MetricFamilyMemory = "memory" MetricFamilyNetwork = "network" MetricFamilyGeneral = "general" )
const (
CustomMetricPrefix = "custom/"
)
Variables ¶
var ( LabelMetricSetType = LabelDescriptor{ Key: "type", Description: "Type of the metrics set (container, pod, namespace, node, cluster)", } MetricSetTypeSystemContainer = "sys_container" MetricSetTypePodContainer = "pod_container" MetricSetTypePod = "pod" MetricSetTypeNamespace = "ns" MetricSetTypeNode = "node" MetricSetTypeCluster = "cluster" LabelPodId = LabelDescriptor{ Key: "pod_id", Description: "The unique ID of the pod", } LabelPodName = LabelDescriptor{ Key: "pod_name", Description: "The name of the pod", } LabelNamespaceName = LabelDescriptor{ Key: "namespace_name", Description: "The name of the namespace", } LabelPodNamespaceUID = LabelDescriptor{ Key: "namespace_id", Description: "The UID of namespace of the pod", } LabelContainerName = LabelDescriptor{ Key: "container_name", Description: "User-provided name of the container or full container name for system containers", } LabelLabels = LabelDescriptor{ Key: "labels", Description: "Comma-separated list of user-provided labels", } LabelNodename = LabelDescriptor{ Key: "nodename", Description: "nodename where the container ran", } LabelHostname = LabelDescriptor{ Key: "hostname", Description: "Hostname where the container ran", } LabelResourceID = LabelDescriptor{ Key: "resource_id", Description: "Identifier(s) specific to a metric", } LabelHostID = LabelDescriptor{ Key: "host_id", Description: "Identifier specific to a host. Set by cloud provider or user", } LabelContainerBaseImage = LabelDescriptor{ Key: "container_base_image", Description: "User-defined image name that is run inside the container", } // The label is populated only for GCM LabelCustomMetricName = LabelDescriptor{ Key: "custom_metric_name", Description: "User-defined name of the exported custom metric", } LabelGCEResourceID = LabelDescriptor{ Key: "resource_id", Description: "Resource id for nodes specific for GCE.", } LabelGCEResourceType = LabelDescriptor{ Key: "resource_type", Description: "Resource types for nodes specific for GCE.", } LabelNodeSchedulable = LabelDescriptor{ Key: "schedulable", Description: "Node schedulable status.", } LabelVolumeName = LabelDescriptor{ Key: "volume_name", Description: "The name of the volume.", } LabelAcceleratorMake = LabelDescriptor{ Key: "make", Description: "Make of the accelerator (nvidia, amd, google etc.)", } LabelAcceleratorModel = LabelDescriptor{ Key: "model", Description: "Model of the accelerator (tesla-p100, tesla-k80 etc.)", } LabelAcceleratorID = LabelDescriptor{ Key: "accelerator_id", Description: "ID of the accelerator", } )
var AdditionalMetrics = []Metric{ MetricCpuRequest, MetricCpuLimit, MetricMemoryRequest, MetricMemoryLimit, MetricEphemeralStorageRequest, MetricEphemeralStorageLimit}
Metrics computed based on cluster state using Kubernetes API.
var AllAggregations = map[AggregationType]bool{ AggregationTypeAverage: true, AggregationTypeMaximum: true, AggregationTypeMinimum: true, AggregationTypeMedian: true, AggregationTypePercentile50: true, AggregationTypePercentile95: true, AggregationTypePercentile99: true, AggregationTypeCount: true, }
AllAggregations is the set of all supported aggregations
var AllMetrics = append(append(append(append(StandardMetrics, AdditionalMetrics...), RateMetrics...), LabeledMetrics...), NodeAutoscalingMetrics...)
var CpuMetrics = []Metric{ MetricCpuLimit, MetricCpuRequest, MetricCpuUsage, MetricCpuLoad, MetricCpuUsageRate, MetricNodeCpuAllocatable, MetricNodeCpuCapacity, MetricNodeCpuReservation, MetricNodeCpuUtilization, }
var FilesystemMetrics = []Metric{ MetricFilesystemAvailable, MetricFilesystemLimit, MetricFilesystemUsage, MetricFilesystemInodes, MetricFilesystemInodesFree, }
var LabeledMetrics = []Metric{ MetricDiskIORead, MetricDiskIOReadRate, MetricDiskIOWrite, MetricDiskIOWriteRate, MetricFilesystemUsage, MetricFilesystemLimit, MetricFilesystemAvailable, MetricFilesystemInodes, MetricFilesystemInodesFree, MetricAcceleratorMemoryTotal, MetricAcceleratorMemoryUsed, MetricAcceleratorDutyCycle, }
var MemoryMetrics = []Metric{ MetricMemoryLimit, MetricMemoryMajorPageFaults, MetricMemoryMajorPageFaultsRate, MetricMemoryPageFaults, MetricMemoryPageFaultsRate, MetricMemoryRequest, MetricMemoryUsage, MetricMemoryRSS, MetricMemoryCache, MetricMemoryWorkingSet, MetricNodeMemoryAllocatable, MetricNodeMemoryCapacity, MetricNodeMemoryUtilization, MetricNodeMemoryReservation, }
var MetricAcceleratorDutyCycle = Metric{ MetricDescriptor: MetricDescriptor{ Name: "accelerator/duty_cycle", Description: "Percent of time over the past sample period (10s) during which the accelerator was actively processing", Labels: acceleratorLabels, Type: MetricGauge, ValueType: ValueInt64, Units: UnitsCount, }, HasLabeledMetric: func(spec *cadvisor.ContainerSpec, stat *cadvisor.ContainerStats) bool { if len(stat.Accelerators) == 0 { return false } return true }, GetLabeledMetric: func(spec *cadvisor.ContainerSpec, stat *cadvisor.ContainerStats) []LabeledMetric { result := make([]LabeledMetric, 0, len(stat.Accelerators)) for _, ac := range stat.Accelerators { result = append(result, LabeledMetric{ Name: "accelerator/duty_cycle", Labels: map[string]string{ LabelAcceleratorMake.Key: ac.Make, LabelAcceleratorModel.Key: ac.Model, LabelAcceleratorID.Key: ac.ID, }, MetricValue: MetricValue{ ValueType: ValueInt64, MetricType: MetricGauge, IntValue: int64(ac.DutyCycle), }, }) } return result }, }
var MetricAcceleratorMemoryTotal = Metric{ MetricDescriptor: MetricDescriptor{ Name: "accelerator/memory_total", Description: "Total accelerator memory (in bytes)", Labels: acceleratorLabels, Type: MetricGauge, ValueType: ValueInt64, Units: UnitsBytes, }, HasLabeledMetric: func(spec *cadvisor.ContainerSpec, stat *cadvisor.ContainerStats) bool { if len(stat.Accelerators) == 0 { return false } return true }, GetLabeledMetric: func(spec *cadvisor.ContainerSpec, stat *cadvisor.ContainerStats) []LabeledMetric { result := make([]LabeledMetric, 0, len(stat.Accelerators)) for _, ac := range stat.Accelerators { result = append(result, LabeledMetric{ Name: "accelerator/memory_total", Labels: map[string]string{ LabelAcceleratorMake.Key: ac.Make, LabelAcceleratorModel.Key: ac.Model, LabelAcceleratorID.Key: ac.ID, }, MetricValue: MetricValue{ ValueType: ValueInt64, MetricType: MetricGauge, IntValue: int64(ac.MemoryTotal), }, }) } return result }, }
var MetricAcceleratorMemoryUsed = Metric{ MetricDescriptor: MetricDescriptor{ Name: "accelerator/memory_used", Description: "Total accelerator memory allocated (in bytes)", Labels: acceleratorLabels, Type: MetricGauge, ValueType: ValueInt64, Units: UnitsBytes, }, HasLabeledMetric: func(spec *cadvisor.ContainerSpec, stat *cadvisor.ContainerStats) bool { if len(stat.Accelerators) == 0 { return false } return true }, GetLabeledMetric: func(spec *cadvisor.ContainerSpec, stat *cadvisor.ContainerStats) []LabeledMetric { result := make([]LabeledMetric, 0, len(stat.Accelerators)) for _, ac := range stat.Accelerators { result = append(result, LabeledMetric{ Name: "accelerator/memory_used", Labels: map[string]string{ LabelAcceleratorMake.Key: ac.Make, LabelAcceleratorModel.Key: ac.Model, LabelAcceleratorID.Key: ac.ID, }, MetricValue: MetricValue{ ValueType: ValueInt64, MetricType: MetricGauge, IntValue: int64(ac.MemoryUsed), }, }) } return result }, }
var MetricCpuLimit = Metric{ MetricDescriptor: MetricDescriptor{ Name: "cpu/limit", Description: "CPU hard limit in millicores.", Type: MetricGauge, ValueType: ValueInt64, Units: UnitsCount, }, }
var MetricCpuLoad = Metric{ MetricDescriptor: MetricDescriptor{ Name: "cpu/load", Description: "CPU load", Type: MetricGauge, ValueType: ValueInt64, Units: UnitsCount, }, HasValue: func(spec *cadvisor.ContainerSpec) bool { return spec.HasCpu }, GetValue: func(spec *cadvisor.ContainerSpec, stat *cadvisor.ContainerStats) MetricValue { return MetricValue{ ValueType: ValueInt64, MetricType: MetricGauge, IntValue: int64(stat.Cpu.LoadAverage)} }, }
var MetricCpuRequest = Metric{ MetricDescriptor: MetricDescriptor{ Name: "cpu/request", Description: "CPU request (the guaranteed amount of resources) in millicores. This metric is Kubernetes specific.", Type: MetricGauge, ValueType: ValueInt64, Units: UnitsCount, }, }
Definition of Additional Metrics.
var MetricCpuUsage = Metric{ MetricDescriptor: MetricDescriptor{ Name: "cpu/usage", Description: "Cumulative CPU usage on all cores", Type: MetricCumulative, ValueType: ValueInt64, Units: UnitsNanoseconds, }, HasValue: func(spec *cadvisor.ContainerSpec) bool { return spec.HasCpu }, GetValue: func(spec *cadvisor.ContainerSpec, stat *cadvisor.ContainerStats) MetricValue { return MetricValue{ ValueType: ValueInt64, MetricType: MetricCumulative, IntValue: int64(stat.Cpu.Usage.Total)} }, }
var MetricCpuUsageRate = Metric{ MetricDescriptor: MetricDescriptor{ Name: "cpu/usage_rate", Description: "CPU usage on all cores in millicores", Type: MetricGauge, ValueType: ValueInt64, Units: UnitsCount, }, }
Definition of Rate Metrics.
var MetricDiskIORead = Metric{ MetricDescriptor: MetricDescriptor{ Name: "disk/io_read_bytes", Description: "Cumulative number of bytes read over disk", Type: MetricCumulative, ValueType: ValueInt64, Units: UnitsBytes, Labels: metricLabels, }, HasLabeledMetric: func(spec *cadvisor.ContainerSpec, stat *cadvisor.ContainerStats) bool { return spec.HasDiskIo }, GetLabeledMetric: func(spec *cadvisor.ContainerSpec, stat *cadvisor.ContainerStats) []LabeledMetric { result := make([]LabeledMetric, 0, len(stat.DiskIo.IoServiceBytes)) for _, ioServiceBytesPerPartition := range stat.DiskIo.IoServiceBytes { resourceIDKey := ioServiceBytesPerPartition.Device if resourceIDKey == "" { resourceIDKey = fmt.Sprintf("%d:%d", ioServiceBytesPerPartition.Major, ioServiceBytesPerPartition.Minor) } var value uint64 if v, exists := ioServiceBytesPerPartition.Stats["Read"]; exists { value = v } result = append(result, LabeledMetric{ Name: "disk/io_read_bytes", Labels: map[string]string{ LabelResourceID.Key: resourceIDKey, }, MetricValue: MetricValue{ ValueType: ValueInt64, MetricType: MetricGauge, IntValue: int64(value), }, }) } return result }, }
var MetricDiskIOReadRate = Metric{ MetricDescriptor: MetricDescriptor{ Name: "disk/io_read_bytes_rate", Description: "Rate of bytes read over disk in bytes per second", Type: MetricGauge, ValueType: ValueFloat, Units: UnitsCount, Labels: metricLabels, }, }
var MetricDiskIOWrite = Metric{ MetricDescriptor: MetricDescriptor{ Name: "disk/io_write_bytes", Description: "Cumulative number of bytes write over disk", Type: MetricCumulative, ValueType: ValueInt64, Units: UnitsBytes, Labels: metricLabels, }, HasLabeledMetric: func(spec *cadvisor.ContainerSpec, stat *cadvisor.ContainerStats) bool { return spec.HasDiskIo }, GetLabeledMetric: func(spec *cadvisor.ContainerSpec, stat *cadvisor.ContainerStats) []LabeledMetric { result := make([]LabeledMetric, 0, len(stat.DiskIo.IoServiceBytes)) for _, ioServiceBytesPerPartition := range stat.DiskIo.IoServiceBytes { resourceIDKey := ioServiceBytesPerPartition.Device if resourceIDKey == "" { resourceIDKey = fmt.Sprintf("%d:%d", ioServiceBytesPerPartition.Major, ioServiceBytesPerPartition.Minor) } var value uint64 if v, exists := ioServiceBytesPerPartition.Stats["Write"]; exists { value = v } result = append(result, LabeledMetric{ Name: "disk/io_write_bytes", Labels: map[string]string{ LabelResourceID.Key: resourceIDKey, }, MetricValue: MetricValue{ ValueType: ValueInt64, MetricType: MetricGauge, IntValue: int64(value), }, }) } return result }, }
var MetricDiskIOWriteRate = Metric{ MetricDescriptor: MetricDescriptor{ Name: "disk/io_write_bytes_rate", Description: "Rate of bytes written over disk in bytes per second", Type: MetricGauge, ValueType: ValueFloat, Units: UnitsCount, Labels: metricLabels, }, }
var MetricEphemeralStorageLimit = Metric{ MetricDescriptor: MetricDescriptor{ Name: "ephemeral_storage/limit", Description: "ephemeral storage hard limit in bytes.", Type: MetricGauge, ValueType: ValueInt64, Units: UnitsBytes, }, }
var MetricEphemeralStorageRequest = Metric{ MetricDescriptor: MetricDescriptor{ Name: "ephemeral_storage/request", Description: "ephemeral storage request (the guaranteed amount of resources) in bytes. This metric is Kubernetes specific.", Type: MetricGauge, ValueType: ValueInt64, Units: UnitsBytes, }, }
var MetricEphemeralStorageUsage = Metric{ MetricDescriptor: MetricDescriptor{ Name: "ephemeral_storage/usage", Description: "Ephemeral storage usage", Type: MetricGauge, ValueType: ValueInt64, Units: UnitsBytes, }, }
var MetricFamilies = map[MetricFamily][]Metric{ MetricFamilyCpu: CpuMetrics, MetricFamilyFilesystem: FilesystemMetrics, MetricFamilyMemory: MemoryMetrics, MetricFamilyNetwork: NetworkMetrics, }
var MetricFilesystemAvailable = Metric{ MetricDescriptor: MetricDescriptor{ Name: "filesystem/available", Description: "The number of available bytes remaining in a the filesystem", Type: MetricGauge, ValueType: ValueInt64, Units: UnitsBytes, Labels: metricLabels, }, HasLabeledMetric: func(spec *cadvisor.ContainerSpec, stat *cadvisor.ContainerStats) bool { return spec.HasFilesystem }, GetLabeledMetric: func(spec *cadvisor.ContainerSpec, stat *cadvisor.ContainerStats) []LabeledMetric { result := make([]LabeledMetric, 0, len(stat.Filesystem)) for _, fs := range stat.Filesystem { result = append(result, LabeledMetric{ Name: "filesystem/available", Labels: map[string]string{ LabelResourceID.Key: fs.Device, }, MetricValue: MetricValue{ ValueType: ValueInt64, MetricType: MetricGauge, IntValue: int64(fs.Available), }, }) } return result }, }
var MetricFilesystemInodes = Metric{ MetricDescriptor: MetricDescriptor{ Name: "filesystem/inodes", Description: "Total number of inodes on a filesystem", Type: MetricGauge, ValueType: ValueInt64, Units: UnitsBytes, Labels: metricLabels, }, HasLabeledMetric: func(spec *cadvisor.ContainerSpec, stat *cadvisor.ContainerStats) bool { return spec.HasFilesystem }, GetLabeledMetric: func(spec *cadvisor.ContainerSpec, stat *cadvisor.ContainerStats) []LabeledMetric { result := []LabeledMetric{} for _, fs := range stat.Filesystem { if fs.HasInodes { result = append(result, LabeledMetric{ Name: "filesystem/inodes", Labels: map[string]string{ LabelResourceID.Key: fs.Device, }, MetricValue: MetricValue{ ValueType: ValueInt64, MetricType: MetricGauge, IntValue: int64(fs.Inodes), }, }) } } return result }, }
var MetricFilesystemInodesFree = Metric{ MetricDescriptor: MetricDescriptor{ Name: "filesystem/inodes_free", Description: "Free number of inodes on a filesystem", Type: MetricGauge, ValueType: ValueInt64, Units: UnitsBytes, Labels: metricLabels, }, HasLabeledMetric: func(spec *cadvisor.ContainerSpec, stat *cadvisor.ContainerStats) bool { return spec.HasFilesystem }, GetLabeledMetric: func(spec *cadvisor.ContainerSpec, stat *cadvisor.ContainerStats) []LabeledMetric { result := []LabeledMetric{} for _, fs := range stat.Filesystem { if fs.HasInodes { result = append(result, LabeledMetric{ Name: "filesystem/inodes_free", Labels: map[string]string{ LabelResourceID.Key: fs.Device, }, MetricValue: MetricValue{ ValueType: ValueInt64, MetricType: MetricGauge, IntValue: int64(fs.InodesFree), }, }) } } return result }, }
var MetricFilesystemLimit = Metric{ MetricDescriptor: MetricDescriptor{ Name: "filesystem/limit", Description: "The total size of filesystem in bytes", Type: MetricGauge, ValueType: ValueInt64, Units: UnitsBytes, Labels: metricLabels, }, HasLabeledMetric: func(spec *cadvisor.ContainerSpec, stat *cadvisor.ContainerStats) bool { return spec.HasFilesystem }, GetLabeledMetric: func(spec *cadvisor.ContainerSpec, stat *cadvisor.ContainerStats) []LabeledMetric { result := make([]LabeledMetric, 0, len(stat.Filesystem)) for _, fs := range stat.Filesystem { result = append(result, LabeledMetric{ Name: "filesystem/limit", Labels: map[string]string{ LabelResourceID.Key: fs.Device, }, MetricValue: MetricValue{ ValueType: ValueInt64, MetricType: MetricGauge, IntValue: int64(fs.Limit), }, }) } return result }, }
var MetricFilesystemUsage = Metric{ MetricDescriptor: MetricDescriptor{ Name: "filesystem/usage", Description: "Total number of bytes consumed on a filesystem", Type: MetricGauge, ValueType: ValueInt64, Units: UnitsBytes, Labels: metricLabels, }, HasLabeledMetric: func(spec *cadvisor.ContainerSpec, stat *cadvisor.ContainerStats) bool { return spec.HasFilesystem }, GetLabeledMetric: func(spec *cadvisor.ContainerSpec, stat *cadvisor.ContainerStats) []LabeledMetric { result := make([]LabeledMetric, 0, len(stat.Filesystem)) for _, fs := range stat.Filesystem { result = append(result, LabeledMetric{ Name: "filesystem/usage", Labels: map[string]string{ LabelResourceID.Key: fs.Device, }, MetricValue: MetricValue{ ValueType: ValueInt64, MetricType: MetricGauge, IntValue: int64(fs.Usage), }, }) } return result }, }
var MetricMemoryCache = Metric{ MetricDescriptor: MetricDescriptor{ Name: "memory/cache", Description: "Cache memory", Type: MetricGauge, ValueType: ValueInt64, Units: UnitsBytes, }, HasValue: func(spec *cadvisor.ContainerSpec) bool { return spec.HasMemory }, GetValue: func(spec *cadvisor.ContainerSpec, stat *cadvisor.ContainerStats) MetricValue { return MetricValue{ ValueType: ValueInt64, MetricType: MetricGauge, IntValue: int64(stat.Memory.Cache)} }, }
var MetricMemoryLimit = Metric{ MetricDescriptor: MetricDescriptor{ Name: "memory/limit", Description: "Memory hard limit in bytes.", Type: MetricGauge, ValueType: ValueInt64, Units: UnitsBytes, }, }
var MetricMemoryMajorPageFaults = Metric{ MetricDescriptor: MetricDescriptor{ Name: "memory/major_page_faults", Description: "Number of major page faults", Type: MetricCumulative, ValueType: ValueInt64, Units: UnitsCount, }, HasValue: func(spec *cadvisor.ContainerSpec) bool { return spec.HasMemory }, GetValue: func(spec *cadvisor.ContainerSpec, stat *cadvisor.ContainerStats) MetricValue { return MetricValue{ ValueType: ValueInt64, MetricType: MetricCumulative, IntValue: int64(stat.Memory.ContainerData.Pgmajfault)} }, }
var MetricMemoryMajorPageFaultsRate = Metric{ MetricDescriptor: MetricDescriptor{ Name: "memory/major_page_faults_rate", Description: "Rate of major page faults in counts per second", Type: MetricGauge, ValueType: ValueFloat, Units: UnitsCount, }, }
var MetricMemoryPageFaults = Metric{ MetricDescriptor: MetricDescriptor{ Name: "memory/page_faults", Description: "Number of page faults", Type: MetricCumulative, ValueType: ValueInt64, Units: UnitsCount, }, HasValue: func(spec *cadvisor.ContainerSpec) bool { return spec.HasMemory }, GetValue: func(spec *cadvisor.ContainerSpec, stat *cadvisor.ContainerStats) MetricValue { return MetricValue{ ValueType: ValueInt64, MetricType: MetricCumulative, IntValue: int64(stat.Memory.ContainerData.Pgfault)} }, }
var MetricMemoryPageFaultsRate = Metric{ MetricDescriptor: MetricDescriptor{ Name: "memory/page_faults_rate", Description: "Rate of page faults in counts per second", Type: MetricGauge, ValueType: ValueFloat, Units: UnitsCount, }, }
var MetricMemoryRSS = Metric{ MetricDescriptor: MetricDescriptor{ Name: "memory/rss", Description: "RSS memory", Type: MetricGauge, ValueType: ValueInt64, Units: UnitsBytes, }, HasValue: func(spec *cadvisor.ContainerSpec) bool { return spec.HasMemory }, GetValue: func(spec *cadvisor.ContainerSpec, stat *cadvisor.ContainerStats) MetricValue { return MetricValue{ ValueType: ValueInt64, MetricType: MetricGauge, IntValue: int64(stat.Memory.RSS)} }, }
var MetricMemoryRequest = Metric{ MetricDescriptor: MetricDescriptor{ Name: "memory/request", Description: "Memory request (the guaranteed amount of resources) in bytes. This metric is Kubernetes specific.", Type: MetricGauge, ValueType: ValueInt64, Units: UnitsBytes, }, }
var MetricMemoryUsage = Metric{ MetricDescriptor: MetricDescriptor{ Name: "memory/usage", Description: "Total memory usage", Type: MetricGauge, ValueType: ValueInt64, Units: UnitsBytes, }, HasValue: func(spec *cadvisor.ContainerSpec) bool { return spec.HasMemory }, GetValue: func(spec *cadvisor.ContainerSpec, stat *cadvisor.ContainerStats) MetricValue { return MetricValue{ ValueType: ValueInt64, MetricType: MetricGauge, IntValue: int64(stat.Memory.Usage)} }, }
var MetricMemoryWorkingSet = Metric{ MetricDescriptor: MetricDescriptor{ Name: "memory/working_set", Description: "Total working set usage. Working set is the memory being used and not easily dropped by the kernel", Type: MetricGauge, ValueType: ValueInt64, Units: UnitsBytes, }, HasValue: func(spec *cadvisor.ContainerSpec) bool { return spec.HasMemory }, GetValue: func(spec *cadvisor.ContainerSpec, stat *cadvisor.ContainerStats) MetricValue { return MetricValue{ ValueType: ValueInt64, MetricType: MetricGauge, IntValue: int64(stat.Memory.WorkingSet)} }, }
var MetricNetworkRx = Metric{ MetricDescriptor: MetricDescriptor{ Name: "network/rx", Description: "Cumulative number of bytes received over the network", Type: MetricCumulative, ValueType: ValueInt64, Units: UnitsBytes, }, HasValue: func(spec *cadvisor.ContainerSpec) bool { return spec.HasNetwork }, GetValue: func(spec *cadvisor.ContainerSpec, stat *cadvisor.ContainerStats) MetricValue { var rxBytes uint64 = 0 for _, interfaceStat := range stat.Network.Interfaces { rxBytes += interfaceStat.RxBytes } return MetricValue{ ValueType: ValueInt64, MetricType: MetricCumulative, IntValue: int64(rxBytes), } }, }
var MetricNetworkRxErrors = Metric{ MetricDescriptor: MetricDescriptor{ Name: "network/rx_errors", Description: "Cumulative number of errors while receiving over the network", Type: MetricCumulative, ValueType: ValueInt64, Units: UnitsCount, }, HasValue: func(spec *cadvisor.ContainerSpec) bool { return spec.HasNetwork }, GetValue: func(spec *cadvisor.ContainerSpec, stat *cadvisor.ContainerStats) MetricValue { var rxErrors uint64 = 0 for _, interfaceStat := range stat.Network.Interfaces { rxErrors += interfaceStat.RxErrors } return MetricValue{ ValueType: ValueInt64, MetricType: MetricCumulative, IntValue: int64(rxErrors), } }, }
var MetricNetworkRxErrorsRate = Metric{ MetricDescriptor: MetricDescriptor{ Name: "network/rx_errors_rate", Description: "Rate of errors sending over the network in errors per second", Type: MetricGauge, ValueType: ValueFloat, Units: UnitsCount, }, }
var MetricNetworkRxRate = Metric{ MetricDescriptor: MetricDescriptor{ Name: "network/rx_rate", Description: "Rate of bytes received over the network in bytes per second", Type: MetricGauge, ValueType: ValueFloat, Units: UnitsCount, }, }
var MetricNetworkTx = Metric{ MetricDescriptor: MetricDescriptor{ Name: "network/tx", Description: "Cumulative number of bytes sent over the network", Type: MetricCumulative, ValueType: ValueInt64, Units: UnitsBytes, }, HasValue: func(spec *cadvisor.ContainerSpec) bool { return spec.HasNetwork }, GetValue: func(spec *cadvisor.ContainerSpec, stat *cadvisor.ContainerStats) MetricValue { var txBytes uint64 = 0 for _, interfaceStat := range stat.Network.Interfaces { txBytes += interfaceStat.TxBytes } return MetricValue{ ValueType: ValueInt64, MetricType: MetricCumulative, IntValue: int64(txBytes), } }, }
var MetricNetworkTxErrors = Metric{ MetricDescriptor: MetricDescriptor{ Name: "network/tx_errors", Description: "Cumulative number of errors while sending over the network", Type: MetricCumulative, ValueType: ValueInt64, Units: UnitsCount, }, HasValue: func(spec *cadvisor.ContainerSpec) bool { return spec.HasNetwork }, GetValue: func(spec *cadvisor.ContainerSpec, stat *cadvisor.ContainerStats) MetricValue { var txErrors uint64 = 0 for _, interfaceStat := range stat.Network.Interfaces { txErrors += interfaceStat.TxErrors } return MetricValue{ ValueType: ValueInt64, MetricType: MetricCumulative, IntValue: int64(txErrors), } }, }
var MetricNetworkTxErrorsRate = Metric{ MetricDescriptor: MetricDescriptor{ Name: "network/tx_errors_rate", Description: "Rate of errors transmitting over the network in errors per second", Type: MetricGauge, ValueType: ValueFloat, Units: UnitsCount, }, }
var MetricNetworkTxRate = Metric{ MetricDescriptor: MetricDescriptor{ Name: "network/tx_rate", Description: "Rate of bytes transmitted over the network in bytes per second", Type: MetricGauge, ValueType: ValueFloat, Units: UnitsCount, }, }
var MetricNodeCpuAllocatable = Metric{ MetricDescriptor: MetricDescriptor{ Name: "cpu/node_allocatable", Description: "Cpu allocatable of a node", Type: MetricGauge, ValueType: ValueFloat, Units: UnitsCount, }, }
var MetricNodeCpuCapacity = Metric{ MetricDescriptor: MetricDescriptor{ Name: "cpu/node_capacity", Description: "Cpu capacity of a node", Type: MetricGauge, ValueType: ValueFloat, Units: UnitsCount, }, }
var MetricNodeCpuReservation = Metric{ MetricDescriptor: MetricDescriptor{ Name: "cpu/node_reservation", Description: "Share of cpu that is reserved on the node", Type: MetricGauge, ValueType: ValueFloat, Units: UnitsCount, }, }
var MetricNodeCpuUtilization = Metric{ MetricDescriptor: MetricDescriptor{ Name: "cpu/node_utilization", Description: "Cpu utilization as a share of node capacity", Type: MetricGauge, ValueType: ValueFloat, Units: UnitsCount, }, }
var MetricNodeEphemeralStorageAllocatable = Metric{ MetricDescriptor: MetricDescriptor{ Name: "ephemeral_storage/node_allocatable", Description: "Ephemeral storage allocatable of a node", Type: MetricGauge, ValueType: ValueFloat, Units: UnitsCount, }, }
var MetricNodeEphemeralStorageCapacity = Metric{ MetricDescriptor: MetricDescriptor{ Name: "ephemeral_storage/node_capacity", Description: "Ephemeral storage capacity of a node", Type: MetricGauge, ValueType: ValueFloat, Units: UnitsCount, }, }
var MetricNodeEphemeralStorageReservation = Metric{ MetricDescriptor: MetricDescriptor{ Name: "ephemeral_storage/node_reservation", Description: "Share of ephemeral storage that is reserved on the node", Type: MetricGauge, ValueType: ValueFloat, Units: UnitsCount, }, }
var MetricNodeEphemeralStorageUtilization = Metric{ MetricDescriptor: MetricDescriptor{ Name: "ephemeral_storage/node_utilization", Description: "Ephemeral storage utilization as a share of storage capacity", Type: MetricGauge, ValueType: ValueFloat, Units: UnitsCount, }, }
var MetricNodeMemoryAllocatable = Metric{ MetricDescriptor: MetricDescriptor{ Name: "memory/node_allocatable", Description: "Memory allocatable of a node", Type: MetricGauge, ValueType: ValueFloat, Units: UnitsCount, }, }
var MetricNodeMemoryCapacity = Metric{ MetricDescriptor: MetricDescriptor{ Name: "memory/node_capacity", Description: "Memory capacity of a node", Type: MetricGauge, ValueType: ValueFloat, Units: UnitsCount, }, }
var MetricNodeMemoryReservation = Metric{ MetricDescriptor: MetricDescriptor{ Name: "memory/node_reservation", Description: "Share of memory that is reserved on the node", Type: MetricGauge, ValueType: ValueFloat, Units: UnitsCount, }, }
var MetricNodeMemoryUtilization = Metric{ MetricDescriptor: MetricDescriptor{ Name: "memory/node_utilization", Description: "Memory utilization as a share of memory capacity", Type: MetricGauge, ValueType: ValueFloat, Units: UnitsCount, }, }
var MetricRestartCount = Metric{ MetricDescriptor: MetricDescriptor{ Name: "restart_count", Description: "Number of container restarts", Type: MetricCumulative, ValueType: ValueInt64, Units: UnitsCount, }, }
var MetricUptime = Metric{ MetricDescriptor: MetricDescriptor{ Name: "uptime", Description: "Number of milliseconds since the container was started", Type: MetricCumulative, ValueType: ValueInt64, Units: UnitsMilliseconds, }, HasValue: func(spec *cadvisor.ContainerSpec) bool { return !spec.CreationTime.IsZero() }, GetValue: func(spec *cadvisor.ContainerSpec, stat *cadvisor.ContainerStats) MetricValue { return MetricValue{ ValueType: ValueInt64, MetricType: MetricCumulative, IntValue: time.Since(spec.CreationTime).Nanoseconds() / time.Millisecond.Nanoseconds()} }, }
Definition of Standard Metrics.
var MultiTypedAggregations = []AggregationType{ AggregationTypeAverage, AggregationTypeMaximum, AggregationTypeMinimum, AggregationTypeMedian, AggregationTypePercentile50, AggregationTypePercentile95, AggregationTypePercentile99, }
MultiTypedAggregations is the list of aggregations that can be either float or int
var NetworkMetrics = []Metric{ MetricNetworkRx, MetricNetworkRxErrors, MetricNetworkRxErrorsRate, MetricNetworkRxRate, MetricNetworkTx, MetricNetworkTxErrors, MetricNetworkTxErrorsRate, MetricNetworkTxRate, }
var NodeAutoscalingMetrics = []Metric{ MetricNodeCpuCapacity, MetricNodeMemoryCapacity, MetricNodeEphemeralStorageCapacity, MetricNodeCpuAllocatable, MetricNodeMemoryAllocatable, MetricNodeEphemeralStorageAllocatable, MetricNodeCpuUtilization, MetricNodeMemoryUtilization, MetricNodeEphemeralStorageUtilization, MetricNodeCpuReservation, MetricNodeMemoryReservation, MetricNodeEphemeralStorageReservation, }
var RateMetrics = []Metric{ MetricCpuUsageRate, MetricMemoryPageFaultsRate, MetricMemoryMajorPageFaultsRate, MetricNetworkRxRate, MetricNetworkRxErrorsRate, MetricNetworkTxRate, MetricNetworkTxErrorsRate, MetricDiskIOReadRate, MetricDiskIOWriteRate}
Computed based on corresponding StandardMetrics.
var RateMetricsMapping = map[string]Metric{ MetricCpuUsage.MetricDescriptor.Name: MetricCpuUsageRate, MetricMemoryPageFaults.MetricDescriptor.Name: MetricMemoryPageFaultsRate, MetricMemoryMajorPageFaults.MetricDescriptor.Name: MetricMemoryMajorPageFaultsRate, MetricNetworkRx.MetricDescriptor.Name: MetricNetworkRxRate, MetricNetworkRxErrors.MetricDescriptor.Name: MetricNetworkRxErrorsRate, MetricNetworkTx.MetricDescriptor.Name: MetricNetworkTxRate, MetricNetworkTxErrors.MetricDescriptor.Name: MetricNetworkTxErrorsRate, MetricDiskIORead.MetricDescriptor.Name: MetricDiskIOReadRate, MetricDiskIOWrite.MetricDescriptor.Name: MetricDiskIOWriteRate}
var ResourceRequestMetrics = map[kube_api.ResourceName]Metric{ kube_api.ResourceCPU: MetricCpuRequest, kube_api.ResourceMemory: MetricMemoryRequest, kube_api.ResourceEphemeralStorage: MetricEphemeralStorageRequest, }
Maps from resource name to the metric that tracks container resource request on that resource. The name of the metric is ResourceName/request where ResourceName is the name of the resource requested in container resource requests.
var StandardMetrics = []Metric{ MetricUptime, MetricCpuUsage, MetricCpuLoad, MetricEphemeralStorageUsage, MetricMemoryUsage, MetricMemoryRSS, MetricMemoryCache, MetricMemoryWorkingSet, MetricMemoryPageFaults, MetricMemoryMajorPageFaults, MetricNetworkRx, MetricNetworkRxErrors, MetricNetworkTx, MetricNetworkTxErrors}
Provided by Kubelet/cadvisor.
Functions ¶
func ClusterKey ¶
func ClusterKey() string
func GcmLabels ¶
func GcmLabels() map[string]LabelDescriptor
func GcmNodeAutoscalingLabels ¶
func GcmNodeAutoscalingLabels() map[string]LabelDescriptor
func IsNodeAutoscalingMetric ¶
func NamespaceKey ¶
func NodeContainerKey ¶
func PodContainerKey ¶
Types ¶
type AggregationType ¶
type AggregationType string
var ( AggregationTypeAverage AggregationType = "average" AggregationTypeMaximum AggregationType = "max" AggregationTypeMinimum AggregationType = "min" AggregationTypeMedian AggregationType = "median" AggregationTypeCount AggregationType = "count" AggregationTypePercentile50 AggregationType = "50-perc" AggregationTypePercentile95 AggregationType = "95-perc" AggregationTypePercentile99 AggregationType = "99-perc" )
type AggregationValue ¶
type AggregationValue struct { Count *uint64 Aggregations map[AggregationType]MetricValue }
AggregationValue is a description of aggregated MetricValues over time
type AsHistoricalSource ¶
type AsHistoricalSource interface { // Historical returns the historical data access interface for this sink Historical() HistoricalSource }
AsHistoricalSource represents sinks which support a historical access interface
type DataProcessor ¶
type DataSink ¶
type DataSink interface { Name() string // Exports data to the external storage. The function should be synchronous/blocking and finish only // after the given DataBatch was written. This will allow sink manager to push data only to these // sinks that finished writing the previous data. ExportData(*DataBatch) Stop() }
type HistoricalKey ¶
type HistoricalKey struct { // ObjectType specifies which type of object this is for (pod, namespace, etc) // It should be one of the MetricSetType* labels. ObjectType string // NodeName is used for node and system-container metrics NodeName string // NamespaceName is used for namespace, pod, and pod-container metrics NamespaceName string // PodName is used for pod and pod-container metrics PodName string // ContainerName is used for system-container and pod-container metrics ContainerName string // PodId may be used in place of the combination of PodName and NamespaceName for pod and pod-container metrics PodId string }
HistoricalKey is an identifier pointing to a particular object. Is is composed of an object type (pod, namespace, container, etc) as well as a series of fields which identify that object.
func (*HistoricalKey) String ¶
func (key *HistoricalKey) String() string
type HistoricalSource ¶
type HistoricalSource interface { // GetMetric retrieves the given metric for one or more objects (specified by metricKeys) of // the same type, within the given time interval. A start time of zero indicates no starting bound, // while an end time of zero indicates no ending bound. GetMetric(metricName string, metricKeys []HistoricalKey, start, end time.Time) (map[HistoricalKey][]TimestampedMetricValue, error) // GetLabeledMetric retrieves the given labeled metric. Otherwise, it functions identically to GetMetric. GetLabeledMetric(metricName string, labels map[string]string, metricKeys []HistoricalKey, start, end time.Time) (map[HistoricalKey][]TimestampedMetricValue, error) // GetAggregation fetches the given aggregations for one or more objects (specified by metricKeys) of // the same type, within the given time interval, calculated over a series of buckets. The start time, // end time, and bucket size may be zero. A start time of zero indicates no starting bound, while and // end time of zero indicates no ending bound (effectively meaning up to the latest metrics, but not metrics // from the future). A bucket size of zero indicates that only a single bucket spanning the entire specified // time range should be returned. GetAggregation(metricName string, aggregations []AggregationType, metricKeys []HistoricalKey, start, end time.Time, bucketSize time.Duration) (map[HistoricalKey][]TimestampedAggregationValue, error) // GetLabeledAggregation fetches a the given aggregations for a labeled metric instead of a normal metric. // Otherwise, it functions identically to GetAggregation. GetLabeledAggregation(metricName string, labels map[string]string, aggregations []AggregationType, metricKeys []HistoricalKey, start, end time.Time, bucketSize time.Duration) (map[HistoricalKey][]TimestampedAggregationValue, error) // GetMetricNames retrieves the available metric names for the given object GetMetricNames(metricKey HistoricalKey) ([]string, error) // GetNodes retrieves the list of nodes in the cluster GetNodes() ([]string, error) // GetNamespaces retrieves the list of namespaces in the cluster GetNamespaces() ([]string, error) // GetPodsFromNamespace retrieves the list of pods in a given namespace GetPodsFromNamespace(namespace string) ([]string, error) // GetSystemContainersFromNode retrieves the list of free containers for a given node GetSystemContainersFromNode(node string) ([]string, error) }
HistoricalSource allows for retrieval of historical metrics and aggregations from sinks
type LabelDescriptor ¶
type LabelDescriptor struct { // Key to use for the label. Key string `json:"key,omitempty"` // Description of the label. Description string `json:"description,omitempty"` }
func CommonLabels ¶
func CommonLabels() []LabelDescriptor
func ContainerLabels ¶
func ContainerLabels() []LabelDescriptor
func MetricLabels ¶
func MetricLabels() []LabelDescriptor
func PodLabels ¶
func PodLabels() []LabelDescriptor
func SupportedLabels ¶
func SupportedLabels() []LabelDescriptor
type LabeledMetric ¶
type LabeledMetric struct { Name string Labels map[string]string MetricValue }
func (*LabeledMetric) GetValue ¶
func (this *LabeledMetric) GetValue() interface{}
type Metric ¶
type Metric struct { MetricDescriptor // Returns whether this metric is present. HasValue func(*cadvisor.ContainerSpec) bool // Returns a slice of internal point objects that contain metric values and associated labels. GetValue func(*cadvisor.ContainerSpec, *cadvisor.ContainerStats) MetricValue // Returns whether this metric is present. HasLabeledMetric func(*cadvisor.ContainerSpec, *cadvisor.ContainerStats) bool // Returns a slice of internal point objects that contain metric values and associated labels. GetLabeledMetric func(*cadvisor.ContainerSpec, *cadvisor.ContainerStats) []LabeledMetric }
Metric represents a resource usage stat metric.
type MetricDescriptor ¶
type MetricDescriptor struct { // The unique name of the metric. Name string `json:"name,omitempty"` // Description of the metric. Description string `json:"description,omitempty"` // Descriptor of the labels specific to this metric. Labels []LabelDescriptor `json:"labels,omitempty"` // Type and value of metric data. Type MetricType `json:"type,omitempty"` ValueType ValueType `json:"value_type,omitempty"` Units UnitsType `json:"units,omitempty"` }
type MetricFamily ¶
type MetricFamily string
func MetricFamilyForName ¶
func MetricFamilyForName(metricName string) MetricFamily
type MetricSet ¶
type MetricSet struct { // CollectionStartTime is a time since when the metrics are collected for this entity. // It is affected by events like entity (e.g. pod) creation, entity restart (e.g. for container), // Kubelet restart. CollectionStartTime time.Time // EntityCreateTime is a time of entity creation and persists through entity restarts and // Kubelet restarts. EntityCreateTime time.Time ScrapeTime time.Time MetricValues map[string]MetricValue Labels map[string]string LabeledMetrics []LabeledMetric }
type MetricType ¶
type MetricType int8
const ( MetricCumulative MetricType = iota MetricGauge MetricDelta )
func (*MetricType) String ¶
func (self *MetricType) String() string
type MetricValue ¶
type MetricValue struct { IntValue int64 FloatValue float64 MetricType MetricType ValueType ValueType }
func (*MetricValue) GetValue ¶
func (this *MetricValue) GetValue() interface{}
type MetricsSource ¶
type MetricsSource interface { Name() string ScrapeMetrics(start, end time.Time) (*DataBatch, error) }
A place from where the metrics should be scraped.
type MetricsSourceProvider ¶
type MetricsSourceProvider interface {
GetMetricsSources() []MetricsSource
}
Provider of list of sources to be scaped.
type TimestampedAggregationValue ¶
type TimestampedAggregationValue struct { // Timestamp is the start time of the bucket Timestamp time.Time // BucketSize is the duration of the bucket BucketSize time.Duration AggregationValue }
TimestampedAggregationValue is an aggregation value with an associated timestamp and bucket size
type TimestampedMetricValue ¶
type TimestampedMetricValue struct { MetricValue Timestamp time.Time }
TimestampedMetricValue is a metric value with an associated timestamp