当前位置: 首页 > news >正文

使用docker形式部署prometheus+alertmanager+钉钉告警

一、拉取所需要的镜像

docker pull prom/node-exporter
docker pull grafana/grafana 
docker pull prom/prometheus 
docker pull prom/alertmanager 

其中

prom/node-exporter:用于收集主机系统信息和指标的

grafana/grafana:是一个用于可视化和分析监控指标的开源平台。

prom/prometheus:是一个开源的监控系统,用于收集和存储时间序列数据,并提供基于数据的查询、报警和可视化功能。

prom/alertmanager:是 Prometheus 的告警管理器,用于处理和路由来自 Prometheus 服务器的告警通知。

二、容器启动

(1)启动node-exporter
 docker run --name node-exporter -d -p 9100:9100 -v /proc:/host/proc:ro -v /sys:/host/sys:ro -v /:/rootfs:ro prom/node-exporter

(2)启动alertmanager

在启动alertmanager之前,可以自己编写一个alertmanager.yml文件,然后使用卷挂载到该容器内部。

# 创建挂载目录
mkdir /opt/alertmanager
cd /opt/alertmanager/
# 编写该文件
vim alertmanager.yml
alertmanager.yml
global:resolve_timeout: 5mroute: # 告警路由配置,定义如何处理和发送告警receiver: webhookgroup_wait: 30sgroup_interval: 1mrepeat_interval: 5m #告警间隔时间5分钟group_by: [alertname]routes:- receiver: webhookgroup_wait: 10sreceivers: # 告警接收者配置,定义如何处理和发送告警
- name: webhookwebhook_configs:- url: http://192.168.110.45:8060/dingtalk/webhook1/send  # 告警 Webhook URL,钉钉服务urlsend_resolved: true # 是否发送已解决的告警。如果设置为 true,则在告警解决时发送通知
启动
docker run --name alertmanager -d -p 9093:9093 -v /opt/alertmanager/:/etc/alertmanager/ --name alertmanager prom/alertmanager
(3)启动grafana
docker run --name grafana  -d -p 3000:3000 --name=grafana grafana/grafana
(4)启动prometheus

在启动prometheus之前,可以自己编写一个prometheus.yml文件,然后使用卷挂载到该容器内部。

# 创建挂载目录
mkdir /opt/prometheus
cd /opt/prometheus/
# 编写该文件
vim prometheus.yml

prometheus.yml文件

global:scrape_interval:     60sevaluation_interval: 60s
# Alertmanager配置
alerting:alertmanagers:- static_configs:- targets: ["192.168.110.45:9093"] # 告警服务地址
# rule配置
rule_files:- "/etc/prometheus/rules.yml"  #挂载在容器中的路径
scrape_configs:- job_name: prometheusstatic_configs:- targets: ['192.168.110.45:9090'] # 采取prometheus指标数据labels:instance: prometheus- job_name: linuxstatic_configs:- targets: ['192.168.110.45:9100'] # 采取本地指标数据,该服务和端口node_exporter容器已经暴露labels:instance: localhost

将prometheus和alertmanager进行关联,在prometheus目录下创建一个rules.yml文件的告警规则

root@ai:/opt/prometheus# pwd
/opt/prometheus
root@ai:/opt/prometheus# cat rules.yml
groups:- name: host_monitoringrules:- alert: 内存报警expr: netdata_system_ram_MiB_average{chart="system.ram",dimension="free",family="ram"} < 800for: 2mlabels:team: nodeannotations:Alert_type: 内存报警Server: '{{$labels.instance}}'explain: "内存使用量超过90%,目前剩余量为:{{ $value }}M"- alert: CPU报警expr: netdata_system_cpu_percentage_average{chart="system.cpu",dimension="idle",family="cpu"} < 20for: 2mlabels:team: nodeannotations:Alert_type: CPU报警Server: '{{$labels.instance}}'explain: "CPU使用量超过80%,目前剩余量为:{{ $value }}"- alert: 磁盘报警expr: netdata_disk_space_GiB_average{chart="disk_space._",dimension="avail",family="/"} < 4for: 2mlabels:team: nodeannotations:Alert_type: 磁盘报警Server: '{{$labels.instance}}'explain: "磁盘使用量超过90%,目前剩余量为:{{ $value }}G"- alert: 服务告警expr: up == 0for: 2mlabels:team: nodeannotations:Alert_type: 服务报警Server: '{{$labels.instance}}'explain: "netdata服务已关闭"

注意:因为我们是使用挂载的方式将配置文件投射到容器中,相应的文件路径也要发生变化。
比如在prometheus.yaml文件中:rule_files: [“/etc/prometheus/rules.yml”] 的路径就要填写为容器内该文件存放的路径。

启动

docker run --name prometheus -d -p 9090:9090 -v /opt/prometheus:/etc/prometheus prom/prometheus

(5)启动webhook-prometheus-dingtalk

该服务不使用docker的方式,而是直接运行已经编译好的二进制文件,然后长期运行在服务器上的方式

1、首先获取钉钉告警机器人的webhook token和加签

2、安装webhook-dingtalk插件

wget https://github.com/timonwong/prometheus-webhook-dingtalk/releases/download/v2.1.0/prometheus-webhook-dingtalk-2.1.0.linux-amd64.tar.gztar zxf prometheus-webhook-dingtalk-2.1.0.linux-amd64.tar.gz 
mkdir -p /usr/local/prometheus/webhook-dingtalk
mv prometheus-webhook-dingtalk-2.1.0.linux-amd64/* /usr/local/prometheus/webhook-dingtalk

3、配置webhook-dingtalk使用systemd管理

cp /usr/local/prometheus/webhook-dingtalk/config.example.yml /usr/local/prometheus/webhook-dingtalk/config.yml
vim /usr/lib/systemd/system/webhook.service#webhook.service文件内容
[Unit]
Description=Prometheus-Server
After=network.target[Service]
ExecStart=/usr/local/prometheus/webhook-dingtalk/prometheus-webhook-dingtalk --config.file=/usr/local/prometheus/webhook-dingtalk/config.yml
User=root[Install]
WantedBy=multi-user.target

4、Webhook-dingtalk配置钉钉webhook地址,即修改config.yml文件(该配置文件目前为默认的,)

Webhook-dingtalk配置相对比较简单,只改以下三处即可,如下图:
加签秘钥、webhook地址是咱们在钉钉创建机器人时获取的!

vim /usr/local/prometheus/webhook-dingtalk/config.yml

5、添加钉钉报警模板

vim /usr/local/prometheus/webhook-dingtalk/template.tmpl{{ define "__subject" }}
[{{ .Status | toUpper }}{{ if eq .Status "firing" }}:{{ .Alerts.Firing | len }}{{ end }}]
{{ end }}{{ define "__alert_list" }}{{ range . }}
---
{{ if .Labels.owner }}@{{ .Labels.owner }}{{ end }}**告警主题**: {{ .Annotations.summary }}**告警类型**: {{ .Labels.alertname }}**告警级别**: {{ .Labels.severity }} **告警主机**: {{ .Labels.instance }} **告警信息**: {{ index .Annotations "description" }}**告警时间**: {{ dateInZone "2006.01.02 15:04:05" (.StartsAt) "Asia/Shanghai" }}
{{ end }}{{ end }}{{ define "__resolved_list" }}{{ range . }}
---
{{ if .Labels.owner }}@{{ .Labels.owner }}{{ end }}**告警主题**: {{ .Annotations.summary }}**告警类型**: {{ .Labels.alertname }} **告警级别**: {{ .Labels.severity }}**告警主机**: {{ .Labels.instance }}**告警信息**: {{ index .Annotations "description" }}**告警时间**: {{ dateInZone "2006.01.02 15:04:05" (.StartsAt) "Asia/Shanghai" }}**恢复时间**: {{ dateInZone "2006.01.02 15:04:05" (.EndsAt) "Asia/Shanghai" }}
{{ end }}{{ end }}{{ define "default.title" }}
{{ template "__subject" . }}
{{ end }}{{ define "default.content" }}
{{ if gt (len .Alerts.Firing) 0 }}
**====侦测到{{ .Alerts.Firing | len  }}个故障====**
{{ template "__alert_list" .Alerts.Firing }}
---
{{ end }}{{ if gt (len .Alerts.Resolved) 0 }}
**====恢复{{ .Alerts.Resolved | len  }}个故障====**
{{ template "__resolved_list" .Alerts.Resolved }}
{{ end }}
{{ end }}{{ define "ding.link.title" }}{{ template "default.title" . }}{{ end }}
{{ define "ding.link.content" }}{{ template "default.content" . }}{{ end }}
{{ template "default.title" . }}
{{ template "default.content" . }}

6、启动 && 开机自启

systemctl enable webhook.service --now
systemctl status webhook.service 

7、验证,查看端口是否启动

netstat -anput |grep 8060

三、测试

将node-exporter所在的容器停掉,查看效果

docker stop node-exporter所在的容器id

钉钉查看告警

参考:https://blog.csdn.net/weixin_45310323/article/details/130655840

https://blog.csdn.net/qq_52589631/article/details/131152150

相关文章:

  • 从画质设置看游戏引擎(其一)
  • 【ESP 保姆级教程】小课设篇 —— 案例:20231217_基于ESP8266的光照智能小灯
  • Mac使用brew安装软件报错
  • bluefs _flush_range allocated: osd用空间但是显示ceph_bluefs_db_used_bytes is 100%
  • 2024前端技术发展概况
  • 服务器使用frp做内网穿透详细教程,请码住
  • 删除搜狗拼音输入法,右键菜单打印及pdf操作
  • Spring MVC 参数校验 总结
  • Matlab实现鲸鱼优化算法优化回声状态网络模型 (WOA-ESN)(附源码)
  • 在pycharm中怎样调试HTML网页程序
  • SOLIDWORKS 2025基于浏览器角色的新功能:如何简化设计流程?
  • 《AI办公类工具表格处理系列之三——GPT-Excel》
  • 企业数字化转型的深度剖析:从理论到实践的全面指南
  • ansible playbook多个play多个task
  • ​​乐​​牛一​面​​​游​​卡​​一​二​​​​面​
  • 时间复杂度分析经典问题——最大子序列和
  • [数据结构]链表的实现在PHP中
  • CentOS 7 防火墙操作
  • crontab执行失败的多种原因
  • CSS实用技巧
  • Material Design
  • Vue.js 移动端适配之 vw 解决方案
  • 测试开发系类之接口自动化测试
  • 干货 | 以太坊Mist负责人教你建立无服务器应用
  • 函数式编程与面向对象编程[4]:Scala的类型关联Type Alias
  • 将 Measurements 和 Units 应用到物理学
  • 前端学习笔记之原型——一张图说明`prototype`和`__proto__`的区别
  • 区块链分支循环
  • 手机app有了短信验证码还有没必要有图片验证码?
  • 为什么要用IPython/Jupyter?
  • 我是如何设计 Upload 上传组件的
  • 中文输入法与React文本输入框的问题与解决方案
  • C# - 为值类型重定义相等性
  • MPAndroidChart 教程:Y轴 YAxis
  • ​LeetCode解法汇总518. 零钱兑换 II
  • ​secrets --- 生成管理密码的安全随机数​
  • # 利刃出鞘_Tomcat 核心原理解析(七)
  • #HarmonyOS:基础语法
  • (4.10~4.16)
  • (C#)一个最简单的链表类
  • (Redis使用系列) SpirngBoot中关于Redis的值的各种方式的存储与取出 三
  • (solr系列:一)使用tomcat部署solr服务
  • (附源码)springboot青少年公共卫生教育平台 毕业设计 643214
  • (附源码)计算机毕业设计ssm基于Internet快递柜管理系统
  • (紀錄)[ASP.NET MVC][jQuery]-2 純手工打造屬於自己的 jQuery GridView (含完整程式碼下載)...
  • (理论篇)httpmoudle和httphandler一览
  • (篇九)MySQL常用内置函数
  • (三)centos7案例实战—vmware虚拟机硬盘挂载与卸载
  • (未解决)jmeter报错之“请在微信客户端打开链接”
  • (一)WLAN定义和基本架构转
  • (原創) 系統分析和系統設計有什麼差別? (OO)
  • (轉貼) 2008 Altera 亞洲創新大賽 台灣學生成果傲視全球 [照片花絮] (SOC) (News)
  • *(长期更新)软考网络工程师学习笔记——Section 22 无线局域网
  • .bat批处理(一):@echo off
  • .net 4.0发布后不能正常显示图片问题