上周公司服务器凌晨两点突然CPU飙到98%,运维小哥睡眼惺忪爬起来查日志,翻了半小时才发现是某接口被恶意刷了上万次——其实早该在日志分析工具里设条规则:连续5分钟内同一IP访问/login接口超200次就自动标红+发微信提醒。
为啥默认规则不够用?
像ELK、Graylog、甚至国产的Loggie这类工具,自带的“HTTP 500错误过多”“响应时间突增”规则确实好用,但现实场景哪有这么规整?比如你刚上线一个活动页,/promo/2024接口流量暴涨10倍是正常的;但同一IP每秒刷10次 /api/check-coupon 就明显不对劲。这种业务逻辑,得自己动手写规则。
自定义规则不是写代码,是填空题
主流工具都支持可视化配置或简单表达式。以Graylog为例,在Alerts → Create alert里选Custom search,核心就三块:
搜索语句:source:"nginx-access" AND path:"/api/login" AND status:>=400
时间窗口:5 minutes
触发条件:count() > 30再点开Notifications,勾选企业微信机器人Webhook,填上你的hook地址——下次再有批量撞库行为,手机立马弹窗,比看监控大屏快多了。
举个更实在的例子
你用的是轻量级工具Logstash+Grok?直接改配置文件就行。在filter区块里加一段:
if [path] == "/admin" and [status] == 200 {
mutate { add_tag => "admin_access_normal" }
}
if [path] == "/admin" and [status] == 401 {
mutate { add_tag => "suspicious_admin_login" }
}之后在Kibana里搜tag:suspicious_admin_login,就能单独看所有后台登录失败记录,配合地理IP插件,还能一眼揪出半夜三点从俄罗斯、巴西连着试错的IP。
规则不是越多越好。建议先盯住三个地方:管理员路径、支付回调、用户注册接口。每条规则加完,用curl -X POST模拟几条测试日志,看告警是否准时触发——别等真出事才手忙脚乱。