Trong bài viết trước, mình đã hướng dẫn các bạn cách thêm các custom metrics sử dụng OpenTelemetry SDK metrics và mình cũng đã sử dụng Logging exporter để log thông tin metrics này ra console. Trong bài viết này, mình sẽ hướng dẫn các bạn cách integrate Prometheus với OpenTelemetry sử dụng Prometheus exporter để hiển thị các thông tin metrics này với Prometheus các bạn nhé!
Mình sẽ sử dụng lại ví dụ trong bài viết trước nhưng thay vì sử dụng Logger exporter, mình sẽ cấu hình để sử dụng Prometheus exporter như sau:
Như các bạn thấy, chúng ta sẽ sử dụng các biến môi trường dành riêng cho Prometheus là
- OTEL_EXPORTER_PROMETHEUS_PORT
- và OTEL_EXPORTER_PROMETHEUS_HOST
- ngoài biến OTEL_METRICS_EXPORTER với giá trị prometheus để chỉ định cho Prometheus exporter.
Các bạn cũng cần khai báo các biến môi trường liên quan đến OTEL_TRACES_EXPORTER và OTEL_LOGS_EXPORTER sử dụng Logging Exporter như mình đã làm như trên chẳng hạn. Vì Prometheus chỉ làm việc liên quan đến metrics.
Với cấu hình này, OpenTelemetry sẽ export thông tin metric sử dụng một local server chạy ở port 9464 đó các bạn. Prometheus cần phải connect tới server với port này để collect thông tin metric.
Bây giờ, nếu các bạn chạy ứng dụng, request tới địa chỉ http://localhost:8080/hello, 3 lần rồi sau đó đi đến địa chỉ http://localhost:9464/metrics, các bạn sẽ thấy kết quả như sau:
Để chỉ định cho Prometheus connect tới server với port này, trong tập tin cấu hình của Prometheus, các bạn cần phải cấu hình phần scrape_configs với một job có static_configs target trỏ đến server mà OpenTelemetry đã up và running ở trên. Prometheus server của mình được cài đặt sử dụng Docker Compose, để có thể connect tới địa chỉ của máy host, mình sẽ cấu hình phần scrap_configs như sau:
1 2 3 4 5 6 7 8 9 10 11 |
# A scrape configuration containing exactly one endpoint to scrape: # Here it's Prometheus itself. scrape_configs: # The job name is added as a label `job=<job_name>` to any timeseries scraped from this config. - job_name: "prometheus" # metrics_path defaults to '/metrics' # scheme defaults to 'http'. static_configs: - targets: ["host.docker.internal:9464"] |
Lúc này, nếu các bạn đi đến trang của Prometheus ở địa chỉ http://localhost:9090/, nhập vào ô Expression dòng chữ “hello”, các bạn sẽ thấy metric “helloCounter_total” được hiển thị như sau:
Chọn metric này rồi nhấn Execute, các bạn sẽ thấy kết quả như sau:
Như các bạn thấy, thông tin custom metric mà mình đã định nghĩa trong bài viết trước đã được collect và có thể tìm kiếm sử dụng Prometheus rồi đó các bạn!