Giám sát là một khía cạnh quan trọng của quản lý hiệu năng ứng dụng. Khi ứng dụng mở rộng quy mô, việc đảm bảo chúng chạy trơn tru và theo dõi liên tục tình trạng hệ thống trở thành bắt buộc. Trong microservices, hệ thống phân tán và các ứng dụng cloud-native, các công cụ giám sát không chỉ là một tiện ích bổ sung mà là một phần quan trọng của cơ sở hạ tầng.
Hai trong số các công cụ phổ biến nhất để giám sát các hệ thống hiện đại là Prometheus và Grafana. Các công cụ này thường được sử dụng để thu thập, lưu trữ và trực quan hóa số liệu, giúp các nhà phát triển và nhóm vận hành phát hiện sự cố, phân tích hiệu năng và giữ cho hệ thống hoạt động hiệu quả.
Tại sao chúng ta cần giám sát?
Giám sát là điều cần thiết để xác định các vấn đề trước khi chúng ảnh hưởng đến người dùng. Cho dù bạn đang làm việc với backend dựa trên Java, môi trường microservices phức tạp hay bất kỳ hệ thống nào khác, việc giám sát liên tục cung cấp thông tin chi tiết về:
- Hiệu năng ứng dụng: Theo dõi các số liệu hiệu năng chính như thời gian phản hồi, yêu cầu và tỷ lệ lỗi.
- Tình trạng hệ thống: Giám sát tình trạng máy chủ, mức sử dụng CPU, mức sử dụng bộ nhớ và dung lượng ổ đĩa để đảm bảo cơ sở hạ tầng hoạt động tối ưu.
- Cảnh báo: Thiết lập ngưỡng và cảnh báo cho các số liệu quan trọng, thông báo cho bạn khi có sự cố xảy ra.
- Lập kế hoạch năng lực: Việc thu thập và phân tích dữ liệu lịch sử có thể giúp bạn lập kế hoạch mở rộng quy mô ứng dụng.
Prometheus và Grafana cung cấp các giải pháp mạnh mẽ để giám sát, trực quan hóa và phân tích dữ liệu từ hệ thống và ứng dụng của bạn.
Giới thiệu về Grafana và Prometheus
1. Prometheus
Prometheus là một bộ công cụ giám sát và cảnh báo mã nguồn mở được thiết kế cho độ tin cậy và khả năng mở rộng. Nó tập trung vào việc thu thập dữ liệu chuỗi thời gian và hỗ trợ thu thập dữ liệu đa chiều, cho phép các truy vấn và phân tích mạnh mẽ. Prometheus thu thập số liệu từ các mục tiêu thông qua các endpoint HTTP và lưu trữ chúng trong cơ sở dữ liệu chuỗi thời gian. Các số liệu này sau đó có thể được truy vấn bằng ngôn ngữ truy vấn của Prometheus, PromQL.
2. Grafana
Grafana là một nền tảng mã nguồn mở để giám sát và quan sát. Nó cho phép người dùng trực quan hóa dữ liệu chuỗi thời gian từ nhiều nguồn, bao gồm cả Prometheus. Khả năng tạo bảng điều khiển, thiết lập cảnh báo và tích hợp với nhiều nguồn dữ liệu khác nhau của Grafana khiến nó trở thành một trong những công cụ phổ biến nhất để trực quan hóa số liệu.
Khi kết hợp, Prometheus thu thập các số liệu, trong khi Grafana hiển thị chúng một cách trực quan và tương tác.
Chạy Prometheus trong Docker
Chạy Prometheus và Grafana trong Docker là một cách đơn giản và hiệu quả để thiết lập môi trường giám sát nhanh chóng. Hãy bắt đầu với việc chạy Prometheus trong Docker.
Bước 1: Chạy Prometheus trong Docker
Bạn có thể chạy Prometheus dưới dạng container bằng lệnh sau:
docker run --name prometheus -d -p 127.0.0.1:9090:9090 prom/prometheus
Lệnh này sẽ:
- Khởi động một container Prometheus.
- Ánh xạ cổng cục bộ 9090 tới cổng 9090 của container.
- Sử dụng image Docker Prometheus chính thức từ Docker Hub. Bạn có thể xác minh rằng Prometheus đang chạy bằng cách mở trình duyệt và điều hướng đến http://localhost:9090/.
Bước 2: Cấu hình Prometheus
Bạn phải điều chỉnh tệp cấu hình Prometheus nếu bạn cần cấu hình Prometheus để lấy số liệu từ các endpoint cụ thể (ví dụ: ứng dụng Java). Bằng cách gắn kết nó vào container, bạn có thể chạy Prometheus với tệp prometheus.yml tùy chỉnh. Dưới đây là một ví dụ:
docker run \ -p 9090:9090 \ -v /prometheus.yml:/etc/prometheus/prometheus.yml \ prom/prometheus
Bước 3: Chạy Grafana trong Docker
Grafana rất dễ triển khai thông qua Docker. Chạy lệnh sau để khởi động container Grafana:
docker run -d -p 3000:3000 grafana/grafana-enterprise
Sau khi Grafana đang chạy, bạn có thể truy cập giao diện người dùng web tại http://localhost:3000/login. Thông tin đăng nhập mặc định là:
- Tên người dùng: admin
- Mật khẩu: admin
Bước 4: Kết nối Prometheus và Grafana
Bây giờ cả Prometheus và Grafana đều đang chạy, bước tiếp theo là kết nối chúng. Grafana cần biết nơi lấy số liệu. Dưới đây là cách bạn có thể thêm Prometheus làm nguồn dữ liệu trong Grafana:
- Đăng nhập vào Grafana.
- Nhấp vào biểu tượng bánh răng ở thanh bên trái để mở menu Cấu hình.
- Chọn Nguồn dữ liệu.
- Nhấp vào Thêm nguồn dữ liệu.
- Chọn Prometheus làm loại nguồn dữ liệu.
- Trong phần HTTP, đặt URL tới phiên bản Prometheus của bạn (ví dụ: http://172.0.0.1:9090).
- Nhấp vào Lưu & Kiểm tra để đảm bảo Grafana có thể kết nối thành công với Prometheus.
Tạo một dự án Java mẫu
Hãy tạo một dự án dựa trên Java đơn giản hiển thị số liệu cho Prometheus. Chúng ta sẽ sử dụng Micrometer, một mặt ngoài thu thập số liệu cho các ứng dụng dựa trên JVM, tích hợp dễ dàng với Prometheus.
Bước 5: Tạo ứng dụng Java
Thêm các dependency cần thiết vào tệp pom.xml của bạn:
<dependency> <groupId>io.micrometer</groupId> <artifactId>micrometer-registry-prometheus</artifactId>
</dependency>
Sau đó, trong ứng dụng Java của bạn, hiển thị một endpoint mà Prometheus có thể lấy dữ liệu. Ví dụ:
import io.micrometer.core.instrument.Metrics;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
import io.micrometer.prometheus.PrometheusMeterRegistry; @SpringBootApplication
public class MonitoringApp { public static void main(String[] args) { SpringApplication.run(MonitoringApp.class, args); }
} @RestController
class MetricsController { private final PrometheusMeterRegistry registry; public MetricsController(PrometheusMeterRegistry registry) { this.registry = registry; } @GetMapping("/metrics") public String getMetrics() { return registry.scrape(); }
}
Thiết lập này tạo ra một endpoint /metrics mà Prometheus có thể lấy dữ liệu. Nó hiển thị các số liệu được thu thập bởi Micrometer và có sẵn ở định dạng Prometheus.
Bước 6: Hiển thị số liệu cho Prometheus
Bây giờ ứng dụng Java đang thu thập số liệu, chúng ta cần yêu cầu Prometheus lấy dữ liệu từ endpoint /metrics từ ứng dụng của bạn. Cập nhật tệp cấu hình prometheus.yml của bạn để bao gồm mục tiêu:
scrape_configs: - job_name: 'java_application' static_configs: - targets: ['<your-app-ip>:8080']
Thay thế your-app-ip
bằng địa chỉ IP hoặc localhost nếu chạy trên cùng máy. Prometheus bây giờ sẽ thu thập số liệu từ ứng dụng Java của bạn.
Kết nối mọi thứ
Tại thời điểm này, bạn có:
- Prometheus lấy số liệu từ ứng dụng Java của bạn.
- Grafana được thiết lập làm công cụ trực quan hóa.
Bước 7: Tạo bảng điều khiển trong Grafana
Để trực quan hóa dữ liệu trong Grafana:
- Chuyển đến tab Bảng điều khiển trong Grafana.
- Nhấp vào + Bảng điều khiển mới.
- Thêm một Panel và chọn Prometheus làm nguồn dữ liệu.
- Viết một truy vấn PromQL để lấy các số liệu, ví dụ: http_requests_total.
Bạn bây giờ có thể xây dựng bảng điều khiển với các panel khác nhau hiển thị các số liệu như số lượng yêu cầu, thời gian phản hồi và tỷ lệ lỗi.
Giám sát là rất quan trọng để duy trì tính khả dụng và hiệu suất cao. Với các công cụ như Prometheus và Grafana, bạn có thể dễ dàng thiết lập giải pháp giám sát hiệu quả cho các ứng dụng Java của mình.
Cảm ơn các bạn đã theo dõi.