事件
从路由请求的生命周期中捕获事件
一个 事件 用于指示在 GraphOS 路由器的请求生命周期。事件输出到日志和跟踪中。
您可以在事件可以是标准事件或自定义事件,并且可以由可配置的条件触发。
事件配置
路由器的请求生命周期服务
Arouter's 请求生命周期有三个主要服务:
- 路由器服务 - 在请求解析之前处理传入的请求。在不可见字节上下文中工作。
- 超图服务 - 在请求解析后并且在其被发送到 子图 之前处理请求。在 GraphQL 上下文中工作。
- 子图服务 - 发送请求到子图后处理请求。在 GraphQL 上下文中工作。
使用 router
、supergraph
和 subgraph
部分来定义每个服务的自定义事件配置:
telemetry:instrumentation:events:router:# ...supergraph:# ...subgraph:# ...
标准事件
每个服务都有一组可以配置的标准事件
request
- 已收到请求。response
- 已发送响应。error
- 请求生命周期中发生错误。
ⓘ 注意
等级error
仅适用于请求生命周期错误,不适用于GraphQL错误。
要配置这些事件,请将等级设置为trace
、info
、warn
、error
或off
(默认)。
例如
telemetry:instrumentation:events:router:request: offresponse: offerror: error# ...
但您也可以根据条件启用这些标准事件(不支持批量请求)。
例如
telemetry:instrumentation:events:router:request:level: infocondition: # Only log the router request if you sent `x-log-request` with the value `enabled`eq:- request_header: x-log-request- "enabled"response: offerror: errorsupergraph:response:level: infocondition: # Only log the supergraph response containing graphql errorseq:- on_graphql_error: true- trueerror: error# ...
自定义事件
此功能仅在 GraphOS 专用或企业计划中可用。
要比较所有计划类型对 GraphOS 功能的支持,请参阅 定价页面.
对于每个服务,您还可以配置自定义事件。
telemetry:instrumentation:events:router:# Custom eventsmy.event: # This key will automatically be added as a 'type' attribute of the event# Custom event configuration
ⓘ 注意
请注意,您添加的遥测数据的量可能会影响您
路由器's 的性能。- 自定义指标、事件和属性比标准指标消耗更多的处理资源。添加太多(标准或自定义)可能会降低您的 路由器
的运行效率。
- 例如配置
events.*.request|error|response
产生所有 路由器 的生命周期服务的输出,应仅用于开发或调试,而不适用于生产。
对于适当的日志记录遥测数据,您应使用info
级别的日志记录。设置RUST_LOG
或 APOLLO_ROUTER_LOG
环境变量和 --log
命令行选项为info
。使用更详细的日志记录,如error
,可能会导致一些属性丢失。
消息
每个自定义事件都必须有一个消息。这是一个固定值,应使用自定义属性来添加附加信息。
telemetry:instrumentation:events:router:acme.event:message: "my event message"# ...
on
每个自定义事件都必须指明它在何时被触发。这可以是request
、response
、event_response
或error
。
telemetry:instrumentation:events:router:acme.event:on: request # request, response, event_response, error# ...
event_response
在希望直接访问JSON响应体时非常有用。它还适用于@defer 块事件。
级别
自定义事件有一个级别,包括trace
、debug
、info
、warn
、error
和off
(如果您想禁用此事件)。级别决定了事件的严重性。
设置级别
telemetry:instrumentation:events:router:acme.event:level: info # trace, debug, info, warn, error, off# ...
条件
自定义事件可以配置为在特定条件下发出,例如当响应状态码为200时。
在router.yaml
中,设置一个具有相等性(eq
)检查的condition
:
telemetry:instrumentation:events:router:acme.event:# ...condition:eq:- 200- response_status: Code
有关更多详情,请参阅条件。
属性
自定义事件可以附加来自 路由器 请求生命周期的属性。这些属性用来筛选和组合您的 APM 中的跨度。
属性可以来自标准属性或选择器。可用的属性取决于请求生命周期的服务。
telemetry:instrumentation:events:router:my.event:# ...attributes:# Standard attributeshttp.response.status_code: true# Custom attributes"my_attribute":response_header: "x-my-header"
事件配置示例
例如,路由器服务可以使用标准事件(request
, response
, error
),以及一个条件性自定义事件(my.event
):
telemetry:instrumentation:events:router:# Standard eventsrequest: inforesponse: infoerror: info# Custom eventsmy.event:message: "my event message"level: infoon: requestattributes:http.response.body.size: false# Only log when the x-log-request header is `log`condition:eq:- "log"- request_header: "x-log-request"supergraph:# Custom event configuration for supergraph service ...subgraph:# Custom event configuration for subgraph service ...