Traffic Metrics
A user can enable traffic metrics by editing a Mesh
resource and providing the desired Mesh
-wide configuration. If necessary, metrics configuration can be customized for each Dataplane
individually, e.g. to override the default metrics port that might be already in use on that particular machine.
Out-of-the-box, Kuma
provides full integration with Prometheus
:
- if enabled, every dataplane will expose its metrics in
Prometheus
format - furthemore,
Kuma
will make sure thatPrometheus
can automatically find every dataplane in the mesh
To collect metrics from Kuma, you need to first expose metrics from Dataplanes and then configure Prometheus to collect them.
To expose Prometheus
metrics from every dataplane in the mesh, configure a Mesh
resource as follows:
which is a convenient shortcut for
apiVersion: kuma.io/v1alpha1
kind: Mesh
metadata:
name: default
spec:
metrics:
enabledBackend: prometheus-1
backends:
- name: prometheus-1
type: prometheus
conf:
skipMTLS: false
port: 5670
path: /metrics
tags: # tags that can be referred in Traffic Permission when metrics are secured by mTLS
kuma.io/service: dataplane-metrics
type: Mesh
name: default
metrics:
enabledBackend: prometheus-1
backends:
- name: prometheus-1
type: prometheus
conf:
skipMTLS: true # by default mTLS metrics are also protected by mTLS. Scraping metrics with mTLS without transparent proxy is not supported at the moment.
which is a convenient shortcut for
type: Mesh
name: default
metrics:
enabledBackend: prometheus-1
backends:
- name: prometheus-1
type: prometheus
conf:
port: 5670
path: /metrics
tags: # tags that can be referred in Traffic Permission when metrics are secured by mTLS
kuma.io/service: dataplane-metrics
Both snippets from above instruct Kuma
to configure every dataplane in the mesh default
to expose an HTTP endpoint with Prometheus
metrics on port 5670
and URI path /metrics
.
Override Prometheus settings per Dataplane
To override Mesh
-wide defaults for a particular Pod
, use Kuma
-specific annotations:
prometheus.metrics.kuma.io/port
- to overrideMesh
-wide default portprometheus.metrics.kuma.io/path
- to override -wide default path
E.g.,
As a result, dataplane for this particular Pod
will expose an HTTP endpoint with Prometheus
metrics on port 1234
and URI path /non-standard-path
.
To override Mesh
-wide defaults on a particular machine, configure Dataplane
resource as follows:
type: Dataplane
mesh: default
name: example
metrics:
type: prometheus
conf:
skipMTLS: true
port: 1234
path: /non-standard-path
As a result, this particular dataplane will expose an HTTP endpoint with Prometheus
metrics on port 1234
and URI path /non-standard-path
.
Configure Prometheus
Although dataplane metrics are now exposed, Prometheus
doesn’t know anything about it just yet.
Use kumactl install metrics | kubectl apply -f -
to deploy configured Prometheus with Grafana.
If you’ve got Prometheus deployment already, you can use Prometheus federation (opens new window) to bring Kuma metrics to your main Prometheus cluster.
First, you need to run kuma-prometheus-sd
, e.g. by using the following command:
kuma-prometheus-sd run \
--cp-address=grpcs://kuma-control-plane.internal:5676 \
--output-file=/var/run/kuma-prometheus-sd/kuma.file_sd.json
The above configuration tells kuma-prometheus-sd
to talk to Kuma
Control Plane at and save the list of dataplanes to /var/run/kuma-prometheus-sd/kuma.file_sd.json
.
Then, you need to set up Prometheus
to read from that file, e.g. by using prometheus.yml
config with the following contents:
scrape_configs:
- job_name: 'kuma-dataplanes'
scrape_interval: 15s
file_sd_configs:
- files:
- /var/run/kuma-prometheus-sd/kuma.file_sd.json
and running
Now, if you check Targets
page on Prometheus
UI, you should see a list of dataplanes from your mesh, e.g.
Kuma lets you expose Dataplane metrics in a secure way by leveraging mTLS. Prometheus needs to be a part of the Mesh for this feature to work, which is the default deployment model when kumactl install metrics
is used on Kubernetes.
Make sure that mTLS is enabled in the Mesh.
apiVersion: kuma.io/v1alpha1
kind: Mesh
metadata:
name: default
spec:
mtls:
enabledBackend: ca-1
backends:
- name: ca-1
type: builtin
metrics:
enabledBackend: prometheus-1
backends:
type: prometheus
conf:
port: 5670
path: /metrics
skipMTLS: false
tags: # tags that can be referred in Traffic Permission
kuma.io/service: dataplane-metrics
Allow the traffic from Grafana to Prometheus Server and from Prometheus Server to Dataplane metrics and for other Prometheus components:
apiVersion: kuma.io/v1alpha1
mesh: default
metadata:
name: metrics-permissions
spec:
sources:
- match:
kuma.io/service: prometheus-server_kuma-metrics_svc_80
destinations:
- match:
kuma.io/service: dataplane-metrics
- match:
kuma.io/service: "prometheus-alertmanager_kuma-metrics_svc_80"
- match:
kuma.io/service: "prometheus-kube-state-metrics_kuma-metrics_svc_80"
- match:
kuma.io/service: "prometheus-kube-state-metrics_kuma-metrics_svc_81"
- match:
kuma.io/service: "prometheus-pushgateway_kuma-metrics_svc_9091"
---
apiVersion: kuma.io/v1alpha1
kind: TrafficPermission
mesh: default
metadata:
name: grafana-to-prometheus
spec:
sources:
- match:
kuma.io/service: "grafana_kuma-metrics_svc_80"
destinations:
- match:
kuma.io/service: "prometheus-server_kuma-metrics_svc_80"
This feature requires transparent proxy, therefore for now it’s not available in Universal for now.
In addition to exposing metrics from Dataplane, you may want to expose metrics from application next to Kuma DP.
apiVersion: apps/v1
kind: Deployment
metadata:
namespace: kuma-example
name: kuma-tcp-echo
spec:
...
template:
metadata:
...
annotations:
prometheus.io/scrape: "true"
prometheus.io/port: "1234"
prometheus.io/path: "/non-standard-path"
spec:
Use Discovery Service of your choice (opens new window). In the future Kuma will help to expose metrics in more native way.
Remember that in order to consume paths protected by mTLS, you need Traffic Permission that lets Prometheus consume applications.
Kuma ships with 4 default dashboards that are available to import from .
This dashboards lets you investigate the status of a single dataplane in the mesh.
Kuma Mesh
This dashboard lets you investigate the aggregated statistics of a single mesh.
This dashboard lets you investigate aggregated statistics from dataplanes of given source service to dataplanes of given destination service.
Kuma CP
This dashboard lets you investigate statistics of the control plane.
This dashboard lets you investigate aggregated statistics for each service.