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:
  # 服务名称: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.mfbz.cn/a/769030.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

RPA 第一课

RPA 是 Robotic Process Automation 的简称,意思是「机器人流程自动化」。 顾名思义,它是一种以机器人(软件)来替代人,实现重复工作自动化的工具。 首先要说一句,RPA 不是 ChatGPT 出来之后的产物&#x…

推荐三款常用接口测试工具!

接口测试是软件开发中至关重要的一环,通过对应用程序接口进行测试,可以验证其功能、性能和稳定性。随着互联网和移动应用的快速发展,接口测试变得越来越重要。为了提高测试效率和质量,开发人员和测试人员需要使用专业的接口测试工…

自然语言处理学习(2)基本知识 文本预处理+文本数据分析+文本增强

conda activate DL conda deactivate课程链接 一 一些包的安装 1 stanfordcorenlp 在anoconda prompt 里面:进入自己的conda环境,pip install stanfordcorenlp 进入方式 相关包下载,Jar包我没有下载下来,太慢了,这个…

提高Python爬虫的匿名性:代理ip的配置策略

在数字化时代的今天,网络数据采集已成为获取信息的重要手段,尤其在竞争激烈的商业环境中。Python作为一种强大的编程语言,广泛应用于开发各种数据爬虫来自动化地抓取网络信息。然而,随着网站安全意识的提高,越来越多的…

牛客小白月赛97

A.三角形 判断等边三角形&#xff0c;题不难&#xff0c;代码如下&#xff1a; #include <iostream>using namespace std;int a[110];int main() {int n;cin >> n;int x;int mx 0;for(int i 1; i < n; i){cin >> x;mx max(mx, x);a[x];}for(int i 1…

Java OnVif应用PTZ控制

研究OnVif在Java程序中应用&#xff0c;在此作记录&#xff0c;onvif-java-lib/release at master milg0/onvif-java-lib GitHub&#xff0c;在此连接中下载jar&#xff0c;并在项目中引用&#xff0c;该jar封装很好&#xff0c;可以方便快速完成功能 1.登录OnVif 2.PTZ控制…

【大数据】—美国交通事故分析(2016 年 2 月至 2020 年 12 月)

引言 在当今快速发展的数字时代&#xff0c;大数据已成为我们理解世界、做出决策的重要工具。特别是在交通安全领域&#xff0c;大数据分析能够揭示事故模式、识别风险因素&#xff0c;并帮助制定预防措施&#xff0c;从而挽救生命。本文将深入探讨2016年2月至2020年12月期间&…

反射(通俗易懂)

一、反射(Reflection) 反射就是:加载类&#xff0c;并允许以编程的方式解剖类中的各种成分(成员变量、方法、构造器等) 动态语言&#xff0c;是一类在运行时可以改变其结构的语言&#xff1a;例如新的函数、对象、甚至代码可以被引进&#xff0c;已有的函数可以被删除或是其他…

强化学习的数学原理:值迭代与策略迭代

概述 从课程地图上可以看出来&#xff0c;这是本门课程中第一次正式的介绍强化学习的算法&#xff0c;并且是一个 model-based 的算法&#xff0c;而在下一节课将会介绍第一个 model-free 的算法&#xff08;在 chapter 5&#xff09;。而这两节和之前所学的 BOE 是密切相关的&…

笔记-python爬虫概述

目录 常用第三方库 爬虫框架 动态页面渲染1. url请求分析2. selenium3. phantomjs4. splash5. spynner 爬虫防屏蔽策略1. 修改User-Agent2. 禁止cookies3. 设置请求时间间隔4. 代理IP池5. 使用Selenium6. 破解验证码常用第三方库 对于爬虫初学者&#xff0c;建议在了解爬虫原…

DEX: Scalable Range Indexing on Disaggregated Memory——论文泛读

arXiv Paper 论文阅读笔记整理 问题 内存优化索引[2&#xff0c;3&#xff0c;18&#xff0c;27&#xff0c;42]对于加速OLTP至关重要&#xff0c;但随着数据大小&#xff08;以及索引大小&#xff09;的增长&#xff0c;对内存容量的需求可能会超过单个服务器所能提供的容量…

基于ADRC自抗扰算法的UAV飞行姿态控制系统simulink建模与仿真

目录 1.课题概述 2.系统仿真结果 3.核心程序与模型 4.系统原理简介 4.1 控制系统概述 4.2 ADRC基本框架 4.3 控制律设计 5.完整工程文件 1.课题概述 基于ADRC自抗扰算法的UAV飞行姿态控制系统simulink建模与仿真&#xff0c;分别对YAW&#xff0c;PITCH&#xff0c;ROL…

golang写的自动更新器

文件自动更新器&#xff0c;这个很多端游和软件都有用到的。 golang的rpc通信&#xff0c;是非常好用的一个东西&#xff0c;可以跟调用本地函数一样&#xff0c;调用远程服务端的函数&#xff0c;直接从远程服务端上拉取数据下来&#xff0c;简单便捷。 唯一的遗憾就是&#x…

互联网盲盒小程序的市场发展前景如何?

近几年来&#xff0c;盲盒成为了大众热衷的消费市场。盲盒是一个具有随机性和惊喜感&#xff0c;它能够激发消费者的好奇心&#xff0c;在拆盲盒的过程中给消费者带来巨大的愉悦感&#xff0c;在各种的吸引力下&#xff0c;消费者也愿意为各类盲盒买单。如今&#xff0c;随着盲…

暑假提升(2)[平衡二叉树之一--AVL树]

我不去想未来是平坦还是泥泞&#xff0c;只要热爱生命一切&#xff0c;都在意料之中。——汪国真 AVLTree 1、诞生原因2、什么是AVL树3、如何设计AVL树3、1、AVL树节点的定义3、2、AVL树的插入3、3、平衡因子那些事3、3、1、平衡因子-2/2下的简单情况3、3、2、平衡因子-2/2下的…

tkinter拖入txt文本并显示

tkinter拖入txt文本并显示 效果代码 效果 代码 import tkinter as tk from tkinter import scrolledtext from tkinterdnd2 import DND_FILES, TkinterDnDdef drop(event):file_path event.data.strip({})if file_path.endswith(.txt):with open(file_path, r, encodingutf-8…

K8s 的最后一片拼图:dbPaaS

K8s 的发展使得私有云跟公共云之间的技术差不断的缩小&#xff0c;不管是在私有云还是公共云&#xff0c;大家今天都在基于 K8s 去开发 PaaS 系统。而 K8s 作为构建 PaaS 的基础&#xff0c;其全景图里还缺最后一块“拼图”——dbPaaS。作为一个云数据库行业干了十几年的资深从…

urfread刷算法|构建一棵树

大意 示例标签串&#xff1a; 处理结果&#xff1a; 题目1 根据标签串创建树 需求 需求&#xff1a;给出一个字符串&#xff0c;将这个字符串转换为一棵树。 字符串可以在代码里见到&#xff0c;是以#开头&#xff0c;按照\分割的字符串。 你需要将这个字符串&#xff0…

【鸿蒙学习笔记】@Prop装饰器:父子单向同步

官方文档&#xff1a;Prop装饰器&#xff1a;父子单向同步 [Q&A] Prop装饰器作用 Prop装饰的变量可以和父组件建立单向的同步关系。Prop装饰的变量是可变的&#xff0c;但是变化不会同步回其父组件。 [Q&A] Prop装饰器特点 &#xff11;・Prop装饰器不能在Entry装饰的…

Android Studio上传新项目到Gitee

一、在Gitee上创建仓库 首先需要再Gitee上创建仓库 1、在Gitee中新建仓库 2、输入仓库信息 3、生成仓库地址 创建成功会生成一个仓库地址&#xff0c;格式如下&#xff1a; https://gitee.com/test/compose_mvi_demo.git二、Android Studio 上传项目到Gitee 1、在Android …