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_NAMEenvironment variableOTEL_RESOURCE_ATTRIBUTESenvironment variabletelemetry.exporters.metrics.common.service_nameinrouter.yamlExample 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.resourceinrouter.yamlExample 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 "deployment.environment.name": "production"
7 "k8s.namespace.name": "{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.00views
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
20You 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
9Metrics 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) |