【升职加薪秘籍】我在服务监控方面的实践(9)-报警设计

大家好,我是蓝胖子,关于性能分析的视频和文章我也大大小小出了有一二十篇了,算是已经有了一个系列,之前的代码已经上传到github.com/HobbyBear/performance-analyze, 接下来这段时间我将在之前内容的基础上,结合自己在公司生产上构建监控系统的经验,详细的展示如何对线上服务进行监控,内容涉及到的指标设计,软件配置,监控方案等等你都可以拿来直接复刻到你的项目里,这是一套非常适合中小企业的监控体系。

在前面的几节里,我挨个从机器监控,应用监控,中间件监控(mysql,redis) 应该如何来做,但光有监控还是不行的,我们不可能时时刻刻都盯着监控大盘,所以还需要有报警机制,这一节我们就来仔细研究下这部分。

监控系列的完整代码已经上传到github

github.com/HobbyBear/easymonitor

报警架构介绍

我们再来回顾下之前介绍的架构图,我们拥有一个自定义的告警服务。

整个报警来源主要分两部分,日志告警和指标告警,日志告警会对整个系统里错误等级的日志进行告警,指标告警则是在grafana上建立告警规则,最后通知到自定义的告警服务,由告警服务发送告警到各自的告警群。

image.png

logstash 日志告警

先来看看日志告警的配置,在logstash里,可以配置多输出源,这也是我们为啥要将filebeat的日志先发送到logstash的原因,filebeat只能单输出源,而我们的需求是需要将日志同时输出到es以及自定义的报警服务里。

output {  
  stdout { codec => rubydebug }  
  elasticsearch {  
    hosts => ["http://elasticsearch:9200"]  
    index => "easymonitor-%{[fields][log_type]}-%{+yyyy.MM.dd}"  
  }  
  if [level] == "error" {  
    http {  
           http_method => "post"  
           url => "http://ubuntu:16060/alert_log"  
        }  
  }  
}

logstash 里配置如果日志等级是error那么则将调用我们自定义的告警服务接口。

grafana_43">grafana指标告警

接着看下,指标告警的内容。在grafana上配置contact points 这个是触发告警时的通知策略。我们需要把它配置一个webhook端点,也就是告警服务的接口。

Pasted image 20230724115153.png

接着,将它设置为默认的通知策略。

Pasted image 20230724115319.png

最后,去Alert rules面板定义一些自定义的监控规则就行,到时候指标异常后就会通过设置好的http接口发送过来。

Pasted image 20230724115510.png

关于grafana的Alert rules 的配置,有几个关于时间的选项,我再说一下,如下,在配置报警规则的时候,需要配置两个时间,一个是多久运行一次指标的评估表达式,一个是配置在报警的持续时间,比如我在配置中写了10s运行一次报警,持续30s,也就是如果连续3次都触发了异常,那么就会对这次异常进行报警。

Pasted image 20230724134445.png

在报警通知的时候,也会有时间设置。

如下,group wait表示收到来自不同group时的报警时,在通知webhook端点时,不同group之间的报警会间隔30s才会发送,group interval表示同一个group报警规则在发送时,一批报警发送后,新的一批报警需要再5m后再发送给webhook端点。repeat interval 表示,相同的告警在4h内不会重复发送。

Pasted image 20230724134847.png

针对项目组和应用做不同报警策略

无论是日志告警还是指标异常报警,我们都需要注意一点,那就是报警的分组,因为如果把多个项目组的报警都发往一个告警群,会造成告警过多且杂。

好的设计应该是按项目组对报警进行分组发送到不同的告警群。不同的告警群由各自的业务负责人负责,所以我们在日志打印或者暴露指标时都携带了一个维度,应用服务的名称,通过应用服务的名称区分不同的项目组,并且关联到特定的钉钉告警群。

并且由于是自研的告警服务,我们还可以针对不同的项目组做一些定制化的告警策略。

应用服务和告警群的映射关系被配置到数据库表里,由告警服务读取后常驻与内存中,新的服务接入时也只需要往数据库插入一条配置便可以让他拥有告警能力,十分便捷。

总结

简单总结下,这一节也是构建服务监控系统的最后一节,后续有时间我可能会出一版容器环境下的监控,不过换汤不换药,主要是学习监控系统的思想,应该如何监控,应该如何通过这些监控指标或者日志定位问题,如何更好的定位问题,高效解决问题,一直都是我们的目的,大家对监控系统有什么好的想法或者实践,欢迎留言,我们一起探讨。

在万千人海中,相遇就是缘分,为了这份缘分,给作者点个赞👍🏻不过分吧。


http://www.niftyadmin.cn/n/4984490.html

相关文章

Qt 对象深拷贝和浅拷贝举例

文章目录 1. 浅拷贝(Shallow Copy)2. 深拷贝(Deep Copy): 在Qt中,对象的拷贝可以分为浅拷贝(Shallow Copy)和深拷贝(Deep Copy)两种。下面是两种拷贝的示例代…

SQL注入漏洞复现

文章目录 搭建环境启动环境漏洞复现报错注入使用sqlmap 前提条件: 1.安装docker docker pull medicean/vulapps:j_joomla_22.安装docker-compose docker run -d -p 8000:80 medicean/vulapps:j_joomla_23.下载vulhub Docker Compose是 docker 提供的一个命令行工具&…

qemu编译与使用

文章目录 1、安装依赖2、下载qemu源码3、编译4、运行5、qemu参数 qemu 是一个硬件虚拟化程序(hypervisor that performs hardware virtualization),与传统的 VMware / VirtualBox 之类的虚拟机不同,它可以通过 binary translation…

《C和指针》笔记18:前缀++ 和后缀++

C 语言里有前缀 和后缀,使用还是有点不同的。对应的还有--操作符,但它们的工作原理与此相同,只是它所执行的是减值操作而不是增值操作。我们只要掌握的原理,--的原理也就知道了。 在这里我们把符号叫做操作符,把它操作…

新增!视频智能分析/AI算法智能分析网关V5告警功能添加教程来咯!

智能分析网关系列是基于边缘AI计算技术,可对前端摄像头采集的视频流进行实时检测分析,能对监控画面中的人、车、物进行识别,可实现的检测包括:人脸检测与识别、车辆检测与识别、烟火识别、安全帽/反光衣识别、区域入侵识别等&…

测试用例执行进度跟踪的六大方法

软件测试的重要环节之一是跟踪和管理测试用例的执行进度。良好的测试用例执行进度管理,可以确保测试更加完善全面,发现更多问题,保证软件质量。一般有这么几种常用的测试用例执行进度跟踪方法: 测试用例管理工具 这种工具如TestLink&#xf…

ExpressLRS开源之基本调试数据含义

ExpressLRS开源之基本调试数据含义 1. 源由2. 代码2.1 debugRcvrLinkstats2.2 debugRcvrSignalStats 3. 含义解释3.1 ID(packetCounter),Antenna,RSSI(dBm),LQ,SNR,PWR,FHSS,TimingOffset3.2 IRQ_CNT,RSSI_AVE,SNR_AVE,SNV_MAX,TELEM_CNT,FAIL_CNT 4. 总结5. 参考资料 1. 源由 …

博流RISC-V芯片Eclipse环境搭建

文章目录 1、下载 Eclipse2、导入 bouffalo_sdk3、编译4、烧录5、使用ninja编译 之前编译是通过 VSCode 编译,通过手工输入 make 命令编译,我们也可以通过 Eclipse 可视化 IDE 来编译、烧录。 1、下载 Eclipse 至 Eclipse 官网 https://www.eclipse.org…