监控和故障排除
本章介绍监控和故障排除 Cumulus Linux 的基础知识。
串行控制台
如果您经常重启交换机或没有可靠的网络连接,请使用串行控制台调试问题。
默认串行控制台波特率为 115200,这也是 ONIE 使用的波特率。
配置串行控制台
在 x86 交换机上,您可以通过编辑 grub 配置串行控制台波特率。
grub 中的错误配置设置会导致通过控制台无法访问交换机。在实施 grub 更改之前,请仔细检查。
波特率的有效值是
- 300
- 600
- 1200
- 2400
- 4800
- 9600
- 19200
- 38400
- 115200
要更改串行控制台波特率
编辑 /etc/default/grub 文件,并为 --speed 和 console 变量提供有效值
GRUB_SERIAL_COMMAND="serial --port=0x2f8 --speed=115200 --word=8 --parity=no --stop=1" GRUB_CMDLINE_LINUX="console=ttyS1,115200n8 cl_platform=accton_as5712_54x"
保存对 grub 配置的更改后,在命令提示符下键入以下内容
cumulus@switch:~$ update-grub
如果您计划通过串行控制台访问交换机 BIOS,则需要在交换机 BIOS 中更新波特率。有关更多信息,请参阅此知识库文章。
重启交换机。
更改控制台日志级别
默认情况下,控制台打印除调试消息外的所有日志消息。要调整控制台日志记录以减少冗余,以便不打印某些级别的消息,请运行 dmesg -n <level>
命令,其中日志级别为
级别 | 描述 |
---|---|
0 | 紧急消息(系统即将崩溃或不稳定)。 |
1 | 严重情况;您必须立即采取行动。 |
2 | 危急情况(严重的硬件或软件故障)。 |
3 | 错误情况(通常由驱动程序用于指示硬件困难)。 |
4 | 警告消息(不严重,但可能指示问题)。 |
5 | 许多情况的消息通知,包括安全事件。 |
6 | 信息性消息。 |
7 | 调试消息。 |
只有值低于指定级别的消息才会打印到控制台。例如,如果您指定级别 3,则只有级别 2(危急情况)、级别 1(严重情况)和级别 0(紧急消息)打印到控制台
cumulus@switch:~$ sudo dmesg -n 3
您也可以运行 dmesg --console-level <level>
命令,其中日志级别为 emerg
、alert
、crit
、err
、warn
、notice
、info
或 debug
。例如,要打印危急情况,请运行以下命令
cumulus@switch:~$ sudo dmesg --console-level crit
dmesg 命令应用到下次重启。
有关 dmesg 命令的更多详细信息,请运行 man dmesg
。
显示系统信息
Cumulus Linux 提供了获取系统信息和显示您正在运行的 Cumulus Linux 版本的命令。在执行系统诊断、排除性能故障或提交支持请求时,请使用这些命令。
要显示有关交换机上运行的 Cumulus Linux 版本的信息,请运行 nv show system
命令
cumulus@switch:~$ nv show system
operational applied
----------- ------------------- -------
hostname leaf01
build Cumulus Linux 5.12
uptime 0:02:50
timezone Etc/UTC
maintenance
mode disabled
ports enabled
要以字节为单位显示系统内存信息,请运行 nv show system memory
命令
cumulus@switch:~$ nv show system memory
Type Buffers Cache Free Total Used Utilization
-------- ---------- ----------- ----------- ------------ ----------- -----------
Physical 81661952 B 571834368 B 373276672 B 1813528576 B 786755584 B 79.4%
Swap 0 B 0 B 0 B 0.0%
要显示系统 CPU 信息,请运行 nv show system cpu
命令
cumulus@switch:~$ nv show system cpu
operational
----------- -----------------------------
model QEMU Virtual CPU version 2.5+
core-count 1
utilization 0.3%
要显示有关交换机的一般信息,请运行 nv show platform
命令
cumulus@switch:~$ nv show platform
operational
------------ ---------------------------------------
system-mac 44:38:39:22:01:b1
manufacturer Accton
cpu x86_64 QEMU Virtual CPU version 2.5+ x1
memory 1751856 kB
disk-size n/a
port-layout n/a
asic-model n/a
system-uuid a6bfbd6d-70ac-426f-b46d-3743e16e1f4b
使用 cl-support 文件进行诊断
您可以生成一个单独导出的 cl-support
文件,其中包含有关交换机配置的各种详细信息,并且对于远程调试和故障排除非常有用。
在提交支持请求之前,生成一个 cl-support 文件以调查问题。您可以运行 NVUE nv action generate system tech-support
命令或 Linux sudo cl-support
命令
cumulus@switch:~$ nv action generate system tech-support
...
有关更多信息,请参阅了解 cl-support 输出文件。
将日志文件发送到 syslog 服务器
您可以配置 Cumulus Linux 将日志文件发送到一个或多个远程 syslog 服务器。
以下示例配置 Cumulus Linux 将日志文件发送到远程 syslog 服务器,该服务器的地址为 192.168.0.254,位于默认 VRF 上,端口为 514,使用 UDP。
您必须在命令中指定 VRF。
cumulus@switch:~$ nv set service syslog default server 192.168.0.254 port 514
cumulus@switch:~$ nv set service syslog default server 192.168.0.254 protocol udp
cumulus@switch:~$ nv config apply
该配置创建 /etc/rsyslog.d/11-remotesyslog-default.conf
文件。该文件具有以下内容
cumulus@switch:~$ sudo cat /etc/rsyslog.d/11-remotesyslog-default.conf
# Auto-generated by NVUE!
# Any local modifications will prevent NVUE from re-generating this file.
# md5sum: c8e094c868c7f9be4cfa6ccec752b44b
#
# Remote syslog servers configured through CUE
#
action(type="omfwd" Target="192.168.0.254" Port="514" Protocol="udp")
日志技术细节
rsyslog 在 Cumulus Linux 上执行日志记录。rsyslog
提供本地日志记录到 syslog
文件以及将日志导出到外部 syslog
服务器的功能。所有 rsyslog
日志文件都使用高精度时间戳
2015-08-14T18:21:43.337804+00:00 cumulus switchd[3629]: switchd.c:1409 switchd version 1.0-cl2.5+5
Cumulus Linux 在 /var/log/
目录中包含应用程序,这些应用程序直接写入日志文件,而无需通过 rsyslog
。
所有 Cumulus Linux 规则都位于 /etc/rsyslog.d/
中的单独文件中,rsyslog
在 /etc/rsyslog.conf
文件的 GLOBAL DIRECTIVES
部分末尾调用这些文件。rsyslog
忽略 rsyslog.conf
文件末尾的 RULES
部分;/etc/rsyslog.d
文件中的规则必须处理消息,/etc/rsyslog.d/99-syslog.conf
文件中的最后一行会丢弃这些消息。
本地日志记录
Cumulus Linux 通过 rsyslog
发送日志,rsyslog
将日志写入 /var/log
目录中的文件。/etc/rsyslog.d/
目录中有默认规则,用于定义日志的写入位置
规则 | 目的 |
---|---|
10-rules.conf | 设置日志消息的默认值,包括日志格式和日志速率限制。 |
15-crit.conf | 将 crit 、alert 或 emerg 日志消息记录到 /var/log/crit.log ,以确保它们不会轮换掉。 |
20-clagd.conf | 将 clagd 消息记录到 /var/log/clagd.log 以用于MLAG。 |
22-linkstate.conf | 将所有物理和逻辑网络链路的链路状态更改记录到 /var/log/linkstate 。 |
25-switchd.conf | 将 switchd 消息记录到 /var/log/switchd.log 。 |
30-ptmd.conf | 将 ptmd 消息记录到 /var/log/ptmd.log 以用于规定性拓扑管理器。 |
35-rdnbrd.conf | 将 rdnbrd 消息记录到 /var/log/rdnbrd.log 以用于重新分发邻居。 |
42-nvued.conf | 将 nvued 消息记录到 /var/log/nvued.log 以用于 NVUE。 |
45-frr.conf | 将路由协议消息记录到 /var/log/frr/frr.log 。这包括 BGP 和 OSPF 日志消息。 |
50-netq-agent.conf | 将 NetQ 代理消息记录到 /var/log/netq-agent.log 。 |
50-netqd.conf | 将 netqd 消息记录到 /var/log/netqd.log 。 |
55-dhcpsnoop.conf | 将 DHCP 侦听消息记录到 /var/log/dhcpsnoop.log 。 |
66-ptp4l.conf | 将 PTP 消息记录到 /var/log/ptp4l.log 。 |
99-syslog.conf | 将所有剩余的使用 rsyslog 的进程发送到 /var/log/syslog 。 |
Cumulus Linux 轮换并将日志文件压缩到存档中。不使用 rsyslog 的进程将其写入 /var/log
目录中的自己的日志文件。有关特定日志文件的更多信息,请参阅故障排除日志文件。
启用远程 syslog
Cumulus Linux 不会将所有日志消息发送到远程服务器。要将其他日志文件(例如 switchd
日志)发送到 syslog 服务器,请按照以下步骤操作
在
/etc/rsyslog.d/
中创建一个文件。确保文件名以小于 99 的数字开头,以便在日志消息进入之前执行,例如20-clagd.conf
或25-switchd.conf
。以下示例文件的名称为/etc/rsyslog.d/11-remotesyslog.conf
。添加类似于以下内容的内容## Logging switchd messages to remote syslog server @192.168.1.2:514
此配置将日志消息发送到远程
syslog
服务器,用于以下进程:clagd
、switchd
、ptmd
、rdnbrd
、nvued
和syslog
。它遵循与/var/log/syslog
文件相同的语法,其中 @ 表示 UDP,192.168.12 是syslog
服务器的 IP 地址,514 是 UDP 端口。- 对于基于 TCP 的 syslog,请在 IP 地址 @@192.168.1.2:514 之前使用两个 @@。
/etc/rsyslog.d/
中的文件编号决定了规则如何安装到 rsyslog.d 中。编号较低的规则首先处理,rsyslog 处理以stop
关键字终止。例如,FRR 的 rsyslog 配置位于45-frr.conf
文件中,文件底部有一个显式的stop
。FRR 消息仅记录到本地磁盘上的/var/log/frr/frr.log
文件(这些消息不会使用默认配置发送到远程服务器)。要远程记录 FRR 消息以及将 FRR 消息写入本地磁盘,请将99-syslog.conf
文件重命名为11-remotesyslog.conf
。11-remotesyslog.conf
规则(传输到远程服务器)首先处理 FRR 消息,然后45-frr.conf
文件继续处理消息(写入/var/log/frr/frr.log
文件中的本地磁盘)。- 请勿将
imfile
模块与 rsyslogd 写入的任何文件一起使用。
重启 rsyslog。
cumulus@switch:~$ sudo systemctl restart rsyslog.service
在启用管理 VRF 的情况下写入 syslog
您可以通过应用以下配置在启用管理 VRF的情况下写入 syslog;/etc/rsyslog.d/11-remotesyslog.conf
文件注释掉了此配置。
cumulus@switch:~$ cat /etc/rsyslog.d/11-remotesyslog.conf
## Copy all messages to the remote syslog server at 192.168.0.254 port 514
action(type="omfwd" Target="192.168.0.254" Device="mgmt" Port="514" Protocol="udp")
对于每个 syslog 服务器,配置唯一的 action
行。例如,要配置两个 syslog 服务器,地址分别为 192.168.0.254 和 10.0.0.1
cumulus@switch:~$ cat /etc/rsyslog.d/11-remotesyslog.conf
## Copy all messages to the remote syslog servers at 192.168.0.254 and 10.0.0.1 port 514
action(type="omfwd" Target="192.168.0.254" Device="mgmt" Port="514" Protocol="udp")
action(type="omfwd" Target="10.0.0.1" Device="mgmt" Port="514" Protocol="udp")
如果您配置远程日志记录以使用 TCP 协议,则当远程 syslog 服务器不可达时,本地日志记录可能会停止。此外,如果您配置远程日志记录以使用 UDP 协议,则当 UDP 服务器不可达时,本地日志记录可能会停止,因为没有可用于目标 IP 地址的路由。
为避免此行为,请在 rsyslog 配置中配置磁盘队列大小和最大重试次数
action(type="omfwd" Target="172.28.240.15" Device="mgmt" Port="1720" Protocol="tcp" action.resumeRetryCount="100" queue.type="linkedList" queue.size="10000")
action(type="omfwd" Target="172.28.240.15" Device="mgmt" Port="540" Protocol="udp" action.resumeRetryCount="100" queue.type="linkedList" queue.size="10000")
速率限制 syslog 消息
如果您想限制从各个进程写入 syslog 文件的 syslog 消息数量,请将以下配置添加到 /etc/rsyslog.conf
文件。调整 interval 和 burst 值,以将消息速率限制为您的环境所需的适当级别。有关更多信息,请阅读rsyslog 文档。
module(load="imuxsock"
SysSock.RateLimit.Interval="2" SysSock.RateLimit.Burst="50")
以下测试脚本显示了速率限制输出的示例。
无害的 syslog 错误:无法重置 devices.list
当您运行 systemctl daemon-reload
并在系统启动期间,以下消息会记录到 /var/log/syslog
systemd[1]: Failed to reset devices.list on /system.slice: Invalid argument
此消息是无害的,您可以忽略它。当 systemd 尝试更改只读组属性时,它会记录此消息。Cumulus Linux 修改了 systemd 的上游版本,默认情况下不记录此消息。
当您安装 Debian 软件包时,systemctl daemon-reload
命令会运行。升级软件包时,您会多次看到此消息。
排除 syslog 故障
您可以使用以下命令来排除 syslog 问题。
验证 rsyslog 是否正在运行
要验证 rsyslog 服务是否正在运行,请使用 sudo systemctl status rsyslog.service
命令
cumulus@leaf01:mgmt-vrf:~$ sudo systemctl status rsyslog.service
rsyslog.service - System Logging Service
Loaded: loaded (/lib/systemd/system/rsyslog.service; enabled)
Active: active (running) since Sat 2017-12-09 00:48:58 UTC; 7min ago
Docs: man:rsyslogd(8)
http://www.rsyslog.com/doc/
Main PID: 11751 (rsyslogd)
Tasks: 4 (limit: 2032)
Memory: 1.1M
CPU: 20ms
CGroup: /system.slice/rsyslog.service
└─8587 /usr/sbin/rsyslogd -n -iNONE
Dec 09 00:48:58 leaf01 systemd[1]: Started System Logging Service.
验证您的 rsyslog 配置
在手动更改 /etc/rsyslog.d
目录中的任何文件后,请使用 sudo rsyslogd -N1
命令来识别配置文件中阻止 rsyslog 服务启动的任何错误。
在以下示例中,配置管理 VRF 的 syslog 的 11-remotesyslog.conf
文件中缺少右括号
cumulus@leaf01:mgmt-vrf:~$ cat /etc/rsyslog.d/11-remotesyslog.conf
action(type="omfwd" Target="192.168.0.254" Device="mgmt" Port="514" Protocol="udp"
cumulus@leaf01:mgmt-vrf:~$ sudo rsyslogd -N1
rsyslogd: version 8.4.2, config validation run (level 1), master config /etc/rsyslog.conf
syslogd: error during parsing file /etc/rsyslog.d/15-crit.conf, on or before line 3: invalid character '$' in object definition - is there an invalid escape sequence somewhere? [try http: /www.rsyslog.com/e/2207 ]
rsyslogd: error during parsing file /etc/rsyslog.d/15-crit.conf, on or before line 3: syntax error on token 'crit_log' [try http://www.rsyslog.com/e/2207 ]
更正无效语法后,发出 sudo rsyslogd -N1
命令会产生以下输出。
cumulus@leaf01:mgmt-vrf:~$ cat /etc/rsyslog.d/11-remotesyslog.conf
action(type="omfwd" Target="192.168.0.254" Device="mgmt" Port="514" Protocol="udp")
cumulus@leaf01:mgmt-vrf:~$ sudo rsyslogd -N1
rsyslogd: version 8.4.2, config validation run (level 1), master config /etc/rsyslog.conf
rsyslogd: End of config validation run. Bye.
tcpdump
如果 syslog 服务器不可访问以验证 syslog 消息是否正在导出,您可以使用 tcpdump
。
在以下示例中,syslog 服务器使用 192.168.0.254 用于端口 514 上的 UDP syslog 消息
cumulus@leaf01:mgmt-vrf:~$ sudo tcpdump -i eth0 host 192.168.0.254 and udp port 514
要生成 syslog 消息,请在另一个会话中使用 sudo,例如 sudo date
。使用 sudo 会生成 authpriv
日志。
cumulus@leaf01:mgmt-vrf:~$ sudo tcpdump -i eth0 host 192.168.0.254 and udp port 514
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on eth0, link-type EN10MB (Ethernet), capture size 262144 bytes
00:57:15.356836 IP leaf01.lab.local.33875 > 192.168.0.254.syslog: SYSLOG authpriv.notice, length: 105
00:57:15.364346 IP leaf01.lab.local.33875 > 192.168.0.254.syslog: SYSLOG authpriv.info, length: 103
00:57:15.369476 IP leaf01.lab.local.33875 > 192.168.0.254.syslog: SYSLOG authpriv.info, length: 85
要查看 syslog 文件的内容,请使用 tcpdump -X
选项
cumulus@leaf01:mgmt-vrf:~$ sudo tcpdump -i eth0 host 192.168.0.254 and udp port 514 -X -c 3
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on eth0, link-type EN10MB (Ethernet), capture size 262144 bytes
00:59:15.980048 IP leaf01.lab.local.33875 > 192.168.0.254.syslog: SYSLOG authpriv.notice, length: 105
0x0000: 4500 0085 33ee 4000 4011 8420 c0a8 000b E...3.@.@.......
0x0010: c0a8 00fe 8453 0202 0071 9d18 3c38 353e .....S...q..<85>
0x0020: 4465 6320 2039 2030 303a 3539 3a31 3520 Dec..9.00:59:15.
0x0030: 6c65 6166 3031 2073 7564 6f3a 2020 6375 leaf01.sudo:..cu
0x0040: 6d75 6c75 7320 3a20 5454 593d 7074 732f mulus.:.TTY=pts/
0x0050: 3120 3b20 5057 443d 2f68 6f6d 652f 6375 1.;.PWD=/home/cu
0x0060: 6d75 6c75 7320 3b20 5553 4552 3d72 6f6f mulus.;.USER=roo
0x0070: 7420 3b20 434f 4d4d 414e 443d 2f62 696e t.;.COMMAND=/bin
0x0080: 2f64 6174 65 /date