Grafana 是大規模指標數據可視化展現的開源工具,廣泛應用於監控報警、數據分析。它可以支持多種數據源,包括 Graphite,Elasticsearch,CloudWatch,InfluxDB,OpenTSDB,Prometheus,MySQL,Postgres,Microsoft SQL Server (MSSQL)。
本次實驗所用到的服務:
服務 | 端口 | 說明 |
MySQL | 3306 | 數據庫 |
MySQL-exporter | 9104 | 用於監控MySQL的服務,作用為取MySQL的狀態 |
Grafana可視化監控 | 3000 | 基於zabbix的監控工具,用於監控報警、數據分析,本次實驗用於監控MySQL和主機狀態作為前端顯示 |
Prometheus監控 | 9090 | 通過普羅米修斯來監控主機狀態,CPU、swap空間、內存、線程數等 |
node_exporter | 9100 | 用於監控linux主機的狀態,通過此服務推送狀態給普羅米修斯 |
主機基礎監控效果圖:
MySQL狀態效果圖:
安裝配置:
由於使用的是雲主機,基本帶寬比較小,所以使用docker搭建相關服務
docker安裝zabbix-mysql
docker pull zabbix/zabbix-server-mysql docker run --name zabbix-server-mysql -e DB_SERVER_HOST="localhost" -e MYSQL_USER="root" -e MYSQL_PASSWORD="123456" -d zabbix/zabbix-server-mysql
查看zabbix啟動日志
docker logs -f zabbix-server-service
安裝zabbix自己的數據庫,由於需要監控主機的MySQL所有的業務,所以選用開其他端口
docker run -dit -p 3307:3306 --name zabbix-mysql --restart always -e MYSQL_DATABASE="zabbix" -e MYSQL_USER="zabbix" -e MYSQL_PASSWORD="123" -e MYSQL_ROOT_PASSWORD="123" mysql
安裝zabbix相關插件以及服務
docker run -dit -p 10051:10051 --name=zabbix-server-mysql --restart=always -e DB_SERVER_HOST="zabbix-mysql" -e MYSQL_DATABASE="zabbix" -e MYSQL_USER="zabbix" -e MYSQL_PASSWORD="123" -e MYSQL_ROOT_PASSWORD="123456" -e zabbix/zabbix-server-mysql docker run -p 80:80 --name zabbix-web-nginx-mysql --restart=always -e DB_SERVER_HOST="zabbix-mysql" -e MYSQL_DATABASE="zabbix" -e MYSQL_USER="zabbix" -e MYSQL_PASSWORD="123" -e MYSQL_ROOT_PASSWORD="123456" -e ZBX_SERVER_HOST="zabbix-server-mysql" zabbix/zabbix-web-nginx-mysql
docker下拉其他鏡像,ps 命令:docker pull grafana/grafana
REPOSITORY TAG CREATED SIZE docker.io/grafana/grafana latest 5 days ago 202 MB docker.io/prom/prometheus latest 6 days ago 185 MB docker.io/zabbix/zabbix-web-nginx-mysql latest 6 days ago 165 MB docker.io/zabbix/zabbix-server-mysql centos-latest 6 days ago 356 MB docker.io/zabbix/zabbix-server-mysql latest 6 days ago 68.1 MB docker.io/zabbix/zabbix-java-gateway latest 6 days ago 83.8 MB docker.io/mariadb latest 11 days ago 405 MB docker.io/mysql 5.7 12 days ago 447 MB docker.io/mysql latest 12 days ago 556 MB docker.io/prom/node-exporter latest 2 months ago 26 MB docker.io/prom/mysqld-exporter latest 22 months ago 17.5 MB
啟動Grafana
docker run -d --name grafana -p 3000:3000 -v /data/grafana:/var/lib/grafana grafana/grafana
啟動Prome / Prometheus
docker run -d -p 9090:9090 -v /opt/prometheus/prometheus.yml:/etc/prometheus/prometheus.yml prom/prometheus
其中兩個配置文件內容如下
[root@Huawei ~/ansible]# cat /opt/prometheus/prometheus.yml global: scrape_interval: 60s evaluation_interval: 60s scrape_configs: - job_name: prometheus static_configs: - targets: ['localhost:9090'] labels: instance: prometheus - job_name: linux static_configs: - targets: ['localhost:9100'] labels: instance: localhost - job_name: mysql_local static_configs: - targets: ['localhost:9104'] labels: instance: localhost [root@Huawei ~/ansible]# cat /etc/prometheus/prometheus.yml global: scrape_interval: 15s evaluation_interval: 15s scrape_configs: - job_name: 'prometheus' static_configs: - targets: ['localhost:9090'] - job_name: 'node_exporter' static_configs: - targets: ['localhost:9100'] - job_name: 'mysql_localhost' static_configs: - targets: ['localhost:9104']
啟動監控linux的node節點,用以監控linux狀態
docker run -d -p 9100:9100 \ -v "/proc:/host/proc:ro" \ -v "/sys:/host/sys:ro" \ -v "/:/rootfs:ro" \ prom/node-exporter
查看Linux狀態是否可以通
[root@Huawei ~]# curl http://localhost:9100/metrics % Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed 100 53542 0 53542 0 0 3541k 0 --:--:-- --:--:-- --:--:-- 3734k # HELP go_gc_duration_seconds A summary of the GC invocation durations. # TYPE go_gc_duration_seconds summary go_gc_duration_seconds{quantile="0"} 6.083e-06 go_gc_duration_seconds{quantile="0.25"} 7.459e-06 ··········· promhttp_metric_handler_requests_total{code="200"} 1411 promhttp_metric_handler_requests_total{code="500"} 0 promhttp_metric_handler_requests_total{code="503"} 0
啟動linux-mysql的node節點,用於監控主機mysql狀態
docker run -d --name mysql-exporter -p 9104:9104 -e DATA_SOURCE_NAME="grafana:123@(localhost:3306)/mysql" prom/mysqld-exporter
防火牆開放端口
firewall-cmd --add-port=9090/tcp --permanent firewall-cmd --add-port=9100/tcp --permanent firewall-cmd --add-port=9104/tcp --permanent
查看當前的端口狀態,這里實驗沒有開啟zabbix
[root@Huawei ~]# netstat -ntlp Active Internet connections (only servers) Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name tcp 0 0 0.0.0.0:3306 0.0.0.0:* LISTEN 10748/mysqld tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 954/sshd tcp6 0 0 :::9090 :::* LISTEN 2370/docker-proxy-c tcp6 0 0 :::9100 :::* LISTEN 24049/node_exporter tcp6 0 0 :::9104 :::* LISTEN 32604/docker-proxy- tcp6 0 0 :::3000 :::* LISTEN 10085/docker-proxy-
檢查當前MySQL接口是否可以通
curl http://localhost:9104/metrics % 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 go_gc_duration_seconds A summary of the GC invocation durations. # TYPE go_gc_duration_seconds summary go_gc_duration_seconds{quantile="0"} 9.832e-06 go_gc_duration_seconds{quantile="0.25"} 1.092e-05 go_gc_duration_seconds{quantile="0.5"} 1.1677e-05 go_gc_duration_seconds{quantile="0.75"} 1.227e-05 ············· promhttp_metric_handler_requests_total{code="200"} 1047 promhttp_metric_handler_requests_total{code="500"} 0 promhttp_metric_handler_requests_total{code="503"} 0
由此可見,當前linux狀態和MySQL狀態都是可以通的
當前查看Prometheus狀態
http://localhost:9090/targets
隨機測試主機狀態,查看Prometheus是否可以繪圖
由此可見,我們的服務均已部署成功,接下來登錄Grafana進行配置
測試是否已完成,數據庫連接成功
這里開始添加監控
上傳做好的視圖json文件
MySQL狀態成功顯示
這里推薦Prometheus的UID 8919