

# 添加自定义属性
<a name="CloudWatch-Transaction-Search-add-custom-attributes"></a>

 CloudWatch Application Signals 使用 OpenTelemetry 以自动检测您的应用程序，并从 Java、Python 以及更多不同语言的热门库中收集跨度。

 自动检测可以捕获数据库查询、HTTP 请求、缓存访问和外部服务调用等信息，便于您对应用程序性能问题进行故障排除。

 您可以添加自定义工具，以使用特定于业务的数据或其他要捕获的信息来丰富跨度。此数据可以记录为自定义属性或跨度事件，从而针对您的故障排除需求提供定制洞察。

**注意**  
 有关使用其他语言添加自定义属性或跨度事件的信息，请参阅 *OpenTelemetry 网站*中的 [Language APIs & SDKS](https://opentelemetry.io/docs/languages/)。

## 自定义属性
<a name="w2aac28c21c19c11"></a>

 您可以使用 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 可视化编辑器](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/CloudWatch-Transaction-Search-search-analyze-spans.html)中对属性进行搜索和分析。

## 跨度事件
<a name="w2aac28c21c19c13"></a>

 跨度事件通常用于表示跨度持续时间内有意义的单数时间点。异常将通过自动检测自动捕获为跨度事件，但您也可以添加自定义业务事件，例如付款状态或购物车放弃。有关更多信息，请参阅 OpenTelemetry 网站上的 [Span events](https://opentelemetry.io/docs/concepts/signals/traces/#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 代理的先决条件
<a name="w2aac28c21c19c13b9"></a>

 使用 CloudWatch 代理向 X-Ray 发送跨度事件时，您必须在配置中打开 ``transit_spans_in_otlp_format`` 标志。

```
{
  "traces": {
    ...
    "transit_spans_in_otlp_format": true
    ...
  }
}
```

 添加这些事件后，您可在 [Transaction Search 可视化编辑器](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/CloudWatch-Transaction-Search-search-analyze-spans.html)使用它们。

## CloudWatch Logs 查询
<a name="w2aac28c21c19c15"></a>

 您可以在 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`
```