Giám sát máy chủ Linux với Prometheus Node Exporter – Cuongquach.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,…
Contents
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.

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.

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 -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.

Kế đến bạn có thể thử sử dụng Prometheus query một số metric liên quan đến máy chủ Linux mà Node 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‘.

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/