添加自定义属性
CloudWatch Application Signals 使用 OpenTelemetry 以自动检测您的应用程序,并从 Java、Python 以及更多不同语言的热门库中收集跨度。
自动检测可以捕获数据库查询、HTTP 请求、缓存访问和外部服务调用等信息,便于您对应用程序性能问题进行故障排除。
您可以添加自定义工具,以使用特定于业务的数据或其他要捕获的信息来丰富跨度。此数据可以记录为自定义属性或跨度事件,从而针对您的故障排除需求提供定制洞察。
注意
有关使用其他语言添加自定义属性或跨度事件的信息,请参阅 OpenTelemetry 网站中的 Language APIs & SDKS
自定义属性
您可以使用 OpenTelemetry 支持的所有语言,将业务相关属性或任何其他属性添加到跨度中。以下是向跨度添加订单编号和客户详细信息的 Java 代码片段。
import io.opentelemetry.api.trace.Span; public class OrderProcessor { public void processOrder() { Span span = Span.current(); span.setAttribute("order.id", "123456"); span.setAttribute("customer.name", "John Doe"); span.setAttribute("customer.id", "4343dfdd"); // Your order processing logic here System.out.println("Order processed with custom attributes"); } }
将这些属性添加到跨度后,即可在 Transaction Search 可视化编辑器中对属性进行搜索和分析。
跨度事件
跨度事件通常用于表示跨度持续时间内有意义的单数时间点。异常将通过自动检测自动捕获为跨度事件,但您也可以添加自定义业务事件,例如付款状态或购物车放弃。有关更多信息,请参阅 OpenTelemetry 网站上的 Span events
您可以使用 CloudWatch Application Signals 和 OpenTelemetry 支持的所有语言,将跨度事件嵌入到跨度中。以下是向跨度添加自定义事件的 Java 代码片段。
import io.opentelemetry.api.trace.Span; public class OrderProcessor { public void bookOrder() { Span span = Span.current(); // Add a booking started event span.addEvent("booking started"); // Add a payment succeeded event or failed event span.addEvent("booking failed"); } }
CloudWatch 代理的先决条件
使用 CloudWatch 代理向 X-Ray 发送跨度事件时,您必须在配置中打开 `transit_spans_in_otlp_format`
标志。
{ "traces": { ... "transit_spans_in_otlp_format": true ... } }
添加这些事件后,您可在 Transaction Search 可视化编辑器使用它们。
CloudWatch Logs 查询
您可以在 CloudWatch Logs 中查询跨度事件以查看高级洞察。以下示例查询命令展示了如何分析应用程序引发的异常:
fields jsonparse(@message) as js | unnest js.events into event | filter event.name = "exception" | display event.attributes.`exception.stacktrace`
fields jsonparse(@message) as js | unnest js.events into event | filter event.name = "exception" | stats count() by event.attributes.`exception.type`