wordpress 查看大图,兰州seo优化,网站建站麻烦吗,网站说明怎么写第十五章 Linux系统日志管理
系统日志详细地记录了在什么时间#xff0c;哪台服务器、哪个程序或服务出现了什么情况。不管是哪种操作系统#xff0c;都详细地记录了重要程序和服务的日志#xff0c;只是我们很少养成查看日志的习惯。 日志是系统信息最详细、最准确的记录者…第十五章 Linux系统日志管理
系统日志详细地记录了在什么时间哪台服务器、哪个程序或服务出现了什么情况。不管是哪种操作系统都详细地记录了重要程序和服务的日志只是我们很少养成查看日志的习惯。 日志是系统信息最详细、最准确的记录者如果大家能够善用日志那么当系统出现问题时我们就能在第一时间发现问题也能够从日志中找到解决问题的方法。 很多人都觉得查看日志比较枯燥甚至干脆看不懂那么本章就来学习一下Linux系统的日志管理。
一、Linux rsyslogd服务及启动方法详解版
在 CentOS 6.x 中日志服务已经由 rsyslogd 取代了原先的 syslogd。Red Hat 公司认为 syslogd 已经不能满足工作中的需求rsyslogd 相比 syslogd 具有一些新的特点
基于TCP网络协议传输日志信息。更安全的网络传输方式。有日志信息的即时分析框架。后台数据库。在配置文件中可以写简单的逻辑判断。与syslog配置文件相兼容。
rsyslogd 日志服务更加先进功能更多。但是不论是该服务的使用还是日志文件的格式其实都是和 syslogd 服务相兼容的所以学习起来基本和 syslogd 服务一致。 我们如何知道 Linux 中的 rsyslogd 服务是否启动了呢如何查询 rsyslogd 服务的自启动状态呢命令如下 [rootlocalhost ~]# ps aux | grep rsyslog | grep -v grep root 1139 0.0 0.2 35948 1500 ? Sl 0940 000 /sbin/rsyslogd -i/var/run/syslogd.pid -c 5 #有rsyslogd服务的进程所以这个服务已经启动了 [rootlocalhost ~]# chkconfig --list | grep rsyslog rsyslog 0关闭 1关闭 2启用 3启用 4启用 5启用 6关闭 #rsyslog服务在2、3、4、5运行级别上是开机自启动的 系统中的绝大多数日志文件是由 rsyslogd 服务来统一管理的只要各个进程将信息给予这个服务它就会自动地把日志按照特定的格式记录到不同的日志文件中。也就是说采用 rsyslogd 服务管理的日志文件它们的格式应该是统一的。 在 Linux 系统中有一部分日志不是由 rsyslogd 服务来管理的比如 apache 服务它的日志是由 Apache 软件自己产生并记录的并没有调用 rsyslogd 服务。但是为了便于读取apache 日志文件的格式和系统默认日志的格式是一致的。
二、Linux日志文件常见及其功能
日志文件是重要的系统信息文件其中记录了许多重要的系统事件包括用户的登录信息、系统的启动信息、系统的安全信息、邮件相关信息、各种服务相关信息等。这些信息有些非常敏感所以在 Linux 中这些日志文件只有 root 用户可以读取。
那么系统日志文件保存在什么地方呢还记得 /var/ 目录吗它是用来保存系统动态数据的目录那么 /var/log/ 目录就是系统日志文件的保存位置。我们通过表 1 来说明一下系统中的重要日志文件。 表 1 系统中的重要日志文件 日志文件说 明/var/log/cron记录与系统定时任务相关的曰志/var/log/cups/记录打印信息的曰志/var/log/dmesg记录了系统在开机时内核自检的信总。也可以使用dmesg命令直接查看内核自检信息/var/log/btmp记录错误登陆的日志。这个文件是二进制文件不能直接用Vi查看而要使用lastb命令查看。命令如下 [rootlocalhost log]#lastb root tty1 Tue Jun 4 22:38 - 22:38 (00:00) #有人在6月4 日 22:38便用root用户在本地终端 1 登陆错误/var/log/lasllog记录系统中所有用户最后一次的登录时间的曰志。这个文件也是二进制文件.不能直接用Vi 查看。而要使用lastlog命令查看/var/Iog/mailog记录邮件信息的曰志/var/log/messages它是核心系统日志文件其中包含了系统启动时的引导信息以及系统运行时的其他状态消息。I/O 错误、网络错误和其他系统错误都会记录到此文件中。其他信息比如某个人的身份切换为 root已经用户自定义安装软件的日志也会在这里列出。/var/log/secure记录验证和授权方面的倍息只要涉及账户和密码的程序都会记录比如系统的登录、ssh的登录、su切换用户sudo授权甚至添加用户和修改用户密码都会记录在这个日志文件中/var/log/wtmp永久记录所有用户的登陆、注销信息同时记录系统的后动、重启、关机事件。同样这个文件也是二进制文件.不能直接用Vi查看而要使用last命令查看/var/tun/ulmp记录当前已经登录的用户的信息。这个文件会随着用户的登录和注销而不断变化只记录当前登录用户的信息。同样这个文件不能直接用Vi查看而要使用w、who、users等命令查看
除系统默认的日志之外采用 RPM 包方式安装的系统服务也会默认把日志记录在 /var/log/ 目录中源码包安装的服务日志存放在源码包指定的目录中。不过这些日志不是由 rsyslogd 服务来记录和管理的而是各个服务使用自己的日志管理文档来记录自身的日志。以下介绍的日志目录在你的 Linux 上不一定存在只有安装了相应的服务日志才会出现。服务日志如表 2 所示。 表 2 服务日志 日志文件说明/var/log/httpd/RPM包安装的apache取务的默认日志目录/var/log/mail/RPM包安装的邮件服务的额外日志因录/var/log/samba/RPM色安装的Samba服务的日志目录/var/log/sssd/守护进程安全服务目录
三、Linux日志文件格式分析
只要是由日志服务 rsyslogd 记录的日志文件它们的格式就都是一样的。所以我们只要了解了日志文件的格式就可以很轻松地看懂日志文件。 日志文件的格式包含以下 4 列
事件产生的时间。产生事件的服务器的主机名。产生事件的服务名或程序名。事件的具体信息。
我们查看一下 /var/log/secure 日志这个日志中主要记录的是用户验证和授权方面的信息更加容易理解。命令如下 [rootlocalhost ~]# vi /var/log/secure Jun 5 032046 localhost sshd[1630]Accepted password for root from 192.168.0.104 port 4229 ssh2 # 6月5日 032046 本地主机 sshd服务产生消息接收从192.168.0.104主机的4229端口发起的ssh连接的密码 Jun 5 032046 localhost sshd[1630]pam_unix(sshdsession)session opened for user root by (uid0) #时间 本地主机 sshd服务中pam_unix模块产生消息打开用户root的会话UID为0 Jun 5 032504 localhost useradd[1661]new groupnamebb GID501 #时间 本地主机 useradd命令产生消息新建立bb组GID为501 Jun 5 032504 localhost useradd[1661]new usernamebb UID501 GID501 home/home/bb shell/bin/bash Jun 5 032509 localhost passwdpam_unix(passwdchauthtok)password changed for bb 我截取了一段日志的内容注释了其中的三句日志剩余的两句日志大家可以看懂了吗其实分析日志既是重要的系统维护工作也是一项非常枯燥和烦琐的工作。如果我们的服务器出现了一些问题比如系统不正常重启或关机、用户非正常登录、服务无法正常使用等则都应该先查询日志。 实际上只要感觉到服务器不是很正常就应该查看日志甚至在服务器没有什么问题时也要养成定时查看系统日志的习惯。
四、rsyslogd配置文件格式及其内容详解
rsyslogd 服务是依赖其配置文件 /etc/rsyslog.conf 来确定哪个服务的什么等级的日志信息会被记录在哪个位置的。也就是说日志服务的配置文件中主要定义了服务的名称、日志等级和日志记录位置。
1、/etc/rsyslog.conf配置文件的格式
该配置文件的基本格式如下所示 authpriv.* /var/log/secure #服务名称[连接符号]日志等级 日志记录位置 #认证相关服务.所有日志等级 记录在/var/log/secure日志中 1服务名称
我们首先需要确定 rsyslogd 服务可以识别哪些服务的日志也可以理解为以下这些服务委托 rsyslogd 服务来代为管理日志。这些服务如表 1 所示。 表 1 日志服务名称 服务名称说 明auth(LOG AUTH)安全和认证相关消息 (不推荐使用authpriv替代authpriv(LOG_AUTHPRIV)安全和认证相关消息私有的cron (LOG_CRON)系统定时任务cront和at产生的日志daemon (LOG_DAEMON)与各个守护进程相关的曰志ftp (LOG_FTP)ftp守护进程产生的曰志kern(LOG_KERN)内核产生的曰志不是用户进程产生的Iocal0-local7 (LOG_LOCAL0-7)为本地使用预留的服务lpr (LOG_LPR)打印产生的日志mail (LOG_MAIL)邮件收发信息news (LOG_NEWS)与新闻服务器相关的日志syslog (LOG_SYSLOG)存syslogd服务产生的曰志信息虽然服务名称己经改为reyslogd但是很多配罝依然沿用了 syslogd服务的所以这里并没有修改服务名称user (LOG_USER)用户等级类别的日志信息uucp (LOG_UUCPuucp子系统的日志信息uucp是早期Linux系统进行数据传递的协议后来 也常用在新闻组服务中
这些日志服务名称是rsyslogd服务自己定义的并不是实际的Linux的服务。当有服务需要由rsyslogd服务来帮助管理日志时只需要调用这些服务名称就可以实现日志的委托管理。 这些日志服务名称大家可以使用命令“man 3 syslog”来查看。虽然我们的日志管理服务已经更新到rsyslogd但是很多配置依然沿用了syslogd服务在帮助文档中仍然查看syslog服务的帮助信息。
2连接符号
日志服务连接日志等级的格式如下 日志服务[连接符号]日志等级 日志记录位置 在这里连接符号可以被识别为以下三种。
“.”代表只要比后面的等级高的包含该等级日志都记录。比如“cron.info”代表cron服务产生的日志只要日志等级大于等于info级别就记录。“.”代表只记录所需等级的日志其他等级的日志都不记录。比如“*.emerg”代表人和日志服务产生的日志只要等级是emerg等级就记录。这种用法极少见了解就好。“.”代表不等于也就是除该等级的日志外其他等级的日志都记录。
3日志等级
每个日志的重要性都是有差别的比如有些日志只是系统的一个日常提醒看不看根本不会对系统的运行产生影响但是有些日志就是系统和服务的警告甚至报错信息这些日志如果不处理就会威胁系统的稳定或安全。如果把这些日志全部写入一个文件那么很有可能因为管理员的大意而忽略重要信息。 比如我们在工作中需要处理大量的邮件笔者每天可能会接收到200多封邮件。而这些邮件中的绝大多数是不需要处理的普通信息邮件甚至是垃圾邮件。所以笔者每天都要先把这些大量的非重要邮件删除之后才能找到真正需要处理的邮件。但是每封邮件的标题都差不多有时会误删除需要处理的邮件。这时笔者就非常怀念Linux的日志等级如果邮件也能标识重要等级就不会误删除或漏处理重要邮件了。 邮件的等级信息也可以使用“man 3 syslog”命令来查看。日志等级如表 2 所示我们按照严重等级从低到高排列。 表 2 日志等级 等级名称说 明debug (LOG_DEBUG)一般的调试信息说明info (LOG_INFO)基本的通知信息nolice (LOG_NOTICE)普通信息但是有一定的重要性warning(LOG_WARNING)警吿信息但是还不会影响到服务或系统的运行err(LOG_ERR)错误信息, 一般达到err等级的信息已经可以影响到服务成系统的运行了crit (LOG_CRIT)临界状况信思比err等级还要严®alert (LOG_ALERT)状态信息比crit等级还要严重必须立即采取行动emerg (LOG_EMERG)疼痛等级信息系统已经无法使用了*代表所有日志等级。比如“authpriv.*”代表amhpriv认证信息服务产生的日志所有的日志等级都记录
日志等级还可以被识别为“none”。如果日志等级是none就说明忽略这个日志服务该服务的所有日志都不再记录。
4日志记录位置
日志记录位置就是当前日志输出到哪个日志文件中保存当然也可以把日志输出到打印机打印或者输出到远程日志服务器上当然远程日志服务器要允许接收才行。日志的记录位置也是固定的
日志文件的绝对路径。这是最常见的日志保存方法如“/var/log/secure”就是用来保存系统验证和授权信息日志的。系统设备文件。如“/dev/lp0”代表第一台打印机如果日志保存位置是打印机设备当有日志时就会在打印机上打印。转发给远程主机。因为可以选择使用 TCP 和 UDP 协议传输日志信息所以有两种发送格式如果使用“192.168.0.210514”就会把日志内容使用 UDP 协议发送到192.168.0.210 的 UDP 514 端口上如果使用“192.168.0.210514”就会把日志内容使用 TCP 协议发送到 192.168.0.210 的 TCP 514 端口上其中 514 是日志服务默认端口。当然只要 192.168.0.210 同意接收此日志就可以把日志内容保存在日志服务器上。用户名。如果是“root”就会把日志发送给 root 用户当然 root 要在线否则就收不到日志信息了。发送日志给用户时可以使用“*”代表发送给所有在线用户如“mail.**”就会把 mail 服务产生的所有级别的日志发送给所有在线用户。如果需要把日志发送给多个在线用户则用户名之间用“”分隔。忽略或丢弃日志。如果接收日志的对象是“~”则代表这个日志不会被记录而被直接丢弃。如“local3.* ~”代表忽略 local3 服务类型所有的日志都不记录。忽略或丢弃日志。如果接收日志的对象是“~”则代表这个日志不会被记录而被直接丢弃。如“local3.* ~”代表忽略 local3 服务类型所有的日志都不记录。
2、/etc/rsyslog.conf配置文件的内容
我们知道了/etc/rsyslog.conf 配置文件中日志的格式接下来就看看这个配置文件的具体内容。 [rootlocalhost ~]# vi /etc/rsyslog.conf #查看配置文件的内容 #rsyslog v5 configuration file # For more information see /usr/share/doc/rsyslog-*/rsyslog_conf.html # If you experience problems, see http://www.rsyslog.com/doc/troubleshoot.html *### MODULES ### #加载棋块 $ModLoad imuxsock # provides support for local system logging (e.g. via logger command) #加载imixsock模块为本地系统登录提供支持 $ModLoad imklog # provides kernel logging support (previously done by rklogd) #加载imklog模块为内核登录提供支持 #$ModLoad immark # provides --MARK-- message capability #加载immark模块提供标记信息的能力 # Provides UDP syslog reception #$ModLoad imudp #SUDPServerRun 514 #加载UPD模块允许使用UDP的514端口接收采用UDP协议转发的日志 # Provides TCP syslog reception #$ModLoad imtcp #$InputTCPServerRun 514 #加栽TCP摸块,允许使用TCP的514编口接收采用TCP协议转发的日志 #### GLOBAL DIRECTIVES #### #定义全局设置 #Use default timestamp format #ActionFileDefaultTemplate RSYSLOG_TraditionalFileFormat #定义曰志的时间使用默认的时间戳格式 #File syncing capability is disabled by default. This feature is usually not required, #not useful and an extreme performance hit #$ActionFileEnableSync on #文件同步功能。默认没有开启,是注释的 #Include all config files in /etc/rsyslog.d/ $IncludeConfig /etc/rsyslog.d/*.conf #包含/etx/tsyslog.d/目录中所有的.conf子配置文件。也就是说这个目录中的所有子配置文件也同时生效 #### RULES #### #日志文件保存规则 #Log all kernel messages to the console. #Logging much else clutters up the screen. #kern.* /dev/console #kern服务.所有曰志级别 保存在/dev/console #这个日志默认没有开启,如果需要则取消注释 #Log anything (except mail) of level info or higher. #Dont log private authentication messages! *.info;mail.none;authpriv.none;cron.none /var/log/messages #所有服务.info以上级到的日志保存在/var/log/messages日志文件中 #mail, authpriv^ cron的B志不记录在/var/log/messages曰志文件中因为它们部有自己的曰志文件 #所以/var/log/messages日志是最重要的系统日志文件需要经常查看 #The authpriv file has restricted access. authpriv.* /var/log/secure #用户认证服务所有级别的日志保存在/vai/1og/secure日志文件中 #Log all the mail messages in one place. mail.* -/var/log/maillog #mail服务的所有级别的日志保存在/var/log/maillog 日志文件中 #-的含义是日志先在内存中保存.当曰志足够多之后.再向文件中保存 # Log cron stuff cron.* /var/log/cron #计対任务的所有日志保存在/var/log/cron日志文件中 # Everybody gets emergency messages #所有日志服务的疼痛等级日志对所有在线用户广播 #Save news errors of level crit and higher in a special file. uucp,news.crit /var/log/spooler #uucp和news曰志服务的crit以上级别的日志保存在/var/log/sppoler曰志文件中 #Save boot messages also to boot.log local7.* /var/log/boot.log #loacl7 日志服务的所有日志写入/var/log/boot.log 日志文件中 #会把开机时的检测信息在显示到屏幕的同时写入/var/log/boot.log 日志文件中 # ### begin forwarding rule ### #定义转发规到 #The statement between the begin ... end define a SINGLE forwarding #rule. They belong together, do NOT split them. If you create multiple # forwarding rules, duplicate the whole block! # Remote Logging (we use TCP for reliable delivery) # # An on-disk queue is created for this action. If the remote host is # down, messages are spooled to disk and sent when it is up again. #SWorkDirectory /var/lib/rsyslog # where to place spool files #$ActionQueueFileName fwdRulel # unique name prefix for spool files #$ActionQueueMaxDiskSpace 1g # 1gb space limit (use as much as possible) #$ActionQueueSaveOnShutdown on # save messages to disk on shutdown #$ActionQueueType LinkedList t run asynchronously #$ActionResumeRetryCount -1 # infinite retries if host is down # remote host is: name/ip:port, e.g. 192.168.0.1:514, port optional #*•* 6remote-host:514 # ### end of the forwarding rule ## 其实系统已经非常完善地定义了这个配置文件的内容系统中重要的日志也已经记录得非常完备。如果是外来的服务如 apache、Samba 等服务那么这些服务的配置文件中也详细定义了日志的记录格式和记录方法。所以日志的配置文件基本上不需要我们修改我们要做的仅仅是查看和分析系统记录好的日志而已。
五、Linux日志服务器设置过程
我们知道使用“IP端口”或“IP端口”的格式可以把日志发送到远程主机上那么这么做有什么意义吗 假设我需要管理几十台服务器那么我每天的重要工作就是查看这些服务器的日志可是每台服务器单独登录并且查看日志非常烦琐我可以把几十台服务器的日志集中到一台日志服务器上吗这样我每天只要登录这台日志服务器就可以查看所有服务器的日志要方便得多。 如何实现日志服务器的功能呢其实并不难不过我们首先需要分清服务器端和客户端。假设服务器端的服务器 IP 地址是 192.168.0.210主机名是 localhost.localdomain客户端的服务器 IP 地址是 192.168.0.211主机名是 www1。我们现在要做的是把 192.168.0.211 的日志保存在 192.168.0.210 这台服务器上。实验过程如下 #服务器端设定192.168.0.210 [rootlocalhost ~]# vi /etc/rsyslog.conf …省略部分输出… # Provides TCP syslog reception $ModLoad imtcp $InputTCPServerRun 514 #取消这两句话的注释允许服务器使用TCP 514端口接收日志 …省略部分输出… [rootlocalhost ~]# service rsyslog restart #重启rsyslog日志服务 [rootlocalhost ~]# netstat -tlun | grep 514 tcp 0 0 0.0.0.0514 0.0.0.0* LISTEN #查看514端口已经打开 #客户端设置192.168.0.211 [rootwww1 ~]# vi /etc/rsyslog.conf #修改日志服务配置文件 *.* 192.168.0.210514 #把所有日志采用TCP协议发送到192.168.0.210的514端口上 [rootwww1 ~]# service rsyslog restart #重启日志服务 这样日志服务器和客户端就搭建完成了以后 192.168.0.211 这台客户机上所产生的所有日志都会记录到 192.168.0.210 上。比如 #在客户机上(192.168.0.211) [rootwwwl ~]# useradd zhangsan #添加zhansan用户提示符的主机名是www1) #在限务器(192.168.0.210)上 [rootlocalhost ~]# vi /var/log/secure #査看服务器的secure日志(注意:主机名是localhost) Aug 8 23:00:57 wwwl sshd【1408]: Server listening on 0.0.0.0 port 22. Aug 8 23:00:57 wwwl sshd[1408]: Server listening on :: port 22. Aug 8 23:01:58 wwwl sshd[1630]: Accepted password for root from 192.168.0.101 port 7036 ssh2 Aug 8 23:01:58 wwwl sshd[1630]: pam_unix(sshd:session): session opened for user root by (uid0) Aug 8 23:03:03 wwwl useradd[1654]: new group: namezhangsan, GID-505 Aug 8 23:03:03 wwwl useradd[1654]: new user: namezhangsan, UXD505, GID505, home/home/zhangsan, shell/bin/bash Aug 8 23:03:09 wwwl passwd: pam_unix(passwd:chauthtok): password changed for zhangsan #注意查看到的日志内容的主机名是www1说明我们虽然查看的是服务器的日志文件但是在其中可以看到客户机的日志内容 需要注意的是日志服务是通过主机名来区别不同的服务器的。所以如果我们配置了日志服务则需要给所有的服务器分配不同的主机名。
六、Linux日志轮替日志转储及logrotate配置文件分析
日志是重要的系统文件记录和保存了系统中所有的重要事件。但是日志文件也需要进行定期的维护因为日志文件是不断增长的如果完全不进行日志维护而任由其随意递增那么用不了多久我们的硬盘就会被写满。日志维护的最主要的工作就是把旧的日志文件删除从而腾出空间保存新的日志文件。这项工作如果靠管理员手工来完成那其实是非常烦琐的而且也容易忘记。那么 Linux 系统是否可以自动完成日志的轮替工作呢 logrotate 就是用来进行日志轮替也叫日志转储的也就是把旧的日志文件移动并改名同时创建一个新的空日志文件用来记录新日志当旧日志文件超出保存的范围时就删除。
1、日志文件的命名规则
日志轮替最主要的作用就是把旧的日志文件移动并改名同时建立新的空日志文件当旧日志文件超出保存的范围时就删除。那么旧的日志文件改名之后如何命名呢主要依靠 /etc/logrotate.conf 配置文件中的“dateext”参数。 如果配置文件中有“dateext”参数那么日志会用日期来作为日志文件的后缀如“secure-20130605”。这样日志文件名不会重叠也就不需要对日志文件进行改名只需要保存指定的日志个数删除多余的日志文件即可。 如果配置文件中没有“dateext”参数那么日志文件就需要进行改名了。当第一次进行日志轮替时当前的“secure”日志会自动改名为“secure.1”然后新建“secure”日志用来保存新的日志当第二次进行日志轮替时“secure.1”会自动改名为“secure.2”当前的“secure”日志会自动改名为“secure.1”然后也会新建“secure”日志用来保存新的日志以此类推。
2、logrotate配置文件
我们来查看一下 logrotate 的配置文件 /etc/logrotate.conf 的默认内容。 [rootlocalhost ~]# vi /etc/logrotate.conf #see man logrotate for details #rotate log files weekly weekly #每周对日志文件进行一次轮替 #keep 4 weeks worth of backlogs rotate 4 #保存4个日志文件,也就是说,如果进行了5次日志轮替就会删除第一个备份曰志 #create new (empty) log files after rotating old ones create #在日志轮替时,自动创建新的日志文件 #use date as a suffix of the rotated file dateext #使用日期作为日志轮替文件的后缀 #uncomment this if you want your log files compressed #compress #日志文件是否压缩。如果取消注释,则日志会在转储的同时进行压缩 #以上日志配置为默认配置,如果需要轮替的日志没有设定独立的参数,那么都会遵循以上参数 #如果轮替曰志配置了独立参数,那么独立参数的优先级更高 #RPM packages drop log rotation information into this directory include /etc/logrotate.d #包含/etc/logrotate.d/目录中所有的子配置文件。也就是说,会把这个目录中所有的子配置文件读取进来进行日志轮替 #no packages own wtmp and btmp -- we11 rotate them here #以下两个轮替曰志有自己的独立参数如果和默认的参数冲突则独立参数生效 /var/log/wtmp { #以下参数仅对此目录有效 monthly #每月对日志文件进行一次轮替 create 0664 root utmp #建立的新日志文件,权限是0664,所有者是root,所属组是utmp组 minsize 1M #日志文件最小轮替大小是1MB。也就是日志一定要超过1MB才会轮替否则就算时间达到一个月也不进行曰志轮替 rotate 1 #仅保留一个曰志备份。也就是只保留wtmp和wtmp.1曰志) /var/log/btmp { #以下参数只对/var/log/btmp生效 missingok #如果日志不存在,则忽略该日志的警告信患 monthly create 0600 root utmp rotate 1 } # system-specific logs may be also be configured here. 在这个配置文件中主要分为三部分
第一部分是默认设置如果需要转储的日志文件没有特殊配置则遵循默认设置的参数第二部分是读取 /etc/logrotate.d/ 目录中的日志轮替的子配置文件也就是说在 /etc/logrotate.d/ 目录中的所有符合语法规则的子配置文件也会进行日志轮替第三部分是对 wtmp 和 btmp 日志文件的轮替进行设定如果此设定和默认参数冲突则当前设定生效如 wtmp 的当前参数设定的轮替时间是每月而默认参数的轮替时间是每周则对 wtmp 这个日志文件来说轮替时间是每月当前的设定参数生效。
logrotate 配置文件的主要参数如表 1 所示。 表 1 logrotate配置文件的主要参数 参参数参数说明daily日志的轮替周期是毎天weekly日志的轮替周期是每周monthly日志的轮控周期是每月rotate数宇保留的日志文件的个数。0指没有备份compress当进行日志轮替时对旧的日志进行压缩create mode owner group建立新日志同时指定新日志的权限与所有者和所属组.如create 0600 root utmpmail address当进行日志轮替时.输出内存通过邮件发送到指定的邮件地址missingok如果日志不存在则忽略该日志的警告信息nolifempty如果曰志为空文件則不进行日志轮替minsize 大小日志轮替的最小值。也就是日志一定要达到这个最小值才会进行轮持否则就算时间达到也不进行轮替size大小日志只有大于指定大小才进行日志轮替而不是按照时间轮替如size 100kdateext使用日期作为日志轮替文件的后缀如secure-20130605sharedscripts在此关键宇之后的脚本只执行一次prerotate/cndscript在曰志轮替之前执行脚本命令。endscript标识prerotate脚本结束postrolaie/endscripl在日志轮替之后执行脚本命令。endscripi标识postrotate脚本结束
这些参数中较为难理解的应该是 prerotate/endscript 和 postrotate/endscript我们利用“man logrotate”中的例子来解释一下这两个参数。例如 /var/log/httpd/access.log /var/log/httpd/error.log { #日志轮替的是/var/log/httpd/中RPM包默认安装的apache正确访问日志和错误日志 rotate 5 #轮替5次 mail wwwmy.org #把信息发送到指定邮箱 size 100k #日志大于100KB时才进行日志轮替,不再按照时间轮替 sharedscripts #以下脚本只执行一次 postrotate #在日志轮替结束之后,执行以下脚本 /usr/bin/killall -HUP httpd #重启apache 服务 endscript #脚本结束 } prerotate 和 postrotate 主要用于在日志轮替的同时执行指定的脚本一般用于日志轮替之后重启服务。这里强调一下如果你的日志是写入 rsyslog 服务的配置文件的那么把新日志加入 logrotate 后一定要重启 rsyslog 服务否则你会发现虽然新日志建立了但数据还是写入了旧的日志当中。那是因为虽然 logrotate 知道日志轮替了但是 rsyslog 服务并不知道。 同理如果采用源码包安装了 apache、Nginx 等服务则需要重启 apache 或 Nginx 服务同时还要重启 rsyslog 服务否则日志也不能正常轮替。 不过这里有一个典型应用就是给予特定的日志加入 chattr 的 a 属性。如果系统文件加入了 a 属性那么这个文件就只能增加数据而不能删除和修改已有的数据root 用户也不例外。 因此我们会给重要的日志文件加入 a 属性这样就可以保护日志文件不被恶意修改。不过一旦加入了 a 属性那么在进行日志轮替时这个日志文件是不能被改名的当然也就不能进行日志轮替了。我们可以利用 prerotate 和 postrotate 参数来修改日志文件的 chattr 的 a 属性。
3、把自己的日志加入日志轮替
如果有些日志默认没有加入日志轮替比如源码包安装的服务的日志或者自己添加的日志那么这些日志默认是不会进行日志轮替的这样当然不符合我们对日志的管理要求。如果需要把这些日志也加入日志轮替那该如何操作呢 这里有两种方法
第一种方法是直接在 /etc/logrotate.conf 配置文件中写入该日志的轮替策略从而把日志加入轮替第二种方法是在 /etc/logrotate.d/ 目录中新建立该日志的轮替文件在该轮替文件中写入正确的轮替策略因为该目录中的文件都会被包含到主配置文件中所以也可以把日志加入轮替。
我们推荐第二种方法因为系统中需要轮替的日志非常多如果全部直接写入 /etc/logrotate.conf 配置文件那么这个文件的可管理性就会非常差不利于此文件的维护。 说起来很复杂我们举个例子。还记得我们自己生成的 /var/log/alert.log 日志吗这个日志不是系统默认日志而是我们通过 /etc/rsyslog.conf 配置文件自己生成的日志所以默认这个日志是不会进行轮替的。如果我们需要把这个日志加入日志轮替策略那该怎么实现呢我们采用第二种方法也就是在 /etc/logrotate.d/ 目录中建立此日志的轮替文件。 具体步骤如下 [rootlocalhost ~]# chattr a /var/log/alert.log #先给日志文件赋予chattr的a属性保证日志的安全 [rootlocalhost ~]# vi /etc/logrotate.d/alter #创建alter轮替文件,把/var/log/alert.log加入轮替 /var/log/alert.log { weekly #每周轮替一次 rotate 6 #保留6个轮替曰志 sharedscripts #以下命令只执行一次 prerotate #在日志轮替之前执行 /usr/bin/chattr -a /var/log/alert.log #在日志轮替之前取消a属性,以便让日志可以轮替 endscript #脚本结朿 sharedscripts postrotate #在日志轮替之后执行 /usr/bin/chattr a /var/log/alert.log #在日志轮替之后,重新加入a属性 endscript sharedscripts postrotate /bin/kill -HUP $(/bin/cat /var/run/syslogd.pid 2/dev/null) fi/dev/null endscript #重启rsyslog服务保证日志轮替正常进行 } 这样我们自己生成的日志 /var/log/alert.log 也就可以进行日志轮替了当然这些配置信息也是可以直接写入 /etc/logrotate.conf 这个配置文件的。
七、Linux logrotate命令用法详解进行日志转储轮替
日志轮替之所以可以在指定的时间备份日志是因为其依赖系统定时任务。如果大家还记得 /etc/cron.daily/ 目录就会发现这个目录中是有 logrotate 文件的查看一下这个文件命令如下 [rootlocalhost ~]# vi /etc/cron.daily/logrotate #/bin/sh /usr/sbin/logrotate /etc/logrotate.conf /dev/null 21 #最主要的就是执行了logrotate命令 EXITVALUE$? if [ $EXITVALUE 0 ]; then /usr/bin/logger -t logrotate ALERT exited abnormally with [$EXITVALUE] fi exit 0 也就是说系统每天都会执行 /etc/cron.daily/logrotate 文件运行这个文件中的“/usr/sbin/logrotate/etc/logrotate.conf/dev/null 21”命令。logrotate 命令会依据 /etc/logrotate.conf 配置文件的配置来判断配置文件中的日志是否符合日志轮替的条件比如日志备份时间已经满一周如果符合日志就会进行轮替。所以说日志轮替还是由 crond 服务发起的。 logrotate 命令的格式是什么样的呢我们来学习一下。 [rootlocalhost ~]# logrotate [选项] 配置文件名 选项
如果此命令没有选项则会按照配置文件中的条件进行日志轮替-v显示日志轮替过程。加入了-v选项会显示日志的轮替过程-f 强制进行日志轮替。不管日志轮替的条件是否符合强制配置文件中所有的日志进行轮替
我们执行 logrotate 命令并查看一下执行过程。 [rootlocalhost ~]# logrotate -v /etc/logrotate.conf #查看日志轮替的流程 …省略部分输出… rotating pattern/var/log/alert.log weekly (6 rotations) #这就是我们自己加入轮替的alert.log日志 empty log files are rotated old logs are removed considering log /var/log/alert.log log does not need rotating #时间不够一周所以不进行日志轮替 …省略部分输出… 我们发现/var/log/alert.log 加入了日志轮替已经被 logrotate 识别并调用了只是时间没有达到轮替的标准所以没有进行轮替。那我们强制进行一次日志轮替看看会有什么结果。 [rootlocalhost ~]# logrotate -vf /etc/logrotate.conf #强制进行日志轮替不管是否符合轮替条件 …省略部分输出… rotating pattern/var/log/alert.log forced from command line (6 rotations) empty log files are rotated old logs are removed considering log /var/log/alert.log log needs rotating #日志需要轮替 rotating log /var/log/alert.loglog-rotateCount is 6 dateext suffix -20130607 #提取日期参数 glob pattern -[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9] glob finding old rotated logs failed running prerotate script fscreate context set to unconfined_uobject_rvar_log_ts0 renaming /var/log/alert.log to /var/log/alert.log-20130607 #旧的日志被重命名 creating new /var/log/alert.log mode 0600 uid 0 gid 0 #创建新日志文件同时指定权限、所有者和属组 running postrotate script …省略部分输出… 我们发现alert.log 日志已经完成了日志轮替。查看一下新生成的日志和旧日志如下 [rootlocalhost ~]# ll /var/log/alert.log* -rw-------.1 root root 0 6月 7 1007 /var/log/alert.log -rw-------.1 root root 237 6月 7 0958 /var/log/alert.log-20130607 #旧的日志文件已经轮替 [rootlocalhost ~]# lsattr /var/log/alert.log -----a-------e- /var/log/alert.log #新的日志文件被自动加入了chattr的a属性 logrotate 命令在使用“-f”选项之后就会不管日志是否符合轮替条件而强制把所有的日志都进行轮替。
八、Linux日志分析工具logwatch安装及使用
日志是非常重要的系统文件管理员每天的重要工作就是分析和查看服务器的日志判断服务器的健康状态。但是日志管理又是一项非常枯燥的工作如果需要管理员手工查看服务器上所有的日志那实在是一项非常痛苦的工作。有些管理员就会偷懒省略日志的检测工作但是这样做非常容易导致服务器出现问题。 那么我们有取代的方案吗有那就是日志分析工具。这些日志分析工具会详细地查看日志同时分析这些日志并且把分析的结果通过邮件的方式发送给 root 用户。这样我们每天只要查看日志分析工具的邮件就可以知道服务器的基本情况而不用挨个检查日志了。这样系统管理员就可以从繁重的日常工作中解脱出来去处理更加重要的工作。 在 CentOS 中自带了一个日志分析工具就是 logwatch。不过这个工具默认没有安装因为我们选择的是“Basic Server”所以需要手工安装。安装命令如下 [rootlocalhost Packages]# yum -y install logwatch 安装完成之后需要手工生成 logwatch 的配置文件。默认配置文件是 /etc/logwatch/conf/logwatch.conf不过这个配置文件是空的需要把模板配置文件复制过来。命令如下 [rootlocalhost ~]# cp /usr/share/logwatch/default.conf/logwatch.conf /etc/logwatch/conf/logwatch.conf #复制配置文件 这个配置文件的内容中绝大多数是注释我们把注释去掉那么这个配置文件的内容如下所示 [rootlocalhost ~]# vi /etc/logwatch/conf/logwatch.conf #查看配置文件 LogDir /var/log #logwatch会分析和统计/var/log/中的日志 TmpDir /var/cache/logwatch #指定logwatch的临时目录 MailTo root #日志的分析结果给root用户发送邮件 MailFrom Logwatch #邮件的发送者是Logwatch在接收邮件时显示 Print #是否打印。如果选择“yes”那么日志分析会被打印到标准输出而且不会发送邮件。我们在这里不打印#而是给root用户发送邮件 #Save /tmp/logwatch #如果开启这一项日志分析就不会发送邮件而是保存在/tmp/logwatch文件中 #如果开启这一项日志分析就不会发送邮件而是保存在/tmp/logwatch文件中 Range yesterday #分析哪天的日志。可以识别“All”“Today”“Yesterday”用来分析“所有日志”“今天日志”“昨天日志” Detail Low #日志的详细程度。可以识别“Low”“Med”“High”。也可以用数字表示范围为010“0”代表最不详细“10”代表最详细 Service All #分析和监控所有日志 Service -zz-network #但是不监控“-zz-network”服务的日志。“-服务名”表示不分析和监控此服务的日志 Service -zz-sys Service -eximstats 这个配置文件基本不需要修改我在实验时把 Range 项改为了 All否则一会儿的实验可以分析的日志过少它就会默认每天执行。它为什么会每天执行呢聪明的读者已经想到了一定是 crond 服务的作用。没错logwatch 一旦安装就会在 /etc/cron.daily/ 目录中建立“0logwatch”文件用于在每天定时执行 logwatch 命令分析和监控相关日志。 如果想要让这个日志分析马上执行则只需执行 logrotate 命令即可。命令如下 [rootlocalhost ~]# logwatch #马上执行logwatch日志分析工具 [root01ocalhost ~]# mail #查看邮件 Heirloom Mail version 12.4 7/29/08. Type ? for help, /var/spool/mail/root: 5 messages 1 new 2 unread 1 logwatchlocalhost.1 Fri Jun 7 11:17 42/1482 Logwatch for localhost.localdomain (Linux) U 2 logwatchlocalhost.1 Fri Jun 7 11:19 42/1481 Logwatch for localhost.localdomain (Linux) 3 logwatchlocalhost.1 Fri Jun 7 11:23 1234/70928 Logwatch for localhost.localdomain (Linux) 4 logwatchlocalhost.1 Fri Jun 7 11:24 190/5070 Logwatch for localhost.localdomain (Linux) 5 logwatchlocalhost.1 Fri Jun 7 11:55 41/1471 Logwatch for localhost.localdomain (Linux) N 6 logwatchlocalhost.1 Fri Jun 7 11:57 189/5059 Logwatch for localhost.localdomain (Linux) #第6封邮件就是刚刚生成的曰志分析邮件N代表没有查看 6 Message 6: From rootlocalhost.localdomain Fri Jun 7 11:57:35 2013 Return-Path: rootlocalhost.localdomain X-Original-To: root Delivered-To: rootlocalhost.localdomain To: rootlocalhost.localdomain From: logwatchlocalhost.localdomain Subject: Logwatch for localhost.localdomain (Linux) Content-Type: text/plain; charsetiso-8859-1 Date: Fri, 7 Jun 2013 11:57:33 0800 (CST) Status: R ######## Logwatch 7.3.6 (05/19/07) ################ Processing Initiated: Fri Jun 7 11:57:33 2013 Date Range Processed: all Detail Level of Output: 0 Type of Output: unformatted Logfiles for Host: localhost.localdomain ################################################### #上面是曰志分析的时间和日期 ...省略部分输出... --------- Connections (secure-log) Begin----------- #分析secure.log日志的内容。统计新建立了哪些用户和组以及错误登录信息 New Users bb (501) def (503) hjk (504) zhangsan (505) dovecot (97) dovenull (498) aa (500) New Groups: bb (501) def (503) hjk (504) zhangsan (505) dovecot (97) dovenull (498) aa (500) Failed logins: User root: (null): 3 Time(s) Root logins on ttys: 7 Time(s). **Unmatched Entries** groupadd: group added to /etc/group: namedovecot, GID97: 1 Time(s) groupadd: group added to /etc/group: namedovenul1, GID498: 1 Time(s) groupadd: group added to /etc/gshadow: namedovecot: 1 Time(s)groupadd: group added to /etc/gshadow: namedovenull: 1 Time(s) --------Connections (secure-log)End------- -------------SSHD Begin------------------- #分析SSHD的日志。可以知道哪些IP地址连接过服务器 SSHD Killed: 7 Time(s) SSHD Started: 24 Time(s) Users logging in through sshd: 192.168.0.104: 10 times 192.168.0.108: 8 times 192.168.0.101: 6 times 192.168.0.126: 4 times 192.168.0.100: 3 times 192.168.0.105: 3 times 192.168.0.106: 2 times 192.168.0.102: 1 time 192.168.0.103: 1 time SFTP subsystem requests: 3. Time(s) **Unmatched Entries** Exiting on signal 15 : 6 time(s) ----------------SSHD End----------- --------------- yum Begin --------- #统计yum安装的软件。可以知道我们安装了哪些软件 Packages Installed: perl-YAML-Syck-1.07-4.el6.i686 perl-Date-Manip-6.24-1.el6.noarch logwatch-7.3.6-49.el6.noarch -----------yum End------------- --------Disk Space Begin------- #统计磁盘空间情况 Filesystem Size Used Avail Use% Mounted on /dev/sda3 20G 1.9G 17G 11% / /dev/sda1 194M 26M 158M 15% /boot /dev/sr0 3.5G 3.5G 0 100% /mnt/cdrom ---------Disk Space End----------------- #########Logwatch End ################## 有了这个日志分析工具日志管理工作就会轻松很多。当然在 Linux 中可以支持很多日志分析工具我们在这里只介绍了 CentOS 自带的 logwatch大家可以根据自己的习惯选择相应的日志分析工具。 十二月19日上午发