mirror of https://github.com/dapr/docs.git
110 lines
3.8 KiB
Markdown
110 lines
3.8 KiB
Markdown
---
|
|
type: docs
|
|
title: "Configure metrics"
|
|
linkTitle: "Overview"
|
|
weight: 4000
|
|
description: "Enable or disable Dapr metrics "
|
|
---
|
|
|
|
By default, each Dapr system process emits Go runtime/process metrics and has their own [Dapr metrics](https://github.com/dapr/dapr/blob/master/docs/development/dapr-metrics.md).
|
|
|
|
## Prometheus endpoint
|
|
The Dapr sidecars exposes a [Prometheus](https://prometheus.io/) metrics endpoint that you can scrape to gain a greater understanding of how Dapr is behaving.
|
|
|
|
## Configuring metrics using the CLI
|
|
|
|
The metrics application endpoint is enabled by default. You can disable it by passing the command line argument `--enable-metrics=false`.
|
|
|
|
The default metrics port is `9090`. You can override this by passing the command line argument `--metrics-port` to Daprd.
|
|
|
|
## Configuring metrics in Kubernetes
|
|
You can also enable/disable the metrics for a specific application by setting the `dapr.io/enable-metrics: "false"` annotation on your application deployment. With the metrics exporter disabled, `daprd` does not open the metrics listening port.
|
|
|
|
The following Kubernetes deployment example shows how metrics are explicitly enabled with the port specified as "9090".
|
|
|
|
```yaml
|
|
apiVersion: apps/v1
|
|
kind: Deployment
|
|
metadata:
|
|
name: nodeapp
|
|
labels:
|
|
app: node
|
|
spec:
|
|
replicas: 1
|
|
selector:
|
|
matchLabels:
|
|
app: node
|
|
template:
|
|
metadata:
|
|
labels:
|
|
app: node
|
|
annotations:
|
|
dapr.io/enabled: "true"
|
|
dapr.io/app-id: "nodeapp"
|
|
dapr.io/app-port: "3000"
|
|
dapr.io/enable-metrics: "true"
|
|
dapr.io/metrics-port: "9090"
|
|
spec:
|
|
containers:
|
|
- name: node
|
|
image: dapriosamples/hello-k8s-node:latest
|
|
ports:
|
|
- containerPort: 3000
|
|
imagePullPolicy: Always
|
|
```
|
|
|
|
## Configuring metrics using application configuration
|
|
You can also enable metrics via application configuration. To disable the metrics collection in the Dapr sidecars running in a specific namespace:
|
|
|
|
- Use the `metrics` spec configuration.
|
|
- Set `enabled: false` to disable the metrics in the Dapr runtime.
|
|
|
|
```yaml
|
|
apiVersion: dapr.io/v1alpha1
|
|
kind: Configuration
|
|
metadata:
|
|
name: tracing
|
|
namespace: default
|
|
spec:
|
|
tracing:
|
|
samplingRate: "1"
|
|
metrics:
|
|
enabled: false
|
|
```
|
|
|
|
## High cardinality metrics
|
|
|
|
Depending on your use case, some metrics emitted by Dapr might contain values that have a high cardinality. This might cause increased memory usage for the Dapr process/container and incur expensive egress costs in certain cloud environments. To mitigate this issue, you can set regular expressions for every metric exposed by the Dapr sidecar. [See a list of all Dapr metrics](https://github.com/dapr/dapr/blob/master/docs/development/dapr-metrics.md).
|
|
|
|
The following example shows how to apply a regular expression for the label `method` in the metric `dapr_runtime_service_invocation_req_sent_total`:
|
|
|
|
```yaml
|
|
apiVersion: dapr.io/v1alpha1
|
|
kind: Configuration
|
|
metadata:
|
|
name: daprConfig
|
|
spec:
|
|
metric:
|
|
enabled: true
|
|
rules:
|
|
- name: dapr_runtime_service_invocation_req_sent_total
|
|
labels:
|
|
- name: method
|
|
regex:
|
|
"orders/": "orders/.+"
|
|
```
|
|
|
|
When this configuration is applied, a recorded metric with the `method` label of `orders/a746dhsk293972nz` will be replaced with `orders/`.
|
|
|
|
### Watch the demo
|
|
|
|
Watch [this video to walk through handling high cardinality metrics](https://youtu.be/pOT8teL6j_k?t=1524):
|
|
|
|
<iframe width="560" height="315" src="https://www.youtube-nocookie.com/embed/pOT8teL6j_k?start=1524" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" allowfullscreen></iframe>
|
|
|
|
|
|
## References
|
|
|
|
* [Howto: Run Prometheus locally]({{< ref prometheus.md >}})
|
|
* [Howto: Set up Prometheus and Grafana for metrics]({{< ref grafana.md >}})
|