最近想做一个功能,就是监控日志,遇到error日志就推送到钉钉。最简单的方案就是在全局异常处理中,针对异常调用钉钉的webhook。
只是我们系统是集成了ELK 和 Skywalking的,我就想着能不能基于这两个服务进行处理。
- 用
skywaling自带的告警。 - 基于
elk用elastalert
skywalking 报警
- 自带告警功能,只需配置规则即可。
- 并且可以接入各类配置中心,动态更新告警规则。
- 支持各种常用的通知方式
钉钉、微信等,配置也简单。 - 规则上需要学习
oal语法,自定义规则,比较灵活。 - 报警信息有限,我看消息模板只有
id,name两个字段。
具体的使用方式我是看这个博客,很实用。 blog.51cto.com/knifeedge/5…
效果大概这样
起初我想着可以将异常堆栈、TID 等信息都推送到钉钉。实际上只能添加 ID、NAME两个变量。 skywalking 把重要的数据都写在name中。
oap 消息格式化代码
elastalert 报警
这个项目就好像是一个定时任务。重点是其灵活的规则rule.根据去不断地查询es数据,然后再分析这些数据,根据规则去报警。规则可以自定义es查询语句,还是很方便的。
我找到了一个封装成 docker 的github。文档十分详细,入门肯定没问题。https://github.com/anjia0532/elastalert-docker
最终也没有选择这个项目。因为我们项目使用全局异常拦截做流程处理,会有很多异常日志,容易误报。
后续
。。 暂时没找到合适的处理方式。