一起来学linux跋山涉水的近义词日志文件

Syslog-ng服务是Linux系统中重要的日志服务,搞过Linux下日志管理的大虾门肯定都熟悉这项服务,在此就不再赘述。现在谈一下对日志文件的管理问题。

Linux日志文件总管之logrotate的使用,linuxlogrotate

Linux日志文件总管之logrotate的使用

本文导航

-样例一17%

-样例二42%

-样例三46%

-排障52%

日志文件包含了关于系统中发生的事件的有用信息,在排障过程中或者系统性能分析时经常被用到。对于忙碌的服务器,日志文件大小会增长极快,服务器会很快消耗磁盘空间,这成了个问题。除此之外,处理一个单个的庞大日志文件也常常是件十分棘手的事。

图片 1

logrotate是个十分有用的工具,它可以自动对日志进行截断(或轮循)、压缩以及删除旧的日志文件。例如,你可以设置logrotate,让/var/log/foo日志文件每30天轮循,并删除超过6个月的日志。配置完后,logrotate的运作完全自动化,不必进行任何进一步的人为干预。另外,旧日志也可以通过电子邮件发送,不过该选项超出了本教程的讨论范围。

图片 2

主流Linux发行版上都默认安装有logrotate包,如果出于某种原因,logrotate没有出现在里头,你可以使用apt-get或yum命令来安装。

在Debian或Ubuntu上:

# apt-get install logrotate cron

# yum install logrotate crontabs

# touch /var/log/log-file

# head -c 10M < /dev/urandom > /var/log/log-file

# vim /etc/logrotate.d/log-file

/var/log/log-file {

monthly

rotate 5

compress

delaycompress

missingok

notifempty

create 644 root root

postrotate

/usr/bin/killall -HUP rsyslogd

endscript

}

monthly: 日志文件将按月轮循。其它可用值为‘daily’,‘weekly’或者‘yearly’。

rotate 5:
一次将存储5个归档日志。对于第六个归档,时间最久的归档将被删除。

compress: 在轮循任务完成后,已轮循的归档将使用gzip进行压缩。

delaycompress:
总是与compress选项一起用,delaycompress选项指示logrotate不要将最近的归档压缩,压缩将在下一次轮循周期进行。这在你或任何软件仍然需要读取最新归档时很有用。

missingok:
在日志轮循期间,任何错误将被忽略,例如“文件无法找到”之类的错误。

notifempty: 如果日志文件为空,轮循不会进行。

create 644 root root:
以指定的权限创建全新的日志文件,同时logrotate也会重命名原始日志文件。

postrotate/endscript:
在所有其它指令完成后,postrotate和endscript里面指定的命令将被执行。在这种情况下,rsyslogd
进程将立即再次读取其配置并继续运行。

上面的模板是通用的,而配置参数则根据你的需求进行调整,不是所有的参数都是必要的。

样例二

在本例中,我们只想要轮循一个日志文件,然而日志文件大小可以增长到50MB。

# vim /etc/logrotate.d/log-file

/var/log/log-file {

size=50M

rotate 5

create 644 root root

postrotate

/usr/bin/killall -HUP rsyslogd

endscript

}

# vim /etc/logrotate.d/log-file

/var/log/log-file {

monthly

rotate 5

dateext

create 644 root root

postrotate

/usr/bin/killall -HUP rsyslogd

endscript

}

# logrotate /etc/logrotate.conf

# logrotate /etc/logrotate.d/log-file

# logrotate -d /etc/logrotate.d/log-file

# logrotate -vf /etc/logrotate.d/log-file

reading config file /etc/logrotate.d/log-file

reading config info for /var/log/log-file

Handling 1 logs

rotating pattern: /var/log/log-file forced from command line (5
rotations)

empty log files are rotated, old logs are removed

considering log /var/log/log-file

log needs rotating

rotating log /var/log/log-file, log->rotateCount is 5

dateext suffix ‘-20140916’

glob pattern ‘-[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]’

renaming /var/log/log-file.5.gz to /var/log/log-file.6.gz (rotatecount
5, logstart 1, i 5),

old log /var/log/log-file.5.gz does not exist

renaming /var/log/log-file.4.gz to /var/log/log-file.5.gz (rotatecount
5, logstart 1, i 4),

old log /var/log/log-file.4.gz does not exist

. . .

renaming /var/log/log-file.0.gz to /var/log/log-file.1.gz (rotatecount
5, logstart 1, i 0),

old log /var/log/log-file.0.gz does not exist

log /var/log/log-file.6.gz doesn’t exist — won’t try to dispose of it

renaming /var/log/log-file to /var/log/log-file.1

creating new /var/log/log-file mode = 0644 uid = 0 gid = 0

running postrotate script

compressing log with: /bin/gzip

# logrotate -vf –s /var/log/logrotate-status /etc/logrotate.d/log-file

# cat /etc/cron.daily/logrotate

#!/bin/sh

# Clean non existent log file entries from status file

cd /var/lib/logrotate

test -e status || touch status

head -1 status > status.clean

sed ‘s/”//g’ status | while read logfile date

do

[ -e “$logfile” ] && echo “”$logfile” $date”

done >> status.clean

mv status.clean status

test -x /usr/sbin/logrotate || exit 0

/usr/sbin/logrotate /etc/logrotate.conf

Linux日志文件总管之logrotate的使用 本文导航 -样例一17% -样例二42%
-样例三46% -排障52% -1. 手动…

在管理系统当中,经常会遇到各种各样的错误和异常。要找到这些错误和异常,就需要各种日志来帮助定位问题了。linux的日志都是存放在/var/log这个文件夹下面,常见的日志文件有如下几种;
/var/log/cron:  记录crontab调度是否正常运行
/var/log/dmesg: 记录开始的时候内核检测过程中产生的各项信息
/var/log/lastlog:可以记录系统上面所有帐号最近一次登陆系统时的相关信息。这个文件无法用cat命令来读取,但是lastlog命令可以读取这个文件
/var/log/maillog: 记录邮件相关信息
/var/log/messages:几乎系统发生的错误信息都会记录在这个文件当中。当系统发生莫名其妙的错误时,这个文件是必须要查看的
/var/log/secure:
只要牵涉到需要输入帐号密码的软件,登陆的时候都会被记录在此文件中。例如网络联机的ssh,telnet等程序
/var/log/wtmp:记录正确登陆系统者的账户信息与错误登陆时所使用的账户信息
这里我们用lastlog来看下日志的格式:可以看到登陆用户名,使用的终端已经登陆日期。
root@zhf-linux:/var/log# lastlog | grep root
root             tty1                      Wed Jul 26 12:27:16 +0800
2017

Syslog-ng服务只提供对log进行接收以及再处理(继续分发或者存储),但并不对产生的log文件进行管理,这样导致的后果就是可能这个文件越来越大,在我们这个项目中,由于忘了对日志文件进行管理,结果导致这个日志文件20多G,囧,很有可能导致系统崩溃。

那么什么服务的什么等级信息以及需要被记录在哪里是由谁规定的。这就要用到syslog的配置文件。有些Linux系统是记录在/etc/syslog.conf。但在ubuntun中配置文件是在/etc/rsyslog.conf。
rsyslog.conf的使用格式如下
格式::
日志设备(类型).(连接符号)日志级别   日志处理方式(action)
日志设备(可以理解为日志类型):
———————————————————————-
auth –pam产生的日志
authpriv ssh,ftp等登录信息的验证信息
cron –时间任务相关
kern –内核
lpr –打印
mail –邮件
mark(syslog)–rsyslog服务内部的信息,时间标识
news –新闻组
user –用户程序产生的相关信息
uucp –unix to unix copy, unix主机之间相关的通讯
local 1~7  –自定义的日志设备
日志级别:
———————————————————————-
debug –有调式信息的,日志信息最多
info –一般信息的日志,最常用
notice –最具有重要性的普通条件的信息
warning  –警告级别
err  –错误级别,阻止某个功能或者模块不能正常工作的信息
crit –严重级别,阻止整个系统或者整个软件不能正常工作的信息
alert  –需要立刻修改的信息
emerg  –内核崩溃等严重信息
none –什么都不记录

日志文件管理这项工作其实是由logrotate模块来负责。

举几个例子来看下:
1
如果我要将mail相关的数据都写入到/var/log/maillog中。那么在rsyslog.conf中应该添加如下
mail.info     /var/log/maillog
2
如果我要将news以及cron的信息都写入到一个称为/var/log/cronnews的文件中,但是两个程序的警告信息则额外的记录在/var/log/cronnews.warn中,则应该添加如下:
news.*;cron.*          /var/log/cronnews
news.=warn;cron.=warn    /var/log/cronnews.warn
其中.=代表所需要的等级就是后面接的等级而已,其他的不要
.!代表不等于,及是除了该等级外的其他等级都记录

对于logrotate可以参考官网, 上面有详尽的介绍,最常用的三个方式为:
logrotate
/etc/logrotate.conf:重新读取配置文件,并对符合条件的文件文件进行rotate。
logrotate -d /etc/logrotate.conf:调试模式,输出调试结果,但并不执行。
logrotate -f /etc/logrotate.conf:强制模式,对所有相关文件进行rotate。

有一点需要注意的是对于日志文件,如果用VIM打开它,离开却执行:wq的参数,那么该文件将来将不会在继续日志操作,除非重新启动rsyslog。
/etc/init.d/rsyslog restart

至于logrotate对文件进行管理时的所要执行的规则,可以在/etc/logrotate.d文件夹下创建文件,logrotate会在执行的时候自动读取相应的规则,比如,我在/etc/logrotate.d/路径下新建了一个名为syslog的文件,www.linuxidc.com其中的内容为:

在/var/log文件中我们经常看到如下的文件。dpkg.log.1,dpkg.log.2。这些由于logrotate的原因。由于日志一直在不停的记录,文件会越来越大,那么这样会影响到系统的运行,因此logrorate就是将旧的日志文件更改名称,然后新建一个空的日志文件。然后旧的记录保存一段时间就删除掉。这样就可以省去很多硬盘空间。
-rw-r–r–  1 root              root        0 Sep  3 14:04 dpkg.log
-rw-r–r–  1 root              root   161993 Aug 27 15:14 dpkg.log.1
-rw-r–r–  1 root              root    98629 Nov 30  2015
dpkg.log.10.gz
-rw-r–r–  1 root              root   177381 Jul 30 15:26
dpkg.log.2.gz
-rw-r–r–  1 root              root    23074 Jul 26 10:16
dpkg.log.3.gz
-rw-r–r–  1 root              root      224 Oct  9  2016
dpkg.log.4.gz
-rw-r–r–  1 root              root     2861 Sep 27  2016
dpkg.log.5.gz
-rw-r–r–  1 root              root      335 Jun 14  2016
dpkg.log.6.gz
-rw-r–r–  1 root              root     1011 May 23  2016
dpkg.log.7.gz
-rw-r–r–  1 root              root      221 May  7  2016
dpkg.log.8.gz
-rw-r–r–  1 root              root     2206 Dec  1  2015
dpkg.log.9.gz
那么logrotate的工作机制是如何定义的呢,这些都记录在/etc/logrotate.conf里面
# rotate log files weekly   每周对日志进行一次rotate的动作
weekly

发表评论

电子邮件地址不会被公开。 必填项已用*标注