巧用Categraf探针mtail插件实现系统日志监控告警

李沈阳@海信 2023年1月10日

目前市面上对于日志监控告警的主流方案主要围绕ELK及其变种展开,通过探针采集系统日志写入Kafka,然后基于Kakfa消费数据写入ES,采用定时查询ES 做异常告警;另一种方案则是基于Kafka流式数据,采用Flink直接做异常告警。

这种方式好处就是日志实现了统一存储,查询分析会更方便。而告警方面,定时查询,会存在告警时间实时性存在误差;如果基于Flink实现告警,有利于更复杂方案的告警,且初始搭建成本较高。同时网络传输日志的网络代价也不容易忽略,尤其是网络带宽占用随日志量波动。

相对于应用日志的差异性,系统日志则更趋向于稳定。对于系统日志,只要系统不发生严重异常,则几乎不需要关注。因此,对于系统异常进行归类整理,通过将日志异常指标化,是可以满足系统异常告警要求的。同时这种方式,对系统日志实时监控,不进行原始日志传输,二次存储,告警实时性而以保证,对于网络也是一种稳定的负载。

更为重要的是,目前夜莺推荐探针Categraf 已经集成了google的mtail(日志指标化)插件,我们只需要按照Categraf 探针,并配置mtail插件启用日志监控,即可将异常指标采集,轻松送到夜莺服务端,进而复用夜莺告警能力,实现轻量化的日志告警。

以下是我们整理的日志告警mtail 配置,share 如下,包括10中系统严重错误告警,供各位参考,Enjoy:

input.mtail/mtail.toml内容如下:

[[instances]]
progs = "/usr/local/categraf/conf/input.mtail/progs/"
logs = ["/var/log/messages"]
override_timezone = "Asia/Shanghai"

十种严重系统错误的正则化检测文件配置如下,这是本文的重点:

# file BlockForMore.mtail:
counter system_blocked_morethan_error
/blocked for more than/ {
 system_blocked_morethan_error++
}

# file BUGHardareLookup.mtail:
counter system_hardlookup_bug
/Hard LOCKUP/ {
 system_hardlookup_bug++
}

# file BUGSoftLookup.mtail:
counter system_softlookup_bug
/BUG: soft lockup/ {
 system_softlookup_bug++
}

# file CallTrace.mtail:
counter system_call_trace_error
/Call Trace/ {
  system_call_trace_error++
}

# file HardwareError.mtail:
counter system_hardware_error
/Hardware Error/ {
 system_hardware_error++
}

# file KernelBug.mtail:
counter system_kernel_bug
/kernel BUG at/ {
 system_kernel_bug++
}

# file KernelPanic.mtail:
counter system_kernel_panic_error
/Kernel panic/ {
 system_kernel_panic_error++
}

# file MemoryCgroupOutOfMemory.mtail:
counter cgroup_out_of_memory_error
/Memory cgroup out of memory/ {
  cgroup_out_of_memory_error++
}

# file OutOfMemory.mtail:
counter system_out_of_memory_error
/Out of memory/ {
  system_out_of_memory_error++
}

# file UnableHandleKernel.mtail:
counter system_unable_handle_kernel_error
/BUG: unable to handle kernel/ {
 system_unable_handle_kernel_error++
}
开源版
Flashcat
Flashduty