Tags: #MySQL #Grafana #Prometheus
本文会手把手教学如何使用 Docker 搭建 Prometheus + Grafana 监控系统,实现对本机状态的监控(包括但不限于CPU、内存、磁盘使用情况),以及实现对 MySQL 数据库性能以及资源利用率的监控。
Grafana是一款用Go语言开发的开源数据可视化工具,可以做数据监控和数据统计,带有告警功能。具有以下特点:
Grafana 支持的数据源
Prometheus是开源的监控系统,与其他监控系统相比,具有易于管理,监控服务的内部运行状态,强大的数据模型,强大的查询语言PromQL,高效,可扩展,易于集成,可视化,开放性等众多功能。
所有可以向Prometheus提供监控样本数据的程序都可以被称为一个Exporter。而Exporter的一个实例称为target,如下所示,Prometheus通过轮询的方式定期从这些target中获取样本数据:
Exporter的来源也分为两种,分别是社区提供的,包含数据库(MySQL Exporter, Redis Exporter等),消息队列( Kafka Exporter, RabbitMQ Exporter等),存储,HTTP服务,日志,监控服务等。另外就是用户自定义的Exporter,用户可以基于Prometheus提供的Client Library创建自己的Exporter程序。
Prometheus提供的MySQLD Exporter实现对MySQL数据库性能以及资源利用率的监控和度量。
本文将采用docker compose的方式部署Exporter。
请先确保自己的服务器中已安装docker和docker-compose。
直接前往 https://github.com/docker/compose/releases/ 下载最新的二进制文件,并放到 /usr/local/bin 下并重命名为 docker-compose
wget https://github.com/docker/compose/releases/download/v2.33.1/docker-compose-linux-x86_64# 或者直接执行curl -L https://github.com/docker/compose/releases/download/v2.33.1/docker-compose-linux-x86_64 -o /usr/local/bin/docker-compose
赋予可执行权限
chmod +x /usr/local/bin/docker-compose
并验证版本号
docker-compose -v
新建一个目录,在目录下添加以下配置文件
version: '3.4'services:prometheus:image: prom/prometheuscontainer_name: prometheushostname: prometheusports:- 9090:9090volumes:- ./prometheus.yml:/etc/prometheus/prometheus.ymlprometheus-exporter:image: prom/node-exportercontainer_name: system-monitorhostname: system-monitorports:- 9100:9100grafana:image: grafana/grafanacontainer_name: grafanahostname: grafanaports:- 3000:3000volumes:- ./grafana.ini:/etc/grafana/grafana.ini
在这里我们将启动三个服务:
可以看到,文件中依赖了几个其他的文件:
其中,grafana.ini 可以建一个空文件,prometheus.yml 则得进行配置才能将 target 加入到 Prometheus 的监控中。
global:scrape_interval: 10sscrape_configs:- job_name: nodestatic_configs:- targets: ['system-monitor:9100'] # NOT localhost since we named the host of system-monitor in docker-compose file
在docker-compose.yml中声明了prometheus-exporter这个服务,我们需要进行配置以使 Prometheus 可以访问。
在当前目录下,执行 docker-compose up -d 启动 docker-compose.yml 中的三个服务。
如果一切正常,则可以在浏览器
进入 Grafana 后,从左侧栏找到 Data Source 即数据源选项。
进入之后 Add data source,选择 Prometheus 作为数据源
之后设置数据源 URL。请注意,Promethues 的工作原理是通过轮询一个 HTTP 请求来获取数据的,而 Grafana 在获取数据源的时候也是通过一个 HTTP 请求,因此这个地方你需要告诉 Grafana 你的 Prometheus 的数据端点是什么。
这里填入 http://prometheus:9090 就可以了。
你可能会问,为什么不是 localhost:9090 呢?原因是,我们用了 docker-compose 起的三个服务,可以把它们想象成三台独立的服务器,因此需要用一个域名来互相通信。我们在 docker-compose.yml 中设置的普罗米修斯服务器的名字就叫 prometheus,因此这里可以直接使用。

点保存后一定要确认出现 Data source is working 这个检测,这时表明你的 Grafana 已经跟普罗米修斯说上话了。
在 Grafana 里,仪表盘的配置可以通过图形化界面进行,但配置好的仪表盘是以 JSON 存储的。这也就是说,如果你把你的 JSON 数据分享出去,别人导入就可以直接导入同样的仪表盘(前提是你们的监测数据一样)。
对于我们的例子来说,因为我们用了 prometheus-exporter 也就是本机的系统信息监控,那么我们可以先找一个同样用了这个数据源的仪表盘。在 Grafana 网站上,可以找到很多别人已经做好的仪表,用来监测非常多标准化的服务。
Grafana 的仪表盘市场:https://grafana.com/grafana/dashboards
比如说针对以下一些服务的标准仪表盘就可以在这里找到
那么,这里我们就用一个标准的仪表盘:https://grafana.com/grafana/dashboards/1860
在左侧栏找到 Dashboards - Import,在出现的界面中填入 1860 即我们要导入的仪表盘编号即可。
填入你需要的信息,比如仪表盘名字、所属文件夹、对应数据源等
确认之后 Grafana 就会根据你的本机信息,生成类似 CPU 负载,内存和 I/O 之类的信息。
要注意的是,这里的信息真正监控的是你的 Docker 中的系统信息。如果你只给你的 Docker 分配 1 个核和 2G 内存,那么这里应该看到的就是 1 个核和 2G 内存。
上面我们实现了对本机状态的监控,而MySQL也是我们绝大多数程序员接触得最多的组件。这里再教如何配置MySQL的监控面板。
预先假设你已经有现成的MySQL服务了。
你可以使用MySQL的root账号密码,也可以单独创建一个。
# 创建数据库用户mysql> CREATE USER 'exporter'@'%' IDENTIFIED BY 'XXXXXXXX';# 可查看主从运行情况查看线程,及所有数据库。mysql> GRANT PROCESS, REPLICATION CLIENT, SELECT ON *.* TO 'exporter'@'%';mysql> flush privileges;
如果MySQL与本机不在同一个机器上,还需要确认MySQL允许远程连接。
MySQL的配置文件中 bind-address = 127.0.0.1 需要注释掉,此处不做详细展开。
Prometheus提供的MySQLD Exporter实现对MySQL数据库性能以及资源利用率的监控和度量。
仍然采用docker compose的方式进行部署,修改前面的docker-compose.yml,在 services 中加入 mysqlexporter。其中,
ip:port 改为对应MySQL数据库IP和端口。(ip:port)/后一定要保留/,后面还可以加上具体database name
version: '3.4'services:......mysqlexporter:image: prom/mysqld-exportercontainer_name: mysqlexporterhostname: mysqlexporterports:- 9104:9104environment:- DATA_SOURCE_NAME=exporter:XXXXXXXX@(ip:port)/
然后在 prometheus.yml 中加入以下配置
- job_name: mysqlstatic_configs:- targets: ['mysqlexporter:9104']
运行以下命名重启服务(同时也启动了MySQLD Exporter)
docker-compose downdocker-compose up -d
访问 http://localhost:9090/targets ,确认 Traget 为 mysql 的数据源的 State 为 UP
由于重启过,先前的数据源和面板配置都消失了(其实可以通过挂载Data避免数据丢失)。
所以需要重新添加数据源,在浏览器中访问 http://localhost:3000 打开 Grafana 地址,按照本文前面的步骤完成数据源配置。
接着,导入 Dashboard,在左侧栏找到 Dashboards - Import,在出现的界面中填入 7362 即我们要导入的仪表盘编号即可。
在 Grafana仪表盘市场 搜索MySQL,此处选择了第一个:https://grafana.com/grafana/dashboards/7362-mysql-overview/
同样填入仪表盘名字、所属文件夹、对应数据源等信息。
完事之后就可以通过仪表盘看到MySQL的监控数据面板啦
https://kalacloud.com/blog/grafana-with-prometheus-tutorial/
https://juejin.cn/post/7019643928970264583