Backend

99 Ngày Spring — Ngày 70: Observability: metrics, tracing và log

SSite Admin
5 tháng 10, 2026 2 phút đọc 7 lượt xem
99 Ngày Spring — Ngày 70: Observability: metrics, tracing và log

Một API trả lời chậm cần hơn một dòng log. Observability kết hợp metrics để thấy xu hướng, traces để đi theo request qua các service, và logs để xem chi tiết sự kiện. Spring Boot 3.x tích hợp Actuator, Micrometer Observation và Micrometer Tracing; muốn xuất dữ liệu ra ngoài vẫn cần registry/exporter phù hợp.

Observability: metrics, tracing và log

1. Metrics: đo điều quan trọng

Actuator cung cấp nhiều metric JVM/HTTP mặc định; MeterRegistry giúp thêm Counter, Timer, Gauge theo nhu cầu. Đo request rate, lỗi và latency phân vị; đừng gắn userId/orderId làm tag vì cardinality cao làm nổ số chuỗi thời gian. Chỉ expose endpoint Actuator cần thiết theo chính sách truy cập.

Counter.builder("orders.failed")
    .tag("reason", "partner_timeout")
    .register(registry)
    .increment();

2. Trace: theo hành trình request

Micrometer Tracing tạo trace/span context khi có bridge và exporter thích hợp. Trace ID nối các span thuộc một hành trình, span ID phân biệt một thao tác. Khi gọi dịch vụ ngoài, truyền context qua HTTP instrumentation; khi sang executor tùy chỉnh, kiểm tra context propagation thay vì giả định ThreadLocal tự đi theo.

Observation.createNotStarted("partner.lookup", registry)
    .observe(() -> partnerClient.lookup(id));

3. Structured log và correlation

Log JSON giúp tìm theo field thay vì phân tích chuỗi tự do. Spring Boot 3.4+ hỗ trợ cấu hình structured logging trực tiếp; với 3.0–3.3 cần cấu hình encoder tương ứng, không dùng nhầm property của phiên bản mới. Gắn traceId/spanId hoặc correlationId vào log, nhưng che token, email và payload nhạy cảm.

# Spring Boot 3.4+ only
logging.structured.format.console=logstash
# Pair with a tracing bridge for trace/span IDs.

4. Từ tín hiệu đến hành động

Dashboard nên trả lời: lỗi tăng ở đâu, độ trễ tăng từ khi nào, đối tác nào chậm. Cảnh báo dựa vào tỷ lệ lỗi và độ trễ có ngưỡng, không chỉ số request tuyệt đối. Khi nhận cảnh báo, bắt đầu từ metric, mở trace mẫu, rồi tìm log theo ID. Lấy mẫu trace phù hợp tải và yêu cầu riêng tư.

  • Kiểm tra metric có xuất hiện trước khi dựa vào alert.

  • Thử một request lỗi và theo ID qua log, trace, response.

Metrics chỉ ra xu hướng, traces chỉ đường đi, logs cho chi tiết. Dùng chung ID và giới hạn cardinality để ba nguồn kết nối được. Ngày 71 chuyển sang tổng quan microservices và các đánh đổi.

Tài liệu đối chiếu

  • https://docs.spring.io/spring-boot/3.5/reference/actuator/metrics.html

  • https://docs.spring.io/spring-boot/3.5/reference/actuator/tracing.html

  • https://docs.spring.io/spring-boot/3.5/reference/features/logging.html

S

Site Admin

Engineer and writer. Building things with TypeScript and distributed systems.

Bình luận (0)

Bạn cần đăng nhập bằng Google để bình luận.

Hãy là người bình luận đầu tiên.

Bài viết liên quan

99 Ngày Java — Ngày 70: Tổng kết concurrency: chọn đúng công cụ

Checklist race condition, deadlock, hủy task, backpressure và cách chọn lock, queue, future, virtual thread.

5 thg 10, 20262 phút5
99 Ngày Spring — Ngày 69: Chuẩn hóa error handling

Thiết kế mã lỗi ổn định, ProblemDetail, thông điệp i18n và correlation ID xuyên request.

3 thg 10, 20262 phút4
99 Ngày Java — Ngày 69: ThreadLocal và bất biến

Hiểu dữ liệu gắn luồng, dọn ThreadLocal trong pool và dùng đối tượng bất biến để giảm chia sẻ trạng thái.

3 thg 10, 20262 phút5