.
├── 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監控結果