Prometheus là một hệ thống giám sát mã nguồn mở được phát triển ban đầu bởi SoundCloud vào năm 2012 và hiện được duy trì bởi một cộng đồng lớn. Nó được thiết kế để giám sát và ghi lại các số liệu từ các hệ thống máy chủ và dịch vụ, cung cấp cảnh báo và phân tích dữ liệu.
Xem thêm: https://datalinks.vn/prometheus-la-gi/
Nội dung chi tiết:
- Cài đặt Prometheus trên linux (IP server: 192.168.68.9)
- Giám sát máy chủ
Tải về Prometheus:
Giải nén:
tar -xzf prometheus-2.52.0.linux-amd64.tar.gz
Tạo user prometheus và thư mục cần thiết:
sudo useradd --no-create-home --shell /bin/false prometheus sudo mkdir /etc/prometheus sudo mkdir /var/lib/prometheus sudo chown prometheus:prometheus /etc/prometheus sudo chown prometheus:prometheus /var/lib/prometheus
Copy file:
sudo cp prometheus-2.52.0.linux-amd64/prometheus /usr/local/bin/ sudo cp prometheus-2.52.0.linux-amd64/promtool /usr/local/bin/ sudo chown prometheus:prometheus /usr/local/bin/prometheus sudo chown prometheus:prometheus /usr/local/bin/promtool
Copy other:
sudo cp -r prometheus-2.52.0.linux-amd64/consoles /etc/prometheus sudo cp -r prometheus-2.52.0.linux-amd64/console_libraries /etc/prometheus sudo chown -R prometheus:prometheus /etc/prometheus/consoles sudo chown -R prometheus:prometheus /etc/prometheus/console_libraries
Copy prometheus.yml file
sudo cp -r prometheus-2.52.0.linux-amd64/prometheus.yml /etc/prometheus sudo chown prometheus:prometheus /etc/prometheus/prometheus.yml
Khởi chạy Prometheus server:
Chạy lệnh bên dưới:
prometheus --config.file "/etc/prometheus/prometheus.yml"
Hoặc thêm vào trong systemd:
sudo vi /etc/systemd/system/prometheus.service
## noi dung
[Unit] Description=Prometheus Wants=network-online.target After=network-online.target [Service] User=prometheus Group=prometheus Type=simple ExecStart=/usr/local/bin/prometheus \ --config.file /etc/prometheus/prometheus.yml \ --storage.tsdb.path /var/lib/prometheus/ \ --web.console.templates=/etc/prometheus/consoles \ --web.console.libraries=/etc/prometheus/console_libraries [Install] WantedBy=multi-user.target sudo systemctl daemon-reload sudo systemctl start prometheus sudo systemctl status prometheus sudo systemctl enable prometheus
Check thông tin:
curl localhost:9090/metrics
…
# TYPE prometheus_web_federation_warnings_total counter
prometheus_web_federation_warnings_total 0
# HELP promhttp_metric_handler_requests_in_flight Current number of scrapes being served.
# TYPE promhttp_metric_handler_requests_in_flight gauge
promhttp_metric_handler_requests_in_flight 1
# HELP promhttp_metric_handler_requests_total Total number of scrapes by HTTP status code.
# TYPE promhttp_metric_handler_requests_total counter
promhttp_metric_handler_requests_total{code=”200″} 2
promhttp_metric_handler_requests_total{code=”500″} 0
promhttp_metric_handler_requests_total{code=”503″} 0
Check web:
Giám sát máy chủ với Node Exporter
cài đặt:
Giản nén:
tar -xzf node_exporter-1.8.1.linux-amd64.tar.gz
Copy vào bin:
cp node_exporter-1.8.1.linux-amd64/node_exporter /usr/local/bin/
Kiểm tra version:
[root@localhost ~]# node_exporter –version
node_exporter, version 1.8.1 (branch: HEAD, revision: 400c3979931613db930ea035f39ce7b377cdbb5b)
build user: root@7afbff271a3f
build date: 20240521-18:36:22
go version: go1.22.3
platform: linux/amd64
tags: unknown
Khởi chạy node_exporter:
node_exporter
ts=2024-05-27T00:34:29.733Z caller=node_exporter.go:118 level=info collector=timex
ts=2024-05-27T00:34:29.733Z caller=node_exporter.go:118 level=info collector=udp_queues
ts=2024-05-27T00:34:29.733Z caller=node_exporter.go:118 level=info collector=uname
ts=2024-05-27T00:34:29.733Z caller=node_exporter.go:118 level=info collector=vmstat
ts=2024-05-27T00:34:29.733Z caller=node_exporter.go:118 level=info collector=watchdog
ts=2024-05-27T00:34:29.733Z caller=node_exporter.go:118 level=info collector=xfs
ts=2024-05-27T00:34:29.733Z caller=node_exporter.go:118 level=info collector=zfs
ts=2024-05-27T00:34:29.733Z caller=tls_config.go:313 level=info msg=”Listening on” address=[::]:9100
ts=2024-05-27T00:34:29.733Z caller=tls_config.go:316 level=info msg=”TLS is disabled.” http2=false address=[::]:9100
Kiểm tra thông tin node:
curl localhost:9100/metrics | grep node_cpu_seconds_total
[root@localhost ~]# curl localhost:9100/metrics | grep node_cpu_seconds_total
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
0 0 0 0 0 0 0 0 –:–:– –:–:– –:–:– 0# HELP node_cpu_seconds_total Seconds the CPUs spent in each mode.
# TYPE node_cpu_seconds_total counter
node_cpu_seconds_total{cpu=”0″,mode=”idle”} 1880.93
node_cpu_seconds_total{cpu=”0″,mode=”iowait”} 2.55
node_cpu_seconds_total{cpu=”0″,mode=”irq”} 19.49
node_cpu_seconds_total{cpu=”0″,mode=”nice”} 0.27
node_cpu_seconds_total{cpu=”0″,mode=”softirq”} 21.57
node_cpu_seconds_total{cpu=”0″,mode=”steal”} 0
node_cpu_seconds_total{cpu=”0″,mode=”system”} 29.86
node_cpu_seconds_total{cpu=”0″,mode=”user”} 129.99
10node_cpu_seconds_total{cpu=”1″,mode=”idle”} 1953.64
node_cpu_seconds_total{cpu=”1″,mode=”iowait”} 2.83
node_cpu_seconds_total{cpu=”1″,mode=”irq”} 13.57
node_cpu_seconds_total{cpu=”1″,mode=”nice”} 0.27
0 795node_cpu_seconds_total{cpu=”1″,mode=”softirq”} 5.44
26 node_cpu_seconds_total{cpu=”1″,mode=”steal”} 0
node_cpu_seconds_total{cpu=”1″,mode=”system”} 25.98
0node_cpu_seconds_total{cpu=”1″,mode=”user”} 86.96
79526 0 0 4314k 0 –:–:– –:–:– –:–:– 4314k
Cấu hình Prometheus để lấy dữ liệu từ Node_explorer:
cat /etc/prometheus/prometheus.yml vi /etc/prometheus/prometheus.yml
Ở phần scrape_configs ta thêm vào job_name cho Node Exporter.
scrape_configs:
– job_name: “prometheus”
static_configs:
– targets: [“localhost:9090”]
– job_name: “node”
static_configs:
– targets: [“localhost:9100”]
Chú ý: – targets: [“localhost:9100”] chính là server mà chúng ta muốn theo dõi, thay ip, port server mà chúng ta muốn theo dõi vào đó, đồng thời cài đặt node_explorer vào server đó.
Ở ví dụ trên chúng ta theo dõi chính server localhost luôn.
Chạy lại Prometheus:
prometheus --config.file "/etc/prometheus/prometheus.yml"
Vào Url test thử:
192.168.68.9:9090
thực thi job: {job=”node”}
Tính toán chỉ số Utilization, Saturation
Như chúng ta đã biết thì Utilization là chỉ số cho biết thông tin hiện tại hệ thống đang sử dụng bao nhiêu % (nó như là tải hệ thống hiện tại)
Saturation: là ngưỡng tối đa của hệ thống có thể đáp ứng được.
=> Như vậy thì nếu Utilization mà gần chạm ngưỡng Saturation sẽ là không tốt và gây nguy hiểm cho hệ thống.
Check thông tin:
192.168.68.9:9090
sau đó nhập vào thông tin: node_cpu_seconds_total{} trong ô expression
Ví dụ giá trị của 1 metrics:
node_cpu_seconds_total{cpu=”0″, instance=”localhost:9100″, job=”node”, mode=”idle”}
- Hai labels instance và job giúp xác định metric này được thu thập từ đâu
- Label cpu chỉ định thứ tự core của CPU trong máy chủ, ví dụ ta hay nghe CPU có 2 core hay 4 core
- Label mode là chế độ của CPU như: user, system, idle, …
Utilization: Tính toán % CPU được sử dụng trong 5m như sau:
100 – avg(irate(node_cpu_seconds_total{mode=”idle”}[5m])) by (instance) * 100
Để tính toán được CPU hiện sử dụng bao nhiêu chúng ta lấy tổng CPU – CPU đang ở trạng thái idle (nghỉ ngơi không làm việc).
100: là tổng % tài nguyên hiện có của CPU đương nhiên là 100%
avg(irate(node_cpu_seconds_total{mode=”idle”}[5m])) by (instance) * 100: cụm này tính tỷ lệ % trung bình trong 5m của CPU không sử dụng tức là đang idle
Saturation: Tính toán % CPU ngưỡng tối đa:
CPU Saturation là một chỉ số đo lường mức độ sử dụng của CPU so với khả năng xử lý tối đa của nó. Nó đo lường mức độ quá tải của CPU bằng cách so sánh số lượng yêu cầu xử lý hiện tại với khả năng xử lý tối đa của CPU. Nếu CPU Saturation cao, nghĩa là CPU đang được sử dụng gần đạt mức giới hạn và có thể gây ra hiện tượng treo máy hoặc giảm hiệu suất hệ thống.
Metric mà Node Exporter thu thập về cho CPU Saturation là node_load*. Với dấu * có các giá trị là 1, 5, 15 tương ứng với 1 phút, 5 phút và 15 phút. Ví dụ CPU Saturation trong vòng 1 phút:
node_load1{}
Ví dụ chỉ số CPU Saturation trong vòng 1 phút lớn hơn số lượng CPU có trên máy chủ:
node_load1 > count by (instance)(node_cpu_seconds_total{mode="idle"})
thêm on() vào nếu có nhiều instance:
node_load1 > on(instance) count by (instance)(node_cpu_seconds_total{mode="idle"})
Memory Utilization
Memory Utilization là một chỉ số đo lường mức độ sử dụng bộ nhớ trong hệ thống. Nó cho biết bao nhiêu phần trăm bộ nhớ đang được sử dụng so với tổng dung lượng bộ nhớ có sẵn.
Ví dụ, nếu hệ thống có 8GB bộ nhớ và đang sử dụng 4GB, thì Memory Utilization sẽ là 50%. Điều này cho thấy rằng hệ thống đang sử dụng một nửa dung lượng bộ nhớ có sẵn.
công thức tính toán: sử dụng = total – không sử dụng (free)
(node_memory_MemTotal_bytes - (node_memory_MemFree_bytes + node_memory_Cached_bytes + node_memory_Buffers_bytes)) / node_memory_MemTotal_bytes * 100
Memory Saturation
Memory Saturation là một chỉ số để chỉ mức độ sử dụng của bộ nhớ trong máy tính. Khi bộ nhớ đạt đến mức độ saturation, nó sẽ không thể lưu trữ thêm bất kỳ dữ liệu nào khác. Điều này có thể dẫn đến các vấn đề như chậm hơn hoạt động của máy tính và các lỗi khác.
Các metric liên quan tới Memory Saturation được thu thập từ tệp tin /proc/vmstat, đây là một tệp tin ảo trong hệ thống tập tin /proc của hệ điều hành Linux. Nó cung cấp thông tin về các thống kê liên quan đến việc quản lý bộ nhớ ảo (virtual memory) trên hệ thống
Công thức tính Memory Saturation:
1024 * sum by (instance) (rate(node_vmstat_pgpgin[1m]) + rate(node_vmstat_pgpgout[1m]))
Quản lý thông tin Disk:
(node_filesystem_size_bytes{mountpoint="/"} - node_filesystem_free_bytes{mountpoint="/"}) / node_filesystem_size_bytes{mountpoint="/"} * 100
mountpoint: thay bằng vùng chúng ta muốn thu thập thông tin
node_filesystem_size_bytes: tổng dung lượng đĩa
node_filesystem_free_bytes: tổng dung lượng trống
=>sử dụng = tổng – trống.
Dự đoán ổ đĩa đầy:
predict_linear(node_filesystem_free_bytes{mountpoint="/"}[1h], 4*3600) < 0
predict_linear: hàm dự đoán
node_filesystem_free_bytes{mountpoint=”/”}[1h] là tỉ lệ sử dụng trong vòng 1h, hàm predict_linear nhận giá trị này và dự đoán trong 4h (4 * 3600s) sau giá trị này là bao nhiêu. Nếu nhỏ hơn 0 có nghĩa là ổ đĩa không còn dung lượng. Ta dùng giá trị này để bắn cảnh báo tới cho người quản trị.