使用OpenTelemetry将GraphOS路由跟踪和指标发送到APM工具
深入了解您图性能和稳定性
自托管GraphOS路由器仅限于GraphOS企业版计划。其他计划类型使用GraphOS管理的云路由。查看定价页面以了解详情。
应用性能监控 (APM) 工具对于许多组织至关重要,直接了解您的 图 性能是系统稳定性和性能的整体可观测性的一部分重要内容。GraphOS 路由器以及 子图 并无不同。虽然您可能已经用 APM 工具对现有的子图进行了功能实现,但为了清楚地了解您图的运行状况,您可能还需要连接路由器。
幸运的是,有办法将这两款软件连接在一起: OpenTelemetry。我们之前讨论过利用 OpenTelemetry 连接到 Prometheus,同样的方法也适用于此用例。
使用 OpenTelemetry 有两种方法可以将 路由器 连接到您的 APM:
- 使用 OpenTelemetry 收集器
- 直接连接
在我们的示例中,我们将连接到 New Relic,但这也适用于任何支持 OpenTelemetry 作为输入选项的 APM,例如 Honeycomb 或 Dynatrace。
使用 OpenTelemetry 收集器(推荐)
我们建议使用 OpenTelemetry 收集器将 router度量标准发送到您的 APM 工具,以下是一些原因:
- 收集器提供了当运行多个 router 实例时的集中式报告器。
- 收集器使您能够将指标处理并发送到除 APM 工具以外的多个位置,例如本地 Prometheus 实例。
您需要一个 OpenTelemetry 收集器 的实例来将其导出到您的 APM 工具。基本配置需要 OpenTelemetry 协议 (OTLP) 接收器(用于路由器)和导出器(用于转发到您的 APM 工具)。
此外,我们建议添加批处理
处理器以启用每个导出器上的批量请求。
以下是一个针对 New Relic 的示例收集器配置
receivers:otlp:protocols:grpc:http:cors:allowed_origins:- http://*- https://*exporters:otlp:endpoint: ${OTEL_EXPORTER_OTLP_ENDPOINT}headers:api-key: ${NEW_RELIC_LICENSE_KEY}processors:batch:service:pipelines:traces:receivers: [otlp]exporters: [otlp]processors: [batch]metrics:receivers: [otlp]exporters: [otlp]processors: [batch]
然后,路由器需要直接连接到收集器实例。下面是一个示例路由器配置:
cors:allow_any_origin: truesupergraph:listen: 0.0.0.0:4000telemetry:metrics:otlp:endpoint: http://COLLECTOR_ADDRESS:4317tracing:trace_config:service_name: 'router'service_namespace: 'apollo'otlp:endpoint: http://COLLECTOR_ADDRESS:4317
有关配置选项的更多信息,请参阅关于使用OpenTelemetryCollector 捕获指标和 捕获跟踪的文档。
直接连接
您不必使用OpenTelemetryCollector,也可以配置您的GraphOS Router实例直接将数据发送到您的APM工具。为此,您需要修改路由器的YAML配置文件,将导出设置为使用标题(在这种情况下,元数据),以及跟踪/指标以传递令牌。
下面是连接到New Relic的示例路由器配置:
cors:allow_any_origin: truesupergraph:listen: 0.0.0.0:4000telemetry:metrics:otlp:endpoint: https://otlp.nr-data.netgrpc:metadata:'api-key': ['${env.NEW_RELIC_LICENSE_KEY}']tracing:trace_config:service_name: 'router'service_namespace: 'apollo'otlp:endpoint: https://otlp.nr-data.netgrpc:metadata:'api-key': ['${env.NEW_RELIC_LICENSE_KEY}']
此配置使用 NEW_RELIC_LICENSE_KEY
环境变量,通过路由器的 variable expansion feature变量扩展功能来传递密钥,从而避免在配置中包含敏感令牌。