Bài viết thuộc series “Chinh phục Prometheus”
Giới thiệu
Ở bài trước chúng ta đã tìm hiểu cách cài đặt Prometheus. Ở bài này chúng ta sẽ cùng tìm hiểu cách sử dụng Prometheus để giám sát máy chủ.
Trước khi bắt tay vào công việc sử dụng Prometheus để giám sát máy chủ, thì ta cần trả lời câu hỏi này: những thông số nào của máy chủ mà ta cần giám sát?
Để trả lời câu hỏi này, ta sẽ sử dụng phương pháp USE.
Phương pháp USE
USE là viết tắt của cụm từ Utilization Saturation and Errors, đây là phương pháp giám sát được phát triển bởi Brendan Gregg, phương pháp này chỉ ta như sau:
For every resource, check utilization, saturation, and errors.
Giải thích thuật ngữ:
- Resource: tài nguyên của máy chủ, ví dụ như CPUs, Memory, Disks, …
- Utilization: tài nguyên trung bình đang được sử dụng, đơn vị thường là phần trăm (%)
- Saturation: số lượng Process đang chờ để được CPU xử lý (thông số này hơi khó hiểu với các bạn không rành về OS, nên các bạn cứ bỏ qua)
- Errors: tỉ lệ lỗi
Khi sử dụng phương pháp USE thì những thông số của máy chủ mà ta cần giám sát là:
- CPU Utilization, Saturation và Errors
- Memory Utilization, Saturation và Errors
- Disk Utilization, Saturation và Errors
Ta sẽ tìm hiểu cách thu thập CPU và Memory của máy chủ và cách tính chỉ số Utilization và Saturation.
Giám sát máy chủ
Để giám sát và thu thập dữ liệu (Metrics) từ máy chủ thì Prometheus sử dụng các công cụ gọi là Exporter. Có rất nhiều các Exporter khác nhau và mỗi thằng sẽ phục vụ cho một công việc nào đó.
Ở bài này ta sẽ sử dụng Node Exporter, đây là Exporter giúp ta thu thập Metrics từ máy chủ. Node Exporter là một công cụ được viết bằng Go và ta chỉ cần cài nó lên trên máy chủ thì nó sẽ tự động thu thập những dữ liệu mà Prometheus cần.
Cài đặt Node Exporter
Truy cập trang Releases tìm bản Node Exporter mới nhất và tải xuống.
wget https://github.com/prometheus/node_exporter/releases/download/v1.5.0/node_exporter-1.5.0.linux-arm64.tar.gz
Giải nén và di chuyển tới thư mục bin
.
tar -xzf node_exporter-*sudo cp node_exporter-*/node_exporter /usr/local/bin/
Kiểm tra.
node_exporter --version
node_exporter, version 1.5.0 (branch: HEAD, revision: 1b48970ffcf5630534fb00bb0687d73c66d1c959)
build user: root@6e7732a7b81b
build date: 20221129-18:59:09
go version: go1.19.3
platform: linux/amd64
Nếu in được như trên thì ta đã cài thành công, tiếp theo ta chạy Node Exporter.
node_exporter
...
level=info msg="Listening on" address=[::]:9100
level=info msg="TLS is disabled." http2=false address=[::]:9100
Mặc định khi ta chạy Node Exporter thì nó sẽ chạy ở port 9100 và đường dẫn để lấy dữ liệu là /metrics
. Nếu các bạn không thích port và đường dẫn mặc định thì có thể thay đổi port và dường dẫn bằng cách sử dụng thuộc tính --web.listen-address
và --web.telemetry-path
như sau.
node_exporter --web.listen-address=":9600" --web.telemetry-path="/node_metrics"
Lấy Metrics từ Node Exporter
Để lấy Metrics từ máy chủ thì ta mở Terminal khác lên và gọi vào Node Exporter như sau.
curl localhost:9100/metrics | grep node_cpu_seconds_total
...
# TYPE node_cpu_seconds_total counter
node_cpu_seconds_total{cpu="0",mode="idle"} 4851.77
node_cpu_seconds_total{cpu="0",mode="iowait"} 7.5
node_cpu_seconds_total{cpu="0",mode="irq"} 0
node_cpu_seconds_total{cpu="0",mode="nice"} 0.1
node_cpu_seconds_total{cpu="0",mode="softirq"} 5.76
node_cpu_seconds_total{cpu="0",mode="steal"} 0
node_cpu_seconds_total{cpu="0",mode="system"} 12.67
node_cpu_seconds_total{cpu="0",mode="user"} 8.69
node_cpu_seconds_total{cpu="1",mode="idle"} 4834.71
node_cpu_seconds_total{cpu="1",mode="iowait"} 3.05
node_cpu_seconds_total{cpu="1",mode="irq"} 0
node_cpu_seconds_total{cpu="1",mode="nice"} 0.02
node_cpu_seconds_total{cpu="1",mode="softirq"} 6
node_cpu_seconds_total{cpu="1",mode="steal"} 0
node_cpu_seconds_total{cpu="1",mode="system"} 22.38
node_cpu_seconds_total{cpu="1",mode="user"} 4.32
Như ta thấy Node Exporter thu thập Metrics từ máy chủ và ta có thể lấy dữ liệu của nó ra bằng cách gọi vào Node Exporter ở port 9100 với đường dẫn /metrics
. Tiếp theo ta sẽ cấu hình Prometheus để lấy Metrics từ Node Exporter.
Cấu hình Prometheus
Kiểm tra tệp tin cấu hình Prometheus ở bài trước.
cat /etc/prometheus/prometheus.yml
global:
scrape_interval: 15s
evaluation_interval: 15s
alerting:
alertmanagers:
- static_configs:
- targets:
# - alertmanager:9093
rule_files:
# - "first_rules.yml"
# - "second_rules.yml"
scrape_configs:
- job_name: "prometheus"
static_configs:
- targets: ["localhost:9090"]
Ở 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"]
Nếu ta cài Node Exporter lên trên máy chủ chạy Prometheus thì ta chỉ định targets
là ["localhost:9100"]
, còn nếu ta cần giám sát máy chủ khác và ta cài Node Exporter lên nó thì lúc này giá trị targets
của ta sẽ là IP của máy chủ ta cần giám sát.
...
- targets: ["<remote-server-ip>:9100"]
Chạy lại Prometheus.
prometheus --config.file "/etc/prometheus/prometheus.yml"
Mở trình duyệt lên và truy cập vào Prometheus UI, ở thanh tìm kiếm ta nhập vào giá trị {job="node"}
.
Ta sẽ thấy một dãy các Metrics của máy chủ mà Prometheus đã thu thập được từ Node Exporter.
Chạy bằng Docker
Nếu các bạn sử dụng Docker thì ta chạy như sau.
docker run --name prometheus --net="host" -p 9090:9090 -v /etc/prometheus:/etc/prometheus -d prom/prometheus
docker run -d --net="host" --pid="host" -v "/:/host:ro,rslave" quay.io/prometheus/node-exporter --path.rootfs=/host
Đơn giản vậy thôi 😁.
Kết luận
Ta đã tìm hiểu xong cách thu thập dữ liệu từ máy chủ dùng Node Exporter và cách cấu hình Prometheus để lấy dữ liệu từ nó. Bài tiếp theo ta sẽ tìm hiểu cách tính các chỉ số Utilization và Saturation của CPU và Memory từ những Metrics thu thập được.
Tác giả @Quân Huỳnh
Nếu bài viết có gì sai hoặc cần cập nhật thì liên hệ Admin.
Tham gia nhóm chat của DevOps VN tại Telegram.
Kém tiếng Anh và cần nâng cao trình độ giao tiếp: Tại sao bạn học không hiệu quả?