路由遥测
收集可观察数据以监视您的路由和超级图
在本概述中,了解以下内容:
- 如何GraphOS 路由器和Apollo 路由器核心的性能监控以及可观测性和调试性
- 在路由器的日志、指标和跟踪中捕获哪些数据
- 提供哪些导出器可以将遥测数据传输到您的应用程序性能监控(APM)工具
通过遥测实现可观测性
您的supergraph的健康状况与您路由器的健康状况一样。因为路由器是访问supergraph的单个入口,所有的客户端请求都会穿过路由器的请求生命周期。任何路由器的问题都可能影响对您的supergraph的所有请求的处理。
诊断您的路由器的健康和性能需要其对内部工作提供可观测性数据。您可以监控和分析更多的可观测性数据,就可以更快地识别不健康的行为,推断出根本原因并实施修复。
路由器提供了监控其健康和解决问题的必要数据。路由器的可观测性对于维护健康、高效supergraph至关重要,并且有助于最小化其平均修复时间(MTTR)。
收集您需要的精确遥测
有效的遥测仅提供维持您的图所需的信息量和粒度。数据过多可能会淹没系统,例如,高基数指标。数据过少可能无法提供足够的信息来调试问题。
需要捕获的具体事件—以及它们需要捕获的条件—可能会随着客户端应用程序和图的变化而变化。不同的环境,如生产开发和测试环境,可能会有不同的可观测性要求。
路由器遥测可定制以满足不同graphs的可观测性需求。您可以在路由器请求生命周期的不同阶段记录自定义事件,并通过属性创建自定义上下文,以跟踪请求或响应在路由器中的流动。您可以通过批处理遥测等来调整 emitted 遥测的量和速率。
路由器遥测类型
路由器收集不同类型的遥测数据,包括:
这可以帮助您收集有关路由器内部运作的数据,并将日志、指标和跟踪导出到应用程序性能监控(APM)和可观察性工具。
日志和事件
日志记录路由器中的事件。已记录的事件示例包括:
- 关于路由器生命周期的信息
- 有关配置错误的警告
- 请求过程中发生的错误
指标和工具
指标是对路由器行为的测量,可以导出和监控。指标的类型包括直方图、仪表和计数。
指标可以通过导出器消费。请参阅指标导出器以了解支持的导出器概述。
单个指标称为仪器。路由器的示例仪器包括:
- 接收到的请求数量
- 请求持续时间的直方图
- 正在传输的请求数量
请参阅仪器以了解可用的仪器,以及配置和自定义仪器的指南。
跟踪和跨度
跟踪监控请求通过路由器的流。跟踪由跨度组成。跨度捕获请求在路由器请求生命周期中的持续时间。跨度可以包括有关请求的上下文信息,例如HTTP状态代码或被查询的子图名称。
跨度的示例包括
router
- 从HTTP角度包装整个请求supergraph
- 解析GraphQL后包装请求subgraph
- 包装对子图的请求。
通过跟踪导出器消费跟踪。
路由器遥测导出器
路由器以与行业标准APM工具兼容的格式导出其收集的遥测数据。路由器支持包括Prometheus、OpenTelemetry Collector、Datadog、New Relic、Jaeger和Zipkin在内的各种工具的日志、指标和跟踪导出器。
- Prometheus
- OpenTelemetry Collector
- Datadog
- New Relic
- Jaeger
- Zipkin
路由遥测属性
您可以使用 属性注解事件、指标和跨度。 角色是键值对,用于向遥测添加有关路由管道的上下文信息。您可以使用这些属性在您的APM中过滤和分组数据。
示例属性包括
- HTTP状态码
- GraphQL 操作名称
- 子图名称
最佳实践
平衡遥测和路由性能
请注意,您添加的遥测数量可能会影响您的 router's performance.
- 自定义指标、事件和属性比标准指标消耗更多的处理资源。添加太多(标准或自定义)可能会使您的 router 变慢。
- 例如,
events.*.request|error|response
之类的配置,它会产生所有 router 生命周期服务的输出,仅供开发或调试使用,不可用于生产。
对于正确记录的遥测,您应使用 info
级别的日志。设置 RUST_LOG
或 APOLLO_ROUTER_LOG
环境变量的值以及 --log
CLI 选项为 info
。使用较详细的日志记录,如 error
,可能会导致某些属性丢失。