基于 docker 搭建 grafana+prometheus 监控资源之mysql+docker+alertmanager配置(二)(超详细版)

news2024/9/22 1:06:28

先去看第一篇(基础部署篇),看完后,才能接上本篇。

基于 docker 搭建 grafana+prometheus 监控资源之mysql+docker+alertmanager配置(二)

      • 环境信息
      • 服务基本信息
      • 一、安装Mysqld_exporter
          • 1.1 标准启动
          • 1.2 docker-compose启动
            • 1.2.1 创建mysql用户并配置权限
            • 1.2.2 配置.my.cnf文件
      • 二、安装Cadvisor
      • 三、安装AlertManager
          • 3.1 AlertManager配置
          • 3.2 Prometheus 配置 AlertManager 告警规则
      • 四、触发告警(静等5分钟...)

环境信息

hostnameip
linux_204xxx.204
linux_207xxx.207

服务基本信息

服务作用端口(默认)
Prometheus普罗米修斯的主服务器9090
Node_Exporter负责收集Host硬件信息和操作系统信息9100
MySqld_Exporter负责收集mysql数据信息收集9104
Cadvisor负责收集Host上运行的docker容器信息8080
Grafana负责展示普罗米修斯监控界面3000
Altermanager等待接收prometheus发过来的告警信息,altermanager再发送给定义的收件人9093

一、安装Mysqld_exporter

部署该容器后,mysqld_exporter会通过配置的DATA_SOURCE_NAME的信息去连接该mysql数据库,但由于我的mysql数据库是以docker swarm集群方式启动的,那么我的mysqld_exporter容器必须和该mysql数据库互通。因此,我将mysqld_exporter的网络也使用mysql数据库的网络,这样保证二者可以互相访问,那mysqld_exporter就使用docker-compose方式启动。下方我列出标准启动和docker-compose启动的命令,各位根据需求自取:

1.1 标准启动
# 启动mysqld_exporter

docker run -d --name mysqld_exporter --restart=always -p 9104:9104 -e DATA_SOURCE_NAME="root:Password123@(172.17.0.2:3306)/" prom/mysqld-exporter

说明:

  • root -----> 账户
  • Password123 -----> 密码
  • 172.17.0.2:3306 -----> 地址和端口
1.2 docker-compose启动
# 启动mysqld_exporter

vim mysqld_exporter.yml

version: '3.2'
services:
  mysqld_exporter:
    image: prom/mysqld-exporter
    restart: always
    networks:
      - pangu_middleware_pangu_online
    volumes:
      - ./.my.cnf:/home/.my.cnf    #用于mysqld_exporter去访问mysql数据库
    deploy:
      replicas: 1
    ports:
      - "9104:9104"
    environment:
      DATA_SOURCE_NAME: "mysqld_exporter:mysqld_exporter@(192.168.220.148:3306)/"    #这是mysql数据库的ip地址以及用户(用户需要单独创建)

networks:
  pangu_middleware_pangu_online:    #该网络是mysql数据库所在的网段
    external: true

PS:正如上述文件的注释中写道:我们mysqld_exporter需要去访问mysql数据库,那么mysql数据库就需要创建一个用户和地址(mysqld_exporter@(192.168.220.148:3306))供mysqld_exporter访问,且mysqld_exporter也需要通过配置文件中的用户和密码(.my.cnf)才能够访问。

1.2.1 创建mysql用户并配置权限
create user 'mysqld_exporter'@'%' identified by 'mysqld_exporter';
GRANT SELECT, PROCESS, SUPER, REPLICATION CLIENT, RELOAD ON *.* TO 'mysqld_exporter'@'%';

在这里插入图片描述
由于我是测试环境,且mysqld_exporter容器一直要重启,ip一直变,所以我就创建用户以及登录权限的时候给了"%",真实环境大家记得只给单独的ip,更加安全和规范。

1.2.2 配置.my.cnf文件
vim .my.cnf
[client]
user=mysqld_exporter
password=mysqld_exporter

输入http://ip:9104/metrics查看是否数据上报
在这里插入图片描述
配置prometheus.yml文件

# 在后面添加以下数据

vim prometheus/prometheus.yml
  - job_name: pangu_mysql
    static_configs:
      - targets: ["xxx.xxx.xxx.204:9104"]   # 收集mysql信息的mysqld_exporter的ip(这里是宿主机ip,ip映射到了宿主机)及端口
#重启prometheus容器

docker restart docker_prometheus

PS:这里一定是重启docker_prometheus,千万不要删除哈,不然所有已监控到的数据全部丢失了, 会重新监控,之前我修改了prometheus.yml后重启,容器内一直无法生效,索性就直接删除,重建了。当时还在想为什么数据全没了。。。但之所以无法生效是因为第一次docker run docker_prometheus容器时,没有使用-v指定映射文件,因此修改了容器外文件,重启也不会映射到容器内。

完成后在http://ip:9090/targets中查看是否有刚刚配置的job_name: xxx信息出现
在这里插入图片描述
这里给出的全效果图
打开Grafana倒入mysql监控信息模版
在这里插入图片描述

二、安装Cadvisor

#启动cadvisor

docker run -v /:/rootfs:ro -v /var/run:/var/run:rw -v /sys:/sys:ro -v /var/lib/docker/:/var/lib/docker:ro -v /dev/disk/:/dev/disk:ro -p 8080:8080 -d --name=cadvisor --restart=always google/cadvisor:latest

浏览器输入http://ip:8080/metrics 查看是否获取到数据
在这里插入图片描述
修改 prometheus.yml

# 在后面添加以下数据

vim prometheus/prometheus.yml
    - job_name: cadvisor_207
    static_configs:
      - targets: ["xxx.xxx.xxx.207:8080"]
  - job_name: cadvisor_204
    static_configs:
      - targets: ["xxx.xxx.xxx.204:8080"]
#重启prometheus容器

docker restart docker_prometheus

完成后在http://ip:9090/targets中查看是否有刚刚配置的job_name: xxx信息出现
在这里插入图片描述
这里给出的全效果图
打开Grafana倒入mysql监控信息模版
在这里插入图片描述

三、安装AlertManager

# 1.启动容器
docker run -itd --name alertmanager prom/alertmanager

# 2.复制容器内部的配置文件到宿主机,不用事先创建$PWD/alertmanager目录
docker cp -a alertmanager:/etc/alertmanager/ $PWD/alertmanager

# 3.删除容器
docker rm -f alertmanager

# 4.启动服务 设置端口9093
docker run -itd --name alertmanager -p 9093:9093 -v $PWD/alertmanager:/etc/alertmanager prom/alertmanager

浏览器输入http://ip:9093/#/alerts
在这里插入图片描述

3.1 AlertManager配置

配置 vi alertmanager/alertmanager.yml 宿主机文件(本篇配置的qq邮箱报警,当然也可以163邮箱、企业微信、微信、钉钉等)

# 配置好的文件内容 可直接复制
alertmanager.yml
global: # 全局配置
  resolve_timeout: 5m  # 处理超时时间,默认为5min
  smtp_from: ''  # 邮件发送地址(自行配置)
  smtp_smarthost: 'smtp.qq.com:465'  # 邮箱SMTP 服务地址
  smtp_auth_username: ''  # 邮件发送地址用户名(邮箱地址)
  smtp_auth_password: '英文'  # 邮件发送地址授权码(自行查看qq邮箱SMTP或POP3的授权码,百度可查如何配置)
  smtp_require_tls: false
  smtp_hello: 'qq.com'
route:  # 设置报警的分发策略
  group_by: ['alertname']
  group_wait: 20s  #  最初即第一次等待多久时间发送一组警报的通知
  group_interval: 5m  # 在发送新警报前的等待时间
  repeat_interval: 5m  # 发送重复警报的周期 对于email配置中,此项不可以设置过低,否则将会由于邮件发送太多频繁,被smtp服务器拒绝
  receiver: 'email'
receivers:  # 配置告警消息接受者信息
- name: 'email'
  email_configs:
  - to: ''  # #邮件接收地址(自行配置)
    send_resolved: true
inhibit_rules:  # 抑制规则配置
  - source_match:
      severity: 'critical'
    target_match:
      severity: 'warning'
    equal: ['alertname', 'dev', 'instance']
# 重启alertmanager 容器
docker restart alertmanager
3.2 Prometheus 配置 AlertManager 告警规则

新建Prometheus目录下 服务器 告警规则文件

vim prometheus/node-exporter-record-rule.yml【注意看文内注释】

groups:
- name: server-alarm
  rules:
  - alert: "内存告警"
    expr: (1 - (node_memory_MemAvailable_bytes / (node_memory_MemTotal_bytes))) * 100 > 5   #正常情况下是80,这里写了5,是因为我看到真实使用是8,为了做告警出发,写了5
    for: 1m
    labels:
      severity: warning
    annotations:
      summary: "{{$labels.instance}}: 检测到 高内存 使用率!"
      description: "{{$labels.instance}}: 内存使用率在 80% 以上 (当前使用值为:{{ $value }})"


  - alert: "CPU告警"
    expr: (1 - avg(irate(node_cpu_seconds_total{mode="idle"}[2m])) by(instance)) * 100 > 80
    for: 1m
    labels:
      severity: warning
    annotations:
      summary: "{{$labels.instance}}: 检测到 高CPU 使用率!"
      description: "{{$labels.instance}}: CPU使用率在 80% 以上 (当前使用值为:{{ $value }})"


  - alert: "磁盘告警"
    expr: 100 - (node_filesystem_free_bytes{fstype=~"tmpfs|ext4"} / node_filesystem_size_bytes{fstype=~"tmpfs|ext4"} * 100) > 5
    for: 1m
    labels:
      severity: warning
    annotations:
      summary: "{{$labels.instance}}: 检测到 高磁盘 使用率!"
      description: "{{$labels.instance}}: 磁盘使用率在 80% 以上 (当前使用值为:{{ $value }})"

新建Prometheus目录下 MySql 告警规则文件

vim mysql-exporter-record-rule.yml

groups:
- name: mysql-alarm
  rules:
  - alert: "MySql is down"
    expr: mysql_up == 0
    for: 1m
    labels:
      severity: warning
    annotations:
      summary: "{{$labels.instance}}: 检测到 MySql服务 已停止运行!请重点关注!!!"
      description: "{{$labels.instance}}: 当前 MySql服务已停止! (当前状态mysql_up状态为:{{ $value }})"


  - alert: "MySql_High_QPS"
    expr: rate(mysql_global_status_questions[5m]) > 1500
    for: 1m
    labels:
      severity: warning
    annotations:
      summary: "{{$labels.instance}}: 检测到 MySql_High_QPS 过高!"
      description: "{{$labels.instance}}: 当前 MySql操作超过 1500/秒 (当前值为:{{ $value }})"

  - alert: "Mysql_Too_Many_Connections"
    expr: rate(mysql_global_status_threads_connected[5m]) > 300
    for: 1m
    labels:
      severity: warning
    annotations:
      summary: "{{$labels.instance}}: 检测到 MySql 连接过多!"
      description: "{{$labels.instance}}: 当前 MySql连接超过 300个/秒 (当前值为:{{ $value }})"


  - alert: "mysql_global_status_slow_queries"
    expr: rate(mysql_global_status_slow_queries[5m]) > 5
    for: 1m
    labels:
      severity: warning
    annotations:
      summary: "{{$labels.instance}}: 检测到 MySql 慢查询过多!"
      description: "{{$labels.instance}}: 当前 MySql慢查询 超过 5个/秒 (当前值为:{{ $value }})"


  - alert: "SQL thread stopped"
    expr: mysql_slave_status_slave_sql_running != 1
    for: 1m
    labels:
      severity: warning
    annotations:
      summary: "{{$labels.instance}}: 检测到 SQL 线程停止!请重点关注!!!"
      description: "{{$labels.instance}}: 当前 SQL线程 已停止! (当前值为:{{ $value }})"

  - alert: "IO thread stopped"
    expr: mysql_slave_status_slave_io_running != 1
    for: 1m
    labels:
      severity: warning
    annotations:
      summary: "{{$labels.instance}}: 检测到 IO 线程停止!请重点关注!!!"
      description: "{{$labels.instance}}: 当前 IO线程 已停止! (当前值为:{{ $value }})"

修改Prometheus.yml文件

vim prometheus/prometheus.yml

# Alertmanager configuration
alerting:
  alertmanagers:
    - static_configs:
        - targets: ["xxx.xxx.xxx.204:9093","xxx.xxx.xxx.207:9093"]   # 告警配置地址

# Load rules once and periodically evaluate them according to the global 'evaluation_interval'.
rule_files:
  # - "first_rules.yml"
  # - "second_rules.yml"
  - "*rule.yml" #告警通知文件信息
# 重启Prometheus 服务

docker restart docker_prometheus

浏览器输入http://ip:9093/#/status检查是否配置成功
在这里插入图片描述
正常状态
在这里插入图片描述

四、触发告警(静等5分钟…)

在这里插入图片描述
将node-exporter-record-rule.yml中的内存使用率阀值改为80

在这里插入图片描述
告警解除
在这里插入图片描述
至此,基于 docker 搭建 grafana+prometheus 监控,以及监控项所有的配置全部完成。可以说比较简单,但是逻辑理清楚,出现问题知道是哪一块问题才是最主要的。送各位一句话:隧道的尽头总有光!!!加油,年轻的我们!

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

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

相关文章

1554_AURIX_TC275_时钟监控功能以及时钟紧急行为

全部学习汇总: GreyZhang/g_TC275: happy hacking for TC275! (github.com) 这部分还是前面CCU寄存器的一些延续,寄存器支持模块的禁用、禁用状态的查询以及是否支持休眠的控制。 1. 时钟监控是时钟进行安全设计需要考虑的一个手段,支持两种锁…

历史性突破,200层以上存储芯片率先量产,领先国外芯片巨头

近日,中企芯片技术迎来历史性突破,200层以上存储芯片率先量产,领先国外存储芯片巨头,或将成为全球行业领导者。后起之秀,鱼跃龙门 众所周知,存储芯片的生产,不仅需要高端技术,还需要…

MySQL之MVCC

多版本并发控制MVCC,也就是Copy on Write思想。MVCC除了支持读和读并行,还支持读和写并行、写和读并行,但为了保持数据一致性,写和写是无法并行的。 ​ 如下图,在事务1写的时候会copy一个记录的副本,其他事…

编译器做了这么多,你知道吗?

编译器做了什么 从最直观的角度来讲,编译器就是将高级语言翻译成机器语言的一个工具。比如我们用C/C语言写的一个程序可以使用编译器将其翻译成机器可以执行的指令及数据。我们前面也提到了,使用机器指令或汇编语言编写程序是十分费事及乏味的事情&…

LabVIEW编程LabVIEW开发ITECH IT6000D系列电源例程与相关资料

LabVIEW编程LabVIEW开发ITECH IT6000D系列电源例程与相关资料 ​IT6000D系列大功率可编程直流电源可支持多种规格的输出能力,以满足高电流、低电压或高电压、低电流等多种测试需求。同时,相同型号的整机间可并联工作,以实现更强大的输出能力…

settings.py配置文件(详解)

文章目录settings.py配置文件1. settings.py文件介绍1) BASE_DIR2) SECRET_KEY3) DEBUG4) ALLOWED_HOSTS5) INSTALLED_APPS6) MIDDLEWARE7) ROOT_URLCONF8) TEMPLATES9) WSGI_APPLICATION10) DATABASES11) AUTH_PASSWORD_VALIDATORS12) LANGUAGE_CODE和TIME_ZONE13) USE_118N和…

Cy7 Tyramide,Tyramide-Cy7,花青素Cy7 酪酰胺,Cy7酪胺

●外观以及性质: Cy7酪胺含有明亮的Cy7,可以使用标准的Cy7滤波片组轻松检测到。酪胺信号放大(TSA)是一种特别通用且功能强大的酶扩增技术,具有更高的检测灵敏度。西安凯新生物科技有限公司​为了实现大IHC检测&#xf…

排序算法总结

排序算法 排序算法可以分为内部排序和外部排序 内部排序是数据记录在内存中进行排序 外部排序是因排序的数据很大,一次不能容纳全部的排序记录,在排序过程中需要访问外存。常见的内部排序算法有:插入排序、希尔排序、选择排序、冒泡排序、归并…

Qt-OpenCV学习笔记--人脸识别

前言 本人从事机械设计12年,业余时间自学编程。 2022年4月6日,开始学习C#, 2022年9月7日,开始学习c和Qt, 2022年10月28日,开始学习OpenCV, 今天终于搞定了传说中的 人脸识别 ,在…

spirngcloud的基本介绍与服务注册

1. 应用系统架构的演变 单应用架构 -> 应用服务器和数据库服务器分离 -> 应用服务器集群 -> 数据库压力变大,数据库读写分离 -> 引入缓存机制缓解数据库的压力 -> 数据库的水平/垂直拆分(数据库分库分表) -> 应用的拆分(微服务&…

[附源码]计算机毕业设计绿色生活交流社区网站Springboot程序

项目运行 环境配置: Jdk1.8 Tomcat7.0 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。 项目技术: SSM mybatis Maven Vue 等等组成,B/S模式 M…

GitLab搭建

以docker方式运行gitlab docker run --detach \--hostname gitlab.mczaiyun.top \--publish 8443:443 --publish 8090:80 --publish 8022:22 \--name gitlab \--restart always \--volume /root/gitlab/config:/etc/gitlab \--volume /root/gitlab/logs:/var/log/gitlab \--vo…

Elasticsearch入门(二)基本操作(索引、文档、映射)

数据格式 Elasticsearch 是面向文档型数据库,一条数据在这里就是一个文档。为了方便大家理解,我们将 Elasticsearch 里存储文档数据和关系型数据库 MySQL 存储数据的概念进行一个类比ES 里的 Index 可以看做一个库,而 Types 相当于表&#x…

【在Vue脚手架项目中使用qs框架】

目录 1. 安装qs框架 2. 在main.js中添加配置 1. 安装qs框架 在前端项目中,可以使用qs框架,实现“将对象转换为FormData格式的数据”。 首先,安装此框架: 如果没有权限进入C盘找到cmd的执行软件,用管理员启动&…

练习题(12-06)

目录 1.最小数 2.数天数 3.非常特殊的数 4.最大值路径 5.拆分质数 6.文件拷贝 7.除去重复单词 8.变成回文字符串 1.最小数 题目描述 请找到一个大于2022的最小数,这个最小的数转换成二进制后,最低的6个二进制全为0. 思路:枚举即…

[附源码]Python计算机毕业设计Django物业管理系统

项目运行 环境配置: Pychram社区版 python3.7.7 Mysql5.7 HBuilderXlist pipNavicat11Djangonodejs。 项目技术: django python Vue 等等组成,B/S模式 pychram管理等等。 环境需要 1.运行环境:最好是python3.7.7,…

Java开发:反射机制

一、Java Reflection Reflection(反射)是java被视为动态语言的关键(Java是静态语言,因为有了反射所以又被成为“准动态语言”) 二、重点:一个类只有一个Class对象 三、反射的优缺点 优点:可…

【JAVA问题解决方案】02.Freemarker导出Excel超出上限分表解决方案

陈老老老板🦸👨‍💻本文专栏:Java问题解决方案(都是一些常见的问题解决方案)👨‍💻本文简述:本文讲一下有关Freemarker导出Excel分表的解决方案,超级详细。&a…

Tomcat7+ 弱口令 后台getshell漏洞

Tomcat7 弱口令 && 后台getshell漏洞 🍉 shell 此环境来自vulhub工程: https://github.com/vulhub/vulhub 以下测试环境为ubuntu 20.04 🍉目录Tomcat7 弱口令 && 后台getshell漏洞环境准备弱密码登录war文件上传蚁剑连接…

SoftEther linux与windows使用

1、SoftEther简介 我们来先科普一下什么是SoftEther吧,SoftEther是由日本筑波大学的登大遊在硕士论文中提出的开源、跨平台、多重协议的虚拟专用网方案,其实我更看重的是他的内网穿透功能,下面来一张图片,说明它的强大。 SoftEther正确定的安…