Docker-compose 实现Prometheus+Grafana监控MySQL及Linux主机

.
├── 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才监控正常,否则失败。
image.png
填坑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=
image.png
如上显示,所有组件全部正常启动。

  1. grafana访问地址:http://192.168.88.128:3000/ 默认登录账号密码:admin/zxcvbnm1
  2. prometheus访问地址:http://192.168.88.128:9090/targets?search=
  3. exporter访问地址:http://192.168.88.128:9100/metrics
  4. Mysqld_exporter访问地址:http://192.168.88.128:9104/metrics
配置数据源

Grafana配置prometheus数据源,登录成功后点击添加数据源。
prometheus.gif
配置完成之后导入监控模板
grafana面板资源:https://grafana.com/grafana/dashboards
Mysqld_exporter:https://grafana.com/grafana/dashboards/14057-mysql/
node-exporter:https://grafana.com/grafana/dashboards/8919

导入.gif
MySQL监控结果

mysql.gif
linux监控结果

Linux.gif

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/35562.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

HarmonyOS应用开发学习经验

一、HarmonyOS学习官网 开发者能力认证 HarmonyOS应用开发者基础认证6月之前的学习资源官网已经关闭过期,大家不要慌,官方更新了最新资源,但是,对于之前没有学习完的学员不友好,存在知识断片的现象,建议官…

如何理解:业务架构、应用架构、数据架构、技术架构与系统和复杂度

关于系统的理解 1.1 系统的概述 随着人类社会的发展,人们面对越来越多的规模巨大、关系复杂、参数众多地复杂问题,这些问题的复杂度已经远远超出人类的理解能力,系统论就是为了分析和解决这些问题而生。我们平时接触的计算机系统包括软件系统…

ChatGPT的Mac客户端正式发布了!Mac用户有福了

ChatGPT的Mac客户端正式发布了!Mac用户有福了 🎉 大家好,我是猫头虎,科技自媒体博主。今天我带来了一个超级重磅的消息 📢,就是 ChatGPT 的客户端终于来了!这对我们所有 Mac 用户,尤…

2024全国大学生信息安全竞赛(ciscn)半决赛(华中赛区)Pwn题解

简介 前段时间赛前准备把ciscn东北赛区、华南赛区、西南赛区半决赛的题都复现完了。 可惜遇到了华东北赛区的离谱平台和离谱pwn出题人: 假的awdp(直接传🐎到靶机,然后连上去cat /flag.txt即可)题型分布不合理&#…

当前的网安行业绝对不是高薪行业

昨天,面试了一个刚毕业两年的同学小A。第一学历为某大专,第二学历为某省地区的本科院校。面试过程表现一般偏下,但动不动就要薪资15K 这个人,我当场就PASS了。主要原因是,并非是否定小A同学的能力,而是他…

VSCode运行前端项目-页面404

背景: 通过VSCode运行前端本地项目,运行成功后打开本地链接:http://1x.xxx.x.xxx:9803/ ,发现打开的页面重定向到404:http//1xx.xxx.x.xxx:9803/404; 并且控制台出现:Failed to load resource: …

win10修改远程桌面端口,Windows 10下修改远程桌面端口及服务器关闭445端口的操作指南

Windows 10下修改远程桌面端口及服务器关闭445端口的操作指南 一、修改Windows 10远程桌面端口 在Windows 10系统中,远程桌面连接默认使用3389端口。为了安全起见,建议修改此端口以减少潜在的安全风险。以下是修改远程桌面端口的步骤: 1. 打…

IMX6ULL SD卡启动uboot+kernel+rootfs

目录 1. 背景说明 2.SD卡启动 2.1准备条件 2.2 对SD卡分区格式化 2.3 制作sd卡镜像 3.效果测试 1. 背景说明 网络上绝大数教程,教大家把uboot烧录到SD卡,然后uboot启动后,通过TFTP下载kernel和设备树,然后通过nfs挂载文件系…

ultralytics官方更新 | 添加YOLOv10到ultralytics

💡💡💡本专栏所有程序均经过测试,可成功执行💡💡💡 专栏目录:《YOLOv8改进有效涨点》专栏介绍 & 专栏目录 | 目前已有40篇内容,内含各种Head检测头、损失函数Loss、…

【C++】类和对象(六)

文章目录 二、static成员概念面试题一个题目 三、友元友元函数说明 友元类 四、内部类(了解)概念:注意:特性: 五、匿名对象 书接上回: 【C】类和对象(五)隐式类型转换 二、static成员 01_31 03 12 01 概…

idea项目推送gitee/github

选择需要的项目创建本地Git仓库 添加到暂存区 第一次提交 或者点击这里 写备注并commit 推送远程仓库 填写地址 解决上图警告 右键打开项目,输入 git pull origin master –allow-unrelated-historiesgit push -u origin master -f推送成功 idea项目推送github及克…

怎么用韩语说帮忙更合体,柯桥零基础韩语培训

1. **详细解释:** - **标准写法与音译:** - **돕다**(读作 dop-da):动词“帮助”。 - **도와주다**(读作 do-wa-ju-da):动词“帮忙”,字面意思是“给予帮助”。 - **도움…

PMP证书在国内已经泛滥了,大家怎么看?

目前,越来越多的人获得了PMP证书。自1999年PMP引入中国以来,全国累计PMP考试人数接近60万人次,通过PMP认证的人数约为42万人。虽然这个数据看起来很大,但绝对不能说是过多。 首先,PMP在中国并不普遍。根据美国项目管理…

【源码+文档+调试讲解】灾害应急救援平台

摘 要 灾害应急救援平台的目的是让使用者可以更方便的将人、设备和场景更立体的连接在一起。能让用户以更科幻的方式使用产品,体验高科技时代带给人们的方便,同时也能让用户体会到与以往常规产品不同的体验风格。 与安卓,iOS相比较起来&…

深度学习项目实例(一)—— 实时AI换脸项目

一、前言 人工智能(AI)技术的快速发展为各个领域带来了革命性的变化,其中之一就是人脸识别与图像处理技术。在这之中,AI换脸技术尤其引人注目。这种技术不仅在娱乐行业中得到广泛应用,如电影制作、视频特效等&#xf…

目前公认最好用充电宝!四款高性价比充电宝推荐,一文看懂!

当我们在旅行途中,手机和相机等设备必不可少。长时间使用这些设备,电量很容易耗尽。此时,充电宝就能派上用场,让我们在欣赏美景、记录美好时光的同时,不再担心电量不足。特别在假期出游的时候在我们玩的特别尽兴的时候…

【C++】关于虚函数的理解

深入探索C虚函数:原理、应用与实例分析 一、虚函数的原理二、虚函数的应用三、代码实例分析四、总结 在C面向对象编程的世界里,虚函数(Virtual Function)扮演着至关重要的角色。它不仅实现了多态性这一核心特性,还使得…

红酒与珠宝:璀璨与醇香的奢华交响,双重诱惑难挡

在璀璨的灯光下,红酒与珠宝各自闪耀着迷人的光芒,它们如同夜空中的繁星,交相辉映,共同演绎着奢华的双重诱惑。今天,就让我们一起走进这个充满魅力的世界,感受红酒与珠宝带来的无尽魅力。 首先,让…

基于STM32+ESP8266打造智能家居温湿度监控系统(附源码接线图)

摘要: 本文将介绍如何使用STM32单片机、ESP8266 Wi-Fi模块和Python Flask框架构建一个完整的物联网系统,实现传感器数据采集、无线传输、云端存储及Web可视化展示。 关键词: STM32, ESP8266, 传感器, Flask, 物联网, 云平台, 数据可视化 1. 系统概述 本系统以STM…

Spring底层原理之proxyBeanMenthod实例 动态代理 反射 Bean的拦截

proxyBeanMenthod 假设我们要进行一个系统的二次开发 然后第一次开发我们实用的是XML声明bean 二次开发的时候要用注解 我们如何把bean都加载上来呢 我们首先创建一个全新的配置类 package com.bigdata1421.config;public class SpringConfig32 { } 我们创建一个APP 加载…