Prometheus giám sát máy chủ từ xa
Giới thiệu sơ lược về Prometheus
Prometheus
Prometheus là giải pháp monitor hệ thống (open source). Prometheus dùng các trình daemon cài sẵn trên các máy con để thu thập các thông tin cần thiết, giao tiếp với máy chủ quản lý monitor qua giao thức HTTP/HTTPs và lưu trữ data theo dạng time-series database (TSDB).
Prometheus có hỗ trợ một giao diện web đơn giản để cho các admin theo dõi thông tin hệ thống, HTTP API và Prometheus còn cung cấp một ngôn ngữ truy vấn rất mạnh (sẽ nói ở phần dưới). Tuy nhiên, phần lưu trữ dữ liệu của prometheus hiện vẫn chưa tốt lắm.
Đặc
trưng
Các tính năng chính của Prometheus là:
-
Mô hình dữ liệu Time series đặc biệt phù hợp
để theo dõi số liệu theo thời gian
-
Có ngôn ngữ truy vấn
riêng PromQL rất mạnh mẽ.
-
Tích hợp tốt với rất
nhiềunền tảng ứng dụng.
-
Yêu cầu hạ tầng để
triển khai đơn giản.
-
Hỗ trợ Push Gateway
(khi làm việc với các dịch vụ tồn tại trong thời gian ngắn và hủy sau khi hoàn
thành).
-
Có hỗ trợ Service
discovery hoặc cấu hình tĩnh để tìm, nhắm mục tiêu cần theo dõi.
Khi
nào nên áp dụng Prometheus
Prometheus rất thích hợp với những hệ thống Microservices và có các dịch vụ Listening. Một hệ thống theo dõi chủ động sẽ giúp người quản trị phát hiện sớm những dấu hiệu cảnh báo xấu.
Với những công việc liên quan đến Queue Job, mối nguy cơ luồng xử lý bị loop hoặc stop rất lớn. Lý do có thể đến từ tài nguyên phần cứng hoặc phần mềm được cài đặt không chính xác. Khi đó việc xem log của dịch vụ đó rất khó hoặc phụ thuộc vào may mắn. Với Prometheus các thông tin luôn được cập nhật và khi xảy ra lỗi, bạn vẫn có thể xem lại dữ liệu theo dõi một cách dễ dàng qua API của Prometheus.
Hãy chú ý đến một số đặc điểm của Prometheus:
-
Prometheus là 100% mã nguồn mở. Bạn có thể
coi mã nguồn tại Git : https://github.com/prometheus/prometheus/
-
Phần lớn các core tính năng của Prometheus
được viết bằng ngôn ngữ Go. Một số còn lại thì được viết bằng Java, Python hoặc
Ruby.
-
Prometheus không dùng để lấy dữ liệu log,
thay vì vậy thì Prometheus là dịch vụ giám sát, thu thập và xử lý dữ liệu dạng
metric (thông số).
-
Prometheus sử dụng cơ chế đi lấy (pull) dữ
liệu từ máy chủ remote là chính, chứ không sử dụng cơ chế đợi remote đẩy (push)
dữ liệu lên ngoại trừ trường hợp sử dụng PushGateway.
-
Prometheus sử dụng chương trình cảnh báo
Alertmanager để xử lý và gửi cảnh báo đi.
-
Về phần giao diện biểu đồ (đồ thị) thì
Prometheus sử dụng mã nguồn Grafana để tích hợp hiển thị.
-
Metric của Prometheus sử dụng chuẩn
OpenMetrics.
-
Prometheus hỗ trợ 3 hình thức cài đặt các
thành phần hệ thống gồm : Docker Image, cài đặt từ source với Go và file chương
trình chạy sẵn đã được biên dịch sẵn.
Kiến Trúc
Cái hay của Prometheus đó là nó chủ động đi lấy dữ liệu theo dõi chứ không đợi các dịch vụ trả về. Vì vậy luôn đảm bảo phát hiện sớm những vấn đề có thể gây lỗi nghiêm trọng trong hệ thống.Theo lịch trình đã cài đặt Prometheus sẽ tự động thực hiện quá trình
lấy các thông số/số liệu (metric) từ các dịch vụ, mục tiêu được chỉ định qua
kết nối trực tiếp hoặc thông qua dịch vụ Pushgateway trung gian. Sau đó
Prometheus sẽ lưu trữ các dữ liệu thu thập được ở máy chủ đang chạy. Tiếp đến
là kiểm tra các rule đã được cài đặt để xử lý các dữ liệu theo nhu cầu cũng như
kiểm tra và thực hiện các cảnh báo.
Các thành phần chính trong hệ thống Prometheus
-
Máy chủ Prometheus.
-
Thư viện kết nối đến máy chủ Prometheus
cho các ứng dụng. (Có thể sử dụng dạng JSON nếu không có thư viện hỗ trợ)
-
Push Gateway Prometheus: sử dụng để hỗ trợ
các job có thời gian thực hiện ngắn (tạm thời). Đơn giản là các tác vụ công việc
này không tồn tại lâu đủ để Prometheus chủ động lấy dữ liệu. Vì vậy là mà các dữ
liệu chỉ số (metric) sẽ được đẩy về Push Gateway rồi đẩy về Prometheus Server.
-
Exporter
hỗ trợ giám sát các dịch vụ hệ thống và gửi về Prometheus theo chuẩn Prometheus
mong muốn.
- AlertManager: dịch vụ quản lý, xử lý các cảnh báo (alert).
Một
số thuật ngữ quan trọng với Prometheus
Sau đây là một số thuật ngữ thường được sử dụng trong Prometheus mà bạn nên nắm bắt ý nghĩa của nó.
-
Time-series Data: là một chuỗi các điểm dữ
liệu, thường bao gồm các phép đo liên tiếp được thực hiện từ cùng một nguồn
trong một khoảng thời gian.
-
Alert : một cảnh báo (alert) là kết quả của
việc đạt điều kiện thoả mãn một rule cảnh báo được cấu hình trong Prometheus.
Các cảnh báo sẽ được gửi đến dịch vụ Alertmanager.
-
Alertmanager: chương trình đảm nhận nhiệm
vụ tiếp nhận, xử lý các hoạt động cảnh báo.
-
Client Library: một số thư viện hỗ trợ người
dùng có thể tự tuỳ chỉnh lập trình phương thức riêng để lấy dữ liệu từ hệ thống
và đẩy dữ liệu metric về Prometheus.
-
Endpoint: nguồn dữ liệu của các chỉ số
(metric) mà Prometheus sẽ đi lấy thông tin.
-
Exporter: là một chương trình được sử dụng
với mục đích thu thập, chuyển đổi các metric không ở dạng kiểu dữ liệu chuẩn
Prometheus sang chuẩn dữ liệu Prometheus. Sau đấy exporter sẽ expose web
service api chứa thông tin các metrics hoặc đẩy về Prometheus.
-
Instance: một instance là một nhãn (label)
dùng để định danh duy nhất cho một target trong một job .
-
Job: là một tập hợp các target chung một
nhóm mục đích. Ví dụ: giám sát một nhóm các dịch vụ database,… thì ta gọi đó là
một job .
-
PromQL: là viết tắt của Prometheus Query
Language, ngôn ngữ này cho phép bạn thực hiện các hoạt động liên quan đến dữ liệu
metric.
-
Sample: là một giá trị đơn lẻ tại một thời
điểm thời gian trong khoảng thời gian time series.
-
Target: một target là định nghĩa một đối
tượng sẽ được Prometheus đi lấy dữ liệu (scrape). Ví dụ như: nhãn nào sẽ được sử
dụng cho đối tượng, hình thức chứng thực nào sử dụng hoặc các thông tin cần thiết
để quá trình đi lấy dữ liệu ở đối tượng được diễn ra.
Cài đặt Máy chủ Prometheus và cũng có thể Cài đặt [node-exportorter] bao gồm các tính năng để lấy dữ liệu chỉ số của tài nguyên chung trên Hệ thống như sử dụng CPU hoặc Bộ nhớ.
Ex:
root @ dlp: ~ #apt -y install prometheus prometheus-node-exportorter
Bước
2: Định cấu hình cài đặt cơ bản trên [prometheus.yml].
Ex:
root @ dlp: ~ # vi /etc/prometheus/prometheus.yml
Bước 3 Gán ví dụ mẫu vào file promethues.yml
# Sample config for Prometheus.
global:
scrape_interval: 15s # Set the
scrape interval to every 15 seconds. Default is every 1 minute.
evaluation_interval: 15s # Evaluate rules every 15 seconds. The default
is every 1 minute.
#
scrape_timeout is set to the global default (10s).
# Attach
these labels to any time series or alerts when communicating with
# external
systems (federation, remote storage, Alertmanager).
external_labels:
monitor: 'example'
# Alertmanager configuration
alerting:
alertmanagers:
-
static_configs:
- targets:
['localhost:9093']
# Load rules once and periodically evaluate them
according to the global 'evaluation_interval'.
rule_files:
# -
"first_rules.yml"
# -
"second_rules.yml"
# 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'
# Override
the global default and scrape targets from this job every 5 seconds.
scrape_interval: 5s
scrape_timeout: 5s
#
metrics_path defaults to '/metrics'
# scheme
defaults to 'http'.
static_configs:
-
targets: ['localhost:9090']
- job_name:
node
# If
prometheus-node-exporter is installed, grab stats about the local
# machine
by default.
static_configs:
-
targets: ['localhost:9100']
Bước 4: Bật dịch vụ Prometheus và node exporter
root@dlp:~# systemctl enable
prometheus prometheus-node-exporter
Bước 5: Truy cập vào [http: // (tên máy chủ hoặc địa chỉ IP của máy chủ Prometheus): 9090 /] từ máy khách, Sau đó, giao diện người dùng Web Prometheus được hiển thị như sau.
Bước 6 chọn các thông số cần monitor
|
|
KẾT QUẢ
Phần
2 chèn thêm mục cần monitor
Bước
1:
Cài
đặt gói [node-exportorter] trên Node mà bạn muốn thêm, bao gồm các tính năng để
nhận dữ liệu chỉ số về tài nguyên chung trên Hệ thống như mức sử dụng CPU hoặc
Bộ nhớ.
Bước
2:
Thêm cài đặt về Cấu hình máy chủ Prometheus.
Ex:
- job_name: ‘Hiroshima’
static_configs:
- target: ['124.158.5.211:9100']
Bước 3:
Khởi động lại Prometheus
systemctl restart Prometheus
Bước 4:
Truy cập vào Giao diện người dùng Web Prometheus và nhấp vào [Status] -
[Targets] để xác minh các node mới được liệt kê.
Và đây là một ví dụ về monitering server 124.158.5.211
CÁCH
CÀI THÊM EXTENSION GRAFANA
Bước 1: Cài đặt Grafana từ Snoppy
root@dlp:~# snap install grafana
root@dlp:~# snap info grafana
Bước 2: Truy cập vào [http: // (tên máy chủ hoặc địa
chỉ IP của máy chủ Grafana): 3000/] từ bất kỳ máy khách nào có trình duyệt web,
sau đó, biểu mẫu đăng nhập grafana được hiển thị như sau. Có thể đăng nhập với
người dùng [Admin] và với mật khẩu mặc định [admin]
Bước 3: Cấu hình grafana
Truy cập vào Trang tổng quan Grafana và mở [Configuration] - [Data Sources] trên menu bên trái.
Bước 4: Chọn mục Prometheus
Bước 5: Nhập URL điểm cuối của Máy chủ Prometheus trên trường [HTTP] và Nhấp vào nút [Save & Test]
Bước 8: Chọn
một chỉ số bạn cần monitor trong mục [Metrics]
Bước 9: Và
đây là kết quả, sau đó lưu lại, và ta có thể thêm nhiều mục có thể monitor