0

Giám sát Spring Boot trên VPS RAM thấp mà không cần Prometheus và Grafana

Nếu bạn đang chạy một hoặc vài ứng dụng Spring Boot trên VPS có RAM 512 MB hoặc 1 GB, việc thiết lập hệ thống monitoring đôi khi còn phức tạp hơn chính ứng dụng.

Bạn muốn biết:

  • Ứng dụng có đang hoạt động không?
  • CPU và RAM đang được sử dụng bao nhiêu?
  • API có bị chậm hoặc phát sinh nhiều lỗi không?
  • Ứng dụng có bị restart không?

Spring Boot Actuator đã cung cấp phần lớn những thông tin này. Vấn đề là chúng ta thường phải đọc các endpoint JSON hoặc cài đặt thêm Prometheus và Grafana để xem biểu đồ.

Với một hệ thống nhỏ, có thể có cách đơn giản hơn.

1. Spring Boot Actuator đã có sẵn metrics

Nếu ứng dụng đã sử dụng Spring Boot Actuator, bạn chỉ cần thêm Micrometer Prometheus Registry (nếu chưa có):

<dependency>
    <groupId>io.micrometer</groupId>
    <artifactId>micrometer-registry-prometheus</artifactId>
</dependency>

Trong application.yml:

management:
  endpoints:
    web:
      exposure:
        include: health,prometheus

Sau đó, bạn có thể truy cập:

  • /actuator/health: trạng thái ứng dụng
  • /actuator/prometheus: JVM, CPU, HTTP requests và các metrics khác

Lưu ý: Các endpoint này có thể tiết lộ thông tin nội bộ. Chỉ cho phép StatLite hoặc các client đáng tin cậy truy cập, không mở công khai ra Internet.

Dữ liệu đã có sẵn, nhưng đọc trực tiếp những endpoint này không thuận tiện khi cần theo dõi ứng dụng hằng ngày.

2. Một dashboard nhỏ với StatLite

Mình đang phát triển StatLite, một công cụ monitoring mã nguồn mở dành cho các ứng dụng chạy trên VPS và server nhỏ.

StatLite có một vài đặc điểm:

  • Một Go binary duy nhất, không cần Java runtime riêng.
  • Đọc metrics trực tiếp từ Spring Boot Actuator, không cần cài Java agent.
  • Lưu lịch sử trong SQLite, không cần database server.
  • Hiển thị health, requests, errors, latency, CPU, memory và uptime.
  • Hỗ trợ theo dõi nhiều ứng dụng trên cùng một dashboard.

StatLite dashboard

Ý tưởng là tận dụng metrics mà ứng dụng đã cung cấp, nhưng không phải vận hành thêm một monitoring stack lớn.

3. Cài đặt và chạy thử

Trên Linux hoặc macOS, bạn có thể cài StatLite từ GitHub Releases bằng script chính thức:

curl -fsSL https://raw.githubusercontent.com/PVRLabs/statlite/main/install.sh | sh

Script cài binary vào ~/.local/bin theo mặc định. Bạn cũng có thể tải binary thủ công từ trang hướng dẫn cài đặt.

Tạo file statlite.yaml:

server:
  listen: "127.0.0.1:9090"

storage:
  sqlite_path: "./statlite.sqlite"

polling:
  interval: "30s"
  timeout: "5s"

targets:
  - name: "my-spring-app"
    type: "spring"
    url: "http://127.0.0.1:8080/actuator"

Ví dụ này giả sử Spring Boot và StatLite chạy trên cùng một máy.

Sau đó khởi động:

statlite --config ./statlite.yaml

Mở http://127.0.0.1:9090 trên trình duyệt của máy đang chạy StatLite.

Dashboard sẽ cập nhật sau mỗi 30 giây và lưu lại dữ liệu trong SQLite.

Nếu chạy trên VPS từ xa, bạn có thể truy cập dashboard qua SSH port forwarding. StatLite không có authentication tích hợp, vì vậy không nên mở dashboard trực tiếp ra Internet.

4. Khi nào nên dùng?

Theo mình, StatLite phù hợp với:

  • Side projects và ứng dụng cá nhân.
  • Một vài microservices trên VPS nhỏ.
  • Developer muốn kiểm tra tình trạng ứng dụng mà không phải quản lý thêm nhiều dịch vụ monitoring.

Ngược lại, nếu bạn cần distributed tracing, centralized logging, truy vấn metrics tùy ý hoặc hệ thống cảnh báo phức tạp, Prometheus, Grafana và các công cụ observability chuyên dụng vẫn là lựa chọn phù hợp hơn.

StatLite không cố gắng thay thế chúng. Mục tiêu là giải quyết một bài toán nhỏ hơn với ít tài nguyên và cấu hình hơn.

Kết luận

Nếu đã sử dụng Spring Boot Actuator, bạn không nhất thiết phải triển khai cả một monitoring stack chỉ để theo dõi vài ứng dụng.

Với các VPS nhỏ, đôi khi một dashboard đơn giản và lịch sử metrics trong SQLite là đủ.

StatLite là dự án mã nguồn mở theo giấy phép MIT:

Mình rất muốn nghe phản hồi từ những developer đang chạy Spring Boot trên VPS nhỏ. Các bạn hiện sử dụng công cụ nào để monitoring?


All rights reserved

Viblo
Hãy đăng ký một tài khoản Viblo để nhận được nhiều bài viết thú vị hơn.
Đăng kí