【数据库监控系列】Prometheus+Alertmanager+Grafana容器化部署

【数据库监控系列】Prometheus+Alertmanager+Grafana容器化部署

  • 快速安装docker环境
  • 被监控端部署exporter
    • 配置Redis exporter
    • 配置MySQL exporter
  • 部署Prometheus和Grafana
    • Prometheus配置文件
    • Alertmanager配置文件
    • rule_files告警规则文件
    • docker-compose部署文件
    • 常见报错信息
  • 配置Grafana仪表盘
    • 添加数据源
    • 创建仪表盘

快速安装docker环境

🐬 参考:https://blog.csdn.net/Sebastien23/article/details/137086778

被监控端部署exporter

🐬参考:https://gottdeskrieges.blog.csdn.net/article/details/136403810

配置Redis exporter

在被监控端部署exporter:

# 仅主机网络模式部署
docker run -d --name redis_exporter --restart unless-stopped --network host oliver006/redis_exporter 

检查是否采集到数据:

curl -X GET http://localhost:9121/metrics > redis.metrics
cat redis.metrics | grep redis_up

配置MySQL exporter

在数据库中创建监控用户:

CREATE USER 'exporter'@'%' IDENTIFIED BY 'Monpass_XXX' WITH MAX_USER_CONNECTIONS 3;
GRANT PROCESS, REPLICATION CLIENT, SELECT ON *.* TO 'exporter'@'%';

在被监控端部署exporter:

# 容器化部署
mkdir -vp /opt/mysqld-exporter/cat > /opt/mysqld-exporter/config.my-cnf << EOF
[client]
host=127.0.0.1
user=exporter
password=Monpass_XXX
EOFcd /opt && chown -R polkitd mysqld-exporter/docker run -d --network host --name mysqld_exporter_1 --restart unless-stopped \
-v /opt/mysqld-exporter/config.my-cnf:/etc/mysql/config.my-cnf \
prom/mysqld-exporter --config.my-cnf=/etc/mysql/config.my-cnf \
--web.listen-address=:9104 \
--no-collect.info_schema.query_response_time \
--no-collect.info_schema.innodb_cmp \
--no-collect.info_schema.innodb_cmpmem \
--collect.info_schema.processlist --collect.binlog_sizedocker ps -a

检查是否采集到数据:

curl -X GET http://localhost:9104/metrics > mysqld.metrics
cat mysqld.metrics | grep mysql_up

部署Prometheus和Grafana

创建安装目录及相关文件:

mkdir -vp /opt/docker-compose/prometheus/data/
mkdir -vp /opt/docker-compose/prometheus/conf/
mkdir -vp /opt/docker-compose/prometheus/conf/rules/#mkdir -vp /opt/docker-compose/grafana/data/
#mkdir -vp /opt/docker-compose/grafana/conf/touch /opt/docker-compose/prometheus/conf/prometheus.yml
touch /opt/docker-compose/prometheus/conf/alertmanager.yml#告警规则文件
touch /opt/docker-compose/prometheus/conf/rules/redis_alerts.yml
touch /opt/docker-compose/prometheus/conf/rules/mysql_alerts.ymltouch /opt/docker-compose/docker-compose.ymlcd /opt/ && chown -R polkitd docker-compose/ 

Prometheus配置文件

配置文件prometheus.yml

#vi /opt/docker-compose/prometheus/conf/prometheus.ymlglobal:scrape_interval:     15s # Default is every 1 minute.evaluation_interval: 15s # The default is every 1 minute.scrape_timeout:      10s # scrape_timeout is set to the global default (10s).# Alertmanager configuration
alerting:alertmanagers:- static_configs:- targets: ['<ALERTMANAGER_IP>:9093']# - alertmanager:9093# load alerting rule files
rule_files:- "rules/*.yml"- "rules/*.yaml"scrape_configs:- job_name: 'prometheus'static_configs:- targets: ['<PROMETHEUS_SERVER_IP>:9090']- job_name: 'redis_exporter'static_configs:- targets: ['<REDIS_EXPORTER_IP>:9121']- job_name: 'mysql_exporter'scrape_interval: 8sstatic_configs:- targets: ['<MYSQL_EXPORTER_IP>:9104']

:根据实际情况修改尖括号中的IP地址。

Alertmanager配置文件

配置文件alertmanager.yml

#vi /opt/docker-compose/prometheus/conf/alertmanager.ymlglobal:resolve_timeout: 5m                       # 处理超时时间,默认为5minsmtp_smarthost: 'smtp.qq.com:465'         # 邮箱smtp服务器代理smtp_from: '123456789@qq.com'             # 发送邮箱名称smtp_auth_username: '123456789@qq.com'    # 发邮件的邮箱用户名smtp_auth_password: 'xxxxxx'              # 邮箱密码或授权码smtp_require_tls: false                   # 不进行tls验证# 自定义html模板,发邮件的时候用自定义的模板内容
templates:- 'template/*.tmpl'# 定义路由树信息,这个路由可以接收到所有的告警
route:group_by: ['alertname'] # 报警分组依据group_wait: 10s         # 最初即第一次等待多久时间发送一组警报的通知group_interval: 60s     # 在发送新警报前的等待时间repeat_interval: 1h     # 发送重复警报的周期。对于email配置中,此项不可以设置过低,否则将会由于邮件发送太多频繁,被smtp服务器拒绝receiver: 'email'       # 发送警报的接收者的名称,下面的receivers.name# 定义警报接收者信息
receivers:- name: 'email'                            # 路由中对应的receiver名称email_configs:                           # 邮箱配置- to: '987654321@qq.com'                 # 接收警报的email配置#html: '{{ template "test.html" . }}'  # 设定邮箱的内容模板

:根据实际情况修改邮箱地址和授权码。

rule_files告警规则文件

Redis实例宕机告警规则:

#vi /opt/docker-compose/prometheus/conf/rules/redis_alerts.ymlgroups:
- name: redis_alert_rulesrules:- alert: redis_down     # name of an alerting rule# alert triggering condition defined using PromSQL expression. Here params must be metrics scraped by redis exporter.expr: up{job="redis_exporter"} == 0for: 1mlabels:severity: "Critical"# alert info that will sent to alertmanagerannotations:summary: "Instance {{ $labels.instance }} down"description: "{{ $labels.instance }} of job {{ $labels.job }} has been down for more than 1 minutes. Current value: {{ $value }}"

MySQL实例宕机告警规则:

#vi /opt/docker-compose/prometheus/conf/rules/mysql_alerts.ymlgroups:
- name: mysql_alert_rulesrules:- alert: mysql_down# alert triggering condition defined using PromSQL expression. Here params must be metrics scraped by mysql exporter.expr: up{job="mysql_exporter"} == 0for: 1mlabels:severity: "Critical"annotations:summary: "Instance {{ $labels.instance }} down"description: "{{ $labels.instance }} of job {{ $labels.job }} has been down for more than 1 minutes. Current value: {{ $value }}"

docker-compose部署文件

编写docker compose文件,用于部署prometheus、alertmanager和grafana。

#vi /opt/docker-compose/docker-compose.ymlversion: '3'services:prometheus:image: prom/prometheusnetwork_mode: hostcontainer_name: prometheus_1restart: unless-stopped# if you are running as root then set it to 0, else find the right id with the id -u commanduser: '0'#ports:#  - '9090:9090'environment:TZ: "Asia/Shanghai"#command: ["/etc/prometheus/prometheus.yml"]volumes:- ./prometheus/data/:/prometheus/- ./prometheus/conf/rules/:/etc/prometheus/rules/- ./prometheus/conf/prometheus.yml:/etc/prometheus/prometheus.ymlalertmanager:image: prom/alertmanagernetwork_mode: hostcontainer_name: alertmanager_1restart: unless-stopped# if you are running as root then set it to 0, else find the right id with the id -u commanduser: '0'#ports:#  - '9093:9093'environment:TZ: "Asia/Shanghai"volumes:- ./prometheus/conf/alertmanager.yml:/etc/alertmanager/alertmanager.ymlgrafana:image: grafana/grafananetwork_mode: hostcontainer_name: grafana_1restart: unless-stopped# if you are running as root then set it to 0, else find the right id with the id -u commanduser: '0'  #ports:#  - '3000:3000'environment:- TZ="Asia/Shanghai"#- GF_INSTALL_PLUGINS="grafana-simple-json-datasource"volumes:- 'grafana_storage:/var/lib/grafana'# DECLARE DOCKER VOLUME FOR GRAFANA_STORAGE      
volumes:grafana_storage: {}

运行容器并检查:

# 启动容器
cd /opt/docker-compose/ && docker-compose up -d# 停止容器
cd /opt/docker-compose/ && docker-compose stop

部署后检查:

  • 访问http://<Prometheus_SERVER_IP>:9090,检查Prometheus是否部署成功。
  • 访问http://<Alertmanager_SERVER_IP>:9093,检查AlertManager是否部署成功。
  • 访问http://<Grafana_SERVER_IP>:3000,检查Grafana是否部署成功,默认用户名和密码都是admin,登录后需要修改密码。

常见报错信息

  1. Docker-compose文件中,如果没有user: '0',可能会收到下面的报错:
caller=query_logger.go:86 level=error component=activeQueryTracker msg="Error opening query log file" 
file=/prometheus/queries.active err="open /prometheus/queries.active: permission denied
  1. Grafana容器的环境变量赋值只能用等号,如果用冒号会收到如下报错(怀疑跟镜像或docker-compose的版本有关):
environment:- TZ: "Asia/Shanghai"- GF_INSTALL_PLUGINS: "grafana-clock-panel,grafana-simple-json-datasource"
...# 运行容器时报错
panic: interface conversion: interface {} is map[string]interface {}, not string
  1. 如果docker-compose文件中配置了往Grafana容器中安装某些插件(例如grafana-clock-panel),可能会导致grafana容器不断重启。检查容器日志会看到如下报错:
$ docker logs -fn grafana_1
...
Error: ✗ Plugin not found (Grafana v8.3.3 linux-amd64)

配置Grafana仪表盘

添加数据源

在添加数据源中选择Prometheus,在HTTP下的URL栏中粘贴http://<Prometheus_SERVER_IP>:9090并保存。

创建仪表盘

在新建仪表盘(New dashboard)中点击右侧的导入仪表盘(Create --> Import),输入并搜索仪表盘编号,在显示的仪表盘选项(Options)中选择数据源为Prometheus,最后点击导入即可。

  • 推荐的REDIS仪表盘:763, 11835
  • 推荐的MySQL仪表盘:7362

关于自定义仪表盘,以后将补充文章专门介绍。

References
【1】https://gottdeskrieges.blog.csdn.net/article/details/113645177
【2】https://prometheus.io/docs/prometheus/latest/installation/
【3】https://blog.csdn.net/qq_36306519/article/details/128255913
【4】https://prometheus.io/docs/prometheus/latest/configuration/alerting_rules/
【5】https://blog.csdn.net/weixin_45697293/article/details/119353915
【6】https://grafana.com/docs/grafana/latest/setup-grafana/installation/docker/
【7】https://grafana.com/grafana/dashboards
【8】https://grafana.com/docs/grafana/latest/dashboards/build-dashboards/

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

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

相关文章

【MySQL】6.MySQL主从复制和读写分离

主从复制 主从复制与读写分离 通常数据库的读/写都在同一个数据库服务器中进行&#xff1b; 但这样在安全性、高可用性和高并发等各个方面无法满足生产环境的实际需求&#xff1b; 因此&#xff0c;通过主从复制的方式同步数据&#xff0c;再通过读写分离提升数据库的并发负载…

Rabbitmq消息堆积的问题以及解决方案

1.消息堆积的原因&#xff1a; 短时间内出现了大量的数据涌入 消费速度慢 2.解决方案 2.1 预防措施&#xff1a; 生产者&#xff1a; 减少发布频率&#xff0c;考虑使用队列最大长度限制&#xff0c;尽可能保证消息都可以被接收。 消费者&#xff1a; 增加消费者的处理能力…

八大技术趋势案例(区块链量子计算)

科技巨变,未来已来,八大技术趋势引领数字化时代。信息技术的迅猛发展,深刻改变了我们的生活、工作和生产方式。人工智能、物联网、云计算、大数据、虚拟现实、增强现实、区块链、量子计算等新兴技术在各行各业得到广泛应用,为各个领域带来了新的活力和变革。 为了更好地了解…

百度智能云千帆,产业创新新引擎

本文整理自 3 月 21 日百度副总裁谢广军的主题演讲《百度智能云千帆&#xff0c;产业创新新引擎》。 各位领导、来宾、媒体朋友们&#xff0c;大家上午好。很高兴今天在石景山首钢园&#xff0c;和大家一起沟通和探讨大模型的发展趋势&#xff0c;以及百度最近一段时间的思考和…

halcon目标检测标注保存

* 创建一个新的字典 create_dict(ObjectDictionary) * 类别名称列表和对应的ID列表 class_names : [Defect1,Defect2,Defect3,Defect4,Defect5,Defect6,Defect7,Defect8,Defect9,Defect10,Defect11,Defect12,Defect13,Defect14,Defect15,Defect16,Defect17,Defect18] class_id…

jmockit-01-test 之 jmockit 入门使用案例

拓展阅读 jmockit-01-jmockit 入门使用案例 jmockit-02-概览 jmockit-03-Mocking 模拟 jmockit-04-Faking 伪造 jmockit-05-代码覆盖率 mockito-01-入门介绍 mockito-02-springaop 整合遇到的问题&#xff0c;失效 jmockit 说明 jmockit 可以提供基于 mock 的测试能力…

移动端开发思考:Uniapp的上位替代选择

文章目录 前言跨平台开发技术需求技术选型uniappFlutterMAUIAvalonia安卓原生 Flutter开发尝试Avalonia开发测试测试项目新建项目代码MainViewMainViewModel 发布/存档 MAUI实战&#xff0c;简单略过打包和Avalonia差不多 总结 前言 作为C# .NET程序员&#xff0c;我有一些移动…

前端基础复习--HTML篇

html: html文件根标签 head&#xff1a;编写页面相关的属性 title&#xff1a;页面标题 body&#xff1a;页面内容展示信息 标题标签&#xff1a;h1 - h6&#xff0c;数字越大&#xff0c;字体越小 &#xff0c;例如&#xff1a; <h1>hello</h1> p标签&#x…

|行业洞察·手机|《2024手机行业及营销趋势报告-18页》

报告的主要内容解读&#xff1a; 手机行业概述及品牌分布&#xff1a; 2022年&#xff0c;受疫情影响&#xff0c;中国国内手机市场出货量下降22.6%&#xff0c;总计2.72亿部。5G手机市场占有率中&#xff0c;苹果领先&#xff0c;其次是vivo、OPPO和华为。消费者换机时更注重性…

【python分析实战】成本:揭示电商平台月度开支与成本结构占比 - 过于详细 【收藏】

重点关注本文思路&#xff0c;用python分析&#xff0c;方便大家实验复现&#xff0c;代码每次都用全量的&#xff0c;其他工具自行选择。 全文3000字&#xff0c;阅读10min&#xff0c;操作1小时 企业案例实战欢迎关注专栏 每日更新&#xff1a;https://blog.csdn.net/cciehl/…

[git]Git 撤销与 回滚操作

[git]Git 撤销与 回滚操作 开发过程中&#xff0c;你肯定会遇到这样的场景&#xff1a; 场景一&#xff1a; 糟了&#xff0c;我刚把不想要的代码&#xff0c;commit到本地仓库中了&#xff0c;但是还没有做push操作&#xff01; 场景二&#xff1a; 彻底完了&#xff0c;刚线…

C# OpenCvSharp 轮廓检测

目录 效果 代码 下载 效果 代码 using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; using OpenCvSharp; using OpenCvSharp.…

刚租用的服务器被恶意攻击怎么办?

如果你的服务器受到恶意攻击&#xff0c;以下是一些应对措施&#xff1a; 1.立即隔离受影响的系统&#xff1a; 立即将受攻击的服务器与其他系统隔离&#xff0c;以防止攻击进一步蔓延。这可以通过断开网络连接、关闭受影响的服务或者停止服务器实例等方式来实现。 2.通知相关人…

OpenCV 如何使用 XML 和 YAML 文件的文件输入和输出

返回&#xff1a;OpenCV系列文章目录&#xff08;持续更新中......&#xff09; 上一篇&#xff1a;如何利用OpenCV4.9离散傅里叶变换 下一篇: 目标 本文内容主要介绍&#xff1a; 如何使用 YAML 或 XML 文件打印和读取文件和 OpenCV 的文本条目&#xff1f;如何对 OpenCV …

随记----单链表

随便记录一些代码 1.编写算法将带头结点的链表逆置&#xff0c;空间复杂度为1 void Reverse(LinkLNode &L){LNode *pL->next,*r;L->nextNULL;while(r!NULL){rp->next;p->nextL->next;L->nextp;pr;} } 6.有一个带头节点的单链表L&#xff0c;设计一个算法…

镜视界 | DevSecOps CI/CD 管道中数字供应链安全的集成策略

目录 前言 数字供应链&#xff08;DSC&#xff09;的定义 数字供应链安全的重点内容和风险因素 CI/CD管道的安全目标和可信实体 将数字供应链安全集成到CI/CD管道中 结语 本文字数&#xff1a;7715&#xff0c;阅读时长&#xff1a;19分钟 1.前言 在敏捷开发的模式下&…

CSS 结构伪类选择器 伪元素选择器 盒子模型

目录 1. 结构伪类选择器1.1 :nth-child(公式) 2. 伪元素选择器3. 盒子模型3.1 盒子模型的重要组成部分3.2 盒子模型 - 边框线3.3 盒子模型 - 内边距3.4 盒子模型 - 尺寸计算3.5 盒子模型 - 外边距3.6 盒子模型 - 元素溢出3.7 外边距问题 - 合并现象3.8 外边距问题 - 塌陷问题3.…

玩电脑突然停电对电脑有影响吗

在现代社会中&#xff0c;电脑已成为我们日常生活和工作中不可或缺的一部分。然而&#xff0c;当我们正在专注于工作或娱乐时&#xff0c;突然停电可能会给我们带来不小的困扰。那么&#xff0c;玩电脑时突然停电会对电脑产生哪些影响呢&#xff1f;本文将深入探讨这一问题&…

Android 14.0 SystemUI下拉状态栏时间格式的修改(二)

1.概述 在14.0的系统rom产品开发中,在通过上一篇博客已经实现修改了时间显示格式,但是客户修改下拉状态栏时间显示格式为分行显示,即第一行显示时间用大字体显示, 第二行用小字体显示当前日期和周几这样的显示格式 于是继续进行修改 2.SystemUI下拉状态栏时间格式的修改(…

快速上手Spring Cloud 七:事件驱动架构与Spring Cloud

快速上手Spring Cloud 一&#xff1a;Spring Cloud 简介 快速上手Spring Cloud 二&#xff1a;核心组件解析 快速上手Spring Cloud 三&#xff1a;API网关深入探索与实战应用 快速上手Spring Cloud 四&#xff1a;微服务治理与安全 快速上手Spring Cloud 五&#xff1a;Spring …