【问题标题】:Doobie and AWS Xray TracingDoobie 和 AWS Xray 追踪
【发布时间】:2020-04-24 10:12:10
【问题描述】:

我正在尝试为 postgres DB 设置 XRAY 跟踪。我不断收到 Segment Not found 错误 我按照此链接中的说明进行操作https://docs.aws.amazon.com/xray/latest/devguide/scorekeep-workerthreads.html

 def save(event: EventRow): IO[Int] = {
    AWSXRay.getGlobalRecorder.setTraceEntity(segment)
    sql"insert into events (id, name, data, created) values (${event.id}, ${event.name}, ${event.data}, ${event.created})".update.run
      .transact(xs)
  }

【问题讨论】:

  • 您是否在较早地构建细分,例如使用Segment segment = AWSXRay.beginSegment('name'); 并使用AWSXRay.endSegment() 关闭它?您在哪一行看到此错误?
  • @WilliamArmiros 问题是 Doobie 使用的 ExecutionContext 。没有办法将段上下文传递给执行上下文

标签: scala amazon-web-services aws-xray doobie


【解决方案1】:

这可能是 X-Ray 不支持 Doobie 的一个不可避免的后果。您可以删除用于 X-Ray 的 postgres 检测库,这将防止未找到段错误。作为跟踪查询的解决方法,您可以尝试以下方法:

Subsegment sub = AWSXRay.beginSubsegment('doobieCall');
sql"insert into events (id, name, data, created) values (${event.id}, ${event.name}, ${event.data}, ${event.created})".update.run
      .transact(xs)
Map<String, Object> sqlMap = new HashMap<>();
// Add desired metadata
sub.putAllSql(sqlMap);
AWSXRay.endSubsegment();

元数据可以是whitelisted SQL fields 中的任何一个。由于 Doobie 是一个 scala 库,我们并未正式支持 Scala,因此我们目前不打算添加对它的支持。

【讨论】:

  • 嗨威廉,谢谢你的建议。一般来说,这些东西中的大多数都适用于遵循单线程一请求概念的框架,而不适用于像 play 这样的基于 actor 的并发模式的 aync 框架。您对此有何建议
猜你喜欢
  • 2023-01-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-07-21
  • 1970-01-01
  • 2019-02-01
  • 2023-01-30
  • 2019-10-01
相关资源
最近更新 更多