Integrate OpenTelemetry với các ứng dụng Java

OpenTelemetry là một bộ các công cụ, APIs, SDKs giúp chúng ta có thể generate, thu thập và export các thông tin về các ứng dụng đang chạy bao gồm metrics, logs, và traces. Các thông tin này sau đó, có thể được import vào các công cụ khác để visualize, giúp chúng ta có thể nắm bắt kịp thời các vấn đề mà ứng dụng của chúng ta đang gặp phải. Trong bài viết này, mình sẽ hướng dẫn các bạn cách integrate OpenTelemetry với các ứng dụng Java, cụ thể là ứng dụng Spring Boot để hiểu cách cấu hình và cách OpenTelemetry làm việc là như thế nào các bạn nhé!

Đầu tiên, mình sẽ tạo mới một project Spring Boot với Web dependency để expose một API như sau:

Nội dung của API này đơn giản như sau:

Chạy ứng dụng này lên, rồi request tới địa chỉ http://localhost:8080/hello, các bạn sẽ thấy kết quả như sau:

Trước khi nói về OpenTelemtry, mình xin đề cập một xí về các khái niệm metrics, logs hay traces trước. Nói nôm na thì metrics là các thông số, dùng để đo lường một tác vụ nào đó của ứng dụng. Logs thì là các log message được in ra khi chúng ta sử dụng ứng dụng. Traces là tracking các số liệu về request và response của ứng dụng. Sử dụng OpenTelemetry giúp chúng ta có thể collect các thông tin này của ứng dụng.

Để sử dụng OpenTelemetry, mặc định thì các bạn không cần phải modify code gì hết. Việc đầu tiên, các bạn cần làm là download một tập tin agent của OpenTelemetry, sau đó thì cấu hình tham số -javaagent trỏ đến tập tin agent này khi chạy ứng dụng.

Các bạn download latest version của tập tin opentelemetry-javaagent.jar tại đây nhé: https://github.com/open-telemetry/opentelemetry-java-instrumentation/releases
Nếu các bạn muốn chạy OpenTelemetry cùng với ứng dụng Spring Boot trong IDE luôn thì có thể cấu hình như sau:

Nếu chạy với tập tin .jar thì command để chạy là “java -javaagent:/Users/khanh/Downloads/opentelemetry-javaagent.jar -jar <spring-boot>.jar” các bạn nhé!

Một cấu hình khác mà các bạn cần phải làm là cấu hình Exporter. Sau khi OpenTelemetry collect thông tin thì nó sẽ export những thông tin này ra sử dụng các Exporter này. OpenTelemetry hỗ trợ cho chúng ta nhiều loại Exporter khác nhau, bao gồm:

Để sử dụng exporter nào, các bạn có thể cấu hình sử dụng các system properties hoặc environment variable tương ứng. Xem chi tiết cho từng exporter từ các đường dẫn ở trên để biết mỗi loại exported hỗ trợ những system properties hay environment variable nào các bạn nhé!

Mình sẽ sử dụng Logger exporter cho ứng dụng ví dụ của mình để in các thông tin ra console bằng cách cấu hình thêm các biến môi trường vào cửa sổ Run Configuration của ứng dụng như sau:

Nếu chạy bằng tập tin .jar thì các bạn hãy cấu hình biến môi trường nhé!

Chạy lại ứng dụng rồi request lại địa chỉ http://localhost:8080/hello, các bạn sẽ thấy Console in ra rất nhiều thông tin như sau:

Rất nhiều thông tin phải không các bạn? Cho request tới context path “/hello”, các bạn có thể thấy những thông tin về request và response như sau:

Nếu các bạn review kỹ, các bạn sẽ thấy HTTP status code cho response là 200 và một số thông tin khác nữa từ những dòng log trên.

Như vậy là trong bài viết này, mình đã hướng dẫn các bạn cách integrate OpenTelemetry với các ứng dụng Java để observability chúng với các thông tin mặc định được hỗ trợ.

Add Comment