Trong bài viết này, chúng ta sẽ thực hiện cấu hình Otel Collector để thu thập dữ liệu trace và hiển thị dữ liệu này thông qua Zipkin và Grafana một cách trực quan.
1. Thiết lập Otel Collector và Zipkin
Trước tiên, chúng ta sẽ thiết lập Otel Collector và sử dụng Zipkin để trực quan hóa dữ liệu thông qua Docker Compose. Hãy clone Otel Collector tại đây và bắt đầu cấu hình ở local của bạn.
Sau khi đã clone xong, mở file cấu hình có tên otel-collector-config-demo.yml
và xem nội dung sau:
yaml
receivers:
otlp:
protocols:
grpc:
endpoint: 0.0.0.0:4317
http:
endpoint: 0.0.0.0:4318
exporters:
prometheus:
endpoint: "0.0.0.0:8889"
namespace: promexample
const_labels:
label1: value1
logging:
loglevel: debug
zipkin:
endpoint: "http://zipkin-all-in-one:9411/api/v2/spans"
format: proto
processors:
batch:
extensions:
health_check:
pprof:
endpoint: :1888
zpages:
endpoint: :55679
service:
extensions: [pprof, zpages, health_check]
pipelines:
traces:
receivers: [otlp]
processors: [batch]
exporters: [logging, zipkin]
metrics:
receivers: [otlp]
processors: [batch]
exporters: [logging]
Tóm tắt nội dung file cấu hình:
- receivers: Được định nghĩa là
otlp
, cho phép nhận dữ liệu qua giao thức gRPC (cổng 4317) và HTTP (cổng 4318). - exporters: Đã cấu hình sẵn Zipkin, với endpoint mặc định là
http://zipkin-all-in-one:9411/api/v2/spans
. - pipelines: Bao gồm các bước xử lý trace qua
receivers
,processors
, vàexporters
để xuất ra dữ liệu sau khi đã được xử lý.
2. Khởi động Collector
Để khởi động Collector, ta cần sử dụng Docker Compose. Trong file docker-compose.yml
, đã định nghĩa các port cần thiết. Chạy lệnh sau:
docker compose up -d
Tiếp tục quay lại Dockerfile và thêm dòng lệnh sao chép file OpenTelemetry agent:
COPY otel/opentelemetry-javaagent.jar /app/otel-agent.jar
ENV OTEL_SERVICE_NAME=spring-boot-application
ENV OTEL_TRACES_EXPORTER=otlp
ENV OTEL_EXPORTER_OTLP_ENDPOINT=http://172.16.1.24:4318
Sau đó, tải file opentelemetry-javaagent.jar
về thư mục otel
trong project:
curl -L -O https://github.com/open-telemetry/opentelemetry-java-instrumentation/releases/latest/download/opentelemetry-javaagent.jar
3. Xây dựng lại Docker Image
Sau khi đã hoàn tất, chúng ta cần xây dựng lại image:
docker compose down
docker build -t java-spring:v2 .
Sửa lại tag trong file docker-compose.yml
và khởi động lại project:
docker compose up -d
4. Kiểm Tra Dữ Liệu Traces
Truy cập vào địa chỉ http://localhost:8081 để xem ứng dụng và http://localhost:9411 để truy cập vào trang Zipkin. Khi thực hiện một số thao tác như thêm hay chỉnh sửa user, dữ liệu traces sẽ hiển thị trên Zipkin. Nhấn vào nút RUN QUERY để nạp lại dữ liệu.
5. Thiết lập Collector và Grafana
Tiếp theo, chúng ta sẽ thiết lập một Collector khác để thu thập traces và hiển thị trên Grafana. Clone dự án Grafana Tempo:
git clone https://github.com/grafana/tempo.git
Chạy Collector với Grafana:
cd tempo/example/docker-compose/local
docker compose up -d
Truy cập vào http://localhost:3001 để xem Grafana, chọn Explore và lựa chọn dữ liệu từ Tempo. Nhấn vào Run Query để nạp lại dữ liệu của service và thực hiện thao tác để xem dữ liệu traces trên Grafana. Dữ liệu sẽ được hiển thị tương tự như trên Zipkin cho phép phân tích hiệu suất ứng dụng.
Kết Luận
Với các bước thiết lập trên, bạn đã thành công trong việc thu thập dữ liệu traces cho ứng dụng Java backend của mình thông qua OpenTelemetry, Zipkin và Grafana. Đây là một quy trình hữu ích để theo dõi và phân tích hiệu suất ứng dụng trong môi trường sản xuất.
source: viblo