#[tracing::instrument] 属性未按预期工作的问题排查
为什么#[tracing::instrument]未正确追踪block_hash_by_block_number函数?
相关代码
blocks_with_triggers函数
#[tracing::instrument(skip_all)] pub(crate) async fn blocks_with_triggers( adapter: Arc<EthereumAdapter>, logger: Logger, chain_store: Arc<dyn ChainStore>, subgraph_metrics: Arc<SubgraphEthRpcMetrics>, from: BlockNumber, to: BlockNumber, filter: &TriggerFilter, unified_api_version: UnifiedMappingApiVersion, ) -> Result<Vec<BlockWithTriggers<crate::Chain>>, Error> { // 其他业务逻辑 let to_hash_fut = eth.block_hash_by_block_number(&logger, to) .and_then(|hash| match hash { Some(hash) => Ok(hash), None => { warn!(logger, "Ethereum endpoint is behind"; "url" => eth.provider() ); bail!("Block {} not found in the chain", to) } }) .compat(); // 后续逻辑,最终会等待上述future完成 }
block_hash_by_block_number函数
#[tracing::instrument(skip_all)] fn block_hash_by_block_number( &self, logger: &Logger, block_number: BlockNumber, ) -> Box<dyn Future<Item = Option<H256>, Error = Error> + Send> { // 使用reqwest-tracing实现的逻辑 }
问题现象
- 初始调用逻辑下,追踪链路中未生成
block_hash_by_block_numberspan,POST span直接作为blocks_with_triggers的子span,不符合预期层级。 - 修改调用逻辑,手动为future添加
to_hash_futurespan后:to_hash_future成为blocks_with_triggers的子span- POST span成为
to_hash_future的子span - 但仍然没有
block_hash_by_block_numberspan,且Datadog中POST与to_hash_future为同级,而非预期的to_hash_future->block_hash_by_block_number-> POST层级。
EnvFilter配置
let filter_layer = EnvFilter::try_new("graph_chain_ethereum,reqwest_tracing::reqwest_otel_span_builder") .unwrap();
疑问
为什么#[tracing::instrument(skip_all)]属性没有为block_hash_by_block_number函数生成对应的追踪span?
内容的提问来源于stack exchange,提问作者Paymahn Moghadasian
相关产品推荐
相关产品推荐

