.
├── 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:
# 服务名称:prometheus
prometheus:
# 使用的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: 15s
scrape_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:
# 服务名称:grafana
grafana:
# 使用的Docker镜像,这里是 Grafana 的官方镜像,版本为 9.5.2
image: 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:
# 服务名称:mysql
mysql:
# 使用的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_exporter
mysqld_exporter:
# 使用的 Docker 镜像,这里是 prom/mysqld-exporter 的最新版本
image: prom/mysqld-exporter:latest
# 为容器指定一个名称
container_name: mysqld_exporter
# 定义重启策略,除非明确停止,否则总是尝试重启容器
restart: unless-stopped
# 端口映射,将容器的 9104 端口映射到宿主机的 9104 端口
ports:
- "9104:9104"
# 自定义命令行参数,用于配置 mysqld-exporter
command:
# --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=3306
compose文件映射
- "./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.1
container_name: node-exporter
restart: unless-stopped
ports:
- "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监控结果