4、Syslog 协议原理:从架构到实战配置
聊到交换机日志,就绕不开 Syslog。这玩意儿说白了,就是网络设备用来“喊话”的标准协议。你想想看,一台交换机每天产生那么多日志,要是每条都存本地,早撑爆了。所以就有了 Syslog,它负责把日志从设备上“扔”到专门的服务器上集中管理。
我个人习惯,不管项目大小,第一件事就是搭好 Syslog 服务器。为什么?因为日志集中了,排错才有效率。不然你一台台设备去翻,黄花菜都凉了。
4.1 Syslog 架构:谁在说话,谁在听?
Syslog 的架构其实很简单,就三个角色:
- 发送者(Sender):就是你的交换机、路由器、防火墙。它们产生日志,然后发出去。
- 中继(Relay):这个不常用,但有些场景下,日志需要经过中间设备转发一下。
- 收集者(Collector):也就是 Syslog 服务器。它负责接收、存储、甚至分析这些日志。
我在项目中遇到过一种情况:客户网络规模很大,交换机上千台,所有日志都发到一台服务器。结果服务器扛不住,丢日志了。后来我建议他们分层部署,核心层交换机发到一台,接入层发到另一台。问题就解决了。说白了,架构设计要提前想好。
核心要点:Syslog 是单向的、无连接的。发送者只管发,不关心服务器收没收到。所以,丢日志是常态,别指望它像 TCP 那样可靠。
4.2 Facility 与 Severity:日志的“身份”和“等级”
每条 Syslog 消息都带着两个关键标签:Facility 和 Severity。你可以把它们理解为日志的“部门”和“紧急程度”。
Facility(设施)
Facility 表示这条日志是哪个模块产生的。比如:
- local0 ~ local7:这 8 个是留给用户自定义的。我一般用 local0 给交换机,local1 给防火墙,方便区分。
- kern:内核消息
- user:用户级消息
- mail:邮件系统
- daemon:系统守护进程
嗯,这里要注意:不同厂商的设备,Facility 的默认值可能不一样。比如思科默认用 local7,华为可能用 local0。配置前最好查一下文档。
Severity(严重级别)
Severity 从 0 到 7,数字越小越严重:
| 数值 | 级别 | 说明 | 我见过的场景 |
|---|---|---|---|
| 0 | Emergency | 系统不可用 | 交换机彻底挂了,这种日志很少见,见到就准备换设备吧 |
| 1 | Alert | 需要立即处理 | 比如端口安全违规,我曾经遇到过一次,整个办公室断网,就是有人乱插交换机 |
| 2 | Critical | 严重错误 | 接口 down 掉,而且是关键链路 |
| 3 | Error | 一般错误 | 配置错误、认证失败 |
| 4 | Warning | 警告 | 端口流量超过阈值,我一般会重点关注这个级别 |
| 5 | Notice | 正常但重要 | 接口 up/down,链路状态变化 |
| 6 | Informational | 信息 | 日常操作记录,比如用户登录 |
| 7 | Debug | 调试信息 | 这个级别日志量巨大,平时别开,开了服务器会疯掉 |
我的习惯:生产环境中,我一般只收集 Severity 0-5 的日志。6 和 7 太吵了,除非你在排一个特别诡异的故障,否则别开。我曾经有一次为了查一个 ARP 问题,开了 Debug 级别,结果 10 分钟日志文件就 2GB 了……
4.3 UDP 514 端口:为什么是它?
Syslog 默认使用 UDP 端口 514。为什么用 UDP?说白了,就是快。日志这东西,丢了就丢了,不会影响业务。如果用 TCP,万一网络拥堵,日志传输还会占用带宽,影响正常业务流量。
但 UDP 也有缺点:不保证送达。你想想看,如果一条 Critical 级别的日志丢了,你可能就错过了故障根因。所以,现在很多厂商也支持 TCP 或 TLS 加密传输。我个人建议,核心设备用 TCP,普通接入层设备用 UDP 就够了。
避坑指南:我曾经遇到过一个问题:Syslog 服务器收不到日志,排查了半天,发现是防火墙把 UDP 514 给拦了。嗯,这种低级错误,犯过一次就记住了。配置前,一定先确认网络路径上的防火墙、ACL 有没有放行这个端口。
4.4 Syslog 服务器配置:手把手教你搭
这里我以 Linux 下的 rsyslog 为例,因为这是最常用的。Windows 下也有类似工具,但说实话,生产环境我很少见。
4.4.1 安装 rsyslog
# CentOS / RHEL
yum install rsyslog -y
# Ubuntu / Debian
apt-get install rsyslog -y
4.4.2 配置 rsyslog 接收远程日志
编辑配置文件 /etc/rsyslog.conf,取消下面两行的注释:
# 开启 UDP 514 端口接收
$ModLoad imudp
$UDPServerRun 514
# 如果需要 TCP,也取消注释
# $ModLoad imtcp
# $InputTCPServerRun 514
然后,配置日志存储规则。我习惯按设备 IP 和日期分类:
# 在配置文件末尾添加
$template RemoteLogs,"/var/log/syslog/%fromhost-ip%/%$YEAR%-%$MONTH%-%$DAY%.log"
*.* ?RemoteLogs
保存后重启服务:
systemctl restart rsyslog
systemctl enable rsyslog
验证方法:在交换机上配好 Syslog 后,手动生成一条日志(比如 shutdown 一个接口再 no shutdown),然后去服务器上 tail -f /var/log/syslog/你的交换机IP/日期.log 看看有没有内容。如果没有,检查防火墙、检查配置、检查网络——三步走。
4.4.3 交换机端配置(以华为为例)
system-view
info-center loghost source interface GigabitEthernet0/0/1
info-center loghost 192.168.1.100 facility local0
info-center timestamp log date
这里指定了日志从哪个接口发出、发到哪个服务器、使用哪个 Facility。思科的配置也类似,只是命令不同。
4.5 小结
Syslog 协议不复杂,但它是网络运维的基石。你想想看,没有集中日志,你怎么做故障回溯?怎么分析网络趋势?所以,别嫌麻烦,老老实实把 Syslog 服务器搭起来。嗯,下一章我们聊聊怎么从海量日志里快速找到关键信息——那才是真正的排错功夫。