3、日志过滤与搜索:使用 include、exclude、begin、section 等管道符过滤日志

说实话,刚入行那会儿,我最怕的就是看交换机日志。

一打开日志文件,几千行、上万行,密密麻麻的。眼睛都快看瞎了,也找不到真正有用的信息。后来带我的老工程师跟我说了一句话,我到现在都记得——「别用眼睛找,用命令找。」

嗯,今天我就把当年学到的这些过滤技巧,全部分享给你。

3.1 为什么需要日志过滤?

交换机每天产生的日志量,比你想象的大得多。端口 UP/DOWN、STP 拓扑变化、用户登录、配置变更……这些信息混在一起,就像一锅大杂烩。

你想想看,如果核心交换机出了故障,你还在几千行日志里翻「error」关键字,黄花菜都凉了。

所以,日志过滤的核心目的就两个:

  • 缩小范围:只关注你关心的那部分日志
  • 提高效率:从「大海捞针」变成「精准定位」

核心原则:先过滤,再分析。别上来就看全部日志,那是新手干的事。

3.2 四大管道符详解

华为、华三的交换机,都支持用管道符「|」对日志进行二次过滤。我个人最常用的有四个:includeexcludebeginsection

3.2.1 include —— 只保留包含关键字的行

这个最简单,也最常用。说白了就是「我只想看带某个词的内容」。

<Huawei> display logbuffer | include error
<Huawei> display logbuffer | include DOWN
<Huawei> display logbuffer | include 192.168.1.1

我在项目中遇到过这么个事:客户说网络每隔几分钟就断一次。我登录核心交换机,直接敲了 display logbuffer | include DOWN,结果发现某个接入交换机的端口在疯狂 UP/DOWN 抖动。前后不到 30 秒,定位到问题。

小技巧:include 支持正则表达式。比如 | include (error|fail|down),可以同时匹配多个关键词。

3.2.2 exclude —— 排除包含关键字的行

这个和 include 正好相反。有时候日志里大量重复的信息,比如某个端口每隔几秒就发一条日志,把真正有用的信息都淹没了。

<Huawei> display logbuffer | exclude GigabitEthernet0/0/1
<Huawei> display logbuffer | exclude Vlanif1

举个例子:你排查问题时,发现某个端口一直在刷日志,但你知道这个端口不是问题根源。这时候用 exclude 把它过滤掉,剩下的日志就清爽多了。

注意:exclude 是「排除整行」,不是排除某个单词。只要这一行里出现了你指定的关键字,整行都会被过滤掉。

3.2.3 begin —— 从匹配到的行开始显示

这个命令有点意思。它不是只显示匹配的行,而是从匹配到的行开始,一直显示到日志末尾。

<Huawei> display logbuffer | begin 2025-01-15
<Huawei> display logbuffer | begin %

为什么要用 begin?我习惯用它来「切分」日志。比如日志文件很大,我只想看某个时间点之后的内容。或者日志里有很多模块的日志,我只想看从某个模块开始的部分。

我记得有一次,日志文件有 3 万多行,客户说「从下午 3 点开始出问题的」。我直接 | begin 15:00:00,瞬间把范围缩小到几千行。

3.2.4 section —— 显示匹配行及其上下文

这个是我个人最推荐的。section 会显示匹配到的行,以及它前后相关的行。对于分析故障原因特别有用。

<Huawei> display logbuffer | section error
<Huawei> display logbuffer | section interface

section 和 include 的区别在哪?include 只显示那一行,section 会显示一个「段落」。比如你匹配到一条 error 日志,section 会把这条 error 前后几秒的日志都显示出来。这样你就能看到 error 发生之前发生了什么,之后又发生了什么。

实战经验:我排查 STP 拓扑变化时,必用 section。因为 STP 的变化往往伴随着一连串的日志,只看单行根本看不出因果关系。

3.3 组合使用:管道符的进阶玩法

单个管道符用熟了,就可以组合起来用。交换机支持多次管道过滤。

<Huawei> display logbuffer | include error | exclude Vlanif1
<Huawei> display logbuffer | begin 2025-01-15 | include DOWN

第一个命令:先找出所有包含 error 的行,再排除掉包含 Vlanif1 的行。

第二个命令:从 2025-01-15 开始显示,然后只保留包含 DOWN 的行。

你想想看,这样一层层过滤下去,几千行日志最后可能就剩下几十行。排查效率直接翻倍。

避坑指南:我曾经犯过一个错误——先 exclude 再 include,结果把关键信息也排除了。建议顺序是:先 include 缩小范围,再用 exclude 排除干扰项。

3.4 实战案例:快速定位端口抖动

光说不练假把式。我拿一个真实案例给你演示一下。

场景:某公司内网频繁断连,用户投诉不断。

排查步骤

  1. 登录核心交换机,查看日志总量
<Huawei> display logbuffer
// 输出 5000+ 行日志
  1. 用 include 过滤端口状态变化
<Huawei> display logbuffer | include UP|DOWN
// 输出 200 行,发现 GigabitEthernet0/0/5 频繁变化
  1. 用 section 查看该端口的完整上下文
<Huawei> display logbuffer | section GigabitEthernet0/0/5
// 看到该端口在 10 分钟内 UP/DOWN 了 30 多次
  1. 用 exclude 排除其他端口,只关注问题端口
<Huawei> display logbuffer | include GigabitEthernet0/0/5 | exclude Vlanif
// 确认是物理端口问题,不是 VLAN 接口问题

整个过程不到 5 分钟。如果不用过滤,光翻日志就得翻半天。

3.5 不同厂商的命令差异

这里我提醒你一句:不同厂商的交换机,管道符的用法可能略有不同。

厂商 查看日志命令 管道符支持
华为 display logbuffer include, exclude, begin, section
华三 display logbuffer include, exclude, begin, section
思科 show logging include, exclude, begin, section
锐捷 show logging include, exclude, begin

嗯,这里要注意:锐捷交换机不支持 section,只能用 include 加正则来模拟。我刚开始用锐捷时就被坑过一次,还以为命令敲错了。

3.6 我的个人习惯总结

最后,分享几个我平时用日志过滤的小习惯:

  • 先看时间:用 begin 定位到故障时间点,别从头看
  • 再找关键词:用 include 过滤 error、fail、down 等
  • 最后看上下文:用 section 查看关键日志的前后关联
  • 组合使用:一层层过滤,直到剩下真正有用的信息

一句话总结:日志过滤不是技术问题,是习惯问题。养成先过滤再分析的习惯,你的排错效率至少提升 3 倍。

好了,这一节的内容就到这里。下一节我会讲如何通过日志分析常见的网络故障类型,包括环路、ARP 攻击、STP 震荡等。到时候见。