Metrics exporters
Export router metrics
The GraphOS Router and Apollo Router Core support collection of metrics with OpenTelemetry, with exporters for:
In router.yaml
, you configure router metrics with the following settings:
telemetry.exporters.metrics.common
. Configure values for the router which are common across metrics exporters.telemetry.exporters.metrics.prometheus
. Configure the Prometheus exporter.telemetry.exporters.metrics.otlp
. Configure the OpenTelemetry exporter. Supports sending traces to Datadog.
Metrics common configuration
Common metrics configuration contains global settings for all exporters:
service_name
Set a service name for your router metrics so you can easily locate them in external metrics dashboards.
The service name can be set by an environment variable or in router.yaml
, with the following order of precedence (first to last):
OTEL_SERVICE_NAME
environment variableOTEL_RESOURCE_ATTRIBUTES
environment variabletelemetry.exporters.metrics.common.service_name
inrouter.yaml
Example service_nameExample setting service name intelemetry.exporters.metrics.common.service_name
:YAMLrouter.yaml1telemetry: 2 exporters: 3 metrics: 4 common: 5 # (Optional) Set the service name to easily find metrics related to the apollo-router in your metrics dashboards 6 service_name: "router"
telemetry.exporters.metrics.common.resource
inrouter.yaml
Example resourceExample setting service name intelemetry.exporters.metrics.common.resource
:YAMLrouter.yaml1telemetry: 2 exporters: 3 metrics: 4 common: 5 resource: 6 # (Optional) Set the service name to easily find metrics related to the apollo-router in your metrics dashboards 7 "service.name": "router"
If the service name isn't explicitly set, it defaults to unknown_service:router
or unknown_service
if the executable name cannot be determined.
resource
A resource attribute is a set of key-value pairs that provide additional information to an exporter. It's an attribute of an OpenTelemetry resource. Application performance monitors (APM) can interpret and display resource information.
In router.yaml
, resource attributes are set in telemetry.metrics.common.resource
. For example:
1telemetry:
2 exporters:
3 metrics:
4 common:
5 resource:
6 "environment.name": "production"
7 "environment.namespace": "{env.MY_K8_NAMESPACE_ENV_VARIABLE}"
For OpenTelemetry conventions for resources, see Resource Semantic Conventions.
buckets
You can customize bucket boundaries for all generated histograms by setting telemetry.exporters.metrics.common.buckets
in router.yaml
. For example:
1telemetry:
2 exporters:
3 metrics:
4 common:
5 buckets:
6 - 0.05
7 - 0.10
8 - 0.25
9 - 0.50
10 - 1.00
11 - 2.50
12 - 5.00
13 - 10.00
14 - 20.00
views
You can override default attributes and default buckets for specific metrics thanks to this configuration.
1telemetry:
2 exporters:
3 metrics:
4 common:
5 service_name: apollo-router
6 views:
7 - name: apollo_router_http_request_duration_seconds # Instrument name you want to edit. You can use wildcard in names. If you want to target all instruments just use '*'
8 unit: "ms" # (Optional) override the unit
9 description: "my new description of this metric" # (Optional) override the description
10 aggregation: # (Optional)
11 histogram:
12 buckets: # Override default buckets configured for this histogram
13 - 1
14 - 2
15 - 3
16 - 4
17 - 5
18 allowed_attribute_keys: # (Optional) Keep only listed attributes on the metric
19 - status
20
You can drop specific metrics if you don't want these metrics to be sent to your APM.
1telemetry:
2 exporters:
3 metrics:
4 common:
5 service_name: apollo-router
6 views:
7 - name: apollo_router_http_request_duration_seconds # Instrument name you want to edit. You can use wildcard in names. If you want to target all instruments just use '*'
8 aggregation: drop
9
Metrics common reference
Attribute | Default | Description |
---|---|---|
service_name | unknown_service:router | The OpenTelemetry service name. |
service_namespace | The OpenTelemetry namespace. | |
resource | The OpenTelemetry resource to attach to metrics. | |
views | Override default buckets or configuration for metrics (including dropping the metric itself) |