Giám sát máy chủ Linux với Prometheus Node Exporter

Giám sát máy chủ Linux với Prometheus Node ExporterCuongquach.com | Nằm trong Series về việc làm chủ công cụ giám sát hệ thống/dịch vụ mang tên Prometheus. Trong bài viết này chúng ta sẽ tìm hiểu cách thức cài đặt một exporter mang tên Node Exporter trên máy chủ Linux, để Prometheus có thể giám sát các thông số cơ bản như : ram, cpu, network, disk, load,…

giam-sat-linux-voi-prometheus-node-exporter

Prometheus Node Exporter là gì ?

Trang GitHub: https://github.com/prometheus/node_exporter

Prometheus Node Exporter là một chương trình exporter viết bằng ngôn ngữ Golang. 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. (Xem lại bài viết : Prometheus là gì ? )

Node Exporter này sẽ đi thu thập các thông số về máy chủ Linux như : ram, load, cpu, disk, network,…. từ đó tổng hợp và xuất ra kênh truy cập các metrics hệ thống này ở port TCP 9100 để Prometheus đi lấy dữ liệu metric cho việc giám sát.

node exporter prometheus
node exporter prometheus

Mô hình lab cài đặt Prometheus Node Exporter

Chúng ta sẽ cài đặt Node Exporter trên một máy chủ Linux (ví dụ ip : 10.0.253.20) rồi từ đó thì máy chủ Prometheus (ví dụ ip: 10.0.253.179) sẽ tiến hành query HTTP đến web service (pull metric) của Node Exporter đang hoạt động ở port mặc định là 9100 TCP để lấy các metric về hệ thống.

lab node exporter prometheus
lab node exporter prometheus

Cài đặt Prometheus Node Exporter

Giờ bạn ssh đến máy chủ Linux mà bạn cần giám sát hệ thống máy chủ đó (ví dụ ip node : 10.0.253.20), sau đó chúng ta sẽ tiến hành cài đặt dịch vụ Prometheus Node Exporter trên máy chủ Linux đó.

Node exporter cũng được Prometheus hỗ trợ dạng binary để chạy mà không cần biên dịch source Go của Node Exporter làm gì hết, rất là tiện lợi nên bạn chỉ cần lên trang download của Prometheus mà down thôi : https://prometheus.io/download/

Download và giải nén file chứa binary node_exporter.

# cd /opt/
# wget https://github.com/prometheus/node_exporter/releases/download/v0.18.1/node_exporter-0.18.1.linux-amd64.tar.gz
# tar -xzvf node_exporter-0.18.1.linux-amd64.tar.gz
# mv node_exporter-0.18.1.linux-amd64/node_exporter /usr/local/bin/

Kế đến ta tạo user trên hệ thống để chạy dịch vụ Node Exporter.

# useradd --no-create-home --shell /bin/false node_exporter

Khởi tạo file khởi động dịch vụ Prometheus Node Exporter trên Linux nền systemd (CentOS 7/Ubuntu 16.04+) nhé.

# vi /etc/systemd/system/node_exporter.service
[Unit]
Description=Node Exporter
Wants=network-online.target
After=network-online.target

[Service]
User=node_exporter
Group=node_exporter
Type=simple
ExecStart=/usr/local/bin/node_exporter

[Install]
WantedBy=default.target

Khởi động dịch vụ Node Exporter nào.

# systemctl daemon-reload
# systemctl enable node_exporter
# systemctl start node_exporter
# systemctl status node_exporter
● node_exporter.service - Node Exporter
Loaded: loaded (/etc/systemd/system/node_exporter.service; enabled; vendor preset: disabled)
Active: active (running) since Wed 2019-08-21 22:54:01 +07; 7s ago
Main PID: 5573 (node_exporter)
CGroup: /system.slice/node_exporter.service
└─5573 /usr/local/bin/node_exporter

Aug 21 22:54:01 cuongquach-linux-01 node_exporter[5573]: time="2019-08-21T22:54:01+07:00" level=info msg=" - sockstat" source="node_exporter.go:104"
Aug 21 22:54:01 cuongquach-linux-01 node_exporter[5573]: time="2019-08-21T22:54:01+07:00" level=info msg=" - stat" source="node_exporter.go:104"
Aug 21 22:54:01 cuongquach-linux-01 node_exporter[5573]: time="2019-08-21T22:54:01+07:00" level=info msg=" - textfile" source="node_exporter.go:104"
Aug 21 22:54:01 cuongquach-linux-01 node_exporter[5573]: time="2019-08-21T22:54:01+07:00" level=info msg=" - time" source="node_exporter.go:104"
Aug 21 22:54:01 cuongquach-linux-01 node_exporter[5573]: time="2019-08-21T22:54:01+07:00" level=info msg=" - timex" source="node_exporter.go:104"
Aug 21 22:54:01 cuongquach-linux-01 node_exporter[5573]: time="2019-08-21T22:54:01+07:00" level=info msg=" - uname" source="node_exporter.go:104"
Aug 21 22:54:01 cuongquach-linux-01 node_exporter[5573]: time="2019-08-21T22:54:01+07:00" level=info msg=" - vmstat" source="node_exporter.go:104"
Aug 21 22:54:01 cuongquach-linux-01 node_exporter[5573]: time="2019-08-21T22:54:01+07:00" level=info msg=" - xfs" source="node_exporter.go:104"
Aug 21 22:54:01 cuongquach-linux-01 node_exporter[5573]: time="2019-08-21T22:54:01+07:00" level=info msg=" - zfs" source="node_exporter.go:104"
Aug 21 22:54:01 cuongquach-linux-01 node_exporter[5573]: time="2019-08-21T22:54:01+07:00" level=info msg="Listening on :9100" source="node_exporter.go:170"

Kiểm tra port Node Exporter đang lắng nghe, mặc định là TCP 9100.

# netstat -natlp | grep 9100
tcp6 0 0 :::9100 :::* LISTEN 5573/node_exporter
tcp6 0 0 10.0.253.179:9100 10.0.253.166:35446 ESTABLISHED 5573/node_exporter

Nếu bạn có sử dụng firewall trên Linux, thì nên mở rule cho port TCP 9100. Ví dụ với iptables.

# iptables -I INPUT -p tcp --dport 9100 -j ACCEPT

Giờ thì Node Exporter đã chạy và theo nguyên tắc hoạt động thì Node Exporter sẽ xuất thông tin metric về hệ thống máy chủ Linux trên dịch vụ web với url ‘/metrics‘ và port mà nó đang lắng nghe. Bạn thử ‘curl‘ truy xuất url metrics là biết liền.

curl node exporter metrics
curl node exporter metrics
# curl -s http://10.0.253.179:9100/metrics | tail -n 20
# HELP process_resident_memory_bytes Resident memory size in bytes.
# TYPE process_resident_memory_bytes gauge
process_resident_memory_bytes 1.5872e+07
# HELP process_start_time_seconds Start time of the process since unix epoch in seconds.
# TYPE process_start_time_seconds gauge
process_start_time_seconds 1.56640284083e+09
# HELP process_virtual_memory_bytes Virtual memory size in bytes.
# TYPE process_virtual_memory_bytes gauge
process_virtual_memory_bytes 1.17714944e+08
# HELP process_virtual_memory_max_bytes Maximum amount of virtual memory available in bytes.
# TYPE process_virtual_memory_max_bytes gauge
process_virtual_memory_max_bytes -1
# 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"} 22
promhttp_metric_handler_requests_total{code="500"} 0
promhttp_metric_handler_requests_total{code="503"} 0

Cấu hình Target Node Exporter trên Prometheus Server

Giờ bạn cần khai báo máy chủ Linux đang chạy Node Exporter trong một Target trên Prometheus. Thêm địa chỉ IP của máy chủ Linux vào phần ‘targets‘ cùng port Node Exporter chạy 9100 TCP.

# vi /etc/prometheus/prometheus.yml

  - job_name: 'node_exporter_metrics'
    scrape_interval: 5s
    static_configs:
      - targets: ['10.0.253.20:9100']

Khởi động lại dịch vụ Prometheus.

# systemctl restart prometheus

Giờ bạn truy cập trang quản lý Prometheus và vào mục ‘Targets‘ xem máy chủ Linux (10.0.253.20) mà ta vừa thêm vào đã có trạng thái (State) là ‘up‘ hay chưa ? Nếu là ‘up‘ thì tức Prometheus đã có thể pull metrics từ Node Exporter đang cài trên máy chủ Linux này, tức ta đã monitor được.

target trong prometheus
target trong prometheus

Kế đến bạn có thể thử sử dụng Prometheus query một số metric liên quan đến máy chủ LinuxNode Exporter có hỗ trợ . Một số metric mẫu có thể query thử như :

node_memory_MemFree_bytes
node_cpu_seconds_total
node_filesystem_avail_bytes
node_load5
rate(node_cpu_seconds_total{mode="system"}[1m]) 
rate(node_network_receive_bytes_total[1m])

Trong hình là query thử với metric tên ‘node_load5‘.

query metric trên prometheus
query metric trên prometheus

Tổng kết

Vậy là bạn đã biết cách cài đặt dịch vụ Prometheus Node Exporter trên một máy chủ Linux. Từ đây Prometheus Server đã có thể giám sát máy chủ Linux thông qua cách pull metric từ web service Node Exporter listen trên port 9100.

Kế đến ở các bài viết khác, bạn sẽ học cách sử dụng Prometheus và Grafana để hiển thị dữ liệu monitor trên dashboard, rồi sử dụng Alertmanager để cấu hình các rule alert cảnh báo hệ thống.

Nguồn: https://cuongquach.com/

Previous articleHướng dẫn cài đặt Prometheus trên Linux
Next articleCài đặt Prometheus Alertmanager để gửi cảnh báo
Bạn đang theo dõi website "https://cuongquach.com/" nơi lưu trữ những kiến thức tổng hợp và chia sẻ cá nhân về Quản Trị Hệ Thống Dịch Vụ & Mạng, được xây dựng lại dưới nền tảng kinh nghiệm của bản thân mình, Quách Chí Cường. Hy vọng bạn sẽ thích nơi này !