CnOps 智能运维与可观测社区
首页开源项目实践文章视频课程常见问答开发者工具STAROps 专题
导航菜单
首页开源项目实践文章视频课程常见问答开发者工具STAROps 专题

CnOps 智能运维与可观测社区

愿景

CnOps 智能运维与可观测社区是一个以"智能运维与可观测"为核心的开放、包容、分享的技术社区,旨在聚集运维专家、开发者和爱好者,共同探讨、学习和分享可观测最佳实践与最新技术,与众多技术社区合作互动,共同探讨交叉领域的技术挑战,推动可观测领域的创新与进步。

内容社区

  • 实践文章
  • 视频课程
  • 开源项目
  • 常见问答
  • 开发者工具

友情链接

  • Prometheus
  • Grafana Lab
  • OpenTelemetry
  • LoongCollector

关注我们

阿里云云原生公众号阿里云云原生
阿里云可观测公众号阿里云可观测

Copyright © 2026 CnOps 社区. All rights reserved.

首页/开源项目/OpenTelemetry/注解
文档目录
文档开始手动插桩使用插桩库导出器资源采样什么是 OpenTelemetry?
API 参考文档示例
PHP 零代码插桩
快速开始使用 API 扩展插桩功能SDK 配置开箱即用的插桩注解额外的插桩其他 Spring 自动配置
支持库列表

OpenTelemetry

注解

<!-- markdownlint-disable blanks-around-fences --> <?code-excerpt path-base="examples/java/spring-starter"?> 对于大多数用户来说,开箱即用的插桩功能已经完全足够,无需进行任何其他操作。 然而,在某些情况下,用户可能希望为自己的自定义代码创建 Span,而无需进行许多代码更改。...

对于大多数用户来说,开箱即用的插桩功能已经完全足够,无需进行任何其他操作。
然而,在某些情况下,用户可能希望为自己的自定义代码创建 Span,而无需进行许多代码更改。

如果你在方法上添加 WithSpan 注解,则该方法会被包装在一个 Span 中。
SpanAttribute 注解还允许你将方法参数作为属性捕获。

package otel;

import io.opentelemetry.api.trace.Span;
import io.opentelemetry.api.trace.SpanKind;
import io.opentelemetry.instrumentation.annotations.SpanAttribute;
import io.opentelemetry.instrumentation.annotations.WithSpan;
import org.springframework.stereotype.Component;

/** 测试 WithSpan */
@Component
public class TracedClass {

  @WithSpan
  public void tracedMethod() {}

  @WithSpan(value = "span name")
  public void tracedMethodWithName() {
    Span currentSpan = Span.current();
    currentSpan.addEvent("ADD EVENT TO tracedMethodWithName SPAN");
    currentSpan.setAttribute("isTestAttribute", true);
  }

  @WithSpan(kind = SpanKind.CLIENT)
  public void tracedClientSpan() {}

  @WithSpan
  public void tracedMethodWithAttribute(@SpanAttribute("attributeName") String parameter) {}
}

OpenTelemetry 注解基于代理模式使用 Spring AOP。

这些注解仅适用于代理的方法。
你可以在 Spring 文档中了解更多信息。

在下面的示例中,当调用 GET 端点时,WithSpan 注解不会起作用:

@RestController
public class MyControllerManagedBySpring {

    @GetMapping("/ping")
    public void aMethod() {
        anotherMethod();
    }

    @WithSpan
    public void anotherMethod() {
    }
}

要使用 OpenTelemetry 注解,你需要向项目中添加 Spring Boot 启动器 AOP 依赖:

<dependencies>
  <dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-aop</artifactId>
  </dependency>
</dependencies>
dependencies {
  implementation("org.springframework.boot:spring-boot-starter-aop")
}

你可以通过将 otel.instrumentation.annotations.enabled 属性设置为 false 来禁用 OpenTelemetry 注解。

你可以使用 WithSpan 注解的元素来自定义 Span:

名称 类型 描述 默认值
value String Span 名称 类名.方法名
kind SpanKind Span 类型 SpanKind.INTERNAL

你可以使用 SpanAttribute 注解的 value 元素来自定义属性名称:

名称 类型 描述 默认值
value String 属性名称 方法参数名

下一步操作 {#next-steps}

除使用注解外,OpenTelemetry API 还允许你获取一个可用于自定义插桩的追踪器。

文章大纲