对于互联网公司。监控就像自己的眼睛,没有眼睛的人,面临的灾难可想而知,所谓无监控不调优,目前的监控总共分几类:
一类 服务级别监控:(服务是否可用,磁盘是否足够,cpu是否高)这个创业公司都是直接用云的赋能服务,目前简单的监控,容器化后,k8s帮我做了很多
二类 业务级别监控:(QPS、RT、失败比例、错误日志等)业务级别的监控,一般大的公司都有针对自己的特点对开源框架的组合。之前公司采用的是:
监控埋点日志->KAFKA->influshdb-> 前端grafana展示 。
目前创业公司,时间和资源有限,就在考虑一种简单的能快速上线的方案。下面采用的就是简单的基于钉钉的监控:
首先平时一直在用钉钉,比较赞的地方,钉钉提供了非常方便可以定义的钉钉机器人,可以通过webhook方式推送消息和格式。
具体可参考: https://open-doc.dingtalk.com/docs/doc.htm?treeId=257&articleId=105735&docType=1
具体实现:
简单版本实现: 通过每个服务接口异常进行捕获,对异常消息进行处理同时采用线程池(单线程:纯内存操作不是IO操作)方式推送消息到本地队列,队列限制大小(可配置),避免无限制推送
然后推送模块定时按一定频率(可配置)获取消息。然后推送消息到钉钉机器人。引入方式各个服务接入jar
后续版本扩展:
是否可以同样多种推送方式(邮件、短信、钉钉)
是否支持多种存储消息方式(内存队列、MQ、Redis)
是否可以接入简单的统计(方法执行时间、方法访问量、超时告警等)
1、整体流程
2、实现细节(Spring boot接入)
具体源码就不公开了
1、利用spring boot的自动注入功能。在spring.factories 中增加启动注入
2、利用ConditionalOnProperty注解中增加配置 只有注解启用时候才会加载成功
@Configuration @EnableConfigurationProperties(DingtalkProperties.class) @ConditionalOnProperty(value = "monitor.alert.dingtalk.enble",havingValue ="true")
3、DingtalkProperties中配置参数
配置参数:
1 monitor: 2 alert: 3 dingtalk: 4 enble: true 5 phone: [xxxx,xxxx] 6 url: https://oapi.dingtalk.com/robot/send? access_token=
这样服务接入的时候更灵活,简单~
参数名 |
可选值 |
默认值 |
描述 |
示例 |
---|---|---|---|---|
enable | true| false | false | true 启用 false 禁用 | 如上 |
phone | 手机号 | 无 | 通知人手机号,多个人用逗号隔开 | 如上 |
url | url地址 | 无 | 通知的地址,必填项 |
如上 |
level | short|full | short | 通知信息是否缩短 short:通知内容最长500个字符 full:通知内容不做缩短 | 建议默认值 |
capacity | 整数 | 100 | 存储异常信息个数,超过阈值不进行推送 | 建议默认值 |
pull-interval | 整数 | 5000 | 报警时间间隔(ms) | 可自定义修改 |
at-all | true| false | false | 组内所有都会被通知 | 建议默认值 |
env | 字符串 | Spring激活环境 | dev|test|pro等 | 可自定义修改 |
applicationName | 字符串 | Spring应用名称 | order-service|user-service等 | 可自定义修改 |
4、接入方式(jar包引入)
告警通知需要满足条件:
-
- @AccessService注解的类或方法中抛出的异常
- 配置文件中启用了监控(即enable:true)
5、通知效果
所有评论(0)