使用docker部署Prometheus和Grafana去监控mysql和redis

时间:2024-11-11 08:12:20

自动化性能监控系统安装部署

相关工具的安装部署

服务工具分配

服务器 工具 端口
10.0.20.9 grafana 3000
10.0.20.9 prometheus 9090
10.0.20.10 mysql 3306
10.0.20.10 mysql-exporter 9104
10.0.20.10 redis 3306
10.0.20.10 redis_exporter 9121

使用docker-compose安装prometheus

先拉取prometheus的镜像

# 也可以使用docker pull prom/prometheus:v2.54.1(使用后下文配置信息里的镜像名也要跟着调整)
docker pull prom/prometheus:v2.54.1

在指定的目录下创建docker-compose.yml配置文件和prometheus目录

在这里插入图片描述

docker-compose.yml配置信息如下

services:
  prometheus:
    image: prom/prometheus:v2.54.1 # 指定镜像文件
    container_name: 'prometheus'	# 给容器命名
    volumes:
      - ./prometheus/:/etc/prometheus/		# 映射prometheus的配置文件
      - /etc/localtime:/etc/localtime:ro	# 让容器去使用宿主机的时间,保持和宿主机的时间一致
    ports:
      - '9090:9090'	# 映射端口

然后在prometheus目录下创建prometheus.yml配置文件,设置抓取性能数据任务配置

在这里插入图片描述

prometheus.yml配置文件为

global:
  scrape_interval: 15s  # 数据抓取间隔

scrape_configs:
  - job_name: 'prometheus'
    static_configs:
      - targets: ['10.0.20.9:9090']	# 普罗米修斯的访问地址

启动

先回到docker-compose.ym配置文件所在的目录下

在这里插入图片描述

执行命令

docker-compose up -d

在这里插入图片描述

启动成功

在这里插入图片描述

防火墙开放端口限制之后就可以访问了

访问地址:http://10.0.20.9:9090

在这里插入图片描述

使用docker-compose安装grafana

拉取grafana镜像

# 也可以使用docker pull grafana/grafana:11.2.3(使用后下文配置信息里的镜像名也要跟着调整)
docker pull grafana/grafana:11.2.3

在指定的目录下配置docker-compose.yml配置文件和grafana目录

在这里插入图片描述

docker-compose.yml配置信息如下(在部署了prometheus的基础上调整)

services:
  prometheus:
    image: prom/prometheus:v2.54.1
    container_name: 'prometheus'
    volumes:
      - ./prometheus/:/etc/prometheus/
      - /etc/localtime:/etc/localtime:ro
    ports:
      - '9090:9090'
  grafana:
    image: grafana/grafana:11.2.3
    container_name: 'grafana'
    volumes:
      - ./grafana/config/grafana.ini:/etc/grafana/grafana.ini	# 配置grafana的报警邮件发送服务
      - ./grafana/provisioning/:/etc/grafana/provisioning/	# 映射grafana的配置文件
      - /etc/localtime:/etc/localtime:ro	# 让容器去使用宿主机的时间,保持和宿主机的时间一致
    ports:
      - '3000:3000'	# 端口映射
    env_file:
      - ./grafana/config.monitoring	# 设置grafana的登录配置信息
    depends_on:
      - prometheus	# 设置grafana依赖于prometheus,需要在prometheus之后去启动

配置config.monitoring(grafana的认证配置)

# 设置grafana管理界面admin用户的登录密码
GF_SECURITY_ADMIN_PASSWORD=123456
# 控制grafana的管理界面不允许注册
GF_USERS_ALLOW_SIGN_UP=false

在这里插入图片描述

配置grafana的配置文件datasource.yml,用于设定其展示数据的数据来源

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

配置信息如下

apiVersion: 1

deleDatasources:
  - name: Prometheus
    orgId: 1

datasources:
  - name: Prometheus
    type: prometheus
    access: proxy
    orgId: 1
    url: http://10.0.20.9:9090
    basicAuth: false
    isDefault: true
    version: 1
    editable: true

设置预警通知邮件配置文件grafana.ini

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

配置信息如下

[smtp]
# 是否开启邮件发送
enabled = true
# 发送服务器(固定的)
host = smtp.qq.com:465
# 发送者的邮箱账号(smtp账号)
user = 834363368@qq.com
# 授权码(smtp账号的授权码)
password = 66666666666
# 接收预警邮件的邮箱
from_address = 456789@qq.com
# 接收预警邮件的用户名称
from_name = 云泽

安装对应中间件的exporter向prometheus提供性能数据

安装redis_exporter收集redis性能数据

拉取redis_exporter镜像

docker pull oliver006/redis_exporter:v1.64.1

运行redis_exporter

docker run -d -p 9121:9121 oliver006/redis_exporter:v1.64.1 --redis.addr redis://10.0.20.10:6379 --redis.password 123456

容器启动成功之后,访问 http://10.0.20.10:9121/metrics 打印出redis相关的信息就说明redis_exporter安装成功。

在这里插入图片描述

安装mysql-exporter收集mysql性能数据

拉取mysql-exporter镜像

docker pull prom/mysqld-exporter:v0.15.1

在mysql上创建mysql-exporter专属的账号exporter,只需要查询权限即可。

然后配置mysql-exporter访问mysql数据库信息my.cnf

[client]
host=10.0.20.10
user=exporter
password=123456

运行mysql-exporter

ocker run -d --name mysql-master-exporter -p 9104:9104 -v /opt/my.cnf:/etc/mysql/my.cnf prom/mysqld-exporter:v0.15.1 --config.my-cnf=/etc/mysql/my.cnf

启动之后访问http://10.0.20.10:9104/metrics

请求后打印出如下mysql相关信息就是成功

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

接下来去配置下prometheus,在原prometheus.yml配置文件里,追加redis的性能数据抓取任务

编辑prometheus.yml (该文件按上文所述,在/opt/docker/docker-monitor/prometheus/prometheus.yml)

global:
  scrape_interval: 10s  # 数据抓取间隔

scrape_configs: 
  - job_name: 'prometheus'
    static_configs: 
      - targets: ['10.0.20.9:9090']
      
	- job_name: 'mysql-master'
    static_configs:
      - targets: ['10.0.20.10:9104']
        labels: 
          instance: mysql-master

  - job_name: 'redis-signle'
    static_configs:
      - targets: ['10.0.20.10:9121']
        labels:
          instance: redis-signle

重新启动Prometheus + Grafana

进入到10.0.20.9服务器的/opt/docker/docker-monitor目录,也就是docker-compose.yml配置文件所在地址

在这里插入图片描述

执行如下命令启动grafana和prometheus

docker-compose up --force-recreate -d

–force-recreate:意思是关闭删除旧的容器,重新创建新的容器并运行

登录配置Grafana

访问地址:http://10.0.20.9:3000/login

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

导入的json文件如下

redis-dashboard.json

mysql-dashboard.json

下载json文件后,逐个导入到grafana的dashboards里面即可

mysql性能监控页面

在这里插入图片描述

mysql如果想监控到MySQL Slow Queries也就是慢查询,就需要在mysql的配置文件里开启慢查询日志记录

#开启慢查询日志
slow_query_log = 1

#指定慢查询日志文件的位置
slow_query_log_file = /var/log/mysql/slow-query.log

#设置慢查询的时间阈值(单位:秒)
long_query_time = 2

redis性能监控页面

在这里插入图片描述

redis监控要看到memory usagea数据,就需要在运行redis的时候,在redis的redis.conf里面添加如下配置:

#设置redis的最大内存

maxmemory 1024M

如果docker拉取镜像失败超时,可参考如下两篇文章,对应两种解决方案

方案一:轻松解决Docker拉取镜像失败问题
方案二:GitHub Actions + 阿里云解决Docker镜像拉取难题,实现镜像*