日志消息通常是指Cisco IOS中的系统错误消息。其中每条错误信息都被分配了一个严重级别,伴随一些只是问题或事件的严重性分析。Cisco IOS发送日志消息(包括debug命令的输出)到日志记录过程。默认情况下,只发送到控制台接口,可可以将日志记录到路由器内部缓存,终端线路,系统日志服务器和SNMP管理站。

一、日志消息格式

     在Cisco IOS设备中,日志消息采用下面的格式:
%<facility>-<severity>-<mnemonic>:<message_text>

     下面是一个简单的例子:
%LINK-5-CHANGED:Interface Ethernet1,changed state to
administratively down

     假设为日志消息已经启用了时间戳和序列号,对于日志消息,将看到以下信息,首先是序列号,紧接着是时间戳,然后才是消息:
000022:Jan 02 15:42:11.048:%LINK-5-CHANGED:Interface Ethernet0,
changed state to administratively down

二、基本日志记录配置

     在设置日志记录时,需要完成两个基本的任务:打开日志记录和控制日志在线路上的显示。

1、打开日志记录

     默认地,日志记录只在路由器的控制台线路上打开,要在其他地方记录日志,则必须相应地打开日志记录并进行配置。使用以下命令打开日志记录:
Router(config)#logging on

     使用logging on命令,可以为日志记录打开其他已配置的目的地,如系统日志服务器或路由器的内部缓存。在将系统消息记录到除了控制台端口的其他位置之前,必须执行该命令;但是,使用其他的logging命令,可以单独控制哪个过程将接收日志消息。例如,已经配置了命令,将日志消息记录到系统日志服务器,但是没有执行logging on命令,则Cisco IOS只将消息记录到控制台线路。

二、配置同步日志记录

     logging synchronous命令的主要目的是将日志消息输出和调试输出同步到路由器线路上:控制台、辅助和VTY线路。

     同步日志的主要目的是控制何时消息被显示在路由器的线路上。当启用这个特性时,同步日志使得Cisco IOS显示消息,然后执行一个等价的Ctrl-R的命令,这使得路由器将已经输入的信息重新显示在命令行上。

     可以使用logging synchronous命令来影响日志消息的显示:
Router(config)#line type #
Router(config)-line)#logging synchronous [level severity_level|all]
[limit #_of_lines]

     严重程度是指日志消息的严重程度,这些消息是异步显示的。严重性数值比该值高的消息(更低严重性的消息)被同步显示;数值更低的(更严重)消息被异步显示。默认的严重级别是2。参数all使得所有消息都被异步显示,不管分配的严重级别。

     参数limit指定在路由器开始丢弃新的消息前,有多少个同步消息可以排在队列中。默认是20条消息。如果到达该阀值,路由器必须丢弃消息时,就会看到以下日志消息,说明路由器必须丢弃的消息数目:
%SYS-3-MSGLOST #_of_messages due to overflow

     同步日志的主要缺点是当路由器正在产生许多消息,而我们正在CLI中很慢地输入时,路由器必须丢弃超过阀值地任何消息。因此,将无法在线路上看到这些消息。如果看到这类事件对你来说很关键,建议将它们记录在路由器内部缓存、系统日志服务器或者SNMP管理台。

     在给非控制台线路(如VTY)设置很大地队列极限值时要小心。如果***可以进入路由器上的VTY,而VTY上打开了同步日志,则***可以在输入命令期间使VTY线路空闲。这将导致Cisco IOS用消息填满很大的队列,可能会耗尽路由器的整个内存。

三、日志记录目的地

     可以将日志信息转发到以下4种基本目的地
●线路;
●内部缓存;
●系统日志服务器;
●SNMP管理台。

1、严重级别
   
     每个日志消息被关联一个严重级别,用来分类消息的严重等级:数字越低,消息越严重。严重级别的范围从0(最高)到7(最低)。使用logging命令可以用数字或者名称来指定严重性。

                      日志消息的严重级别
参数  级别 系统日志描述   描述 
emergencies  0  LOG_EMERG  系统不可用 
alerts  1  LOG_ALERT  在端口下是需要立即操作的 
critical  2  LOG_CRIT  路由器上存在一个关键状态 
errors  3  LOG_ERR  路由器上存在一个错误状态 
warnings  4  LOG_WARNING  路由器上存在一个警告状态 
notifications  5  LOG_NOTICE  路由器上发生了一个平常的但重要的事件 
informational  6  LOG_INFO  路由器上发生了一个信息事件 
debugging  7  LOG_DEBUG  来自debug命令的输出 

缺省地,console、monitor、buffer的logging被设置为debugging级,而trap(syslog)服务器的logging被设置为informational
     如果在ACL语句中使用log关键字,则只有严重级别设为6或者7时,才会在控制台上显示输出。

    对于日志记录功能可以控制的一个选项是,哪些消息被记录到4个目的地。例如,在控制台上,可以限制记录严重级别为4(即显示从0到4的消息)的日志消息;但是对系统日志服务器,可以设置为6(0到6)。

2、线路日志

    有两个命令可用于控制日志消息被发送到路由器的线路上:                Router(config)#logging console [severity_level]                   Router(config)#logging monitor [severity_level]

    logging console命令是指将日志记录到物理的TTY,如控制台和辅助线路。logging monitor命令将日志记录到逻辑VTY。默认地,记录日志到控制台对所有级别都打开;但是可以通过改变logging console命令中的严重级别来修改。

    将日志记录到VTY和AUX默认是关闭的,要打开就要执行特权级的EXEC命令terminal monitor,将控制台日志消息复制到VTY,或者配置logging monitor命令。如果使用了后者,在初次访问路由VTY时,则不需要执行terminal monitor命令来查看TTY命令行的日志输出。在配置logging monitor命令时,如果不指定严重级别,则默认为7(调试)。

    对两个命令,都必须使用logging on命令来打开日志记录。

    由于将消息显示在终端线路上,如控制台,会给路由器增加处理负担,所以建议将严重级别改到比调试更高的严重级别(较低的数字)。如果要查看较低严重级别的消息,可以使用路由器内部缓存、系统日志服务器,或者SNMP管理台。

    如果在生成错误和调试消息的过程中,关闭logging on命令,会大大降低路由器的速度,直到这些消息显示在路由器的线路上。因此为显示在控制台线路的日志消息分配严重级别时要小心。

3、内部缓存日志

    记录日志消息到TTY或者VTY存在的一个问题是,如果没在看连接线路的屏幕输出,消息滚过屏幕并超出了终端软件的历史缓存,则没有任何机制可以再看到那些丢失的消息。如果把日志消息记录到除了线路以外的其他目的地,则可以避免这个问题。

    一个解决方案是将日志消息记录到路由器的内部缓存,根据路由器平台的不同,该项可能是默认打开或关闭的;大多数平台下,默认是打开的。使用以下命令将日志记录到路由器的缓存:                                                        Router(config)#logging buffered [buffer_size|severity_level]        该命令有两个参数,buffer_size指定为内部缓存分配多大的内存,以字节为单位。使用default logging buffered命令将缓存大小设回出厂的默认值。severity_level指出应该记录的严重级别。默认的大小和严重级别(通常是7)依赖于平台型号。

4、系统日志服务器日志

    以下是将日志记录到系统日志服务器的基本命令:                         Router(config)#logging on                                        Router(config)#logging host {IP_address|hostname}                 Router(config)#logging trap severity_level                       Router(config)#logging source-interface interface_type_interface_#  Router(config)#logging origin-id {hostname|ip|string string}      Router(config)#logging facility facility_type

    logging on命令允许将日志记录到非控制台目的地。logging host命令指定系统日志服务器的IP地址、主机名或者完全合格的域名(FQDN)。如果不只一次输入该命令,指定不同的系统日志服务器目的地,可以建立路由器使用的系统日志服务器列表。

    在Cisco IOS12.2(15)T版本之前,使用logging {hostname|IP_address}命令打开陷阱日志记录,现在使用logging host命令。

    logging trap命令指定要发送到系统日志服务器的日志消息的严重级别。默认是informational。

    默认地,路由器用来到达系统日志服务器的接口IP地址将作为IP数据包头中的源IP地址。使用logging source-interface命令来生成一致的日志条目。这样路由器使用一个相同的源地址。使用该命令时,必须指定接口的名称和编号。只有路由器有两个或更多接口可以到达系统日志服务器时,该命令才是必需的。但是为了一致性,要确保在系统日志数据包中使用相同的源地址。这使得在系统日志服务器上执行过滤规则来阻止的不希望的日志消息变得更容易。

    在12.2(15)T版本中,Cisco增加了将路由器身份信息添加到系统日志消息的功能,这样可以基于每个路由器,更容易地在系统日志服务器上搜寻或者分离信息。这是由logging origin-id实现的。该命令默认是关闭的。身份信息可以选择hostname(使用hostname命令配置的名称)、IP地址(发送接口的IP地址)和string(用来定义路由器身份信息的字符串)。如果字符串包含空格,则必须用引号将它括起来。

    logging facility命令定义在运行UNIX的系统日志服务器上使用的工具,日志信息将保存在该服务器上。

                       系统日志工具类型

       参数            描述 
auth  授权系统 
cron  Cron工具 
daemon  系统守护程序 
kern  内核 
local0到local7  本地定义的消息(从0到7) 
lpr  打印机系统 
mail  E-mail系统 
news  USENET新闻 
sys9到sys14  系统使用 
syslog  系统日志 
user  用户定义进程 
uucp  UNIX到UNIX的复制系统 


    如果不指定工具,默认是local7。在UNIX上,可以通过编辑适当的配置文件来为指定的工具指定日志文件的保存位置。例如,编辑/etc/syslog配置文件,可以为工具创建一个条目。如:local7.debugging /usr/adm/logs/router.log

    该例中,工具级别是local7,debugging关键字指定了系统日志记录级别。系统日志级别将决定哪个级别的消息将保存在以下的文件中:任何该严重级别及更高级别的消息将存储在这个特定的文件中。

5、SNMP日志

    要将日志消息发送到SNMP管理台,要执行以下命令:                      Router(config)#snmp-server enable trap syslog

    然后,有三个命令控制将日志消息记录到管理台:                       Router(config)#logging on                                        Router(config)#logging history severity_level                       Router(config)#logging history size number

    第二个命令指定哪些严重级别的日志消息应该被发送到SNMP管理台。默认级别是warning。由于SNMP使用UDP,而UDP是不可靠的连接,系统日志陷阱保存在路由器的历史表中。至少一条系统日志消息(最新的一条)被保存在历史表中(默认是一条消息)。可以用logging history size将这个值增加到500条。

    从Cisco IOS12.2(1.4)版本开始,Cisco IOS可以使用ip nat log translations syslog命令来记录每个NAT转换。

四、其他日志命令

1、日期和时间戳

    默认地,日志消息不包括日期和时间戳。使用以下两个命令中的一个来添加日期和时间戳:                                                             Router(config)#service timestamps {debug|log} uptime                或者                                                                Router(config)#service timestamps {debug|log} datetime [msec] [localtime] [show-timezone] [year]

    可以在两种类型的消息中添加时间戳:调试和日志消息。使用debug参数使Cisco IOS在调试输出时包括时间戳。使用log参数则在每种日志消息中添加一个时间戳。第一个命令包括了uptime参数,使得Cisco IOS在消息中包括路由器开机以来的时间,如:    1w0d:%sys-5-CONFIG_I:Configured from console by console

    如果要知道准确的日期和时间,则使用datetime参数。这个参数使得Cisco IOS在消息中包括日期和时间(日期和时间使用UTC格式),标准格式是:MMM DD HH:MM:SS。当使用datetime参数时,有一些可选的参数可用。msec参数在消息中包括毫秒信息。localtime显示基于路由器本地配置的时区时间。默认情况下,年份信息不包括在时间信息中,但是使用可选的year则可以包括该信息。show-timezone参数在日期和时间输出中包括时区名称。下面是一个log参数和datetime、localtime和show-timezone选项一起使用的简单例子:                                                     (.May 23 11:13:25 UTC: %SYS-5-CONFIG_I:Configured from console by consle)

    日志消息一般是从三种字符的一种开始的:空格、星号或者句点。

                       日志消息起始字符

参数  名称  描述 
   空格  路由器的时钟被手动设置,或者和NTP时间服务器同步 
*  星号  路由器的始终没有被设置,或者没有和NTP服务器同步 
.  句点  路由器的时钟被设置为同步,但和NTP服务器失去联系 


2、序列号

    除了将时间戳添加到日志消息中外,还可以让Cisco IOS在每条消息中显示序列号。可以使用以下命令来实现:                                            Router(config)#service sequence-numbers

3、速率限制

    从Cisco IOS12.1(3)T版本开始,可以用logging rate-limit命令以秒为单位限制记录日志消息的速率                                               Router(config)#logging rate-limit {number|all number|console number}[except severity]

   默认地,路由器上没有速率限制。通过指定一个从1到10,000的数。可以将每秒记录的日志消息数限制到该值。all关键字,后面跟一个数值,将作用于所有日志记录和调试消息。console关键字则限制将日志消息记录到控制台的速率。except参数对指定严重级别或者根高级别的消息建立一个例外。

    强烈建议使用该命令,特别是在控制台接口上。在受到***时,会出现泛洪,该命令可以减少路由器需要处理的消息量。

五、日志记录验证

1、show logging命令

    show logging显示了当前系统日志错误和事件记录的状态,包括所有配置的系统日志服务器地址,哪种类型日志打开,以及日志记录统计。以下是命令的格式:        Router#show logging [summary]

    使用clear logging命令清除内部缓存器中的日志消息。

2、show logging history命令

    该命令显示了系统日志历史表的大小、表中的消息的状态以及消息本身。

六、日志记录和错误计数

    如果正在使用路由器内部缓存,并且较老的消息正在老化时,该特性非常有用。使用该特性,Cisco IOS仍然会跟踪特定日志消息的发生数,以及该消息最后一次发生的情况。如果内部缓存不能够保留所有消息,而同样的错误或者问题却持续发生时,则该特性很有用。该特性基本上可以替代上面讨论的show logging summary命令

    在配置模式执行以下命令启用该特性:                                Router(config)#logging count

    该命令对每个日志消息进行计数,包括每种消息类型最后一次发生的时间戳。

    启用该特性后,可以使用show logging count命令来查看错误计数。 

使用syslog记录Cisco设备日志

以下配置描述了如何将Cisco设备的日志发往syslog服务器

 

device#conf t 

 

 

device(config)#logging on 
 
 
device(config)#logging a.b.c.d //日志服务器的IP地址 
 
 
device(config)#logging facility local1 //facility标识, RFC3164 规定的本地设备标识为 local0 - local7 
 
 
device(config)#logging trap errors //日志记录级别,可用"?"查看详细内容
(0:紧急emergencies
1:告警alerts
2:严重的critical
3:错误errors
4:警告warnings
5:通知notifications
6:信息informational
7:调试debugging
交换机一般配置成5,路由器一般配置为4)
 
 
device(config)#logging source-interface e0 //日志发出用的源IP地址 
 
 
device(config)#service timestamps log datetime localtime  //日志记录的时间戳设置,可根据需要具体配置 
 
 
检验 
 
 
device#sh logging