Giới thiệu về Giám sát Ứng dụng
Giám sát là một trong những yếu tố quan trọng giúp quản lý hiệu suất của ứng dụng. Khi các ứng dụng ngày càng mở rộng quy mô, việc theo dõi và đảm bảo rằng chúng hoạt động ổn định trở thành một yêu cầu không thể thiếu. Đặc biệt trong môi trường microservices, hệ thống phân tán và các ứng dụng cloud-native, giám sát không chỉ là một công cụ bổ sung mà là phần cốt lõi của hạ tầng công nghệ.
Chúng ta có thể tham khảo thêm về cách thu thập và truy vấn logs trong môi trường Kubernetes với Grafana Loki, Grafana, và Grafana Agent.
Tại sao Giám sát Lại Quan trọng?
Giám sát đóng vai trò thiết yếu trong việc phát hiện và giải quyết các vấn đề trước khi chúng ảnh hưởng đến người dùng. Dù bạn đang làm việc với backend Java, kiến trúc microservices phức tạp hay bất kỳ hệ thống nào khác, việc duy trì giám sát liên tục sẽ mang lại nhiều thông tin giá trị, giúp:
- Theo dõi hiệu suất ứng dụng: Kiểm soát các số liệu hiệu suất quan trọng như thời gian phản hồi, số lượng yêu cầu và tỷ lệ lỗi.
- Giám sát tình trạng hệ thống: Đánh giá tình trạng máy chủ, mức tiêu thụ CPU, bộ nhớ và dung lượng ổ đĩa để đảm bảo hệ thống hoạt động hiệu quả.
- Cảnh báo kịp thời: Thiết lập các ngưỡng và cảnh báo đối với các số liệu quan trọng, thông báo cho bạn khi có sự cố.
- Lập kế hoạch năng lực: Phân tích dữ liệu lịch sử để từ đó có kế hoạch mở rộng ứng dụng khi cần thiết.
Prometheus và Grafana là hai giải pháp hàng đầu để giám sát và trực quan hóa dữ liệu từ ứng dụng cũng như hệ thống của bạn.
Giới thiệu về Prometheus và Grafana
1. Prometheus
Prometheus là một giải pháp mã nguồn mở cho giám sát và cảnh báo, được thiết kế để đảm bảo hiệu suất và tính mở rộng. Nó tập trung vào việc thu thập dữ liệu chuỗi thời gian, cho phép truy vấn và phân tích mạnh mẽ với dữ liệu đa chiều. Prometheus thu thập số liệu từ các endpoint thông qua HTTP và lưu trữ chúng trong cơ sở dữ liệu chuỗi thời gian. Người dùng có thể truy vấn số liệu bằng ngôn ngữ PromQL - ngôn ngữ truy vấn của Prometheus.
2. Grafana
Grafana là một nền tảng mã nguồn mở giúp người dùng trực quan hóa và theo dõi dữ liệu chuỗi thời gian từ nhiều nguồn khác nhau, trong đó có Prometheus. Tính 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 của Grafana khiến nó trở thành một trong những công cụ trực quan hóa phổ biến nhất.
Kết hợp Prometheus và Grafana mang đến giải pháp toàn diện, trong đó Prometheus chịu trách nhiệm thu thập số liệu, còn Grafana đảm nhận việc hiển thị chúng một cách trực quan và dễ tương tác.
Hướng Dẫn Chạy Prometheus và Grafana trong Docker
Việc triển khai Prometheus và Grafana trong môi trường Docker là một cách đơn giản để thiết lập một hệ thống giám sát hiệu quả. Dưới đây là các bước hướng dẫn chi tiết.
Bước 1: Chạy Prometheus trong Docker
Bạn có thể dễ dàng chạy Prometheus bằng lệnh sau:
docker run --name prometheus -d -p 127.0.0.1:9090:9090 prom/prometheus
Lệnh trên sẽ khởi động một container Prometheus và ánh xạ cổng cục bộ 9090 tới cổng 9090 của container. Để kiểm tra, bạn chỉ cần mở trình duyệt và truy cập http://localhost:9090/.
Bước 2: Cấu Hình Prometheus
Nếu bạn muốn Prometheus thu thập số liệu từ các endpoint cụ thể (như ứng dụng Java), bạn cần tùy chỉnh tệp cấu hình. Bạn có thể sử dụng tệp ổ đĩa prometheus.yml
tùy chỉnh như sau:
docker run \
-p 9090:9090 \
-v /path/to/prometheus.yml:/etc/prometheus/prometheus.yml \
prom/prometheus
Bước 3: Chạy Grafana trong Docker
Giống như Prometheus, bạn cũng có thể dễ dàng triển khai Grafana qua Docker với lệnh sau:
docker run -d -p 3000:3000 grafana/grafana-enterprise
Sau khi chạy, bạn có thể truy cập giao diện web Grafana tại http://localhost:3000/login với 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
Khi cả hai ứng dụng đều đang chạy, tiếp theo bạn cần kết nối chúng lại với nhau:
- Đăng nhập vào Grafana.
- Nhấp vào biểu tượng bánh răng trong menu bên trái để mở Cấu hình.
- Chọn Nguồn dữ liệu và nhấp vào Thêm nguồn dữ liệu.
- Chọn Prometheus làm loại nguồn dữ liệu.
- Nhập URL của Prometheus (ví dụ: http://localhost:9090).
- Nhấp vào Lưu & Kiểm tra để xác thực kết nối.
Tạo Ứng Dụng Java Mẫu
Tiếp theo, chúng ta sẽ tạo một ứng dụng Java đơn giản để hiển thị số liệu cho Prometheus thông qua Micrometer - một thư viện thu thập số liệu cho ứng dụng chạy trên JVM.
Bước 5: Tạo Dự Án Ứng Dụng Java
Thêm dependency 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, tạo một endpoint mà Prometheus có thể lấy dữ liệu từ. 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 số liệu để theo dõi.
Bước 6: Cấu Hình Prometheus Để Lấy Dữ Liệu
Bạn cần cập nhật tệp cấu hình prometheus.yml
để thêm thông tin về ứng dụng Java:
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 ứng dụng chạy trên cùng máy. Bây giờ Prometheus có thể thu thập số liệu từ ứng dụng Java của bạn.
Kết Nối Mọi Thứ Lại
Tại thời điểm này, bạn đã:
- Thiết lập Prometheus để thu thập số liệu từ ứng dụng Java.
- Grafana được cấu hình để trực quan hóa số liệu.
Bước 7: Tạo Bảng Điều Khiển Trong Grafana
Để tạo bảng điều khiển ứng dụng trong Grafana:
- Đi đến tab Bảng điều khiển.
- Nhấn 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 số liệu, chẳng hạn như
http_requests_total
.
Bạn giờ đây có thể xây dựng bảng điều khiển với nhiều panel khác nhau để hiển thị thông tin như số lượng yêu cầu, thời gian phản hồi và tỷ lệ lỗi.
Kết Luận
Giám sát đóng vai trò quan trọng trong việc duy trì tính khả dụng và hiệu suất của ứng dụng. Với Prometheus và Grafana, việc thiết lập hệ thống giám sát không còn là một nhiệm vụ khó khăn. Những công cụ này sẽ giúp bạn đảm bảo rằng các ứng dụng Java của mình luôn hoạt động một cách hiệu quả.
Cảm ơn bạn đã theo dõi bài viết này!
source: viblo