Linux系统日志管理
系统日志:操作系统本身和大部分服务器程序的日志文件,记录系统产生的各种事务,在某个时间点发生了什么以及发生的原因。一般默认保存在 /var/log/ 目录下
- /var/log/messages:保存了内核还有公共消息日志(所有的服务控制日志都在这里),包括启动错误,IO错误,网络错误,程序故障等,这是最常看的日志。
- /var/log/cron:执行计划任务产生的日志
- /var/log/secure:系统记录用户认证的安全信息日志
这些系统日志由Linux自带的 rsyslog 系统服务进行统一管理,rsyslog 的配置在 /etc/rsyslog.conf 内。
第三方程序使用自带的日志,系统 /var/log/messages 内只会记录第三方服务的控制日志(开启,关闭,重启等),对于业务日志(访问记录,访问报错等)都由第三方程序自己保存。
日志级别
总共 0-7 八个级别,数字越小,优先级越高,消息越重要
- 0 EMERGE,紧急:会导致主机系统不可用的情况
- 1 ALERT,警告:必须马上采取措施解决的问题,比如非法入侵,账号被篡改等
- 2 CRIT,严重:比较严重的情况,比如磁盘满了,内存不够等
- 3 ERR,错误:程序运行时的错误信息,需要尽快修复
- 4 WARING,提醒:可能会影响系统功能,需要用户注意的事项,比如根目录 inode 耗尽
- 5 NOTICE,注意:不会影响正常功能,但是是一些需要注意的事件,不需要处理
- 6 INFO,信息:正常的系统运行产生的信息
- 7 DEBUG 调试信息,一般是调试程序时产生的一些信息
- none 无优先级,不会记录任何消息
优先级可以由开发者自定义
如何自定义系统日志的一些规则
先看一下系统日志的配置文件,/etc/rsyslog.conf,主要看从46行开始的 RULES,也就是 规则。
这一句是什么意思?
*.info;mail.none;authpriv.none;cron.none /var/log/messages
mail,authpriv这些是设备字段,表示日志的来源
常用的设备字段:
- auth:用户认证产生的日志
- authpriv:远程登录产生的验证信息
- ftp:FTP服务产生的日志
- mail:邮件产生的日志
- cron:定时任务产生的日志
- kern:系统内核的日志
- user:用户进程的日志
- syslog:系统日志
.info,.none这些表示具体的日志等级
相关规则如下:
- mail.info 表示的是mail的 info 及以上级别的日志,也就是0-6级别的日志
- mail.=info 明确了日志级别,只有 info 级别的日志才会记录
- mail.!info 表示除了 info 级别,其他级别的日志都要记录
- mail.* 表示所有级别的日志都要记录
- mail.info;user.notice 表示 mail 的 info 及以上级别的日志和 user 的 notice 及以上级别的日志都要记录
- mail.none 表示 mail 的日志不需要记录
- local 表示自定义服务,范围是 local0 - local7 ,支持在 rsyslog.conf 这个文件中对应 local 等级,自定义把相关进程添加到系统日志的配置当中
/var/log/messages 这些表示前面日志的存储位置
所以这句话的意思是:将除了 mail 相关日志,authpriv 相关日志,cron 相关日志以外所有 info 及以上级别的日志都存储在 /var/log/messages 中。
*.info;mail.none;authpriv.none;cron.none /var/log/messages
实验1:将远程连接的服务日志单独存放
- 首先找到 ssh 配置的文件,默认在 /etc/ssh/sshd_config,看下原本的设置是这样的:
当有人使用 SSH 登入系统的时候,SSH 会记录信息,这个信息要记录的类型默认为AUTHPRIV。 - 此时我们添加一行设置
保存退出,此时 SSH 登录的日志会被记录为 LOCAL6 类型 - 然后我们再进入 /etc/rsyslog.conf,在 begin forwarding rule 之前添加一句
这表明将 local6 类型的所有级别的日志存放到 /var/log/ssh.log 内 - 重启一下相关服务
- 最后我们远程登陆一下看看效果
没有毛病
实验二:把本机的日志文件存储到指定的服务器上
- 先对本机 /etc/rsyslog.conf 进行配置
192.168.79.11是我想要存储日志文件的目标服务器的IP地址
@@表示强制使用TCP协议传输数据 - 将TCP传输的端口打开(把注释取消掉就行)
- 重启一下服务,接着看一下端口号有没有正常开启
- 将服务器的TCP传输的端口也打开,同样进行检查
- 用 logger 命令在本机上测试一下
- 本机的 /var/log/messages 上并没有记录
服务器上的 /var/log/messages 上有记录
没有毛病