关于cisco日志的配置
关于Cisco路由器日志的记录和保存
关于Cisco路由器日志的记录和存储, 我们分下面几步进行讨论.首先是为线路显示日志的记录信息,然后是将日志信息保存到Log服务器,最后将日志信息发送到SNMP管理终端.
配置日志信息地发送选项
日志信息通常是指Cisco IOS中,系统所产生的报警信息.其中每一条信息都分配了一个警告的级别,并携带一些说明问题或时间严重性的描述信息.默认情况下,Cisco IOS只发送日志信息到Console接口;但是日志信息发送到Console接口有时候并不方便我们储存,管理,分析日志信息,更多情况下我们选择将日志发送至路由器缓存,Cisco路由器日志服务器或者是SNMP管理终端上去.
在Cisco IOS中,日志的消息将会以如下的方式被发送到日志存储区域:
%LINK-5-CHANGED:Interface Ethemet0/0,changed state to administratively down,
如果为日志信息启用了时间戳和序号等附加选项,则日志信息的显示如下:
000011:Feb 03 14:03:13.011:%SYS-5-CONFIGJ:Configrued from console by console,
Cisco IOS规定,Cisco路由器日志信息分为7个级别,每个级别都和一个严重等级相关联,级别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时,才会在控制台上显示输出.(注:7的话,可能显示的会比较慢)
对于日志记录功能可以控制的一个选项是,哪些消息被记录到4个目的地(线路,内部缓存,系统日志服务,SNMP管理台)例如,在控制台上,可以限制记录严重级别为4(即显示从0到4的消息)的日志消息;但是对系统日志服务器,可以设置为6(0到6).
日志记录目的地
可以将日志信息转发到以下4种基本目的地
1.线路
2.内部缓存
3.系统日志服务器
4.SNMP管理台
1.线路日志
有两个命令可用于控制日志消息被发送到路由器的线路上:
Router(config)#logging console [severity_level]
Router(config)#logging monitor [severity_level]
logging console命令是指将日志记录到物理的TTY,如控制台和辅助线路.默认地,记录日志到控制台对所有级别都打开;但是可以通过改变logging console命令中的严重级别来修改.
logging monitor命令是将日志记录到逻辑的VTY.
将日志记录到VTY和AUX默认是关闭的,要打开就要执行特权级的EXEC命令terminal monitor(telnet登录后使用),将控制台日志消息复制到VTY,或者配置logging monitor命令.如果使用了后者,在初次访问路由VTY时,则不需要执行terminal monitor命令来查看TTY命令行的日志输出.在配置logging monitor命令时,如果不指定严重级别,则默认为7(调试)
对两个命令,都必须使用logging on命令来打开日志记录.
由于将消息显示在终端线路上,如控制台,会给路由器增加处理负担,所以建议将严重级别改到此调试更高的严重级别(较低的数字).如果要查看较低严重级别的消息,可以使用路由器内部缓存,系统日志服务器,或者SNMP管理台.
如果在生成错误和调试消息的过程中,关闭logging on命令,会大大降低路由器的速度,直到这些消息显示在路由器的线路上,因此为显示在控制台线路的日志消息分配严重级别时要小心.
在配置路由器时,我们经常会遇到正在输入命令的时候,Cisco IOS设备将日志信息显示在正在输入的命令行中,虽然这些Cisco路由器日志消息和我们输入命令无关,但是也会为我们造成麻烦,此时我们可以通过输入logging synchronous命令,此命令的主要目的是将日志信息的输出,调试信息的输出同步到路由器线路上:控制台,辅助和VTY线路.
同步日志的主要目的是控制何时消息被显示在路由器的线路上,当启用这个特性时,同步日志使得Cisco IOS显示消息,然后执行一个等价的Ctrl-R的命令,这使得路由器将已经输入的信息重新显示在命令行上.
可以使用Loging 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用消息填满很大的队列,可以会耗尽路由器的整个内存.
2.内部缓存日志
记录日志消息到TTY或者VTY存在一个问题是,如果没有看连接线路的屏幕输出,消息滚过屏幕并超出了终端软件的历史缓存,则没有任何机制可以再看到那些丢失的消息.如果把日志消息记录到除了线路以外的其他目的地,则可以避免这个问题.
一个解决方案是将日志消息记录到路由器的内部缓存,根据路由器平台的不同,该项可能是默认打开或关闭的;大多数平台下,默认是打开的,用以下命令将日志记录到路由器的缓存:
Router(config)#logging buffered [buffer_size | severity_level]
该命令有两个参数,buffer_size指定为内部缓存分配多大的内存,以字节为单位.使用default logging buffered命令将缓存大小设回出厂的默认值.severity_level指出应该记录的严重级别.默认的大小和严重级别(通常是7)依赖于平台型号.
3.系统日志服务器日志
以下是将日志记录到系统日志服务器的基本命令
Router(config)#logging on
Router(config)#logging host{IP_address | host name}
Router(config)#logging trap severity_level
Router(config)#logging source-interface interface_type_interface_#
Router(config)#logging origin-id {host name| ip | string string}
Router(config)#logging facility facility_type
logging命令允许将日志记录到非控制台目的地.
logging host命令指定系统日志服务器的IP地址或者主机名(完全合格的域名(FQDN)).如果不只一次输入该命令,指定不同的系统日志服务器目的地,可以建立路由器使用的系统日志服务器列表.如果指定多个日志服务器的地址,设备则会多次发送日志信息到所有的日志服务器
在Cisco IOS12.2(15)T版本之前,使用logging {hostname|IP_address}命令打开系统日志服务器记录,现在使用logging host命令.
logging trap命令指定要发送到系统日志服务器的日志消息的严重级别.默认是informational.
默认地,路由器用来到达系统日志服务器的接口IP地址将作为IP数据包头中的源IP地址.使用logging source-interface命令来生成一致的日志条目.这样路由器使用一个相同的源地址.使用该命令时,必须指定接口的类型和编号.只有路由器有两个或更多接口可以到达系统日志服务器时,该命令才是必须的.(如果有多个接口都可以到达日志服务器时,又不指定源,那么日志信息的源IP地址则有可能会不同).但是为了一致性,要确保在系统日志数据包中使用相同的源地址.这使得在系统日志服务器上执行过滤规则来阻止的不希望的日志消息变得更容易.
在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上,可以通过编辑适当的配置文件来为指定的工具指定日志文件的保存位置.例如,编辑/ect/syslog配置文件,可以为工具创建一个条目.
如:local7.debugging/usr/adm/logs/router.log
该例中,工具级别是local7,debugging关键字指定了系统日志记录级别.系统日志级别将决定哪个级别的消息将保存在以下的文件中:任何该严重级别及更高级别的消息将存储在这个特定的文件中.
4.SNMP日志
要将日志消息发送到SNMP管理台,要执行以下命令:
Router(config)#snmp-server enable trap syslog (陷阱消息中的系统日志将被发送到SNMP管理台)
然后,有三个命令控制将日志消息记录到管理台:
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参数在日期和时间输出中包括时区名称(如下面的UTC).下面是一个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
如:下面显示的000041,000042 (下面显示的是除yeay参数的service timestamps命令)
3.速率限制
从Cisco IOS 12.1(3)T版本开始,可以用logging rate-limit命令以秒为单位限制记录日志消息的速率.
Router(config)#logging rate-limit {number | all number |console number}[except severity]
默认地,路由器上没有速率限制.通过指定一个从1到10000数.可以将每秒记录的日志消息数限制到该值.all关键字,后面跟一个数值,将作用于所有日志记录和调试消息.console关键字则限制将日志消息记录到控制台的速率.except参数对指定严重级别或者根据高级别的消息建立一个例外.
强烈建立使用该命令,特别是在控制台接口上.在受到攻击时,会出现泛洪,该命令可以减少路由器需要处理的消息量.
日志记录验证
1.show logging命令
show logging显示了当前系统日志错误和事件记录的状态,包括所有配置的系统日志服务器地址,哪种类型日志打开,以及日志记录统计.以下是命令的格式:
Router#show logging [summary] (GNS3 3600上无此参数)
使用clear logging命令清除内部缓存器中的日志消息.
2.show logging history命令
该命令显示了系统日志历史表的大小,表中的消息的状态以及消息本身.
日志记录和错误计数
如果正在使用路由内部缓存,并且较老的消息正在老化时,该特性非常有用.使用该特性,Cisco IOS仍然会跟踪特定日志消息的发生数,以及该消息最后一次发生的情况.如果内部缓存不能够保留所有消息,而同样的错误或者问题却持续发生时,则该特性很有用.该特性基本上可以替代上面讨论的show logging summary命令.
在配置模式执行以下命令启用该特性:
Router(config)#logging count
该命令对每个日志消息进行计数,包括每种消息类型最后一次发生的时间戳.
启用该特性后,可以使用show logging count命令来查看错误计数.