Logback接入企信实现自动告警
1.项目背景
在项目日常开发中,开发人员需要关注线上的异常日志,进而针对异常日志反应的程序问题来相应的优化改造代码。但项目系统众多&集群的情况下,不可能要求开发人员实时去查询日志是否有报警或者异常日志。通常我们需要对日志进行监控,当日志出现异常日志时,可以实时通过通讯手段自动提醒开发人员。
2.常用日志监控手段
针对日志监控,通常的手段有,在日志输出时,并在写到磁盘前,就可以通过拦截手段拿到日志并分析日志的级别(本文的基本实现方式),或者在异常处理时就触发日志警告(比如告警系统Cat),也可以通过Java agent的手段(如skywalking使用探针技术收集),当然也可以在日志写到磁盘上,由ELK采集日志并分析日志,并将异常结果推送到用户,比如可以将日志采集并存储到阿里云的SLS,并由SLS分析并触发日志告警。
3.Logback日志
Logback是由log4j创始人设计的又一个开源日志组件。logback当前分成三个模块:logback-core,logback- classic和logback-access。logback-core是其它两个模块的基础模块。logback-classic是log4j的一个 改良版本。此外logback-classic完整实现SLF4J API使你可以很方便地更换成其它日志系统如log4j或JDK14 Logging。logback-access访问模块与Servlet容器集成提供通过Http来访问日志的功能。
当我们系统中集成使用了Logback,我们便可以很方便的管理我们的日志。其也提供了一些可实现的日志处理供我们自定义实现来处理日志操作。
可自定义实现的Appender4.接入思路及实现
其他的告警,都需要搭建一套完整的告警系统,如Cat,skywalking等都需要搭建独立的系统,为此,考虑成本,我们就实现由logback集成企信机器人来实现告警功能。如上图,通过logback,我们是通过appender将日志分析并写入到磁盘上,那么我们可以在appender获取到日志内容,并分析并判断是否需要告警,并在appender中处理并发送推送。
由于工作中我们使用的通讯工具是企信,为此我们可以考虑把日志告警推送到企信,企信提供了群聊机器人功能,非常方便我们实现。企信机器人接入文档:企信群聊机器人接入
企信机器人添加并获取webhook地址4.1 自定义appender
通过集成AppenderBase并重写append方法,在append方法中,判断采集的日志是否符合告警要求,如果符合,则发送告警信息到企信。
自定义appender发送告警4.2 自定义LevelFilter
自定义LogLevelFilter,重写decide,如果配置的Level与日志的Level匹配,则接受ACCEPT。在appender中,如果ACCPET,则选择触发告警。
自定义LevelFilter4.3 Logback.xml中配置使用
将自定义的appender配置到logback日志中,并执行filter级别。
Logback.xml中配置使用4.4 实际效果
实际告警效果,在发布上线后,appender获取到ERROR日志后,并触发告警信息到企业微信。
实际效果