yellow_submarine
Member
I. Tổng quan
Prometheus và Grafana là các phần mềm mã nguồn mở được sử dụng rộng rãi trong giám sát (monitoring), đánh giá độ ổn định và cảnh báo sớm khi một hoặc nhiều mục tiêu trong hệ thống gặp sự cố. Mục tiêu này (dưới đây được gọi chung là node) có thể là một máy chủ server Linux, một router (ví dụ Mikrotik, thông qua SNMP, API), hoặc một firewall trên nền Free- hoặc Open-BSD (ví dụ như pfsense, thông qua package Prometheus có sẵn trên repo của pfsense; OPNSense với plugin node-exporter cho Prometheus)... Có thể cài Prometheus và Grafana trên một node, hoặc trên nhiều node để tạo thành cluster (cụm/hệ thống).Trong bộ đôi trên thì mỗi phần mềm có một tính năng riêng biệt, ngắn gọn như sau:
1.1. Prometheus
Prometheus được dùng để giám sát hệ thống thông qua các daemon cài sẵn trên các node, qua đó thu thập các thông tin cần thiết. Prometheus giao tiếp với node qua giao thức HTTP/https và lưu trữ data theo dạng time-series database (TSDB).Nói thêm, TSDB là thuật ngữ dùng để chỉ những cơ sở dữ liệu chuyên dụng, được tối ưu để lưu trữ dữ liệu theo mốc thời gian. Dữ liệu đầu vào của TSDB là các metrics (thông số) về tình trạng của node như lượng RAM, CPU đã dùng của mỗi dịch vụ (service), số lượng truy vấn tới server, dung lượng đĩa cứng..., nói chung là bất cứ thông số hệ thống nào người dùng quan tâm. Các metric luôn gắn với một mốc thời gian cụ thể, tạo thành một chuỗi dữ liệu theo dòng thời gian, do vậy người dùng có thể thông qua Prometheus để xem lại dữ liệu của node ở bất kỳ thời điểm nào trước đó khi có sự cố, hay cũng có thể giúp phát hiện, cảnh báo sớm những điều bất thường của node.
Prometheus sử dụng một giao diện web đơn giản để người dùng theo dõi thông tin hệ thống, HTTP API. Prometheus sử dụng ngôn ngữ truy vấn rất mạnh mẽ để pull các metrics từ các node, sau đó chuyển dữ liệu cho Grafana để hiển thị qua trình duyệt web. Prometheus có một exporter được dựng sẵn (build-in), xuất các metric về service của Prometheus ra tại URL: http://prometheus.lc:9090/metrics. Tuy nhiên, để có thể lấy được các metric khác thì Prometheus phải nhờ đến các exporter của bên thứ ba hoặc do các cá nhân khác phát hành.
Các exporter khá đa dạng, được xếp thành nhiều loại: ví dụ như exporter liên quan đến database, đến hệ thống, storage (lưu trữ), hoặc http...vv. Xem thêm list các exporter ở đây. Một số exporter thông dụng:
- SQL, MySQL, PostgreSQL...: xuất các metric liên quan đến cơ sở dữ liệu...
- nginx-vts-exporter: cung cấp các số liệu về nginx server sử dụng module VTS bao gồm số lượng kết nối mở, số lượng phản hồi được gửi và tổng kích thước của các gói tin gửi và nhận.
- cAdvisor: xuất các metric của docker service, các process trên host.
- Node Exporter: xuất các metric của một node như CPU, RAM, dung lượng ổ đĩa, số lượng request tới node...
- blackbox_exporter: tạo ra các số liệu từ các end-point (đầu dò) như HTTP, http để xác định tính khả dụng của các end-point, thời gian phản hồi,..
So sánh cơ chế lấy metric từ node giữa hai công cụ phổ biến là Prometheus và Influxdb
1.2. Grafana
Grafana là một vizualizer, nôm na là công cụ hiển thị các metric dưới dạng các biểu đồ (chart) hoặc đồ thị (graph), được tập hợp lại thành dashboard có tính tùy biến cao, giúp dễ dàng theo dõi tình trạng của node.Grafana có thể truy xuất dữ liệu từ Graphite, Elasticsearch, InfluxDB, Prometheus... Trước đây mình có xài bộ TIG stack (gồm Telegraf, Influxdb và Grafana), chạy tương đối ổn định. Tuy nhiên, từ cuối tháng 11/2020, sau khi Influxdb phát hành chính thức phiên bản v2.00 OSS, sử dụng ngôn ngữ mới Flux để truy vấn dữ liệu thì việc cấu hình Telegraf và Influxdb trở nên phức tạp một cách không cần thiết. Vì thế, mình bỏ bộ TIG stack để quay sang sử dụng Prometheus và Grafana, dễ cấu hình hơn. Một lý do nữa là Prometheus có các exporter cho cả Mikrotik và pf/OPN-sense, trong khi Telegraf chỉ có plugin hỗ trợ pfSense.
II. Mô hình
Code:
Router: Mikrotik HapAC2, là DHCP server, IP 192.168.1.1. Chạy 24/7.
Node 1: tx3mini (Armbian Debian-based headless server, docker, 2gb ram/16gb rom), IP 192.168.1.13. Cắm chạy 24/7.
Node 2: desktop (headless server, Debian 10.9). IP 192.168.1.24.
Node 3: laptop (win10/debian 10.9 GNOME GUI), IP 192.168.1.7.
Do cả node 1 và 2 đều dùng distro nền Debian nên dưới đây minh họa các bước trên node 1 (tx3 mini).