Keptn Metrics
The Keptn Metrics Operator provides a single entry point to all metrics in the cluster and allows you to define metrics based on multiple data platforms and multiple instances of any data platform. Metrics are fetched independently and can be used for an evaluation at workload- and application-level, or for scaling your workloads.
This data can be displayed on Grafana or another standard dashboard application that you configure or can be retrieved using standard Kubernetes commands.
For an introduction to Keptn metrics, see Getting started with Keptn metrics.
Keptn metric basics
Keptn metrics are implemented with two resources:
- KeptnMetric – define the metric to report
- KeptnMetricsProvider – define the configuration for a data provider
Accessing Metrics via the Kubernetes Custom Metrics API
KeptnMetrics
can also be retrieved via the Kubernetes Custom Metrics API.
Retrieve KeptnMetric values with kubectl
Use the kubectl get --raw
command
to retrieve the values of a KeptnMetric
, as in the following example:
$ kubectl get --raw "/apis/custom.metrics.k8s.io/v1beta2/namespaces/podtato-kubectl/keptnmetrics.metrics.sh/keptnmetric-sample/keptnmetric-sample" | jq .
{
"kind": "MetricValueList",
"apiVersion": "custom.metrics.k8s.io/v1beta2",
"metadata": {},
"items": [
{
"describedObject": {
"kind": "KeptnMetric",
"namespace": "podtato-kubectl",
"name": "keptnmetric-sample",
"apiVersion": "metrics.keptn.sh/v1alpha1"
},
"metric": {
"name": "keptnmetric-sample",
"selector": {
"matchLabels": {
"app": "frontend"
}
}
},
"timestamp": "2023-01-25T09:26:15Z",
"value": "10"
}
]
}
Filter on matching labels
You can filter based on matching labels.
For example, to retrieve all metrics
that are labelled with app=frontend
,
use the following command:
$ kubectl get --raw "/apis/custom.metrics.k8s.io/v1beta2/namespaces/podtato-kubectl/keptnmetrics.metrics.sh/*/*?labelSelector=app%3Dfrontend" | jq .
{
"kind": "MetricValueList",
"apiVersion": "custom.metrics.k8s.io/v1beta2",
"metadata": {},
"items": [
{
"describedObject": {
"kind": "KeptnMetric",
"namespace": "keptn-lifecycle-toolkit-system",
"name": "keptnmetric-sample",
"apiVersion": "metrics.keptn.sh/v1alpha3"
},
"metric": {
"name": "keptnmetric-sample",
"selector": {
"matchLabels": {
"app": "frontend"
}
}
},
"timestamp": "2023-01-25T09:26:15Z",
"value": "10"
}
]
}
Using the HorizontalPodAutoscaler
Use the Kubernetes Custom Metrics API
to refer to KeptnMetric
via the
Kubernetes HorizontalPodAutoscaler
(HPA),
as in the following example:
apiVersion: autoscaling/v2
kind: HorizontalPodAutoscaler
metadata:
name: podtato-head-entry
namespace: podtato-kubectl
spec:
scaleTargetRef:
apiVersion: apps/v1
kind: Deployment
name: podtato-head-entry
minReplicas: 1
maxReplicas: 10
metrics:
- type: Object
object:
metric:
name: keptnmetric-sample
describedObject:
apiVersion: metrics.keptn.sh/v1alpha1
kind: KeptnMetric
name: keptnmetric-sample
target:
type: Value
value: "10"
See the Scaling Kubernetes Workloads based on Dynatrace Metrics blog post for a detailed discussion of doing this with Dynatrace metrics. The same approach could be used to implement HPA with other data providers.