71 lines
2 KiB
Go
71 lines
2 KiB
Go
|
package metrics
|
||
|
|
||
|
import (
|
||
|
"sync"
|
||
|
"time"
|
||
|
|
||
|
"github.com/prometheus/client_golang/prometheus"
|
||
|
)
|
||
|
|
||
|
const (
|
||
|
// CRIOOperationsKey is the key for CRI-O operation metrics.
|
||
|
CRIOOperationsKey = "crio_operations"
|
||
|
// CRIOOperationsLatencyKey is the key for the operation latency metrics.
|
||
|
CRIOOperationsLatencyKey = "crio_operations_latency_microseconds"
|
||
|
// CRIOOperationsErrorsKey is the key for the operation error metrics.
|
||
|
CRIOOperationsErrorsKey = "crio_operations_errors"
|
||
|
|
||
|
// TODO(runcom):
|
||
|
// timeouts
|
||
|
|
||
|
subsystem = "container_runtime"
|
||
|
)
|
||
|
|
||
|
var (
|
||
|
// CRIOOperations collects operation counts by operation type.
|
||
|
CRIOOperations = prometheus.NewCounterVec(
|
||
|
prometheus.CounterOpts{
|
||
|
Subsystem: subsystem,
|
||
|
Name: CRIOOperationsKey,
|
||
|
Help: "Cumulative number of CRI-O operations by operation type.",
|
||
|
},
|
||
|
[]string{"operation_type"},
|
||
|
)
|
||
|
// CRIOOperationsLatency collects operation latency numbers by operation
|
||
|
// type.
|
||
|
CRIOOperationsLatency = prometheus.NewSummaryVec(
|
||
|
prometheus.SummaryOpts{
|
||
|
Subsystem: subsystem,
|
||
|
Name: CRIOOperationsLatencyKey,
|
||
|
Help: "Latency in microseconds of CRI-O operations. Broken down by operation type.",
|
||
|
},
|
||
|
[]string{"operation_type"},
|
||
|
)
|
||
|
// CRIOOperationsErrors collects operation errors by operation
|
||
|
// type.
|
||
|
CRIOOperationsErrors = prometheus.NewCounterVec(
|
||
|
prometheus.CounterOpts{
|
||
|
Subsystem: subsystem,
|
||
|
Name: CRIOOperationsErrorsKey,
|
||
|
Help: "Cumulative number of CRI-O operation errors by operation type.",
|
||
|
},
|
||
|
[]string{"operation_type"},
|
||
|
)
|
||
|
)
|
||
|
|
||
|
var registerMetrics sync.Once
|
||
|
|
||
|
// Register all metrics
|
||
|
func Register() {
|
||
|
registerMetrics.Do(func() {
|
||
|
prometheus.MustRegister(CRIOOperations)
|
||
|
prometheus.MustRegister(CRIOOperationsLatency)
|
||
|
prometheus.MustRegister(CRIOOperationsErrors)
|
||
|
})
|
||
|
}
|
||
|
|
||
|
// SinceInMicroseconds gets the time since the specified start in microseconds.
|
||
|
func SinceInMicroseconds(start time.Time) float64 {
|
||
|
return float64(time.Since(start).Nanoseconds() / time.Microsecond.Nanoseconds())
|
||
|
}
|