头像加载失败

阅读量:
评论数:

图片加载失败

Prometheus+Grafana 监控系统搭建

Tags: #MySQL #Grafana #Prometheus


前言

本文会手把手教学如何使用 Docker 搭建 Prometheus + Grafana 监控系统,实现对本机状态的监控(包括但不限于CPU、内存、磁盘使用情况),以及实现对 MySQL 数据库性能以及资源利用率的监控。

一、简介

1. Grafana是什么?

Grafana是一款用Go语言开发的开源数据可视化工具,可以做数据监控和数据统计,带有告警功能。具有以下特点:

Grafana 支持的数据源

2. Prometheus是什么?

Prometheus是开源的监控系统,与其他监控系统相比,具有易于管理,监控服务的内部运行状态,强大的数据模型,强大的查询语言PromQL,高效,可扩展,易于集成,可视化,开放性等众多功能。

2.1 Exporter

所有可以向Prometheus提供监控样本数据的程序都可以被称为一个Exporter。而Exporter的一个实例称为target,如下所示,Prometheus通过轮询的方式定期从这些target中获取样本数据:

Exporter的来源也分为两种,分别是社区提供的,包含数据库(MySQL Exporter, Redis Exporter等),消息队列( Kafka Exporter, RabbitMQ Exporter等),存储,HTTP服务,日志,监控服务等。另外就是用户自定义的Exporter,用户可以基于Prometheus提供的Client Library创建自己的Exporter程序。

2.2 MySQLD Exporter

Prometheus提供的MySQLD Exporter实现对MySQL数据库性能以及资源利用率的监控和度量。
本文将采用docker compose的方式部署Exporter。

二、开始

1. 安装docker-compose

请先确保自己的服务器中已安装docker和docker-compose。

直接前往 https://github.com/docker/compose/releases/ 下载最新的二进制文件,并放到 /usr/local/bin 下并重命名为 docker-compose

  1. wget https://github.com/docker/compose/releases/download/v2.33.1/docker-compose-linux-x86_64
  2. # 或者直接执行
  3. curl -L https://github.com/docker/compose/releases/download/v2.33.1/docker-compose-linux-x86_64 -o /usr/local/bin/docker-compose

赋予可执行权限

  1. chmod +x /usr/local/bin/docker-compose

并验证版本号

  1. docker-compose -v

2. 配置

新建一个目录,在目录下添加以下配置文件

2.1 docker-compose.yml

  1. version: '3.4'
  2. services:
  3. prometheus:
  4. image: prom/prometheus
  5. container_name: prometheus
  6. hostname: prometheus
  7. ports:
  8. - 9090:9090
  9. volumes:
  10. - ./prometheus.yml:/etc/prometheus/prometheus.yml
  11. prometheus-exporter:
  12. image: prom/node-exporter
  13. container_name: system-monitor
  14. hostname: system-monitor
  15. ports:
  16. - 9100:9100
  17. grafana:
  18. image: grafana/grafana
  19. container_name: grafana
  20. hostname: grafana
  21. ports:
  22. - 3000:3000
  23. volumes:
  24. - ./grafana.ini:/etc/grafana/grafana.ini

在这里我们将启动三个服务:

可以看到,文件中依赖了几个其他的文件:

其中,grafana.ini 可以建一个空文件,prometheus.yml 则得进行配置才能将 target 加入到 Prometheus 的监控中。

2.2 prometheus.yml

  1. global:
  2. scrape_interval: 10s
  3. scrape_configs:
  4. - job_name: node
  5. static_configs:
  6. - targets: ['system-monitor:9100'] # NOT localhost since we named the host of system-monitor in docker-compose file

在docker-compose.yml中声明了prometheus-exporter这个服务,我们需要进行配置以使 Prometheus 可以访问。

3. 运行

在当前目录下,执行 docker-compose up -d 启动 docker-compose.yml 中的三个服务。
如果一切正常,则可以在浏览器

3.1 搭建第一个仪表盘

3.1.1 设置数据源

进入 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 已经跟普罗米修斯说上话了。

3.1.2 导入 Dashboard

在 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的监控面板。

1. MySQL配置

预先假设你已经有现成的MySQL服务了。
你可以使用MySQL的root账号密码,也可以单独创建一个。

  1. # 创建数据库用户
  2. mysql> CREATE USER 'exporter'@'%' IDENTIFIED BY 'XXXXXXXX';
  3. # 可查看主从运行情况查看线程,及所有数据库。
  4. mysql> GRANT PROCESS, REPLICATION CLIENT, SELECT ON *.* TO 'exporter'@'%';
  5. mysql> flush privileges;

如果MySQL与本机不在同一个机器上,还需要确认MySQL允许远程连接。
MySQL的配置文件中 bind-address = 127.0.0.1 需要注释掉,此处不做详细展开。

2. 部署MySQLD Exporter

Prometheus提供的MySQLD Exporter实现对MySQL数据库性能以及资源利用率的监控和度量。

仍然采用docker compose的方式进行部署,修改前面的docker-compose.yml,在 services 中加入 mysqlexporter。其中,

  1. version: '3.4'
  2. services:
  3. ......
  4. mysqlexporter:
  5. image: prom/mysqld-exporter
  6. container_name: mysqlexporter
  7. hostname: mysqlexporter
  8. ports:
  9. - 9104:9104
  10. environment:
  11. - DATA_SOURCE_NAME=exporter:XXXXXXXX@(ip:port)/

然后在 prometheus.yml 中加入以下配置

  1. - job_name: mysql
  2. static_configs:
  3. - targets: ['mysqlexporter:9104']

运行以下命名重启服务(同时也启动了MySQLD Exporter)

  1. docker-compose down
  2. docker-compose up -d

访问 http://localhost:9090/targets ,确认 Traget 为 mysql 的数据源的 State 为 UP

3. 配置 MySQL 仪表盘

由于重启过,先前的数据源和面板配置都消失了(其实可以通过挂载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