Hướng dẫn setup Prometheus + Grafana
để monitor dịch vụ

Trong bài viết này, mình sẽ hướng dẫn các bạn cách xây dựng một hệ thống monitor các dịch vụ trên Linux dựa trên Prometheus và Grafana.

Note: Đây là bài cộng tác giữa WikiVPS và CloudCraft. Cám ơn WikiVPS đã hỗ trợ trong quá trình thực hiện bài viết.

Giới thiệu sơ lược về Prometheus và Grafana

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.

Grafana

Grafana là một giao diện/dashboard theo dõi hệ thống (opensource), hỗ trợ rất nhiều loại dashboard và các loại graph khác nhau để người quản trị dễ dàng theo dõi.

Grafana có thể truy xuất dữ liệu từ Graphite, Elasticsearch, OpenTSDB, Prometheus và InfluxDB. Grafana là một công cụ mạnh mẽ để truy xuất và biểu diễn dữ liệu dưới dạng các đồ thị và biểu đồ.

prometheus-grafana-1Mô hình ta sẽ thực hiện trong bài này

Trong bài này, ta sẽ thực hiện theo dõi 1 server chạy DB MySQL và thực hiện cài đặt máy chủ prometheus trên monitor host và dùng Grafana để biểu diễn dữ liệu cho người dùng.

Data sẽ được Prometheus trên Master scrape về từ node Slave và được lưu trữ ở Master node. Grafana sẽ truy xuất dữ liệu trực tiếp từ Prometheus.

Set up Prometheus + Grafana cần phải setup theo mô hình Master – Slave, hướng dẫn sẽ được chia làm 2 phần tương ứng. Bài viết giả sử bạn đã có sẵn 2 host và đã cài đặt sẵn MySQL trên node Slave.

Master Node

Cài đặt Prometheus trên node Master

Tải source của Prometheus và cấu hình file config của prometheus

Tiếp tục thực hiện các bước cài đặt Prometheus

Tạo file Systemd cho Prometheus

Ta cần phải tạo 1 file systemd để tự động restart lại service khi bị crash hoặc reboot server. Service monitor mà để bị die thì chuối lắm :))))

Restart lại service prometheus và enable tính năng auto restart của prometheus

Truy cập vô http://master_IP:9090 để kiểm tra thử, xong rồi thì nhớ đóng firewall lại

Monitored Nodes

Cài đặt 2 agent trên node được monitor

Có 2 loại agent, loại Node agent dùng để kiểm tra các thông số cơ bản của 1 server như: RAM, CPU, Disk, Network.

Và loại thứ 2 được nhắc tới trong bài này là mysql agent dùng để monitor trực tiếp mysql. Cần phải tạo account mysql cho prometheus agent truy xuất được thông tin từ mysql.

Với loại agent cho MySQL thì ta cần phải tạo 1 tài khoản MySQL có quyền read table performance_schema

Đăng nhập vào MySQL bằng acc root và tạo 1 tài khoản như sau:

Cài đặt Grafana

Tải gói cài đặt của Grafana về

Tải bộ dashboard của MySQL

Start service Grafana-Server

Hướng dẫn add monitor trên Grafana

Import data source

prometheus-grafana-2

Import data source là Prometheus, do đang chạy chung host nên import http://localhost:9090

prometheus-grafana-3

Do chung host nên không cần thiết lập chứng thực và SSL, nếu chạy khác host thì cần set chứng thực SSL để đảm bảo an toàn.

Tạo Graph và Queryprometheus-grafana-4

Chọn WikiVPS Dashboard => Add New Panel => Graph

prometheus-grafana-5Chọn Data Source là WikiVPS => Điền câu query, ở đây là tính số lần sort trong 1 phútprometheus-grafana-6Điền câu query xong thì chọn nút Save trên góc và quay lại màn hình chính

Một số mẫu câu query trên Grafana

Số lần sort table của MySQL trong 1 phút

Số thread đang chạy của MySQL

Tổng số câu query phân loại theo command

Load của Linux theo phút

Tổng network traffic của server theo phút

Slow query của MySQL

Tham khảo

https://github.com/prometheus/node_exporter
https://github.com/prometheus/mysqld_exporter
https://www.percona.com/blog/2016/02/29/graphing-mysql-performance-with-prometheus-and-grafana/
https://blog.serverdensity.com/how-to-monitor-mysql/
https://www.slideshare.net/YoungHeonKim1/mysql-monitoring-using-prometheus-grafana

LEAVE A REPLY

Please enter your comment!
Please enter your name here