测微计指南:工具与可观测性 | AI生成和翻译

Home 2025.06

本综合指南涵盖两个截然不同的主题:千分尺(测量工具)Micrometer(Java应用,特别是Spring Boot的可观测性门面,聚焦于追踪解决方案)

让我们分别进行解析:


第一部分:关于千分尺(测量工具)的全面指南

千分尺,常称为螺旋测微器,是一种精密测量仪器,用于获取微小距离的高精度测量结果,通常测量范围在千分之一英寸或百分之一毫米级别。它广泛应用于工程、机械加工、制造和科学领域,这些领域对精确尺寸至关重要。

1. 什么是千分尺?

千分尺的核心是利用精密加工的螺旋机构将旋转运动转化为直线移动。这允许通过将物体夹在固定的测砧和可移动的测杆之间,进行精细调整并精确读取物体的尺寸。

2. 千分尺的关键部件:

3. 千分尺的类型:

千分尺有多种类型,每种设计用于特定的测量任务:

4. 如何读取千分尺(模拟/英制示例):

虽然具体读数在英制(英寸)和公制(毫米)以及模拟/数显之间有所不同,但模拟千分尺的一般原理是:

  1. 读取固定套筒刻度(主刻度):
    • 整数英寸: 注意可见的最大整数英寸标记。
    • 十分之一英寸: 固定套筒上的每个数字线代表 0.100 英寸。
    • 二十五分之一英寸: 十分之一标记之间的每个未编号线代表 0.025 英寸。
  2. 读取微分筒刻度:
    • 微分筒有 25 个分度,每个标记代表 0.001 英寸。
    • 读取微分筒上与固定套筒基准线对齐的线。
  3. 合并读数: 将固定套筒(整数英寸、十分之一和二十五分之一英寸)和微分筒(千分之一英寸)的值相加,得到最终测量值。

示例(英制):

5. 正确使用和最佳实践:


第二部分:Micrometer 作为 Spring Java 项目的追踪解决方案

在 Spring Java 项目的上下文中,”Micrometer” 指的是一个应用可观测性门面,它提供了一个供应商中立的 API 用于检测基于 JVM 的应用程序。它允许您收集和导出各种遥测数据,包括指标、日志记录和分布式追踪

Micrometer Tracing 是 Spring Cloud Sleuth 的后继者,旨在通过跨多个服务追踪请求来洞察复杂的分布式系统。

1. 什么是分布式追踪?

在微服务架构中,单个用户请求通常遍历多个服务。分布式追踪允许您:

分布式追踪由 Span 组成。一个 Span 代表追踪中的一个单独操作或工作单元(例如,向服务发起的 HTTP 请求、数据库查询、方法执行)。Span 具有唯一的 ID、开始和结束时间,并且可以包含用于附加元数据的标签(键值对)和事件。Span 按层次结构组织,具有父子关系,形成一个追踪。

2. Spring Boot 3.x+ 中的 Micrometer Tracing

Spring Boot 3.x+ 深度集成了 Micrometer 的 Observation API 和 Micrometer Tracing,使得实现分布式追踪变得非常容易。

2.1. 核心概念:

2.2. 在 Spring Boot Java 项目中设置 Micrometer Tracing:

以下是分步指南:

步骤 1:添加依赖项

您需要 spring-boot-starter-actuator 用于可观测性功能、一个 Micrometer Tracing 桥接器以及用于您选择的追踪后端的报告器/导出器。

使用 OpenTelemetry 和 Zipkin 的示例(常见选择):

在您的 pom.xml (Maven) 中:

<dependencies>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-actuator</artifactId>
    </dependency>

    <dependency>
        <groupId>io.micrometer</groupId>
        <artifactId>micrometer-observation</artifactId>
    </dependency>

    <dependency>
        <groupId>io.micrometer</groupId>
        <artifactId>micrometer-tracing-bridge-otel</artifactId>
    </dependency>

    <dependency>
        <groupId>io.opentelemetry</groupId>
        <artifactId>opentelemetry-exporter-zipkin</artifactId>
    </dependency>

    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-webflux</artifactId>
    </dependency>
</dependencies>

步骤 2:配置追踪属性

application.propertiesapplication.yml 中,您可以配置追踪行为。

# 启用追踪(通常在有 actuator 和 tracing 依赖项时默认为 true)
management.tracing.enabled=true

# 配置采样概率 (1.0 = 100% 的请求被追踪)
# 默认通常是 0.1 (10%),在开发/测试时可设置为 1.0
management.tracing.sampling.probability=1.0

# 配置 Zipkin 基础 URL(如果使用 Zipkin)
spring.zipkin.base-url=http://localhost:9411

步骤 3:运行追踪后端(例如,Zipkin)

您需要一个追踪服务器来收集和可视化您的追踪。Zipkin 是本地开发的热门选择。

您可以通过 Docker 运行 Zipkin:

docker run -d -p 9411:9411 openzipkin/zipkin

运行后,您可以在 http://localhost:9411 访问 Zipkin UI。

步骤 4:自动检测(Spring Boot 的魔力!)

对于 Spring Boot 中的许多常见组件(如 RestController 端点、RestTemplateWebClientJdbcTemplate、Kafka 监听器/生产者等),Micrometer Tracing 提供了自动检测。这意味着对于基本的请求追踪,您通常不需要编写任何显式的追踪代码即可工作。

Spring Boot 确保:

日志模式示例(在 application.properties 中):

logging.pattern.level=%5p [${spring.application.name:},%X{traceId:-},%X{spanId:-}] %c{1.}:%M:%L - %m%n

此模式将把 traceIdspanId 注入到您的日志行中,使得将日志与特定追踪关联起来变得容易。

步骤 5:手动检测(用于自定义逻辑)

虽然自动检测涵盖了很多场景,但您通常希望追踪应用程序内的特定业务逻辑或关键操作。您可以使用以下方法实现:

3. 微服务中的分布式追踪:

当您有多个 Spring Boot 服务时,Micrometer Tracing 为 RestTemplateWebClient 和其他已检测的客户端自动促进上下文传播。这意味着 traceIdspanId 通过 HTTP 头在服务之间传递(例如,用于 W3C Trace Context 的 traceparent 头)。

当请求进入下游服务时,Micrometer Tracing 检测到这些头信息并继续现有的追踪,创建新的 Span,这些 Span 是调用服务父 Span 的子级。这就形成了完整的端到端追踪。

4. 可视化追踪:

一旦您的应用程序被检测并开始向诸如 Zipkin(或 Jaeger、Lightstep 等)的后端发送追踪,您可以:

  1. 访问 UI: 转到追踪后端的 Web UI(例如,Zipkin 的 http://localhost:9411)。
  2. 查找追踪: 使用过滤器(服务名称、Span 名称、追踪 ID)来查找特定的追踪。
  3. 分析追踪详情: 点击一个追踪以查看其时间线、各个 Span、它们的持续时间、标签和事件。
  4. 依赖关系图: 大多数追踪后端可以根据收集到的追踪可视化服务依赖关系。

5. Micrometer Tracing 的最佳实践:

通过遵循这些指南,您可以有效地利用 Micrometer Tracing 来深入了解您的 Spring Boot 应用程序,尤其是在分布式环境中。


Back Donate