尧图网站建设 尧图网络
  • 首页
  • 关于我们
  • 服务项目
  • 案例展示
  • 建站流程
  • 资讯中心
  • 联系我们
首页/资讯中心/详情

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

【监控报警体系建设】系统自动添加所有出入口监控
📅 发布时间:2026/6/19 3:04:16

前情回顾

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

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

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

哪些地方呢?

  • 项目入口: 项目对外提供的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() {}

相关新闻

  • 微信小代码动态二维码外部实时展示系统
  • 2025年口碑好的碳酸钙吨袋/矿石吨袋厂家最新TOP实力排行
  • 2025年知名的粉碎机厂家最新推荐排行榜

最新新闻

  • 黄金暴涨:虚拟时代的原始信仰
  • 如何用免费在线工具深度分析无人机飞行日志:UAV Log Viewer完全指南
  • 炉石传说终极插件指南:如何用HsMod快速提升游戏体验
  • Digital-IDE:3步在VSCode中搭建专业硬件开发环境
  • 凯乐石携手小沓AI:加速品牌数字化转型,迈向AI驱动新未来
  • 如何免费解锁Cursor Pro功能:3步实现AI编程助手无限使用终极指南

日新闻

  • 5分钟掌握Python进化算法:Geatpy高性能优化工具完全指南
  • Microchip 24AA044 EEPROM选型与应用全指南:从参数解析到实战编程
  • 华为的鸿蒙到底有多牛?为什么称作遥遥领先?

周新闻

  • 3步解锁iOS设备:applera1n激活锁绕过完全指南
  • 39 2026 人工智能证书终极盘点,普通人选 AI 证书可以从这些方向入手
  • Redis 暴露公网有多危险?从端口检查到补救步骤

月新闻

  • 【总结】入门篇:50句话让你记住架构核心概念
  • WeChatMsg技术方案解析:实现Mac微信数据自主管理的完整解决方案
  • WeChatMsg:革新性微信数据备份方案,打造你的专属数字记忆库

关于尧图

  • 公司简介
  • 团队介绍
  • 企业文化
  • 荣誉资质

服务项目

  • 定制开发
  • 电商建站
  • UI 设计
  • 运维服务

快速链接

  • 案例展示
  • 建站流程
  • 常见问题
  • 资讯中心

联系方式

  • 📍北京市朝阳区互联网产业园 A 座 10 层
  • 📞400-888-8888
  • ✉️contact@rkmt.cn
  • 🕐周一至周日 9:00-21:00

© 2024 北京尧图网络科技有限公司 版权所有 | 京 ICP 备 XXXXXXXX 号