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

【监控报警体系建设】系统自动添加所有出入口监控

前情回顾

通过之前的两篇文章我们已经确定了监控与报警的标准
[【监控报警体系建设】监控标准与最佳实践]
[【监控报警体系建设】报警标准与最佳实践]

  • 监控标准有了,但是开发人员的能力各有所长,不一定所有人都能做或会做
  • 每次开发时都需要时时刻刻记着要在一个固定的位置添加监控,实在是太不程序员了

所以我们需要把这些固定需要添加监控的地方,自动生成监控。

哪些地方呢?

  • 项目入口: 项目对外提供的http接口、dubbo接口
  • 项目出口: 项目调用的RPC接口,包括http接口、dubbo接口、redis操作、数据库访问

怎么做呢?

  • 由于我是java程序员,所以我依托于spring框架。
  • 不管你是对外接口,还是调用rpc。都是需要一个spring bean去执行这些逻辑的。所以只要我们找到这些类,然后对这些对象加一个动态代理。就可以为这些操作都添加监控了
  • 怎么找到这些类呢?看下面

dubbo接口

  • dubbo中的提供者和消费者都是通过ServiceBean和ReferenceBean去创建对应的接口的
  • 所以在项目启动时通过spring的BeanPostProcessor接口,拦截这些bean即可
    在这里插入图片描述

HTTP入口

  • 同理,http拦截controller和RequestMapping即可
    在这里插入图片描述

feign调用http

  • 同理,feign拦截FeignClient
  • 这里要说明的一点是,我只是拦截了feign的http请求。如果你的项目是通过netty,okhttp,jdk原生http,spring httpTemplate。等框架发送的http请求,这里是拦截不住的
  • 但是你只要实现了对应框架的类,都是可以拦截到的(应该不会有人在自己的项目里使用多种不同的http发送实现吧)
    在这里插入图片描述

mybatis调用

  • 同理,拦截MetricMapperFactoryBean(mybatis的代理创建工厂类)
  • 但是这里不能直接创建监控代理,因为这是个工厂,工厂创建出来的对象才是真实的执行sql的对象,所以我们给工厂创建一个工厂拦截器代理。
  • 当工厂创建一个mybatis的mapper对象实现时,我们再给这个mapper对象添加监控动态代理

在这里插入图片描述
在这里插入图片描述

redis调用

  • 这里同mybatis代理一样,拦截的是redis连接的创建工厂
  • 因此同样先创建一个工厂代理,由工厂代理再创建连接的监控代理

在这里插入图片描述

自动警告提示

  • 不知道各位客官有没有遇到过系统突然运行卡顿,然后逐步排查,定位的过程
  • 现在既然有了监控,那么当某项监控项超出一定数值后,自动在日志中增加警告级别的日志
key: dubbo_method_invoke ,tag: is invoke too long,time: 2300
  • 在排查问题时非常实用

异常调用收集

  • 系统日常运行过程中,可能会有很多调用失败的场景
  • 在前面监控项的基础上可以自动收集调用失败的数据
  • 自动添加 monitor_key_error 作为所有失败的 key,原 key 加原 tag 作为本次的 tag 即可
  • 当数据收集到 grafana 上后,即可配置报警规则实现全面覆盖异常调用监控

大部分场景的自动监控就完成了

  • 另外这些我都已经帮你写好了,并且上传到了github上。就叫监控包吧
  • 下面是使用说明,如果对你有用。一定要回来关注我啊
  • 我的微信公众号叫【无所事事D杂货铺】
    image.png

监控包使用说明

  • 引入maven依赖
  • spring扫描到com.wsss包,加载包内的类

监控配置和规则

  • 引入包后,可以自动对RPC接口增加调用监控,默认是开启的,可以通过一下配置关闭
actuator.rpc.dubbo.enhance.enable:false    dubbo监控开关actuator.db.mybatis.enhance.enable:false    mybatis监控开关actuator.http.enhance.enable:false    http监控开关actuator.http.feign.enhance.enable:false    feign监控开关actuator.redis.template.enhance.enable:false    redis监控开关actuator.bean.definition.remove.enable:false    移除默认jvmThread监控

开关

  • 监控key的生成规则为
    • dubbo服务端:p_应用名_类名_方法名
    • dubbo客户端:c_应用名_类名_方法名
    • http接口:http_应用名_类名, tag:方法名
    • mybatis:mybatis_mapper_应用名_类名, tag:方法名
    • redis:redis_metrics_应用名, tag:方法名
    • feign:feign_应用名_类名, tag:方法名
    • 调用异常的key:monitor_key_error, tag:监控key_tag
  • 注意事项
    • 本监控包未将任何maven依赖传递下去,需要自行添加依赖
    • dubbo监控仅测试过2.7.23版本,其他版本可能不兼容
    • JDK8或JDK17请使用对应的版本

手动编码对要监控的点增加监控

// 耗时+计次监控
Monitor.TimeContext timeContext = Monitor.timer("key");
try {// 业务操作
} catch (Exception e) {// 错误率timeContext.error();log.error("downFromS3 error",e);
} finally {timeContext.end();
}
// 计次监控,不传num默认为1
Monitor.counter("key").end(num);
Monitor.counter("key").end();
// 非静态方法,需要注入
monitor.gauge("key",Object,ToDoubleFunction)

注解方式加监控,仅限spring管理的bean

// key为class的simpleName+_+methodName
@TimerMonitor
public void test() {}
http://www.rkmt.cn/news/68334.html

相关文章:

  • 微信小代码动态二维码外部实时展示系统
  • 2025年口碑好的碳酸钙吨袋/矿石吨袋厂家最新TOP实力排行
  • 2025年知名的粉碎机厂家最新推荐排行榜
  • 2025年12月软件开发公司权威推荐榜:小程序开发、APP开发,创新技术驱动与高效交付实力之选
  • 2025年靠谱的法兰加热管品牌厂家排行榜
  • 2025 国产 CMDB 厂商选型指南:自主可控时代的配置管理新方向
  • 2025年知名的橡塑保温板/发泡橡塑保温材料厂家最新TOP排行榜
  • YOLO11n.pt的 n 是什么意思
  • PBOOTCMS打开网站提示错误信息:执行SQL发生错误!错误: no such table:ay_config的解决方法
  • 2025最新古董回收交易公司权威榜单:古玩家具/瓷器/书画/钱币/银元/铜器/玉器/老物件回收优质品牌排名
  • 2025年稳压器行业十大标杆品牌
  • 2025年优质的食品保鲜制氮机/小型制氮机厂家实力及用户口碑排行榜
  • 2025年知名的铝合金伸缩门厂家推荐及选购参考榜
  • 2025 年 12 月智能仓储物流公司权威推荐榜:自动化、冷链、医药、电商仓储等全场景物流服务商深度解析与实力甄选
  • 2025 年 12 月应急救援背囊厂家权威推荐榜:专业级背囊/急救背囊/复苏背囊/清创手术背囊,守护生命安全的硬核装备之选
  • 2025年重庆水泵电机维修公司权威推荐榜单:电机马达维修‌/三菱电机维修‌/直流电机维修‌源头公司精选
  • P2097 资料分发
  • 2025控油洗发水怎么选?6款亲测专治油扁塌还强韧蓬松
  • 2025 年 12 月精密刀模与治具厂家权威推荐榜:激光/蚀刻/圆压圆刀模及冲压模具定制,匠心工艺与高效自动化解决方案深度解析
  • 2025佛山留学机构哪家好
  • JSAPIThree 数据源系统学习笔记:让数据在地图上可视化
  • PbootCMS指定内容多图调取与标签详解
  • Step-Audio-R1:音频深度推理模型;Soul 冲刺港交所,「AI+沉浸式社交平台」,累计注册用户达 3.9 亿丨日报
  • 2025年EUDR法规培训十大优质机构推荐,合规专家深度解析
  • 太阳风暴下的数字暗涌:空间天气如何触发软件漏洞
  • EXCEL匹配某一个单元格包含的字符,整行标记颜色
  • 2025国产CMDB厂商选型指南:自主可控时代的配置管理新范式
  • 【C语言】扫雷游戏详解 - 指南
  • 完整教程:从零开始搭建 flask 博客实验(3)
  • PbootCMS内容详情页标签