[TOC]

0x00 快速入门

包含了用户日志、服务进程日志、系统安全日志等(syslog);

logrotate 命令

描述:用于对系统日志进行轮转、压缩和删除,也可以将日志发送到指定邮箱,防止linux系统日志文件过大

使用logrotate指令优点:
可让你轻松管理系统所产生的记录文件,每个记录文件都可被设置成每日,每周或每月处理,也能在文件太大时立即处理。

预设的配置文件存放在/etc/logrotate.conf文件中,可以管理wtmp/btmp等产生的日志的配置选项;

这是一个text文档,包含许多配置选项(如下表),可以给系统的任何日志制定配置参数,此外这些选项还允许logrotate从其他日志文件读取和使用参数。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
# see "man logrotate" for details
# rotate log files weekly
weekly
# keep 4 weeks worth of backlogs
rotate 4
# create new (empty) log files after rotating old ones
create
# uncomment this if you want your log files compressed
#compress
# use date as a suffix of the rotated filedateext
# RPM packages drop log rotation information into this directory
include /etc/logrotate.d
# no packages own wtmp -- we'll rotate them here
/var/log/wtmp {
monthly
minsize 1M
create 0664 root utmp
rotate 1
}


#至于logrotate对文件进行管理时的所要执行的规则,可以在/etc/logrotate.d文件夹下创建文件,logrotate会在执行的时候自动读取相应的规则,比如我在/etc/logrotate.d/路径下新建了一个名为syslog的文件,其中的内容为:
/var/log/mail.info
/var/log/mail.warn
/var/log/mail.err
/var/log/mail.log
/var/log/daemon.log
/var/log/kern.log
/var/log/auth.log
/var/log/user.log
/var/log/lpr.log
/var/log/cron.log
/var/log/debug
/var/log/messages
/log/test.log 

         size 10M 
         create 
         start 10 
         rotate 4 
         compress 
         copytruncate
postrotate #轮换过后重启rsyslog服务;
invoke-rc.d rsyslog rotate > /dev/null
endscript #结束脚本;

#当文件/log/test.log的大小超过10M时就开始循环,允许logrotate创建文件,循环文件的开始为10,即文件为为test.log.10.gz,最多循环创建4个文件,即为test.log.13.gz,多于四个后开始在第一个上面循环,依次迭代。


# Function 参数解释
compress — 用gzip压缩旋转的日志文件。
nocompress — 在不需要压缩旋转日志文件的情况下使用。
copytruncate — 用于还在向开放日志文件写信息的过程。该选择将活归档日志文件制成副本。
nocopytruncate — 把日志文件复制进备份,但该开放文件不会被裁剪。
create mode owner group — 旋转日志文件并创建允许特定组合用户的新文件。缺省是使用与原始文件一样的模式,组合用户。
nocreate — 可以防止产生新日志文件。
delaycompress — 在使用压缩选择时,旋转文件不会在下一个循环开始时被压缩。
nodelaycompress – 日志文件会在循环过程中被压缩。
errors address — 将logrotate错误邮件发送到某个地址。
ifempty — 即使在空文件时也要旋转。这是Logrotate的缺省项。
notifempty — 空文件不旋转。
mail address — 这个邮件日志文件是循环到一个地址,因此能有效从系统中清楚。
nomail 在邮件日志循环时,副本不邮寄。
olddir directory — 这个选项会将循环日志文件保持在特定目录。该目录必需与现有日志文件在同一文件系统。
noolddir — 循环的日志文件与现有文件处于相同目录。
prerotate/endscript — 结束和执行旋转任务。
postrotate/endscript — 可以在一个日志文件旋转时执行的命令。
daily — 每日旋转日志文件。
weekly — 每周旋转日志文件。
monthly — 每月旋转日志文件。
rotate count — 在删除前旋转文件的特定次数。如果计数为零,就意味着没有副本保留。而5则意味着保留5个副本。
tabootext [+] list — This directs logrotate to not rotate files with the specified extension. The default list of extensions is .rpm-orig, .rpmsave, v, and ~。
size size — 在日志文件达到一定大小时开始旋转。大小是以bytes (默认), kilobytes (sizek)或megabytes (sizem)计算。

WeiyiGeek.配置

WeiyiGeek.配置

基于语法:

1
2
3
4
5
6
7
8
9
10
#语法
logrotate(选项)(参数)

#选项
-?或--help:在线帮助;
-d或--debug:详细显示指令执行过程,便于排错或了解程序执行的情况;
-f或--force :强行启动记录文件维护操作,纵使logrotate指令认为没有需要亦然;
-s<状态文件>或--state=<状态文件>:使用指定的状态文件;
-v或--version:显示指令执行过程;
-usage:显示指令基本用法。

实际案例:

1
2


logrotate规则配置好后怎么定时去执行呢?
答:这个就可以交给Linux中的crontab来控制了


logger 命令(重要)

描述:syslog是Linux系统默认的日志守护进程,用于往系统中写入日志也可以接受来自系统的各种功能的信息,他提供一个shell命令接口到syslog系统模块。

默认的syslog配置文件是/etc/syslog.conf文件,程序,守护进程和内核提供了访问系统的日志信息;因此任何希望生成日志信息的程序都可以向 syslog 接口呼叫生成该信息。

几乎所有的网络设备都可以通过syslog协议,将日志信息以用户数据报协议(UDP)方式传送到远端服务器,远端接收日志服务器必须通过syslogd监听UDP 端口514,并根据 syslog.conf配置文件中的配置处理本机,接收访问系统的日志信息,把指定的事件写入特定文件中,供后台数据库管理和响应之用。

意味着可以让任何事件都登录到一台或多台服务器上,以备后台数据库用off-line(离线) 方法分析远端设备的事件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
#用法
logger [options] [messages]

#参数
-d, --udp 
        使用数据报(UDP)而不是使用默认的流连接(TCP)
-i, --id  
        逐行记录每一次logger的进程ID
-f, --file file_name
        记录特定的文件
-h, --help
        显示帮助文本并退出
-n, --server
        写入指定的远程syslog服务器,使用UDP代替内装式syslog的例程
-P(大), --port port_num
        使用指定的UDP端口。默认的端口号是514
-p(小), --priority priority_level
        指定输入消息的优先级,优先级可以是数字或者指定为 " facility.level" 的格式。比如:" -p local3.info " local3 这个设备的消息级别为 info。默认级别是 "user.notice"
-s, --stderr
        输出标准错误到系统日志。
-t, --tag tag
        指定标记记录
-u, --socket socket
        写入指定的socket,而不是到内置系统日志例程。
-V, --version
        现实版本信息并退出

/etc/syslog.conf 文件通知 syslogd 如何根据设备和信息重要级别来报告信息:
日志级别:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
facility:
    auth:             用户授权
    authpriv:         授权和安全
    cron:             计划任务
    daemon:           系统守护进程
    kern:             与内核有关的信息
    lpr                与打印服务有关的信息
    mail               与电子邮件有关的信息
    news               来自新闻服务器的信息
    syslog             由syslog生成的信息
    user               用户的程序生成的信息,默认
    uucp               由uucp生成的信息
    local0~7           用来定义本地策略
 
level:
    alert          需要立即采取动作
    crit           临界状态
    debug          调试
    emerg          系统不可用
    err            错误状态
    error          错误状态
    info           正常消息
    notice         正常但是要注意

实际案例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#示例1.在/var/log中创建并写入日志信息由syslog协议处理的,是由守护进程sylogd负责执行,每个标准进程都可以用syslog记录日志,可以使用logger命令通过syslogd记录日志
logger "This is a test logger"
[[email protected] ~]# tail -n 1 /var/log/messages
Jun 6 09:41:03 izwz9biz2m4sd3bb3k38pgz root: This is a test logger


#示例2.如果要记录特定的标记(tag)可以使用:
logger -t FLAG-TAG "This is a test logger demo 2"
[[email protected] ~]# tail -n 1 /var/log/messages
Jun 6 09:42:09 izwz9biz2m4sd3bb3k38pgz FLAG-TAG: This is a test logger demo 2


#示例3.连接远程rsyslog示(这样设置不带HOST名称)
logger -p user.notice -t bash-$$ -i -n 192.168.1.88 -- "${SSH_CONNECTION} - ${USER} - ${PWD} - ${command}"


#示例4.连接远程rsyslog示(带HOST名称)
logger -p user.notice -t bash-$$ -i -- "${SSH_CONNECTION} - ${USER} - ${PWD} - ${command}"
#编辑rsyslog文件
user.* @@192.168.1.88:514
# Aug 2 13:42:35 10.10.107.222 master local1 notice bash-12610[12650] 192.168.1.88 52965 10.10.107.222 22 - root - /root - grep --color=auto "12610"

WeiyiGeek.syslog日志收集

WeiyiGeek.syslog日志收集