ITPub博客

首页 > Linux操作系统 > Linux操作系统 > Linux日志系统(一)

Linux日志系统(一)

Linux操作系统 作者:panpong 时间:2016-12-11 21:48:03 0 删除 编辑

1)        Linux常见日志与文件名

l  /var/log/boot.log:

开机的时候系统核心会去侦测与启动硬件,接下来开始各种核心支持的功能启动等。这些流程都会记录在/var/log/boot.log  里面哩! 不过这个文件只会存在这次开机启动的信息,前次开机的信息并不会被保留下来!

 

l  /var/log/cron:

还记得第十五章例行性工作排程吧?你的 crontab 排程有没有实际被进行? 进行过程有没有发生错误? 你的 /etc/crontab 是否撰写正确?在这个日志内查询看看。

 

l  /var/log/dmesg:

记录系统在开机的时候核心侦测过程所产生的各项信息。由于 CentOS 默认将开机时核心的硬件侦测过程 取消显示, 因此额外将数据记录一份在这个文件中;

 

l  /var/log/lastlog:

可以记录系统上面所有的账号最近一次登入系统时的相关信息。lastlog 指令就是利用这个 文件的记录信息来显示的。

 

l  /var/log/maillog 或 /var/log/mail/*:

记录邮件的往来信息,其实主要是记录 postfix (SMTP 协议提供者) 与 dovecot (POP3 协议提供者) 所产生 的讯息啦。 SMTP 是发信所使用的通讯协议, POP3 则是收信使用的通讯协议。 postfix 与 dovecot 则分 别是两套达成通讯协议的软件。

 

l  /var/log/messages:

这个文件相当的重要,几乎系统发生的错误讯息 (或者是重要的信息) 都会记录在这个文件中; 如果系统发生莫名的错误时,这个文件是一定要查阅的日志之一。

 

l  /var/log/secure:

基本上,只要牵涉到『需要输入账号密码』的软件,那么当登入时 (不管登入正确或错误) 都会被记录在此 文件中。 包括系统的 login 程序、图形接口登入所使用的 gdm 程序、 su,sudo 等程序、还有网络联机的 ssh,telnet 等程序, 登入信息都会被记载在这里;

 

l  /var/log/wtmp,/var/log/faillog:

这两个文件可以记录正确登入系统者的帐户信息 (wtmp) 与错误登入时所使用的帐户信息 (faillog) !我们在第十章谈到的 last 就是读取wtmp 来显示的, 这对于追踪一般账号者的使用行为很有帮助!

 

l  /var/log/httpd/*,/var/log/samba/*:

不同的网络服务会使用它们自己的日志文件来记载它们自己产生的各项讯息!上述的目录内则是个别服务 所制订的日志。

 

2)  日志相关服务(daemon) 与程序

l  systemd-journald.service:最主要的讯息收受者,由 systemd  提供的;

l  rsyslog.service:主要日志系统与网络等服务的讯息;

l  logrotate:主要在进行日志文件的轮替功能。

 

3)        CentOS 7.x 使用 systemd  提供的 journalctl 日志管理

CentOS 7 除了保有既有的 rsyslog.service 之外,其实最上游还使用了 systemd 自己的登录文件日志 管理功能喔!他使用的是 systemd-journald.service 这个服务来支持的。基本上,系统由 systemd 所 管理,那所有经由 systemd 启动的服务,如果再启动或结束的过程中发生一些问题或者是正常的讯 息, 就会将该讯息由 systemd-journald.service 以二进制的方式记录下来,之后再将这个讯息发送给 rsyslog.service  作进一步的记载。

systemd-journald.service  的记录主要都放置于内存中,因此在存取方面效能比较好~我们也能够透过 journalctl  以及 systemctl status unit.service  来查看各个不同服务的登录档! 这有个好处,就是登录档 可以随着个别服务让你查阅,在单一服务的处理上面,要比跑到 /var/log/messages  去大海捞针来的 简易很多!不过,因为 system-journald.service  里面的很多观念还是沿用 rsyslog.service  相关的信息, 所以,本章还是先从 rsyslog.service 先谈起, 谈完之后再以 journalctl 进一步了解 systemd 是怎么去记录登录文件日志功能的呦!

4)        rsyslog.service :记录日志文件的服务

[root@study ~]# ps aux | grep rsyslog

USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND

root 750 0.0 0.1 208012 4732 ? Ssl Aug17 0:00 /usr/sbin/rsyslogd -n

[root@study ~]# systemctl status rsyslog.service

rsyslog.service - System Logging Service

Loaded: loaded (/usr/lib/systemd/system/rsyslog.service; enabled)

Active: active (running) since Mon 2015-08-17 18:37:58 CST; 2 days ago

Main PID: 750 (rsyslogd)

CGroup: /system.slice/rsyslog.service

└─750 /usr/sbin/rsyslogd -n  

rsyslog.service 的配置文件:/etc/rsyslog.conf

 

5)        日志文件的安全性设置

[root@study ~]# chattr [+-=][ASacdistu]文件或目录名称

选项与参数:

+:增加某一个特殊参数,其他原本存在参数则不动。

-:移除某一个特殊参数,其他原本存在参数则不动。

=:设定一定,且仅有后面接的参数

A:当设定了A这个属性时,若你有存取此文件(或目录)时,他的存取时间atime将不会被修改,可避免I/O较慢的机器过度的存取磁盘。(目前建议使用文件系统挂载参数处理这个项目)

S:一般文件是非同步写入磁盘的(原理请参考前一章sync的说明),如果加上S这个属性时,当你进行任何文件的修改,该更动会『同步』写入磁盘中。

a:当设定a之后,这个文件将只能增加数据,而不能删除也不能修改资料,只有root才能设定这属性

c:这个属性设定之后,将会自动的将此文件『压缩』,在读取的时候将会自动解压缩,但是在储存的时候,将会先进行压缩后再储存(看来对于大文件似乎蛮有用的!)

d:当dump程序被执行的时候,设定d属性将可使该文件(或目录)不会被dump备份

i:这个i可就很厉害了!他可以让一个文件『不能被删除、改名、设定连接也无法写入或新增数据!』对于系统安全性有相当大的助益!只有root能设定此属性

s:当文件设定了s属性时,如果这个文件被删除,他将会被完全的移除出这个硬盘空间,

所以如果误删了,完全无法救回来了喔!

u:与s相反的,当使用u来设定文件时,如果该文件被删除了,则数据内容其实还存在磁盘中,可以使用来救援该文件喔!

注意1:属性设定常见的是a与i的设定值,而且很多设定值必须要身为root才能设定

注意2:xfs文件系统仅支持AadiS而已

 

[root@study ~]# lsattr [-adR]文件或目录

选项与参数:

-a:将隐藏档的属性也秀出来;

-d:如果接的是目录,仅列出目录本身的属性而非目录内的文件名;

-R:连同子目录的数据也一并列出来!

 

6)        日志服务器的设定

我们可以让某一部主机当成 『日志文件服务器』,用他来记录所有的其他 linux 主机的信息,这样我就直接进入一部主机就可以了。

那要怎么达到这样的功能呢?很简单啦, CentOS 7.x的 rsyslogd 本身就已经具有这个日志文件服务器的功能了, 只是默认并没有启动该功能而已。既然是日志服务器,那么我们的 Linux 主机当然会启动一个端口来监听了,就是 UDP 或 TCP 的 port 514 。

l  服务器端设置:

# 1. Server 端:修改 rsyslogd 的启动配置文件,在 /etc/rsyslog.conf 内 !

[root@study ~]# vim /etc/rsyslog.conf

# 找到底下这几行:

# Provides UDP syslog reception

#$ModLoad imudp

#$UDPServerRun 514

# Provides TCP syslog reception

#$ModLoad imtcp

#$InputTCPServerRun 514

# 上面的是 UDP 埠口,底下的是 TCP 埠口!如果你的网络状态很稳定,就用 UDP 即可。

# 不过,如果你想要让数据比较稳定传输,那么建议使用 TCP 啰 !所以修改底下两行即可!

$ModLoad imtcp

$InputTCPServerRun 514

l  客户端设置

client 端的设定就简单多了!只要指定某个信息传送到这部主机即可! 举例来说,我们的日志服务器 IP 为 192.168.1.100 ,而 client 端希望所有的数据都送给主机, 所以,可以在 /etc/rsyslog.conf 里面新增这样的一行:

[root@study ~]# vim /etc/rsyslog.conf

*.* @@192.168.1.100

#*.* @192.168.1.100 # 若用 UDP 传输,设定要变这样 !

[root@study ~]# systemctl restart rsyslog.service 

【参考】
【1】鸟哥的Linux私房菜-基础篇.第四版,第十八章认识与分析登录档。

来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/16976507/viewspace-2130250/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论
数据库工程师,熟悉Oracle,Postgresql,MySQL等主流关系型数据库运维,调优,一直活跃在运维一线。了解Python,Django,简单自动化运维系统开发。

注册时间:2009-03-06

  • 博文量
    142
  • 访问量
    392346