3. 网络设备日志采集:交换机、路由器、防火墙的日志配置

日志采集是整个故障追踪的起点。你想想看,如果连日志都拿不到,后面分析得再漂亮也是白搭。这一章我们专门聊聊怎么把交换机、路由器、防火墙的日志老老实实地送出来。

我个人习惯把设备日志采集分成三步:配源头 → 定目标 → 调格式。说白了就是:谁发日志、发到哪、怎么发。下面我们逐个设备类型来拆解。

核心原则:日志一定要送出去,别只存在本地。设备重启、日志轮转、存储写满,任何一个坑都能让你丢失关键证据。我见过太多案例,故障发生时本地日志已经被覆盖了,最后只能靠远程日志服务器找回现场。

3.1 交换机日志配置(以 Cisco IOS / Huawei VRP 为例)

交换机是网络中最基础的设备,日志配置相对简单。但要注意,不同厂商的命令差异很大,别记混了。

3.1.1 Cisco IOS 交换机

Cisco 的日志配置核心就三条命令,我一般按这个顺序敲:

! 开启日志时间戳,方便定位故障时间点
service timestamps log datetime msec localtime show-timezone

! 指定日志服务器 IP(假设你的日志服务器是 192.168.1.100)
logging host 192.168.1.100

! 设置日志级别(默认是 debugging,生产环境建议用 informational)
logging trap informational

嗯,这里要注意:logging trap 控制的是发送到远程服务器的日志级别,而 logging console 和 logging buffered 是本地输出。我曾经遇到一个同事,只配了 logging console,结果远程服务器啥都没收到,排查了半天才发现是 trap 没开。

小技巧:建议同时开启 logging on(默认就是 on)和 logging source-interface,指定一个 Loopback 接口作为日志源 IP。这样即使物理接口 down 了,日志源 IP 也不会变,日志服务器做过滤时更稳定。

3.1.2 Huawei VRP 交换机

华为的命令风格和 Cisco 不太一样,但逻辑是相通的。我常用的配置如下:

# 开启信息中心(默认是开启的,但建议确认一下)
info-center enable

# 配置日志输出到日志服务器
info-center loghost 192.168.1.100

# 设置日志时间戳格式
info-center timestamp log { local-time | utc }

华为设备默认的日志格式里包含设备名称,这个在日志服务器上做源过滤时非常有用。我个人习惯在 info-center loghost 后面加上 channel logbuffer 参数,把不同通道的日志分开管理,避免日志风暴把服务器冲垮。

避坑指南:我曾经在华为交换机上遇到过一个问题——配置了 info-center loghost 后,日志服务器收不到任何日志。最后发现是设备默认使用 UDP 514 端口,而中间防火墙把 UDP 514 给拦截了。所以,配完日志后一定要用 display info-center 确认状态,再用抓包工具验证一下。

3.2 路由器日志配置(以 Cisco IOS-XR / Juniper JunOS 为例)

路由器的日志配置和交换机类似,但路由器通常承载更多路由协议,日志量更大。我建议在路由器上做更精细的过滤,别把 BGP 的 keepalive 日志也发到服务器上,那会刷屏刷到怀疑人生。

3.2.1 Cisco IOS-XR 路由器

IOS-XR 的日志配置比传统 IOS 更灵活,但也更复杂。核心配置如下:

! 配置日志服务器
logging host 192.168.1.100 vrf default

! 设置日志级别
logging console debugging
logging monitor debugging
logging trap informational

! 开启时间戳
service timestamps log datetime msec

IOS-XR 支持 VRF 感知的日志,如果你的管理网络在特定 VRF 里,记得在 logging host 后面加上 vrf 参数。我踩过这个坑——日志服务器在 management VRF 里,但没指定 VRF,结果日志全发到了默认 VRF,服务器死活收不到。

3.2.2 Juniper JunOS 路由器

Juniper 的配置风格是层级式的,和 Cisco 完全不同。我第一次接触 JunOS 时还不太习惯,但用熟了之后觉得这种结构很清晰。

set system syslog host 192.168.1.100 any any
set system syslog host 192.168.1.100 authorization info
set system syslog host 192.168.1.100 interactive-commands any

JunOS 的 any any 表示所有设施(facility)和所有级别都发送。生产环境我建议改成 any info 或更高级别,避免 debug 日志把网络带宽吃满。另外,JunOS 默认使用 UDP 514,但也可以配置 TCP 传输,更可靠。

对比一下:Cisco 和 Juniper 的日志配置差异很大,但核心要素是一样的——时间戳、服务器地址、日志级别。我建议你在实验室里把两种设备都配一遍,感受一下区别。实际工作中,你很可能同时管理多个厂商的设备。

3.3 防火墙日志配置(以 Palo Alto / Fortinet 为例)

防火墙的日志比交换机、路由器复杂得多。因为防火墙不仅要记录系统事件,还要记录会话、威胁、URL 过滤等安全日志。配置不当,日志量会非常恐怖。

3.3.1 Palo Alto 防火墙

Palo Alto 的日志系统非常强大,但配置起来也最繁琐。核心步骤是:

  1. 配置日志服务器:在 Device → Server Profiles → Syslog 里添加服务器 IP 和端口。
  2. 配置日志转发:在 Objects → Log Forwarding 里定义哪些日志类型转发到哪个服务器。
  3. 应用到安全策略:在 Policies → Security 里,每条策略都要勾选 Log at Session End。

我个人习惯把系统日志、威胁日志、流量日志分别发到不同的服务器或不同的端口,方便后续分类分析。比如:

日志类型 服务器 IP 端口 说明
系统日志 192.168.1.100 514 设备自身事件
流量日志 192.168.1.100 515 会话开始/结束
威胁日志 192.168.1.101 514 入侵、病毒等

避坑指南:我曾经在 Palo Alto 上配完日志后,发现流量日志量巨大,每秒几千条,直接把日志服务器打挂了。后来我加了过滤条件,只记录 deny 的流量和关键应用的 session。记住,防火墙日志一定要做限流和过滤,否则日志服务器扛不住。

3.3.2 Fortinet FortiGate 防火墙

FortiGate 的日志配置相对简单,但要注意它默认只记录本地日志,远程日志需要手动开启。

config log syslogd setting
    set status enable
    set server "192.168.1.100"
    set port 514
    set facility local7
    set source-ip 10.0.0.1
end

FortiGate 支持按日志类型分别配置不同的服务器,比如:

config log syslogd setting
    set status enable
    set server "192.168.1.100"
    set port 514
end

config log syslogd2 setting
    set status enable
    set server "192.168.1.101"
    set port 514
end

嗯,这里要注意:FortiGate 的日志默认使用 UDP,但也可以配置可靠的 TCP 传输。我个人建议在关键业务场景下使用 TCP,避免日志丢失。

3.4 日志采集架构总览

为了让你更直观地理解整个日志采集的流程,我画了一张架构图。这张图展示了从设备产生日志到日志服务器接收的完整链路。

日志采集架构总览 交换机 路由器 防火墙 网络传输(UDP 514 / TCP 514) 日志服务器(Syslog / ELK / Splunk) 日志存储与分析 说明:设备通过 UDP/TCP 将日志发送到日志服务器,服务器统一存储和分析

3.5 日志格式与协议选择

日志采集离不开两个核心选择:协议和格式。我简单总结一下:

协议 优点 缺点 适用场景
UDP 514 配置简单,开销小 可能丢包,无确认机制 非关键日志、带宽充足
TCP 514 可靠传输,有重传机制 配置稍复杂,占用连接资源 关键日志、安全审计
TLS 6514 加密传输,安全可靠 需要证书管理,性能开销大 跨公网传输、合规要求

至于日志格式,业界最常用的是 Syslog(RFC 5424)。它包含时间戳、主机名、设施、级别、消息体等字段。我个人建议在日志服务器上统一解析成结构化格式(如 JSON),方便后续搜索和关联分析。

小技巧:如果你用的是 ELK 或 Splunk,建议在设备端就配置好结构化日志。比如 Cisco 支持 logging format rfc5424,华为支持 info-center loghost format rfc5424。这样日志服务器解析起来更省力,搜索效率也更高。

3.6 配置验证与常见问题

配完日志后,一定要验证。我常用的验证方法就三步:

  1. 设备端检查:用 show logging(Cisco)或 display info-center(华为)确认配置生效。
  2. 网络层抓包:在设备出口或日志服务器入口抓包,确认 UDP/TCP 514 端口有数据包。
  3. 服务器端确认:在日志服务器上查看是否收到日志,检查时间戳和内容是否完整。

常见问题我列几个:

  • 日志服务器收不到日志:先检查防火墙是否放行了对应端口,再检查设备上的日志级别是否太低(比如设成了 debugging 但服务器只收 warning)。
  • 日志时间戳不对:设备时区没配好,或者 NTP 没同步。我建议所有设备都开启 NTP,并统一使用 UTC 或本地时间。
  • 日志量太大:调整日志级别,或者加过滤条件。比如只记录 error 级别以上的日志,或者只记录特定接口的日志。

避坑指南:我曾经在配置 FortiGate 日志时,发现日志服务器收到了大量重复日志。排查后发现是 FortiGate 的日志队列满了,自动重传导致的。解决办法是调大日志队列大小,或者降低日志生成速率。记住,日志采集不是越多越好,而是越精准越好。