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

news2024/11/19 1:27:44
.
├── 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才监控正常,否则失败。
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=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=
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.coloradmin.cn/o/1867462.html

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

相关文章

使用新H5标签dialog,实现点击按钮显示分享链接弹出层交互功能

使用新H5标签&#xff0c;实现点击按钮显示分享链接弹出层交互功能 在现代网页开发中&#xff0c;使用新技术和标签来提升用户体验是非常重要的。今天&#xff0c;我们就来聊聊如何利用HTML5的<dialog>标签来实现一个简洁实用的分享链接功能。 在过去&#xff0c;我们通常…

golang——Gin框架及路由介绍

一. 框架介绍 Gin是一个轻量级的Go语言Web框架&#xff0c;它具有高性能和简洁的设计。由于其快速的路由匹配和处理性能&#xff0c;Gin成为Go语言中最受欢迎的Web框架之一。 特点&#xff1a; 快速和轻量&#xff1a;Gin框架的设计注重性能和效率&#xff0c;采用了一些优化措…

暗黑4PTR怎么参与测试 暗黑4第五赛季怎么参加PTR测试教程

暗黑破坏神4作为暗黑破坏神系列的最新作品&#xff0c;自从2023年上线就受到了一众好评。游戏是动作冒险类角色扮演游戏&#xff0c;游戏的背景设定在一个腐化的圣休瑞亚大陆上&#xff0c;玩家们可以五种职业中选择自己喜爱的游戏进行游戏。 暗黑破坏神4第五赛季现在已经开启P…

时序约束(一):时钟的约束

目录 一、时钟约束的目的 二、约束工程项目 三、主时钟和生成时钟 四、主时钟约束 五、生成钟约束 一、时钟约束的目的 之前的文章对时序分析的基本原理做了介绍&#xff0c;我们会发现时序分析离不开时钟信号。对于时序分析工具来说同样如此&#xff0c;分析工具需要我…

谈谈你对AQS的理解

AQS概述 AQS&#xff0c;全称为AbstractQueuedSynchronizer&#xff0c;是Java并发包&#xff08;java.util.concurrent&#xff09;中一个核心的框架&#xff0c;主要用于构建阻塞式锁和相关的同步器&#xff0c;也是构建锁或者其他同步组件的基础框架。AQS提供了一种基于FIF…

《mysql》--mysql约束

数据库约束 有的时候数据库中的数据是有一定要求的&#xff0c;有些数据认为是合法数据&#xff0c;有些是非法数据&#xff0c;如果靠人工检查显然是不靠谱的&#xff1b; 数据库会自动的对数据的合法性进行校验检查目的就是&#xff0c;保证数据中能够避免被插入/修改一些非…

刷盘,还是不刷盘,是一个问题 | 架构师之路重启

前几个有个朋友留言&#xff0c;问我说最近两年公号发读书感悟&#xff0c;职场感悟&#xff0c;AI实践居多了&#xff0c;发架构思路类的内容少了。 最近准备重启架构思路类的内容&#xff0c;且会保持一如既往的风格&#xff1a; 1. 希望引发大家思考&#xff0c;多讨论&…

docker安装与入门使用(适用于小白)

总结&#xff1a;Docker 是一个开源的容器化平台&#xff0c;旨在使开发、部署和运行应用程序的过程更加简单和高效。Docker 使用操作系统级虚拟化在单个主机上运行多个独立的容器。每个容器包含应用程序及其所有依赖项&#xff0c;确保在不同环境中具有一致的运行表现。 下面…

贪心算法——加工木棍(C++)

上大学&#xff0c;一天是一天&#xff0c;两天也是一天。 ——2024年6月27日 之前考试周断更了&#xff0c;今天重新开始&#xff01; 题目描述 有n根木棍&#xff0c;已知每根木棍的长度和重量。这些木棍在木工机器上加工&#xff0c;机器准备加工木棍需要一些时间&#xf…

ABB机器人示教器死机时如何重置?

ABB机器人示教器死机时如何重置&#xff1f; 若遇到机器人示教器死机或卡顿现象时&#xff0c;可尝试将示教器重置&#xff0c;具体方法可参考以下内容&#xff1a; 如下图所示&#xff0c;首先将机器人控制柜断电关机&#xff0c; 如下图所示&#xff0c;同时按住快捷键&…

2024年水利工程与交通运输国际学术会议(ICWCET 2024)

全称&#xff1a;2024年水利工程与交通运输国际学术会议(ICWCET 2024) 会议网址: http://www.icwcet.com 会议时间: 2024/6/25 截稿时间&#xff1a;2024/6/15 会议地点: 天津 投稿邮箱&#xff1a;icwcetsub-conf.com 投稿标题&#xff1a;ICWCET 2024ArticleTEL。 ★会议简介…

目标检测系列(二)yolov1的全面讲解

目录 1、网络结构 2、检测原理 3、制作训练正样本方法 4、损失函数 5、前向推理 6、模型缺限 YOLO的全称是you only look once&#xff0c;指只需要浏览一次就可以识别出图中的物体的类别和位置。YOLO被称为Region-free方法&#xff0c;相比于Region-based方法&#xff0…

GNU、Unix、Linux、Makefile、GCC、GDB、GPL、CentOS 7、Ubuntu之间的关系

全文总结 早期&#xff0c;Unix系统作为一类强大的操作系统&#xff0c;在计算领域奠定了基础。然而&#xff0c;出于对软件自由的追求&#xff0c;Richard Stallman在1983年发起了GNU项目&#xff0c;旨在创建一个完全自由的、与Unix兼容的操作系统。GNU项目不仅倡议软件自由…

Web自动化元素定位之xpath定位【超详细】

&#x1f345; 视频学习&#xff1a;文末有免费的配套视频可观看 &#x1f345; 点击文末小卡片&#xff0c;免费获取软件测试全套资料&#xff0c;资料在手&#xff0c;涨薪更快 Web自动化常见的定位方式 为什么要学习定位 1.让程序操作指定元素&#xff0c;就必须先找到此元…

金升阳电源被制裁,广州顶源电源模块可以完美替换

广州顶源电子科技股份有限公司,座落于国家高新技术开发区---广州科学城&#xff0c;是一家集研发、生产、销售及服务于一体的DC-DC&#xff0c;AC-DC电源的生产厂家。 公司通过了IATF16949汽车认证及ISO9001:2015质量管理体系认证。拥有专家级研发团队&#xff0c;产品研发经过…

农村经济与科技杂志社农村经济与科技编辑部2024年第8期目录

视点 数字经济驱动农业产业链升级路径研究——以河南省为例 王媛媛; 1-4 城乡融合视角下农村集体产权制度改革研究 齐建丽; 4-7 农业生态系统结构美建设内涵及实现路径 张鹏程; 8-13《农村经济与科技》投稿&#xff1a;cnqikantg126.com 农户宅基地退出政策加权…

2024 最新推广服务 API 推荐,助力业务腾飞

在数字化营销的浪潮中&#xff0c;API 服务正以其强大的功能和高效的特性&#xff0c;成为企业和开发者们实现精准推广、优化营销效果的得力助手。2024 年的今天&#xff0c;各种创新的 API 服务层出不穷&#xff0c;为广告投放、数据洞察等领域带来了前所未有的机遇。在接下来…

华为开发者调试工具使用介绍(MDC)

MDC的开发过程的三大工具&#xff1a;MMC、MDS、Mind Studio&#xff0c;这三个工具完成了开发过程中的配置文件编写、代码编写以及AI模型的开发三个任务。除了开发&#xff0c;MDC还准备了两个调试工具&#xff0c;用于使用过程中数据的查看等。这一些调试工具分别对映射MDC中…

简化部署流程——无线UWB如何实现自标定?

一.什么是UWB信标自标定&#xff1f; UWB&#xff08;超宽带&#xff09;自标定是指在UWB系统中&#xff0c;基站或节点能够自动识别和确定自己的位置&#xff0c;无需外部干预或手动输入其地理位置信息。这种技术主要利用系统内部的信号测量和算法来自动计算节点之间的距离以…

数据交换的桥梁:深入探索JSON序列化和反序列化

目录 JSON序列化 一、查看JSON文件&#xff0c;设置数据模板类 ​编辑 二、Newtonsoft.Json下载 三、代码理解 1.创建BatteryList的实例 2.初始化Batterys属性 3.添加Battery对象到Batterys列表中 4.完整的代码如下 四、运行结果展示 JSON反序列化 序列化是将对象或…