9.4 日志记录
在路由器上启用日志记录功能之后,就会根据路由器上发生的某些事件创建和存储一定的消息,日志可以驻留在路由器上,也可以采取外部日志方式(即驻留在网络中的某台服务器上)。
路由器将命令debug的输出结果和系统差错消息发送给日志记录进程,由日志记录进程将这些消息分发到不同的日志记录设备和文件(根据路由器的具体配置而定),消息会被发送给日志缓存、终端命令行以及/或UNIX syslog(系统日志)服务器。其中,在路由器上维护的日志缓存是一种循环缓存,最旧的消息将被最新的消息所取代,在查看日志时,首先显示的则是最旧的表项。
注意: syslog的格式与4.3 BSD UNIX相兼容。
以下命令的作用分别是启用日志缓存、显示日志内容和清除日志。
• logging buffered [size]
• show logging
• clear logging
所有发送给syslog服务的消息都被存储在服务器的文件之中。这些消息被直接发送给服务器上运行的syslog进程,由该进程将这些消息存储在相应的文件中。
命令logging host的作用是将日志记录到syslog服务器并指定syslog服务器的IP地址。
以Telnet方式登录到路由器之后,正常情况下是看不见任何日志消息的。为了让路由器将日志消息发送给Telnet会话,需要输入EXEC命令terminal monitor。如果通过控制台端口连接到路由器,那么就不需要输入此命令,因为默认配置是将日志消息发送给控制台端口。
之后,路由器将向Telnet会话发送所有日志消息(包括从调试级别的消息到紧急消息的全部消息),这对故障检测与排除工作来说非常有用。记录下通过Telnet所发送和接收的全部信息,可以记录下用户连接到该路由器之后的所有调试操作及事件。
注意: 可以通过Telnet应用程序的日志记录功能或捕捉功能来记录这些信息。
要让日志变得有意义,就必须启用时间戳机制并设置时钟。
例9-13显示了未启用时间戳时命令show logging的输出结果。
例9-13:命令show logging的输出结果。
请注意,上例中发生的事件都没有时间参考点。
命令service timestamps log uptime可以显示自系统最后一次重启之后到现在为止所经过的时间。例9-14显示了应用命令service timestamps log uptime之后同一日志的不同输出结果。
例9-14:启用了命令service timestamps log uptime之后的show logging输出结果。
可以看到,所有事件都被打上了时间戳。上例中的前3个事件都发生在同一时刻,都发生在路由器启动后的第39秒,而第4个事件则发生于路由器启动后的1天7小时。
要想显示实际的日期和时间(路由器所知道的),可以输入以下命令。
service timestamps log datetime [msec] [localtime] [show-timezone]
上述时间可以精确到毫秒,并能显示该路由器的本地时间,此外还可以显示时区。由于某些路由器并不维护其日历,因而每次重启之后,它们的时钟都将被重置。如果没有使用网络时间协议,那么就需要利用以下EXEC命令来手工设置路由器的时钟。
clock set hh:mm:ss day month year
从多台路由器记录日志信息时,一致的时间戳信息可以使得看出事件之间的相关性更容易。在检测与排除故障或查找因某特定事件而在多台路由器上产生的消息时,让所有路由器都使用同一个时区(即不指定localtime)为它们的消息打上时间戳将非常有用。如果每台路由器都使用其localtime为消息打时间戳,那么为清楚起见,应指定show-timezone。Syslog守护进程将基于其自身的时钟在消息到达时将日期和时间记录在文件中。为了限制所要记录的日志数量,可以通过指定消息的严重(severity)等级来选择性地记录日志。表9-2列出了消息的日志记录等级。
在查看日志时,如果指定了某种等级的消息,那么将得到该等级及其以上等级的所有消息。例如,如果指定的等级是调试,那么将得到所有等级的消息,如果指定的等级是警告,那么将得到警告、差错、严重、警报和紧急消息。
使用以下命令来指定消息等级。
• logging console level——限定将消息记录到控制台。
• logging monitor level——限定将消息记录到终端命令行。
• logging trap level——限定将消息记录到syslog服务器。
硬件和软件故障的显示等级为警告至紧急之间,接口启用/停用转换以及系统重启消息的显示等级为通告,重载请求和低进程栈消息的显示等级为告知,debug的输出结果显示等级为调试。
例9-15给出了位于西雅图(处于太平洋时区)的路由器的配置情况。
例9-15:为位于西雅图(处于太平洋时区)的路由器配置日志记录功能。
该路由器的系统时钟基于UTC(Coordinated Universal Time,协调世界时,也称世界标准时间),UTC与格林威治标准时间一样,而太平洋标准时间比UTC早8个小时。
例9-16给出了例9-15配置实施后的路由器日志情况。
例9-16:例9-15配置实施后的路由器日志缓存。
在没有syslog服务器的情况下,虽然日志缓存非常有用,但是日志缓存也存在一些缺陷,例如,在搜索某个事件请求时,要么对整个日志文件进行分页,要么将日志文件存储到其他系统以便使用其他系统的搜索工具。如果希望查找最近发生的事件,由于最早的事件最新显示,因而必须对整个日志文件进行分页(或者再次存储到其他系统)。将日志记录到syslog会自动在UNIX服务器上创建一个文件,这样可以提供更简便的事件搜索和文件维护功能。