日志监控思路分享,只监控日志内容,不存储

有一个这样的需求,就是实时监控日志文件的内容,不需要存储,仅当某行日志内容触发某个规则时调用一段业务逻辑就行了。比如用户触发限流规则,就将其封禁并发送钉钉通知到运维群。

看到这个需求首先想到的就是日志采集工具,如:FileBeat、Flume、Logstash、Vector。随即对这些采集工具进行了对比了解,对于当下需求都显得太过重量级,也就是说杀鸡焉用牛刀。

那么就尝试自己设计一个监控程序吧。

首先需要一个功能来实时读取日志文件,类似于 Linux 的 tail -n 1 xxx.log,可以将其称为 watcher 模块。watcher 模块读取的数据需要进行规则匹配。最简单的做法就是对字符串进行 contains 判断,类似于 |grep rule,将这个功能称为 rules 模块。

接着就是创建项目和做技术选型了。

从前面知道之所以要设计一个自己的监控程序,就是要做到轻量级,那么肯定要支持 native 部署,不能有运行时依赖。再考虑到要支持可扩展性(多规则、规则自定义和动态业务代码执行)。基于这两点考虑 Java 肯定不适合干这事了,Java 虽然有规则引擎如 drools 或者直接用 Groovy 也可以做的可扩展性,但 Java 对运行时依赖太重,即使用 GraalVM 打成 native 包,也不一定就好用。

因此,笔者选择使用 Rust 来开发做 watcher 模块开发,并集成 Lua 引擎到项目中,使用 Lua 脚本来提供可扩展性。Rust 高性能和可靠性非常适合来做这种非业务型系统开发,而 Lua 引擎极小的体积与 Rust 结合后,又为其带来了动态性。

那么就衍生出了以下结构。

watcher 实时采集日志,通过回调 scripts 中的 Lua rules 触发业务逻辑。scripts 依赖的公共类 Lua 函数和第三方库放在 lib 中。遵循需求,最终结构如下图。

未来要增加更多的业务规则,只要编写新的 Lua 脚本放到 scripts 目录中就可以了

相关推荐
毕设源码-赖学姐5 分钟前
【开题答辩全过程】以 基于Springboot的球场管理平台的设计与实现为例,包含答辩的问题和答案
java·spring boot·后端
BIBI204926 分钟前
Windows 上配置 Nacos Server 3.x.x 使用 MySQL 5.7
java·windows·spring boot·后端·mysql·nacos·配置
IT_陈寒33 分钟前
Redis高频踩坑实录:5个不报错但会导致性能腰斩的'隐秘'配置项
前端·人工智能·后端
CoolerWu35 分钟前
2025 · 我与 AI / Vibe Coding 的一年
前端·后端
不思念一个荒废的名字37 分钟前
【黑马JavaWeb+AI知识梳理】Web后端开发06 - SpringBoot原理篇
spring boot·后端
AC赳赳老秦40 分钟前
DeepSeek-Coder vs Copilot:嵌入式开发场景适配性对比实战
java·前端·后端·struts·mongodb·copilot·deepseek
9号达人1 小时前
支付配置时好时坏?异步方法里的对象引用坑
java·后端·面试
Tony Bai2 小时前
Go 性能分析的“新范式”:用关键路径分析破解高并发延迟谜题
开发语言·后端·golang
Kiyra2 小时前
Spring Boot Starter 自定义开发:封装中间件配置
spring boot·redis·后端·缓存·中间件·性能优化·rocketmq
HABuo2 小时前
【Linux进程(一)】进程深入剖析-->进程概念&PCB的底层理解
linux·运维·服务器·c语言·c++·后端·进程