系统日志轮转

一、什么是系统日志

记录系统活动信息有几个文件,他们分别记录了不同的信息。

例如:何时、何地 (来源 IP)、何人 (账户或者服务名称)、做了什么动作 。

换句话说就是:记录系统在什么时候由哪个程序做了什么样的行为时,发生了何种的事件等等。

二、日志的重要性

其实,不止系统有日志,在系统上运行的很多应用程序(软件) 都有自己的日志记录。比如 MySQL 默认的日志是 /var/log/mysqld.log

这些日志是我们排除的首要入手点,假如系统或者服务出现了错误,要第一时间分析日志中的报错信息。而不是去到网上搜索报错信息。因为大部分时候,一个报错信息,有可能会有多种情况导致,所以要结合自己的系统环境分析具体的情况。

三、常用的系统日志

  • /var/log/messages

这个文件相当的重要,几乎系统发生的错误讯息 (或者是重要的信息) 都会记录在这个文件中; 如果系统发生莫名的错误时,这个文件是应该首先查询的。

  • /var/log/secure

基本上,只要牵涉到“需要输入帐号密码”的软件,那么当登陆时 (不管登陆正确或错误) 都会被记录在此文件中。 su, sudo 等程序、还有网络连线的 ssh, telnet 等程序, 登陆信息都会被记载在这里

  • /var/log/boot.log

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

  • /var/log/cron

记录 crontab 调度有没有实际被进行? 进行过程有没有发生错误? /etc/crontab 是否配置正确?

  • /var/log/dmesg

记录系统在开机的时候核心侦测过程所产生的各项信息。

  • /var/log/lastlog

可以记录系统上面所有的帐号最近一次登陆系统时的相关信息

  • /var/log/maillog/var/log/mail/*

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

  • /var/log/wtmp, /var/log/faillog

这两个文件可以记录正确登陆系统者的帐号信息 (wtmp) 与错误登陆时所使用的帐号信息 (faillog)

CentOS 使用 rsyslog.service 这个服务来统一管理这些系统日志文件。

五、日志服务和配置文件

查看日志服务的状态

systemctl status rsyslog.service

rsyslog.service 的配置文件

既然是服务,就会有配置文件。

/etc/rsyslog.conf

配置文件用于设置

(1)什么服务 (2)的什么级别的信息 (3)需要被记录在哪里(设备或文件)

比如:

cron.* /var/log/cron
表示 关于计划任务的所有级别的信息,都记录到 /var/log/cron 文件中

*.info;mail.none;authpriv.none;cron.none /var/log/messages
表示所有服务端 info 级别的信息,邮件的 none 级别的信息,登录认证的 none 基本的信息和计划任务的 none 基本的信息都记录到 /var/log/messages 文件中。

Linux 核心的 syslog 认识的服务类型主要有下面这些:

Linux 核心的 syslog 定义的日志级别:

添加额外的记录日志文件

编辑 /etc/rsyslog.conf 文件

# Add other file
*.info  /var/log/shark.log

保存退出后

重启服务

systemctl restart rsyslog

把一个Linux 主机设置为 日志服务器

通过配置 /etc/rsyslog.conf 可以把一个 Linux 主机配置成一台 日志服务器,这样其他 Linux 主机的日志,除了记录在自己的本地外,还会发送的 这台日志服务器上一份。

服务端的设置

编辑 /etc/rsyslog.conf

# Provides TCP syslog reception
$ModLoad imtcp
$InputTCPServerRun 514

重启服务

 systemctl restart rsyslog.service

检查监听端口

[root@shark ~]# ss -natal |grep 514
LISTEN     0      25           *:514                      *:*
LISTEN     0      25          :::514                     :::*

客户端设置

编辑 /etc/rsyslog.conf

*.*       @@192.168.1.100

@@192.168.1.100
表示使用 TCP 协议传输数据到日志服务器 191.168.1.100 上


四、日志轮转

什么是日志轮转,为什么要轮转

日志轮转也叫日志的切割,通俗来讲就是对日志文件进行大小的控制。

Linux 系统通常会长时间的不停机运行,这样就会产生好多信息记录到不同的日志中。随着时间的推移,日志的容量自然会越来越大,那问题就来了,硬盘的空间是有限的,那为了控制日志文件的大小,就需要对日志文件进行控制。

同时是把目前的日志文件改名,紧接着创建一个新的日志文件,名称和原来的一样,重启服务进程,让其向新的日志文件中写日志。

实施程序

logrotate 负责对系统日志的轮转。

通过定时任务每天都会执行一次。

[root@shark ~]# cat /etc/cron.daily/logrotate
#!/bin/sh

/usr/sbin/logrotate -s /var/lib/logrotate/logrotate.status /etc/logrotate.conf
EXITVALUE=$?
if [ $EXITVALUE != 0 ]; then
    /usr/bin/logger -t logrotate "ALERT exited abnormally with [$EXITVALUE]"
fi
exit 0

logrotate 的配置文件

  • /etc/logrotate.conf

主配置文件, 设置的默认值

  • /etc/logrotate.d/

被包含的子配置文件,可以对某一些服务设置特定的配置

logrotate 的主要功能就是将旧的日志文件改成旧文件, 并且重新创建一个新的空的文件来记录。
如下图:

/etc/logrotate.conf 的默认值

weekly    >==每周对系统的日志文件进行一次 rotate 的工作
rotate 4  >==同类的日志文件,保留 4 份!
create    >==创建一个新的空文件,继续记录!
dateext   >==可以让被轮转的文件名称加上日期作为文件的后缀名!
#compress >==被轮转的到日志文件是否压缩

设置语法

登录文件的绝对路径文件名 ... {
    个别的参数设置值,如 monthly, compress 等等
}

多个文件可以使用一套参数值。
/path/log/file1.log
/path/log/file2.log
{
...
}

假如,想对某个日志文件实现轮转,建议在 /etc/logrotate.d/ 目录中添加子配置文件

比如

[root@shark logrotate.d]# cat syslog
/var/log/cron
/var/log/maillog
/var/log/messages
/var/log/secure
/var/log/spooler
{
    missingok
    sharedscripts
    postrotate
    /bin/kill -HUP `cat /var/run/syslogd.pid 2> /dev/null` 2> /dev/null || true
    endscript
}

自定义日志轮转

目录下编辑一个文件

/var/log/shark1.log {
        monthly              >== 每月一次轮转
        size=10M             >== 文件大小大于 10M 时, 也开始轮转
        rotate 2             >== 日志文件保留 2 个
        compress             >== 对旧的日志文件进行压缩
        sharedscripts        >== 轮转之前需要先被执行命令
        prerotate
                /usr/bin/chattr -a /var/log/shark1.log      >==去掉特殊属性
        endscript
        sharedscripts      >== 轮转之后需要被执行的命令
        postrotate
            /usr/bin/chattr +a /var/log/shark1.log     >== 特殊属性,文件内容只能增加不能删除或者修改
        endscript
}

测试

可以使用 logrotate 命令测试

logrotate -vf    /etc/logrotate.conf

-v 显示轮转的详情
-f 立刻进行一次轮转

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章