防火墙日志结构化,让异常访问查得快、告警配得准
“这个来源访问新服务,到底有没有被防火墙拦住?”
业务发布后,网络运维陈工要核查的是这样一个问题:过去半小时,来源地址 198.51.100.23 访问服务 192.0.2.80 的 443 端口,是否出现了拒绝记录。
他已经把防火墙日志集中收进了检索平台。输入来源 IP,能够搜出结果;但要回答业务,还得逐条看这个地址出现在哪个位置、连接指向哪里、处理结果是什么。换一位同事接手,这些辨认工作往往要再做一遍。
防火墙日志结构化能改善的,正是这段重复劳动:把原始消息里的访问关系提取成字段,让查询直接表达业务问题,并让同一套条件继续用于告警。
下面沿着这次核查,看看这件事怎样落地。地址和日志均为简化示例。

搜到地址,还要辨认方向
假设搜索结果里包含下面三条消息:
src=198.51.100.23 dst=192.0.2.80 dpt=443 action=deny
src=192.0.2.80 dst=198.51.100.23 dpt=443 action=deny
src=198.51.100.23 dst=192.0.2.80 dpt=443 action=allow
三条都包含陈工搜索的 IP,但只有第一条符合他要找的访问方向和拒绝动作。第二条的连接方向相反,第三条则是放行记录。它们是三条独立的示例记录,不能仅凭地址相同就当成同一次连接的过程。
全文搜索适合找线索,接下来的判断仍要靠人读懂每一行。日志多了以后,陈工花在辨认格式上的时间,会混进真正的故障分析时间里。
接入信息还可能带来另一层歧义。通过 Syslog 收集日志时,平台记录的来源地址可能属于防火墙或转发节点;消息正文里的 src 才可能是这条业务连接的源地址。如果按前者查询,查到的是某台设备发来的日志,范围会大得多。
因此,这次核查首先要明确四件事:业务连接源、连接目的、目的端口、动作结果。 把它们从消息中提取出来,查询就可以同时约束方向和动作,无须在结果中再手工剔除后两类记录。
让查询直接表达问题
这四个字段不需要复杂命名,团队能够理解并持续使用即可。例如:
| 要判断的内容 | 示例字段 | 本次核查条件 |
|---|---|---|
| 谁发起访问 | traffic_src_ip | 198.51.100.23 |
| 访问哪个目标 | traffic_dst_ip | 192.0.2.80 |
| 访问哪个端口 | traffic_dst_port | 443 |
| 设备如何处理 | traffic_action | deny |
这些是团队可以采用的示例字段,并非平台固定字段。实际提取时,应以设备输出和现场约定为准。
有了这组含义明确的字段,陈工能够把业务的问题完整地交给查询:在指定时间范围内,筛选这个来源到这个服务端口的拒绝记录。查到结果后,还能查看命中趋势,确认拒绝记录集中在哪段时间。
如果业务继续追问“它还访问过哪些目标”,也不必重新翻全部原文。保留来源地址和时间范围,调整目标条件,再观察目的地址或端口的分布即可。字段让排查能够沿着问题继续深入,而不必每换一个问题就重新解读日志格式。
这里也要保留判断边界:查到拒绝记录,能够证明设备记录过对应访问的拒绝动作;要认定它就是业务异常的原因,仍需结合业务侧现象与其他证据。
把排查经验留在系统里
为这一次核查临时写一段文本处理脚本,也可以得到需要的结果。但格式识别、字段含义和筛选逻辑如果只留在个人脚本里,下次换人、换设备或增加告警需求时,维护成本仍然存在。
WeOpsX 日志中心可以在接入实例上维护日志提取规则,将这部分工作放到采集处理环节。设备能够向可用采集节点发送 Syslog、账号具备相应组织和实例权限后,就可以从少量样例开始验证。
对于示例中的键值对消息,可以使用键值解析;其他格式按实际情况选择 JSON、分割或正则提取等方式。要完成的是把原始内容准确写入约定字段,不需要为了“解析得全面”一次拆出所有内容。
日志提取器支持真实样例预览。陈工可以把前面的放行、拒绝和不同连接方向记录一起放进验证范围,检查它们能否保留正确的字段和值。message 原始消息受保护,不允许被提取规则删除,核查时仍有原文可对照。
多种设备共用接入管道时,规则还应限定作用范围。平台支持给单条提取规则设置附加条件,用可确认的来源标识或格式特征区分消息;多条规则按顺序执行,后续处理依赖前一步结果时,要一并检查。
这一步的价值会在交接时体现出来:同事接手后,可以直接使用已经验证的字段查问题。WeOpsX 还支持按当前组织保存、加载搜索条件,团队能够把高频核查方式留下来,减少重复拼查询和口头解释。

从原始消息到字段,再到可复用的搜索条件,团队逐步积累的是一套共同的排查方法。日志持续增加时,这套方法可以继续使用;格式发生变化时,也有明确的规则需要维护。
告警要对应需要响应的访问
核查完成后,业务希望持续关注同类问题。此时,陈工已经有了一组能描述目标访问的字段,无须重新从一段宽泛的原文关键词开始配置告警。
例如,对于一条本应保持连通的业务访问,可以关注“指定来源、目标服务和端口的拒绝记录”;如果偶发拒绝无需立即处理,则需要再讨论检测周期、出现次数和通知对象,把持续异常与零星记录区分开。
WeOpsX 日志中心提供关键字告警和聚合告警。前者可通过相应查询关注特定记录,后者可设置聚合维度和条件,观察一段时间内同类记录的集中出现。选用哪一种,应跟着需要响应的业务情况确定。
结构化字段在这里提供了更明确的筛选依据。只关注原文中的拒绝关键词,可能把无关目标、相反方向的连接和预期拦截一起带进来;限定了来源、目标、端口和动作,告警才更接近团队实际关心的对象。
同样出现 deny,例行阻断和应当放通的业务访问,处置要求可能完全不同。告警配得准,需要字段准确,也需要明确什么情况值得人来处理。 平台能够按条件执行检测,业务含义仍要由负责这条访问链路的人确定。
告警生成后,处理人可以通过事件时间线和关联原始日志,核对触发依据。这样交给下一位同事的就不只是一条通知,还包括能够继续调查的记录。
用一组日志验证改造效果
提取规则保存并发布后,陈工还需要观察新到日志。样例预览、配置发布、新日志出现字段,是不同的检查点;页面显示已发布,仍应确认实际记录的取值正确。
发布失败时,运行环境继续使用上一份有效配置。预览也不会回填已入库的历史日志,因此验证应选用发布后新进入采集链路的记录,避免拿旧数据判断新规则失效。

与其只检查“字段有没有出现”,不如沿用开头的核查问题,做一组有明确预期的验证:
| 验证记录 | 对本次拒绝查询的预期 |
|---|---|
| 指定来源到目标端口,动作是拒绝 | 应命中 |
| 同样的来源与目标,动作是放行 | 不应命中 |
| 地址相同,但连接方向相反 | 不应命中 |
| 缺少判断所需字段 | 先核对原文和提取结果,不直接判成无异常 |
查询通过后,再验证对应告警是否按设计条件产生,并能回看原始记录。日志策略按配置周期扫描,存在查询安全延迟,需要结合检测周期观察结果,不能以刚收到日志时有没有通知作为唯一依据。
回到陈工最初的工作,现在的核查可以按同一套方法完成:确认时间范围,按访问关系筛选,回看拒绝记录,再结合业务现象判断。后续同事可以复用这套条件,持续观察则由经过验证的告警策略承接。
这也是防火墙日志结构化最实际的产品价值:把反复辨认格式的时间省下来,把一次排查形成的条件留给团队,并让告警的筛选范围更加明确。先让几个关键字段服务好一个高频问题,往往比一开始追求“所有日志、所有字段都解析完”更容易获得可见的改善。