文章目录
1. CentOS7日志文件简易说明
Linux主机同时运行多个daemon,这些工作服务会产生运行信息,最终记录到相应的日志文件当中。这些日志文件可以解决系统方面的错误;解决网络服务问题;可以追溯过往发生的事件,是系统中不可或缺的功能文件。
@Linux常见的日志文件(仅能root读取)
/var/log/boot.log
:开机的时候系统核心会去侦测与启动硬件,接下来开始各种核心支持的功能启动等。这些流程都会记录在/var/log/boot.log 里面。但该文件只会存在这次开机启动的信息,前次开机的信息并不会被保留下来。/var/log/cron
:例行性工作排程相关日志内容,crontab 排程有没有实际被进行? 进行过程有没有发生错误?/etc/crontab 是否撰写正确?相关信息记录在这个日志文件内。/var/log/dmesg
:记录系统在开机的时候核心侦测过程所产生的各项信息。由于CentOS 默认将开机时核心的硬件侦测过程取消显示, 因此额外将数据记录一份在这个文件中;/var/log/lastlog
:可以记录系统上面所有的账号最近一次登入系统时的相关信息。lastlog 指令就是利用这个文件的记录信息来显示的。/var/log/maillog 或 /var/log/mail/*
:记录邮件的往来信息,其实主要是记录postfix (SMTP 协议提供者) 与dovecot (POP3 协议提供者) 所产生的信息。SMTP 是发信所使用的通讯协议, POP3 则是收信使用的通讯协议。postfix 与dovecot 则分别是两套达成通讯协议的软件。- ★
/var/log/messages
:这个文件相当的重要,几乎系统发生的错误讯息(或者是重要的信息) 都会记录在这个文件中; 如果系统发生莫名的错误时,这个文件是一定要查阅的登录档之一。 var/log/secure
:基本上,只要牵涉到『需要输入账号密码』的软件,那么当登入时(不管登入正确或错误) 都会被记录在此文件中。包括系统的login 程序、图形接口登入所使用的gdm 程序、su, sudo 等程序、还有网络联机的ssh, telnet 等程序, 登入信息都会被记载在这里;/var/log/wtmp, /var/log/faillog
:这两个文件可以记录正确登入系统者的帐户信息(wtmp) 与错误登入时所使用的帐户信息(faillog)。last 就是读取wtmp 来显示的, 可追踪一般账号者;/var/log/httpd/*, /var/log/samba/*
:不同的网络服务会使用它们自己的登录文件来记载它们自己产生的各项讯息,上述的目录内则是个别服务所制订的登录档。
@日志文件产生的方式
- 由软件开发商自行定义写入的登录档与相关格式, 例如 WWW 软件apache 的处理方式;
- 由Linux distribution 提供的日志管理服务来统一管理。CentOS 提供
rsyslog.service
;systemctl-journald.service
服务统一对日志进行管理,并使用logrotate
进行日志文件的轮替,防止日志文件过大;
@日志文件产生需要的相关服务和程序:
CentOS 7 除了保有既有的rsyslog.service 之外,最上游还使用了systemd自带的systemd-journald.service 这个服务来支持。
systemd-journald.service
:最主要的讯息收受者,由systemd 提供的,存放在内存,读写效率高,可通过journalctl
以及systemctl status unit.service
来查看各个不同服务的日志;基本上,系统由systemd 所管理,那所有经由systemd 启动的服务,如果再启动或结束的过程中发生一些问题或者是正常的信息, 就会将该讯息由 systemd-journald.service 以二进制的方式记录下来,之后再将这个讯息发送给rsyslog.service 作进一步的记载。rsyslog.service
:主要登录系统与网络等服务的信息,相比systemd-journald.service的journalctl和systemctl status unit.service方法更全面,但是消息定位费事一些;logrotate
:主要在进行登录文件的轮替功能。
2. rsyslog.service:记录日志服务
2.1 rsyslog.service的配置文件/etc/rsyslog.conf设定规则
rsyslog负责记录主机产生的各种信息,而信息是有严重等级之分的,而且记录到哪个日志文件当中是可以修改的。基本上,rsyslogd针对各种服务和信息记录在某些文件的配置文件就是/etc/rsyslog.conf
。
该文件规定了:(1)什么服务(2)的什么等级信息(3)需要被记录在哪里(装置或文件) 三个内容,有如下设定语法,并对数据分为服务名称、信息等级两部分展开描述:
- 服务名称
rsyslog透过Linux核心提供的syslog相关规范来设定数据分类。Linux核心的syslog认识的服务主要有如下 ,在journalctl指令中为SYSLOG_FACILITY的代号 :
以上都是Linux 核心的syslog 函数自行制订的服务名称,软件开发商可以透过呼叫上述的服务名称来记录他们的软件。举例来说, sendmail 与postfix 及dovecot 都是与邮件有关的软件,这些软件在设计登录文件记录时,都会主动呼叫syslog 内的mail 服务名称(LOG_MAIL)。
- 信息等级
同一服务所产生信息是有差别的,Linux核心的syslog将信息分为7个主要的等级,根据syslog.h的定义,信息名称与数值的对应如下表:
须注意信息等级之前有[.=!]
的连接符号,它们的意义为:
.
:代表比后面还要严重的等级(含该等级) 都被记录下来的意思,例如: mail.info 代表只要是mail的信息,而且该信息等级严重于info (含info 本身)时,就会被记录下来的意思。.=
:代表所需要的等级就是后面接的等级而已, 其他的不要;.!
:代表不等于, 亦即是除了该等级外的其他等级都记录;- 若不想记录某种服务unit.service所产生信息,则可使用
unit.service.none
语法;
补充内容:在默认的/etc/rsyslog.conf文件当中,关于mail的记录,记录的文件/var/log/maillog前面还有个减号-的原因是:由于邮件产生的信息比较多,所以将信息先储存在速度较快的内存当中,等数据量大了再一次写入磁盘,即运用了buffer。
2.2 syslog, rsyslog, rsyslog.service的渊源与关系
早期CentOS 5.x 以前,要达成 syslog 的功能是由一只名为syslogd 的daemon 来完成的, 从 CentOS 6 以来(包含CentOS 7) 则是透过rsyslogd 这个daemon来完成的。
2.3 日志文件的安全性设置
通过chattr指令添加隐藏属性"a"来进行(chattr +a 日志文件
),需要注意的是,rsyslogd日志文件只要被编辑过就无法继续记录,所以使用vim编辑并:wq退出之后会导致无法继续记录日志文件的问题。
此时要么改变使用vim的习惯,要么重启rsyslog.service再继续提供服务。
此外,由于+a属性会导致日志文件无法删除与修改,使得日志文件进行轮替时发生问题。但是可以通过/etc/logrotate.d/syslog中的文件设定解决该问题。
2.4 日志文件服务器的设置
CentOS 7.x 预设的rsyslogd具有日志文件服务器的功能,默认情况下是关闭的。预设的监听端口是TCP或UDP的port 514。
- 服务器端的设定
- 客户端的设定
3. 日志文件的轮循(logrotate)
rsyslogd利用daemon的方式来启动,当有需求的时候立刻就会被执行的,但是 logrotate 却是在规定的时间到了之后才来进行登录档的轮替, 所以这个 logrotate 程序挂在cron 底下进行的。在/etc/cron.daily/
里边有logrotate文件。
3.1 logrotate的配置文件
/etc/logrotate.conf
/etc/logrotate.d/
其中logrotate.conf才是主要的参数文件,而logrotate.d目录中的所有文件都会被主动的读入/etc/logrotate.conf当中进行。若在/etc/logrotate.d/里边的文件中,没有规定到的细则,则以/etc/logrotate.conf文件的规定来指定为默认值。
@/etc/logrotate.conf的配置语法
对于logrotate.conf的设定语法为:
@/etc/logrotate.d/文件的配置语法
对于/etc/logrotate.d/中的设置文件,配置语法与/etc/logrotate.conf语法类似,又添加了若干规则。配置完成后每个文件以 RPM 打包方式所建立的服务的登录档轮替设定, 就可以独自成为一个文件,并且放置到/etc/logrotate.d/ 当中即可。具体的配置语法为:
- 日志文件名:被处理的登录文件绝对路径文件名写在前面,可以使用空格符分隔多个登录档;
- 参数:上述档名进行轮替的参数使用{ } 包括起来;
- 执行脚本:可呼叫外部指令来进行额外的命令下达,这个设定需与sharedscripts & endscript 设定合用才行。至于可用的环境为:
① prerotate:在启动logrotate 之前进行的指令,例如修改登录文件的属性等动作;
② postrotate:在做完logrotate 之后启动的指令,例如重新启动(kill -HUP) 某个服务;
③ Prerotate 与postrotate 对于已加上特殊属性的文件处理上面,是相当重要的执行程序;
对于之前对日志文件/var/log/messages
添加a隐藏属性的解决办法如下(修改/etc/logrotate.d/syslog
文件):
3.2 logrotate的观察和测试
4. systemd-journald.service简介
systemd-journald
由于是使用于内存的登录文件记录方式,因此重新启动过后,开机前的登录文件信息就不会被记载了。为此,还是建议启动 rsyslogd 来协助分类记录。也就是说,systemd-journald 用来管理与查询这次开机后的登录信息,以文件形式存储在/run/log
中,而rsyslogd 可以用来记录以前及现在的所以数据到磁盘文件中,方便未来进行查询。
4.1 journalctl 指令观察登陆信息
关于system_falicity的说明见2.1小节。
4.2 logger指令的应用
可以将管理员想写的信息写入到日志文件当中。
4.3 保存journal的方式(可不进行)
systemd-journald.service 的配置文件主要参考/etc/systemd/journald.conf 的内容,详细的参数可以参考man 5 journald.conf 的资料。若想保存journalctl所读取的日志文件,建立/var/log/jounal
目录,并处理一下该目录的权限即可。
要注意的是,因为现在整个日志登录文件的容量会持续长大,因此你最好还是观察一下你系统能用的总容量;此外,未来在/run/log 底下就没有相关的日志可以观察了,因为移到/var/log/journal当中了。
5. 重点回顾
对于rsyslogd的stand alone执行机制,涉及到早期System V的init管理操作中的daemon的分类问题,点击链接
①https://www.cnblogs.com/china-flint/p/9914913.html
②http://cn.linux.vbird.org/linux_basic/0560daemons.php