.
├── Grafana
│ ├── data
│ └── docker-compose.yaml
├── Mysql
│ ├── conf
│ ├── data
│ ├── docker-compose.yaml
│ └── logs
├── Mysqld_exporter
│ ├── conf
│ └── docker-compose.yaml
├── node-exporter
│ └── docker-compose.yaml
└── Prometheus├── data├── docker-compose.yaml└── yml
Prometheus
# Docker Compose 版本声明
version: '3'# 定义服务列表,这里定义了一个名为 prometheus 的服务
services:# 服务名称:prometheusprometheus:# 使用的Docker镜像,这里是 Prometheus 监控系统的官方镜像image: prom/prometheus:v2.38.0# 为容器指定一个名称container_name: prometheus# 定义卷挂载,将主机目录挂载到容器内的目录volumes:# 挂载 Prometheus 配置文件到容器内- ./yml/prometheus.yml:/etc/prometheus/prometheus.yml# 挂载数据目录,用于存储 Prometheus 的数据- ./data:/prometheus# 自定义命令来启动 Prometheus 容器command:# 指定 Prometheus 配置文件的位置- '--config.file=/etc/prometheus/prometheus.yml'# 指定 Prometheus 数据存储的路径- '--storage.tsdb.path=/prometheus'# 指定控制台库的目录- '--web.console.libraries=/usr/share/prometheus/console_libraries'# 指定控制台模板的目录- '--web.console.templates=/usr/share/prometheus/consoles'# 启用 Prometheus 的生命周期功能- '--web.enable-lifecycle'# 端口映射,将容器的9090端口映射到宿主机的9090端口ports:- "9090:9090"# 定义重启策略,除非明确停止,否则总是尝试重启容器restart: unless-stopped
global:scrape_interval: 15sscrape_configs:- job_name: 'prometheus'static_configs:- targets: ['192.168.88.128:9090']- job_name: 'grafana' static_configs:- targets: ['192.168.88.128:3000']# 采集MySQL监控数据- job_name: 'mysqld_exporter'static_configs:- targets: ['192.168.88.128:9104']# 采集node exporter监控数据,即linux- job_name: 'node-exporter'static_configs:- targets: ['192.168.88.128:9100']
Grafana
Grafana做持久化操作,使用MySQL,如果已有数据库直接使用,只需创建grafana库即可。
# Docker Compose 版本声明
version: '3'# 定义服务列表,这里定义了一个名为 grafana 的服务
services:# 服务名称:grafanagrafana:# 使用的Docker镜像,这里是 Grafana 的官方镜像,版本为 9.5.2image: grafana/grafana:9.5.2# 为容器指定一个名称container_name: grafana# 定义重启策略,除非明确停止,否则总是尝试重启容器restart: unless-stopped# 端口映射,将容器的3000端口映射到宿主机的3000端口,这是 Grafana 的默认端口ports:- "3000:3000"# 定义卷挂载,将主机目录挂载到容器内的目录volumes:# 将主机的数据目录挂载到 Grafana 的数据目录,用于数据持久化- "./data:/var/lib/grafana"# 将宿主机的 localtime 文件挂载到容器,保证容器内时间设置与宿主机一致- "/etc/localtime:/etc/localtime"# 设置环境变量,用于 Grafana 配置environment:# 开启 Grafana 的 Explore 功能GF_EXPLORE_ENABLED: "true"# 设置管理员用户的初始密码GF_SECURITY_ADMIN_PASSWORD: "zxcvbnm1"# 安装 Grafana 插件GF_INSTALL_PLUGINS: "grafana-clock-panel,grafana-simple-json-datasource,alexanderzobnin-zabbix-app"# 配置 Grafana 数据库连接信息,这里使用的是 MySQL 数据库GF_DATABASE_URL: "mysql://root:zxcvbnm1@192.168.88.128:3306/grafana"# 注释掉的设置,用于改变 Grafana 用户界面的语言# GF_VIEWER_LANGUAGE: "zh-Hans"# 定义依赖关系,确保在 Grafana 启动前 Prometheus 服务已经启动depends_on:- prometheus
MySQL
如果没有按照下面compose文件启动MySQL并创建库名。
# Docker Compose 版本声明
version: "3"# 定义服务列表,这里定义了一个名为 mysql 的服务
services:# 服务名称:mysqlmysql:# 使用的Docker镜像,这里是 MySQL 5.7 版本的官方镜像image: mysql:5.7# 为容器指定一个名称container_name: mysql# 定义重启策略,除非明确停止,否则总是尝试重启容器restart: unless-stopped# 定义卷挂载,将主机目录挂载到容器内的目录volumes:# 将主机的 my.cnf 配置文件挂载到容器的 MySQL 配置目录- "./conf/my.cnf:/etc/mysql/my.cnf"# 将主机的数据目录挂载到容器的 MySQL 数据目录,用于数据持久化- "./data:/var/lib/mysql"# 设置环境变量environment:# 设置时区TZ: Asia/Shanghai# 设置语言环境LANG: en_US.UTF-8# 设置 MySQL root 用户的密码MYSQL_ROOT_PASSWORD: zxcvbnm1# 注释掉的设置,如果需要创建并初始化一个数据库,可以取消注释并设置数据库名#MYSQL_DATABASE: "database"# 端口映射,将容器的3306端口映射到宿主机的3306端口,这是 MySQL 的默认端口ports:- "3306:3306"
[mysqld]
user=mysql # MySQL启动用户
default-storage-engine=INNODB # 创建新表时将使用的默认存储引擎
character-set-server=utf8mb4 # 设置mysql服务端默认字符集
pid-file = /var/run/mysqld/mysqld.pid # pid文件所在目录
socket = /var/run/mysqld/mysqld.sock # 用于本地连接的socket套接字
datadir = /var/lib/mysql # 数据文件存放的目录
#log-error = /var/log/mysql/error.log
#bind-address = 127.0.0.1 # MySQL绑定IP
symbolic-links=0
sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION # 定义mysql应该支持的sql语法,数据校验等!# 允许最大连接数
max_connections=1000# ================= ↓↓↓ mysql主从同步配置start ↓↓↓ =================# 同一局域网内注意要唯一
server-id=3306
# 开启二进制日志功能 & 日志位置存放位置`/var/lib/mysql`
#log-bin=mysql-bin
log-bin=/var/lib/mysql/mysql-bin
# binlog格式
# 1. STATEMENT:基于SQL语句的模式,binlog 数据量小,但是某些语句和函数在复制过程可能导致数据不一致甚至出错;
# 2. MIXED:混合模式,根据语句来选用是 STATEMENT 还是 ROW 模式;
# 3. ROW:基于行的模式,记录的是行的完整变化。安全,但 binlog 会比其他两种模式大很多;
binlog_format=ROW
# FULL:binlog记录每一行的完整变更 MINIMAL:只记录影响后的行
binlog_row_image=FULL
# 日志文件大小
# max_binlog_size=100M
max_binlog_size=100M
# 定义清除过期日志的时间(这里设置为7天)
expire_logs_days=7# ================= ↑↑↑ mysql主从同步配置end ↑↑↑ =================[mysql]
default-character-set=utf8mb4[client]
default-character-set=utf8mb4 # 设置mysql客户端默认字符集
Mysqld_exporter监控MySQL
# Docker Compose 版本声明
version: "3"# 定义服务列表,这里定义了一个名为 mysqld_exporter 的服务
services:# 服务名称:mysqld_exportermysqld_exporter:# 使用的 Docker 镜像,这里是 prom/mysqld-exporter 的最新版本image: prom/mysqld-exporter:latest# 为容器指定一个名称container_name: mysqld_exporter# 定义重启策略,除非明确停止,否则总是尝试重启容器restart: unless-stopped# 端口映射,将容器的 9104 端口映射到宿主机的 9104 端口ports:- "9104:9104"# 自定义命令行参数,用于配置 mysqld-exportercommand:# --mysqld.username 指定连接到 MySQL 服务器的用户名及密码# --mysqld.address 指定 MySQL 服务器的地址和端口- "--mysqld.username=root:zxcvbnm1"- "--mysqld.address=192.168.88.128:3306"
访问:http://192.168.88.128:9104/metrics
mysql_up 值为1才监控正常,否则失败。
填坑1:
docker-compose中网上很多使用一下参数
entrypoint:DATA_SOURCE_NAME: "mysqld_exporter:zxcvbnm1@(192.168.88.128:3306)/"然后就一直报一个错误:
ts=2024-06-25T06:34:59.852Z caller=config.go:150 level=error msg="failed to validate config" section=client err="no user specified in section or parent"
ts=2024-06-25T06:34:59.852Z caller=mysqld_exporter.go:225 level=info msg="Error parsing host config" file=.my.cnf err="no configuration found"
填坑2:
docker-compose中网上也有使用映射配置文件操作
cat my.cnf
[client]
user=root
password=zxcvbnm1
host=192.168.88.128
port=3306compose文件映射- "./conf/my.cnf:/usr/local/mysqld_exporter/.my.cnf"command: "--config.file=/etc/mysqld_exporter/.my.cnf"都会出现这个错误:
ts=2024-06-25T06:34:59.852Z caller=config.go:150 level=error msg="failed to validate config" section=client err="no user specified in section or parent"
ts=2024-06-25T06:34:59.852Z caller=mysqld_exporter.go:225 level=info msg="Error parsing host config" file=.my.cnf err="no configuration found"
费了大劲找到的解决方式:
https://discuss.prometheus.io/t/docker-compose-mysql-exporter-start-error/1734
Node-exporter
version: "3"services:node-exporter:image: prom/node-exporter:v1.3.1container_name: node-exporterrestart: unless-stoppedports:- "9100:9100"
所有compose文件启动之后,访问Prometheus http://192.168.88.128:9090/targets?search=
如上显示,所有组件全部正常启动。
- grafana访问地址:http://192.168.88.128:3000/ 默认登录账号密码:admin/zxcvbnm1
- prometheus访问地址:http://192.168.88.128:9090/targets?search=
- exporter访问地址:http://192.168.88.128:9100/metrics
- Mysqld_exporter访问地址:http://192.168.88.128:9104/metrics
配置数据源
Grafana配置prometheus数据源,登录成功后点击添加数据源。
配置完成之后导入监控模板
grafana面板资源:https://grafana.com/grafana/dashboards
Mysqld_exporter:https://grafana.com/grafana/dashboards/14057-mysql/
node-exporter:https://grafana.com/grafana/dashboards/8919
MySQL监控结果
linux监控结果