10月8日至10日加入我们在纽约市的活动,了解GraphQL联邦和API平台工程方面的最新技巧、趋势和新闻。加入2024年纽约市的GraphQL峰会
文档
免费开始

度量指标导出器

导出路由器指标


支持使用以下方式收集指标:OpenTelemetry,以下导出器支持:

router.yaml中,您可以配置 指标,以下设置如下:

  • telemetry.exporters.metrics.common。配置所有指标导出器共有的路由器值。
  • telemetry.exporters.metrics.prometheus。配置 Prometheus 导出器。
  • telemetry.exporters.metrics.otlp。配置 OpenTelemetry 导出器。支持将追踪数据发送到 Datadog。

指标通用配置

通用指标配置包含所有导出器的全局设置

service_name

为您的 router 指标设置服务名称,以便您可以在外部指标仪表板中轻松找到它们。

服务名称可以通过环境变量或在 router.yaml 中设置,优先级顺序(从高到低)如下:

  1. OTEL_SERVICE_NAME 环境变量

  2. OTEL_RESOURCE_ATTRIBUTES 环境变量

  3. telemetry.exporters.metrics.common.service_namerouter.yaml

  1. telemetry.exporters.metrics.common.resourcerouter.yaml

如果没有显式设置服务名称,默认为 unknown_service:routerunknown_service(如果无法确定可执行程序名称)。

资源

资源属性是一组键值对,它为导出器提供附加信息。它是 OpenTelemetry 资源 的属性。应用程序性能监控器(APM)可以解释和显示资源信息。

router.yaml 中,资源属性在 telemetry.metrics.common.resource 中设置。例如:

router.yaml
telemetry:
exporters:
metrics:
common:
resource:
"environment.name": "production"
"environment.namespace": "{env.MY_K8_NAMESPACE_ENV_VARIABLE}"

有关 OpenTelemetry 资源约定,请参阅 资源语义约定

您可以设置生成的所有直方图的桶边界,通过在 router.yaml 中设置 telemetry.exporters.metrics.common.buckets。例如:

router.yaml
telemetry:
exporters:
metrics:
common:
buckets:
- 0.05
- 0.10
- 0.25
- 0.50
- 1.00
- 2.50
- 5.00
- 10.00
- 20.00

属性

您可以将自定义属性(OpenTelemetry)和标签(Prometheus)添加到 apollo_router_http_requests 指标。属性可以是:

  • 静态值(最好使用 资源
  • 请求或响应的头信息
  • 上下文中的值
  • 请求或响应体中的值(JSON路径

注意

使用 资源属性 来提供关于遥测资源的信息,包括主机和环境。

以下是一个配置这些属性的示例

router.yaml
telemetry:
exporters:
metrics:
common:
attributes:
supergraph: # Attribute configuration for requests to/responses from the router
static:
- name: "version"
value: "v1.0.0"
request:
header:
- named: "content-type"
rename: "payload_type"
default: "application/json"
- named: "x-custom-header-to-add"
response:
body:
# Apply the value of the provided path of the router's response body as an attribute
- path: .errors[0].extensions.http.status
name: error_from_body
# Use the unique extension code to identify the kind of error
- path: .errors[0].extensions.code
name: error_code
context:
# Apply the indicated element from the plugin chain's context as an attribute
- named: my_key
subgraph: # Attribute configuration for requests to/responses from subgraphs
all:
static:
# Always apply this attribute to all metrics for all subgraphs
- name: kind
value: subgraph_request
errors: # Only work if it's a valid GraphQL error (for example if the subgraph returns an http error or if the router can't reach the subgraph)
include_messages: true # Will include the error message in a message attribute
extensions: # Include extensions data
- name: subgraph_error_extended_type # Name of the attribute
path: .type # JSON query path to fetch data from extensions
- name: message
path: .reason
# Will create this kind of metric for example apollo_router_http_requests_error_total{message="cannot contact the subgraph",subgraph="my_subgraph_name",subgraph_error_extended_type="SubrequestHttpError"}
subgraphs:
my_subgraph_name: # Apply these rules only for the subgraph named `my_subgraph_name`
request:
header:
- named: "x-custom-header"
body:
# Apply the value of the provided path of the router's request body as an attribute (here it's the query)
- path: .query
name: query
default: UNKNOWN

注意

OpenTelemetry 包含许多可以 使用 通过自定义 仪表 使用

视图

通过此配置,您可以覆盖特定指标的自定义属性和默认桶。

router.yaml
telemetry:
exporters:
metrics:
common:
service_name: apollo-router
views:
- 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 '*'
unit: "ms" # (Optional) override the unit
description: "my new description of this metric" # (Optional) override the description
aggregation: # (Optional)
histogram:
buckets: # Override default buckets configured for this histogram
- 1
- 2
- 3
- 4
- 5
allowed_attribute_keys: # (Optional) Keep only listed attributes on the metric
- status

如果您不希望将特定指标发送到APM,可以删除这些指标。

router.yaml
telemetry:
exporters:
metrics:
common:
service_name: apollo-router
views:
- 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 '*'
aggregation: drop

指标常用参考

属性默认值描述
service_nameunknown_service:routerOpenTelemetry服务名称。
service_namespaceOpenTelemetry命名空间。
资源要将资源附加到指标上的OpenTelemetry资源。
属性针对 apollo_router_http_requests 仪表的定制。
视图覆盖指标的默认桶或配置(包括删除整个指标)
上一页
标准输出
下一页
Datadog
查看文章查看在GitHub上编辑编辑论坛Discord

©2024Apollo Graph Inc.,即Apollo GraphQL公司。

隐私政策

公司