Bước tiếp theo
Chọn nhánh học OpenTelemetry theo vai trò, mục tiêu và kết quả bạn đã kiểm tra sau phần bắt đầu.
Đừng chọn theo thứ tự sidebar
Sau khi chạy được trace, bài tiếp theo nên phụ thuộc vào việc bạn muốn giải quyết vấn đề nào. Bảng dưới đây nối từng mục tiêu với một nhánh có đầu ra kiểm chứng được. Bạn không cần đọc mọi trang trước khi làm bài thực hành.
Mục lục
- Bắt đầu từ trạng thái hiện tại
- Ma trận chọn nhánh
- Decision guide: chưa thấy trace
- Bài thực hành tiếp theo
- Kết quả nên đạt được
Bắt đầu từ trạng thái hiện tại
Không phải ai hoàn thành getting-started cũng đứng ở cùng một điểm. Hãy đánh dấu những điều bạn đã làm được trước khi chọn bài tiếp theo.
Checklist sau getting-started
- Tôi phân biệt được trace, metric và log, cũng như câu hỏi mà mỗi signal trả lời.
- Tôi biết
service.namelà resource attribute dùng để nhận diện service trong backend. - Tôi tạo được một span từ ứng dụng hoặc script thử nghiệm.
- Tôi biết ứng dụng gửi telemetry đến endpoint nào và bằng OTLP/HTTP hay OTLP/gRPC.
- Tôi đọc được pipeline gồm receiver, processor và exporter trong Collector.
- Tôi tìm được trace trong UI bằng
service.namevà xem được trace ID. - Tôi biết cách đọc logs của Collector và kiểm tra health endpoint.
- Tôi có thể nêu một khác biệt giữa local stack và production, chẳng hạn local dùng memory còn production cần lưu trữ bền vững.
Nếu bạn chưa đánh dấu được ba mục cuối, hãy chạy lại Local observability stack hoặc Trace đầu tiên trước khi mở rộng phạm vi. Một trace nhìn thấy trong UI là bằng chứng tốt hơn việc chỉ đọc cấu hình.
Đọc kết quả checklist
| Trạng thái | Việc nên làm ngay |
|---|---|
| Chưa tạo được span | Quay lại API và SDK và Manual instrumentation. |
| Có span nhưng không export được | Đọc SDK configuration rồi kiểm tra OTLP/gRPC và OTLP/HTTP. |
| Export thành công nhưng chưa hiểu đường đi | Đọc Telemetry pipeline và Collector overview. |
| Đã thấy một trace và muốn instrument nhanh hơn | Thử Auto-instrumentation trên runtime của bạn. |
| Đã thấy trace nhưng muốn vận hành ổn định | Chuyển sang Production readiness và Reliability. |
Ma trận chọn nhánh
Chọn một hàng theo công việc bạn đang làm. “Đầu ra kiểm chứng” là thứ bạn có thể quan sát hoặc kiểm tra sau khi học, không chỉ là một danh sách trang đã đọc.
| Vai trò hoặc mục tiêu | Bắt đầu ở đâu | Sau đó đọc | Đầu ra kiểm chứng |
|---|---|---|---|
| App developer: tạo telemetry trong code | API và SDK | Resources, Manual instrumentation | Một span có tên có nghĩa, service.name đúng và attributes truy vấn được. |
| App developer: instrument nhiều dependency nhanh | Auto-instrumentation | Instrumentation libraries, SDK configuration | Request đến database hoặc HTTP client xuất hiện trong trace mà không sửa từng call site. |
| Platform hoặc SRE: nhận và chuyển telemetry | Collector overview | Collector configuration, Service pipelines, Receivers | Có pipeline trace rõ ràng; logs và health signal giúp xác định Collector đang sống và đang forward dữ liệu. |
| Platform hoặc SRE: chọn topology triển khai | Docker | Agent và gateway, Kubernetes | Chọn được vị trí Collector, failure domain và đường mạng cho một workload cụ thể. |
| Backend hoặc protocol: hiểu transport | OTLP | OTLP/gRPC và OTLP/HTTP, Ports và protocols | Xác định đúng endpoint, port, header và protocol giữa SDK, Collector và backend. |
| Backend hoặc protocol: đánh giá nơi lưu trace | Jaeger | Grafana stack, Vendor backends | So sánh được cách backend nhận, lưu, truy vấn và liên kết trace với hệ thống hiện có. |
| Production hoặc troubleshooting: làm telemetry đáng tin cậy | Production readiness | Reliability, Security, Cost control | Có checklist về retry, queue, secrets, PII, sampling, retention và chi phí trước rollout. |
| Production hoặc troubleshooting: xử lý “không có dữ liệu” | Triage checklist | Không có dữ liệu, Export thất bại, Collector errors | Khoanh vùng được lỗi ở instrumentation, transport, Collector hay backend bằng evidence cụ thể. |
App developer
Chọn nhánh này nếu bạn sở hữu code tạo request. Học Resources sớm vì service.name, deployment environment và version quyết định cách tìm service trong backend. Sau đó làm Lab: minimal service để biến một trace nhìn thấy được thành một service có instrumentation có chủ đích.
Khi cần nối trace giữa các process, chuyển sang Context propagation và Propagators. Context propagation là cơ chế truyền trace context qua ranh giới HTTP, message hoặc process; nếu thiếu nó, các span sẽ không cùng một distributed trace.
Platform hoặc SRE
Chọn nhánh này nếu bạn vận hành đường ống telemetry. Đọc Collector configuration cùng Service pipelines để biết một record đi qua các component nào. Tiếp theo, so sánh Agent và gateway thay vì mặc định đặt một Collector duy nhất ở mọi nơi.
Khi đã có topology, dùng Networking và TLS để kiểm tra trust boundary, certificate và firewall. Đầu ra nên là một sơ đồ deployment có endpoint rõ ràng, không chỉ là một file YAML chạy được trên laptop.
Backend hoặc protocol
Chọn nhánh này nếu câu hỏi chính là “telemetry đi bằng đường nào và backend nhận nó ra sao?”. Bắt đầu với OTLP, sau đó so sánh OTLP/gRPC và OTLP/HTTP. Hãy ghi lại host, port, path, TLS và authentication của hệ thống bạn đang dùng.
Nếu cần chọn backend, đọc Jaeger để hiểu trace backend cơ bản, rồi đối chiếu Grafana stack hoặc Vendor backends. Đừng đánh giá chỉ dựa trên UI. Hãy kiểm tra cả retention, query model, chi phí và cách backend liên kết với metrics hoặc logs.
Production và troubleshooting
Chọn nhánh này khi telemetry đã xuất hiện nhưng chưa thể tin cậy trong vận hành. Đọc Production readiness trước, rồi đi sâu vào Reliability, Security và Cost control.
Nếu đang có sự cố cụ thể, bắt đầu ở Triage checklist. Triage là quá trình thu thập evidence và thu hẹp phạm vi lỗi trước khi sửa config. Sau đó đi theo Không có dữ liệu, Thiếu spans hoặc Collector dùng nhiều memory tùy triệu chứng.
Decision guide: chưa thấy trace
Đừng đổi đồng thời SDK, Collector và backend. Mỗi bước dưới đây kiểm tra một boundary, tức một ranh giới mà telemetry phải đi qua.
Kiểm tra theo thứ tự
- Ứng dụng có tạo span không? Kiểm tra log hoặc test của instrumentation. Nếu chưa có span, quay lại Manual instrumentation hoặc Auto-instrumentation.
- Resource có
service.namekhông? Nếu thiếu, backend có thể gom dữ liệu vào tên mặc định hoặc khiến bạn tìm sai service. Xem Resources. - Exporter có trỏ đúng endpoint không? Đối chiếu protocol và port với OTLP/gRPC và OTLP/HTTP. Với local stack của bài trước, OTLP/HTTP là
http://localhost:4318/v1/traces. - Collector có nhận request không? Kiểm tra receiver, logs và health bằng Collector errors. Health thành công chỉ chứng minh process sống; nó không chứng minh pipeline đã export trace.
- Exporter có đến backend không? Tìm lỗi DNS, connection refused, TLS hoặc authentication trong logs. Đọc Export thất bại.
- Bạn đang tìm đúng nơi và đúng khoảng thời gian không? Dùng
service.name, mở rộng time range và kiểm tra clock của máy. Nếu trace có root span nhưng thiếu child spans, xem Thiếu spans.
Một phép thử cô lập
Gửi một trace tối thiểu qua cùng endpoint mà ứng dụng dùng. Nếu trace tối thiểu xuất hiện, transport và backend có khả năng hoạt động; hãy tập trung vào instrumentation hoặc resource của ứng dụng. Nếu trace tối thiểu cũng mất, tập trung vào endpoint, Collector và exporter.
Bài thực hành tiếp theo
Chọn bài theo điều bạn muốn chứng minh, không theo số lượng trang đã đọc.
Muốn instrument một service
Làm Lab: minimal service sau khi đọc API và SDK. Hãy đặt mục tiêu cụ thể: một request tạo root span, một dependency tạo child span, và trace có service.name ổn định. Kiểm tra kết quả bằng UI hoặc exporter test, không chỉ kiểm tra process có khởi động.
Nếu bạn muốn thử nhiều ngôn ngữ, chọn trang language tương ứng trong Languages, rồi áp dụng lại cùng checklist resource và exporter. Cùng một mental model giúp bạn so sánh SDK giữa các runtime.
Muốn hiểu pipeline
Làm Lab: Collector pipeline. Trước khi chạy, vẽ ba ô receiver → processor → exporter cho signal trace. Sau khi chạy, thay đổi từng component một và quan sát logs hoặc output backend để biết component đó có tác dụng gì.
Đọc Processors khi cần batch, filter hoặc memory limiter. Processor là component sửa, lọc hoặc gom telemetry trước khi export; mỗi processor đều có trade-off về dữ liệu, latency hoặc memory.
Muốn nối nhiều service
Làm Lab: distributed trace sau khi nắm Context propagation. Kiểm tra một request xuyên qua ít nhất hai service có cùng trace ID nhưng có span ID khác nhau. Nếu trace bị tách, dùng Mất context thay vì chỉ tăng sampling hoặc restart backend.
Kết quả nên đạt được
Sau nhánh tiếp theo, bạn nên có một artifact cụ thể:
- App developer có một service instrumented, resource naming rõ ràng và test cho span hoặc exporter. Xem thêm Kiểm thử instrumentation.
- Platform hoặc SRE có topology, pipeline YAML và cách kiểm tra health/logs. Tiếp tục với Scaling khi cần ước lượng tải.
- Backend hoặc protocol có bảng endpoint gồm protocol, port, TLS và authentication. Đối chiếu Environment variables khi cấu hình qua biến môi trường.
- Người làm production có checklist về reliability, security, cost và upgrade. Dùng Upgrade và compatibility trước khi nâng version SDK, Collector hoặc backend.