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

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

相关工具的安装部署

服务工具分配

服务器 工具 端口
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的镜像

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

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

docker-compose.yml配置信息如下

yaml 复制代码
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配置文件为

ya 复制代码
global:
  scrape_interval: 15s  # 数据抓取间隔

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

启动

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

执行命令

shell 复制代码
docker-compose up -d

启动成功

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

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

使用docker-compose安装grafana

拉取grafana镜像

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

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

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

yaml 复制代码
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的认证配置)

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

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

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

配置信息如下

yaml 复制代码
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

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

配置信息如下

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镜像

shell 复制代码
docker pull oliver006/redis_exporter:v1.64.1

运行redis_exporter

shell 复制代码
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镜像

shell 复制代码
docker pull prom/mysqld-exporter:v0.15.1

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

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

shell 复制代码
[client]
host=10.0.20.10
user=exporter
password=123456

运行mysql-exporter

shell 复制代码
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)

yaml 复制代码
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

shell 复制代码
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镜像拉取难题,实现镜像自由

相关推荐
熬了夜的程序员3 分钟前
Linux 下的 AWK 命令详细指南与示例
linux·运维·服务器
安静读书40 分钟前
持续集成与持续部署:CI/CD简介
运维·ci/cd
命里有定数1 小时前
Ubuntu问题 -- 通过远程修改文件配置ubuntu服务器的静态IP (不需要到服务器现场) (通过NetworkManager)
运维·服务器·tcp/ip·ubuntu·网卡
AI青年志1 小时前
【linux】服务器加装硬盘后如何将其设置为独立硬盘使用
linux·运维·服务器
安科瑞刘鸿鹏1 小时前
光伏运维监测系统在“双碳”环境中的应用
运维·服务器·网络·物联网·能源
2301_775765521 小时前
网络编程day2.2~day3——TCP并发服务器
运维·服务器
Mango0000001 小时前
SEO网站都用哪里的服务器
运维·服务器
大虾别跑1 小时前
docker安装zabbix +grafana
docker·zabbix·grafana
运维老司机2 小时前
Jenkins迁移数据目录
运维·jenkins
奈斯ing2 小时前
【Oracle篇】SQL性能优化实战案例(从15秒优化到0.08秒)(第七篇,总共七篇)
运维·数据库·sql·oracle·性能优化