ObservationRegistry và MeterRegistry trong Micrometer

Trong bài viết trước, mình đã giới thiệu với các bạn về class MeterRegistry của Micrometer, một class giúp chúng ta có thể collect và quản lý các thông tin về metrics của ứng dụng. Trong Micrometer còn có một class Registry khác tên là ObservationRegistry đó các bạn! Class ObservationRegistry này dùng để quản lý lifecyle của một observation từ lúc start observer cho đến lúc stop, có lỗi gì xảy ra trong quá trình observation đó không. Nó cũng sẽ tự động record các thông tin không chỉ về metrics như timer, counter mà còn về traces và handle cả context propagation (nắm giữ các thông tin về context của request như user ID, trace ID qua nhiều layer khác nhau của ứng dụng). ObservationRegistry handle về observation ở mức high-level hơn, còn MeterRegistry thì sẽ low-level hơn. Cụ thể như thế nào? Chúng ta hãy cùng nhau tìm hiểu trong bài viết này các bạn nhé!

Đầu tiên, mình sẽ tạo mới một Maven project để làm ví dụ:

Class ObservationRegistry nằm trong một artifact khác của Micrometer là Micrometer Observation, nhưng các bạn cũng chỉ cần khai báo sử dụng micrometer-core dependency là được các bạn nhé:

Với ObservationRegistry thì chúng ta sẽ sử dụng class Observation để làm việc với observation cho ứng dụng. Các bạn có thể khởi tạo đối tượng của class Observation, đăng ký nó với ObservationRegistry, cơ bản như sau:

Để có thể collect các thông tin metrics hay traces thì chúng ta phải cấu hình các handler cho đối tượng Observation các bạn nhé! Với ví dụ trên thì sẽ không có output gì cả.

Các bạn có thể cấu hình các handler sử dụng các implementation của class ObservationHandler ví dụ như sau:

Class DefaultMeterObservationHandler sẽ tự động record các thông tin về timer và counter từ lúc observation start cho đến lúc stop các bạn nhé! Nó cũng sử dụng class MeterRegistry để làm điều này.

Kết quả khi mình chạy ví dụ trên như sau:

Các bạn cũng có thể record error, tags được đánh dấu cho Observation sử dụng một customer ObservationHandler, ví dụ như sau:

Với class HDJHandler có nội dung như sau:

Kết quả:

Các bạn nên sử dụng ObservationRegistry để record các thông tin cho:

  • HTTP requests
  • Database calls
  • Kafka consumers
  • gRPC calls
  • Business operations

các bạn nhé!

Add Comment