当前位置:   article > 正文

ubuntu中的rsyslog

ubuntu中的rsyslog

目录

1. rsyslog简介

2. 查看/var/log

3. syslog的配置文件

3.1 /etc/rsyslog.d/50-default.conf

3.2 /etc/rsyslog.conf

4. 如何写入syslog

4.1 C语言

4.2 shell

4.3 内核输出

5. syslog.1和syslog.2.gz等文件是如何生成

6. logrotate是如何被执行

7. 如何限制syslog的大小为500M以内

8. 与syslog有关的三个程序


Rsyslog 是一个 syslogd 的多线程增强版,依然基于Syslog协议(linux6之前默认使用syslog程序,centos6用rsyslog所取代)完成系统日志的处理转发,官方形容它是一个极速(如火箭般快速)的日志处理系统。

它的作用是为了保存相关程序的运行状态、错误信息等,为了对系统进行分析、保存历史记录以及在出现错误时发现、分析错误使用。

它主要用来采集日志,本身不生产日志。

2. 查看/var/log

user@localhost:/var/log$ ll

total 2696

drwxrwxr-x 7 root syslog 4096 Jan 25 01:51 ./

drwxr-xr-x 14 root root 4096 Jul 28 2021 ../

drwxr-xr-x 2 root root 4096 Sep 12 06:26 apt/

-rw-r----- 1 syslog adm 60238 Jan 25 02:01 auth.log

-rw-r----- 1 syslog adm 45916 Jan 21 06:25 auth.log.1

-rw-r----- 1 syslog adm 3446 Jan 14 06:25 auth.log.2.gz

-rw-r----- 1 syslog adm 2278 Jan 8 06:25 auth.log.3.gz

-rw-r----- 1 syslog adm 1914 Jan 3 06:25 auth.log.4.gz

-rw-rw---- 1 root utmp 3200 Jan 25 01:52 btmp #记录错误登录的日志,二进制文件,使用lastb命令查看

-rw-rw---- 1 root utmp 0 Dec 1 06:25 btmp.1

drwxr-xr-x 2 _chrony _chrony 4096 Aug 25 2020 chrony/

-rw-r--r-- 1 root root 0 Dec 8 06:25 dpkg.log

-rw-r--r-- 1 root root 798 Dec 6 06:36 dpkg.log.1

-rw-r--r-- 1 root root 803 Nov 21 08:21 dpkg.log.2.gz

-rw-r--r-- 1 root root 997 Sep 11 09:05 dpkg.log.3.gz

-rw-r----- 1 syslog adm 699919 Jan 24 22:17 kern.log

-rw-r----- 1 syslog adm 40633 Jan 21 05:23 kern.log.1

-rw-r----- 1 syslog adm 56333 Jan 12 05:52 kern.log.2.gz

-rw-r----- 1 syslog adm 40471 Jan 8 01:46 kern.log.3.gz

-rw-r----- 1 syslog adm 86712 Jan 3 06:11 kern.log.4.gz

-rw-rw-r-- 1 root utmp 296296 Jan 25 01:56 lastlog #记录系统中所有用户最后一次登录时间的日志,二进制文件,使用lastlog命令查看

-rw-r----- 1 syslog adm 1190210 Jan 25 01:56 syslog

-rw-r----- 1 syslog adm 237999 Jan 24 06:25 syslog.1

-rw-r----- 1 syslog adm 3059 Jan 23 06:25 syslog.2.gz

-rw-r----- 1 syslog adm 16078 Jan 22 06:25 syslog.3.gz

-rw-r----- 1 syslog adm 15477 Jan 21 06:25 syslog.4.gz

-rw-r----- 1 syslog adm 1334 Jan 20 06:25 syslog.5.gz

-rw-r----- 1 syslog adm 1298 Jan 19 06:25 syslog.6.gz

-rw-r----- 1 syslog adm 3723 Jan 18 06:25 syslog.7.gz

-rw-r--r-- 1 root root 2604 Jan 10 01:20 ubuntu-advantage-timer.log

-rw-r--r-- 1 root root 550 Dec 8 06:19 ubuntu-advantage-timer.log.1

-rw-r--r-- 1 root root 1388 Dec 1 03:34 ubuntu-advantage-timer.log.2.gz

-rw-r--r-- 1 root root 496 Nov 1 05:12 ubuntu-advantage-timer.log.3.gz

-rw-r--r-- 1 root root 913 Oct 9 04:50 ubuntu-advantage-timer.log.4.gz

drwxr-xr-x 2 root root 4096 Dec 8 06:25 unattended-upgrades/

-rw-rw-r-- 1 root utmp 80000 Jan 25 01:56 wtmp #永久记录所有用户的登录、注销信息,同时记录系统的启动、重启、关机时间。二进制文件,使用last命令查看。

-rw-rw-r-- 1 root utmp 42400 Jan 3 05:56 wtmp.1

上面标记红色的文件为所有owner为syslog的文件,均为与rsyslogd进程有关的文件。

3. syslog的配置文件

syslog的配置文件有:

/etc/rsyslog.d/50-default.conf

/etc/rsyslog.conf

3.1 /etc/rsyslog.d/50-default.conf

这个文件标明了syslog的每个文件是怎么生成的。文件内容为:

  1. # Default rules for rsyslog.
  2. #
  3. # For more information see rsyslog.conf(5) and /etc/rsyslog.conf
  4. #
  5. # First some standard log files. Log by facility.
  6. #
  7. auth,authpriv.* /var/log/auth.log # 将所有auth和authpriv设施(通常与安全和认证相关的日志)的所有优先级(`*` 表示所有优先级)的消息写入 `/var/log/auth.log` 文件。用sudo执行的命令会显示在这个文件中。
  8. *.*;auth,authpriv.none -/var/log/syslog #将除了auth和authpriv的所有优先级的消息都写入/var/log/syslog。符号-表示使用异步写入,提高性能但在系统崩溃时可能会丢失数据。
  9. #cron.* /var/log/cron.log #注释了,所以不写入cron消息
  10. #daemon.* -/var/log/daemon.log
  11. kern.* -/var/log/kern.log #将内核(`kern` 设施)的所有消息异步写入 `/var/log/kern.log` 文件。
  12. #lpr.* -/var/log/lpr.log
  13. mail.* -/var/log/mail.log #将邮件系统(`mail` 设施)的所有消息异步写入 `/var/log/mail.log` 文件。
  14. #user.* -/var/log/user.log
  15. #
  16. # Logging for the mail system. Split it up so that
  17. # it is easy to write scripts to parse these files.
  18. #
  19. #mail.info -/var/log/mail.info
  20. #mail.warn -/var/log/mail.warn
  21. mail.err /var/log/mail.err #将邮件系统的错误消息(`mail.err`)写入/var/log/mail.err文件。
  22. #
  23. # Some "catch-all" log files.
  24. #
  25. #*.=debug;\
  26. # auth,authpriv.none;\
  27. # news.none;mail.none -/var/log/debug
  28. #*.=info;*.=notice;*.=warn;\
  29. # auth,authpriv.none;\
  30. # cron,daemon.none;\
  31. # mail,news.none -/var/log/messages #注释了,所以没有/var/log/messages文件生成。
  32. #
  33. # Emergencies are sent to everybody logged in.
  34. #
  35. *.emerg :omusrmsg:* #将所有设施的紧急消息(`emerg` 优先级)发送给所有当前登录的用户。
  36. #
  37. # I like to have messages displayed on the console, but only on a virtual
  38. # console I usually leave idle.
  39. #
  40. #daemon,mail.*;\
  41. # news.=crit;news.=err;news.=notice;\
  42. # *.=debug;*.=info;\
  43. # *.=notice;*.=warn /dev/tty8

注:

下面是一些常见的设施和级别的例子:

- facility:`auth`, `cron`, `daemon`, `kern`, `mail`, `syslog`, `user`, `local0` 到 `local7`(用于本地使用)等。

- 级别:`emerg`, `alert`, `crit`, `err`, `warning`, `notice`, `info`, `debug`。

facility被翻译为设施。它用来定义日志消息的来源,方便对日志进行分类:

# auth 用户认证

# authpriv 有特权的用户认证

# cron cron守护进程

# daemon 各种系统守护进程

# ftp ftp守护进程

# kern 内核消息

# local0-local7 保留用于本地用法

# lpr 打印机

# mail 邮件

# news 新闻

# syslog 内部syslog

# uucp uucp系统

# user 各种用户程序来的消息

3.2 /etc/rsyslog.conf

这个文件用来保存syslog时的配置参数。文件内容为:

  1. # /etc/rsyslog.conf Configuration file for rsyslog.
  2. #
  3. # For more information see
  4. # /usr/share/doc/rsyslog-doc/html/rsyslog_conf.html
  5. #
  6. # Default logging rules can be found in /etc/rsyslog.d/50-default.conf
  7. #################
  8. #### MODULES ####
  9. #################
  10. module(load="imuxsock") # provides support for local system logging #加载了imuxsock模块,它允许rsyslog接收通过 Unix 域套接字发送的本地系统日志消息。
  11. #module(load="immark") # provides --MARK-- message capability #这行注释掉了。如果不注释,表示加载immark模块
  12. # provides UDP syslog reception
  13. #module(load="imudp")
  14. #input(type="imudp" port="514")
  15. # provides TCP syslog reception
  16. #module(load="imtcp")
  17. #input(type="imtcp" port="514")
  18. # provides kernel logging support and enable non-kernel klog messages
  19. module(load="imklog" permitnonkernelfacility="on") #加载imklog模块,它允许rsyslog处理来自内核的日志消息。permitnonkernelfacility设置为 "on" 表示也允许记录非内核设施的消息。
  20. ###########################
  21. #### GLOBAL DIRECTIVES ####
  22. ###########################
  23. #
  24. # Use traditional timestamp format.
  25. # To enable high precision timestamps, comment out the following line.
  26. #
  27. $ActionFileDefaultTemplate RSYSLOG_TraditionalFileFormat # 使用传统的时间戳格式。
  28. # Filter duplicated messages
  29. $RepeatedMsgReduction on #过滤重复功能。这个功能启用后,可以减少重复消息的记录。如果同一消息多次被记录,它会被合并。
  30. #
  31. # Set the default permissions for all log files. #下面这部分是设置权限
  32. #
  33. $FileOwner syslog #使用的owner和group
  34. $FileGroup adm
  35. $FileCreateMode 0640
  36. $DirCreateMode 0755
  37. $Umask 0022
  38. $PrivDropToUser syslog #这行及后面这一行表示rsyslog在启动后出于安全考虑降低权限,切换到syslog用户和组。
  39. $PrivDropToGroup syslog
  40. #
  41. # Where to place spool and state files
  42. #
  43. $WorkDirectory /var/spool/rsyslog #临时文件和状态文件的位置为/var/spool/rsyslog
  44. #
  45. # Include all config files in /etc/rsyslog.d/
  46. #
  47. $IncludeConfig /etc/rsyslog.d/*.conf

  • 4. 如何写入syslog

/dev/log文件是一个软链接:

user@localhost:/dev$ ll|grep log

lrwxrwxrwx 1 root root 28 Mar 2 2023 log -> /run/systemd/journal/dev-log=

用户空间只需要调用syslog()函数,即可保存log。

syslogd创建一个unitx套接字,给它捆绑在/dev/log中,监控该文件的输入。

4.1 C语言

  1. #include <syslog.h>
  2. int main() {
  3. // 打开日志连接,指定日志程序标识和选项
  4. openlog("myapp", LOG_PID|LOG_CONS, LOG_USER);
  5. // 写入日志消息,指定优先级级别
  6. syslog(LOG_INFO | LOG_USER, "用户级别的信息性消息");
  7. syslog(LOG_ERR | LOG_AUTH, "认证系统的错误消息");
  8. // 关闭日志连接
  9. closelog();
  10. return 0;
  11. }

在这个例子中,syslog函数的第一个参数是一个位掩码,它结合了优先级级别(例如 `LOG_INFO`, `LOG_ERR`)和设施代码(例如 `LOG_USER`, `LOG_AUTH`)。这些代码定义在 `` 头文件中。

- `LOG_USER` 是一个通用的消息设施,用于用户级别的消息。

- `LOG_AUTH` 是一个专门用于安全/授权消息(例如登录事件、sudo 命令)的设施。

4.2 shell

在shell中,可以使用logger命令来写入日志。

logger -s "this is my message"

在/var/log/syslog可以看到新增的一行:

Jan 15 15:25:44 localhost user: this is my message

也可以使用-p来指定设置facility和优先级,默认是user.notice,根据50-default.conf中的这个配置*.*;auth,authpriv.none -/var/log/syslog,这条消息会写入/var/log/syslog中。

logger -p auth.info "this is a auto info test message 2"

由于使用了 -p auth.info(其中auth是设施代码,代表认证系统,而 info是消息的级别),所以这条消息被写入auth.log中。

在auth.log中显示:

Jan 15 15:34:48 localhost user: this is a auto info test message 2

4.3 内核输出

内核的打印是在/proc/kmsg文件中(dmesg命令也是读取的这个文件)。

rsyslogd通过 imklog 模块来读取内核日志缓冲区。这个模块允许 rsyslogd直接访问/proc/kmsg文件,并将其中的消息转发到 rsyslogd的处理机制中,最终根据配置将消息写入到/var/log/syslog或其他日志文件中。

  • 5. syslog.1和syslog.2.gz等文件是如何生成

在/var/log目录中,可以看到,除了syslog文件,还有syslog.1, syslog.2.gz等文件,这些文件是如何生成的呢?

这些文件是由日志轮转工具/usr/sbin/logrotate生成的。

它的配置文件为:/etc/logrotate.conf和/etc/logrotate.d下的众多文件。

注意,logrotate并不仅仅可以轮转syslog日志,它是一个通用工具。/etc/logrotate.d目录下的文件有:

user@localhost:/etc/logrotate.d$ ll

-rw-r--r-- 1 root root 120 Nov 2 2017 alternatives

-rw-r--r-- 1 root root 173 Apr 20 2018 apt

-rw-r--r-- 1 root root 160 Aug 25 2020 chrony

-rw-r--r-- 1 root root 112 Nov 2 2017 dpkg

-rw-r--r-- 1 root root 94 Feb 26 2018 ppp

-rw-r--r-- 1 root root 501 Jan 14 2018 rsyslog

-rw-r--r-- 1 root root 270 Apr 5 2023 ubuntu-advantage-tools

-rw-r--r-- 1 root root 235 Feb 17 2020 unattended-upgrades

/etc/logrotate.conf文件的内容为:

  1. # see "man logrotate" for details
  2. # rotate log files weekly
  3. weekly #设置日志文件每周轮换一次
  4. # use the syslog group by default, since this is the owning group
  5. # of /var/log/syslog.
  6. su root syslog #在执行日志轮换时使用 root 用户和 syslog 组
  7. # keep 4 weeks worth of backlogs
  8. rotate 4 #保留 4 周的日志备份。
  9. # create new (empty) log files after rotating old ones
  10. create #在旧日志文件轮换后创建新的空日志文件。
  11. # uncomment this if you want your log files compressed
  12. #compress #这里注释了,所以默认不压缩
  13. # packages drop log rotation information into this directory
  14. include /etc/logrotate.d #包含/etc/logrotate.d目录
  15. # no packages own wtmp, or btmp -- we'll rotate them here #此部分为/var/log/wtmp文件配置日志轮换。没有/etc/logrotate.d/wtmp文件,所以直接放在本文件了
  16. /var/log/wtmp {
  17. missingok #如果文件不存在,不报错,继续下一个任务
  18. monthly #每月轮换一次
  19. create 0664 root utmp #创建新文件,权限为 0664,所有者为 root,组为 utmp
  20. rotate 1 #保留 1 个旧日志文件。所以会有wtmp.1,而不会有wtmp.2
  21. }
  22. /var/log/btmp {
  23. missingok
  24. monthly
  25. create 0660 root utmp
  26. rotate 1
  27. }
  28. # system-specific logs may be configured here

/etc/logrotate.d/rsyslog文件的内容为:

  1. /var/log/syslog
  2. {
  3. rotate 7 #保留 7 个轮转的日志文件副本,最多会有syslog.1 ~ syslog.7文件
  4. daily #每日轮转
  5. missingok
  6. notifempty #如果日志文件为空,不进行轮转。
  7. delaycompress #延迟压缩,即在下一次轮转时压缩上一次轮转的日志文件。所以syslog和syslog.1不压缩,syslog.2~syslog.7压缩,变为syslog.2.gz, ......, syslog.7.gz
  8. compress #压缩轮转的日志文件
  9. postrotate #轮转后要运行的命令的开始
  10. /usr/lib/rsyslog/rsyslog-rotate #轮转后执行的具体命令
  11. endscript #标记postrotate命令块的结束
  12. }
  13. /var/log/mail.info
  14. /var/log/mail.warn
  15. /var/log/mail.err
  16. /var/log/mail.log
  17. /var/log/daemon.log
  18. /var/log/kern.log
  19. /var/log/auth.log
  20. /var/log/user.log
  21. /var/log/lpr.log
  22. /var/log/cron.log
  23. /var/log/debug
  24. /var/log/messages
  25. {
  26. rotate 4
  27. weekly
  28. missingok
  29. notifempty
  30. compress
  31. delaycompress
  32. sharedscripts #如果有多个日志文件,只运行一次postrotate脚本,而不是每个文件都运行。
  33. postrotate
  34. /usr/lib/rsyslog/rsyslog-rotate
  35. endscript
  36. }

由此可见,除了syslog文件每天轮转,一共保留7个旧文件(算今天的syslog,相当于保留8天的内容咯),其它都是每周轮转,保留4个旧文件。

/usr/lib/rsyslog/rsyslog-rotate的内容是

  1. #!/bin/sh
  2. if [ -d /run/systemd/system ]; then #表示用systemd来初始化系统
  3. systemctl kill -s HUP rsyslog.service #通过systemctl kill命令发送HUP信号给rsyslog.service。这个HUP信号会让rsyslog重新加载其配置文件和轮转日志,而不是完全重启服务。
  4. else
  5. invoke-rc.d rsyslog rotate > /dev/null
  6. fi

注:如果修改/etc/logrotate.d/rsyslog,对syslog增加size 500M的限制,比如:

/var/log/syslog

{

size 500M

rotate 7

daily

missingok

notifempty

delaycompress

compress

postrotate

/usr/lib/rsyslog/rsyslog-rotate

endscript

}

这表示:每天都会检查尝试轮转,但文件大于500M才轮转,否则不轮转。

  • 6. logrotate是如何被执行

/usr/sbin/logrotate工具并不是一直执行的。它是由定时计划任务cron.service的cron进程触发了才执行的。

cron的配置文件有:

user@localhost:/etc$ ll|grep cron

drwxr-xr-x 2 root root 4096 Jul 10 2023 cron.d/

drwxr-xr-x 2 root root 4096 Jul 10 2023 cron.daily/

drwxr-xr-x 2 root root 4096 Nov 21 08:20 cron.hourly/

drwxr-xr-x 2 root root 4096 Jul 10 2023 cron.monthly/

drwxr-xr-x 2 root root 4096 Jul 10 2023 cron.weekly/

-rw-r--r-- 1 root root 722 Nov 16 2017 crontab

cron是定时计划任务,可以在各个目录中定义自己的脚本,在时间到来时,cron就会自动执行这些脚本。比如cron.daily目录下有:

user@localhost:/etc/cron.daily$ ll

-rw-r--r-- 1 root root 102 Nov 16 2017 .placeholder

-rwxr-xr-x 1 root root 1478 Apr 20 2018 apt-compat*

-rwxr-xr-x 1 root root 1176 Nov 2 2017 dpkg*

-rwxr-xr-x 1 root root 2211 Apr 13 2014 locate*

-rwxr-xr-x 1 root root 372 Aug 21 2017 logrotate*

-rwxr-xr-x 1 root root 249 Jan 25 2018 passwd*

logrotate就是其中的一个文件。其内容为:

  1. #!/bin/sh
  2. # Clean non existent log file entries from status file
  3. cd /var/lib/logrotate
  4. test -e status || touch status
  5. head -1 status > status.clean
  6. sed 's/"//g' status | while read logfile date
  7. do
  8. [ -e "$logfile" ] && echo "\"$logfile\" $date"
  9. done >> status.clean
  10. mv status.clean status
  11. test -x /usr/sbin/logrotate || exit 0
  12. /usr/sbin/logrotate /etc/logrotate.conf #这里调用了logrotate程序

那么,cron是如何实现每天调用cron.daily里的脚本呢?

可以看到同目录下的crontab文件。这个文件是cron程序的配置文件的入口。/etc/crontab的文件内容为:

  1. # /etc/crontab: system-wide crontab
  2. # Unlike any other crontab you don't have to run the `crontab'
  3. # command to install the new version when you edit this file
  4. # and files in /etc/cron.d. These files also have username fields,
  5. # that none of the other crontabs do.
  6. SHELL=/bin/sh
  7. PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
  8. # m h dom mon dow user command
  9. 17 * * * * root cd / && run-parts --report /etc/cron.hourly
  10. 25 6 * * * root test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.daily )
  11. 47 6 * * 7 root test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.weekly )
  12. 52 6 1 * * root test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.monthly )
  13. #

其中,第11行表示每小时的第 17 分钟,以 `root` 用户身份执行。`cd /` 是切换到根目录,`run-parts --report /etc/cron.hourly` 是运行`/etc/cron.hourly` 目录下的所有脚本,`--report` 选项会报告哪些作业被执行了。

第12行表示每天早上 6:25,以 `root` 用户身份执行。首先检查 `anacron` 是否存在并可执行,如果不存在或不可执行,则执行括号中的命令,运行 `/etc/cron.daily` 目录下的所有脚本。这就是为什么我们前面看到syslog.1和syslog.2.gz文件的生成时间都是06:25 。

第13行表示每周星期天(7)早上 6:47,以 `root` 用户身份执行。同样,先检查 `anacron`,然后可能运行 `/etc/cron.weekly` 目录下的脚本。

第14行表示 每月第一天早上 6:52,以 `root` 用户身份执行。检查 `anacron`,然后可能运行 `/etc/cron.monthly` 目录下的脚本。

要注意的是,logrotate只是在/etc/cron.daily中调用,而没有在cron.weekly中定义。在我们前面的rsylog的配置中,除了syslog的日志是每天轮转之外,其它的比如kern.log日志是每周轮转的呢?

`logrotate` 的配置确实是通过 `cron.daily` 来调用的,这意味着 `logrotate` 每天都会运行一次。尽管如此,`logrotate` 仍然能够处理 `weekly`、`monthly` 甚至 `yearly` 的轮转周期,因为它会跟踪上次轮转每个日志文件的时间。当 `logrotate` 运行时,它会查看每个日志文件的状态信息,这些信息通常存储在 `/var/lib/logrotate/status` 或 `/var/lib/logrotate/logrotate.status` 文件中。这个状态文件记录了每个日志文件最后一次轮转的时间。`logrotate` 使用这些信息来确定是否到了轮转每个日志文件的时间。

这是 `logrotate` 能够处理不同轮转周期的关键。即使它每天都运行,它也会检查每个文件的配置和上次轮转的时间,以决定是否执行轮转。如果配置为 `weekly`,并且上次轮转是一周前,那么 `logrotate` 将进行轮转。同样,如果配置为 `monthly` 并且上次轮转是一个月前,那么它也会进行轮转。

因此,`logrotate` 不需要在 `cron.weekly` 或 `cron.monthly` 目录中有单独的条目,因为其自身的检查机制足以确保在正确的时间执行轮转。这种设计使得管理和维护 `logrotate` 变得更加简单,因为您只需要保证它每天至少运行一次,而不需要为不同的轮转周期设置多个 `cron` 任务。

  • 7. 如何限制syslog的大小为500M以内

有时候比如kernel有问题,疯狂打印。造成kern.log和syslog文件都很快就把磁盘占满了,系统没有办法正常工作。

这时候我们想限制syslog大小为500M以内,怎么办呢?

方法一:由rsyslogd进程自己来限制syslog和kern.log的大小

(1) . 修改/etc/rsyslog.d/50-default.conf文件

文件中添加:

$outchannel log_syslog,/var/log/syslog,524288000,/home/me/rsyslog/logrotate_syslog.sh $outchannel log_kern,/var/log/kern.log,524288000,/home/me/rsyslog/logrotate_ kernlog.sh

*.*;auth,authpriv.none -/var/log/syslog

kern.* -/var/log/kern.log

修改为

*.*;auth,authpriv.none :omfile:$log_syslog

kern.* :omfile:$log_kern

(2). 在/home/me/中增加rsyslog目录,增加脚本logrotate_syslog.sh和logrotate_kernlog.sh

mkdir rsyslog

cd rsyslog

sudo touch logrotate_syslog.sh logrotate_kernlog.sh

sudo chown syslog:adm logrotate_syslog.sh logrotate_kernlog.sh

sudo chmod 755 logrotate_syslog.sh logrotate_kernlog.sh

logrotate_syslog.sh文件内容为:

#!/bin/bash mv /var/log/syslog /var/log/syslog.33 truncate -s 0 /var/log/syslog chown syslog:adm /var/log/syslog

logrotate_kernlog.sh文件的内容为:

#!/bin/bash mv /var/log/kern.log /var/log/kern.log.33 truncate -s 0 /var/log/kern.log chown syslog:adm /var/log/kern.log

方法二:每小时进行日志轮转

把syslog的日志轮转从/etc/cron.daily/移到/etc/cron.hourly/,使得它变为每小时进行日志轮转。

/etc/cron.daily/logrotate中有这一行:

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

把它移动到/etc/cron. hourly/logrotate文件中。但是其实这影响了包括rsyslog在内的所有的日志的轮转。

当然有可能每小时进行日志轮转还是不够。需要进行每分钟日志轮转。

方法三:每分钟进行日志轮转

(1). 在/etc/logrotate.d/目录下创建一个名为 mylogs的配置文件:

/var/log/syslog

/var/log/kern.log

{

size 500M

rotate 5

missingok

notifempty

compress

delaycompress

postrotate

invoke-rc.d rsyslog rotate > /dev/null

endscript

}

(2). 执行sudo crontab -e

在出现的编辑界面中添加一行* * * * * /usr/sbin/logrotate /etc/logrotate.d/mylogs

这一行内容会放在/var/spool/cron/crontabs/root文件中。

  • 8. 与syslog有关的三个程序

程序名称

service

作用

配置文件

输出文件

rsyslogd

rsyslog.service

写入/var/log目录下的部分文件(具体见右侧)

/etc/rsyslog.d/50-default.conf、

/etc/rsyslog.conf、

etc/syslog.conf应该是多余的,是旧的syslog.service的配置。

/var/log目录下的

auth.log

syslog

cron.log

kern.log

logrotate

默认不启动。

由cron周期调用。

比如syslog的日志轮转是在/etc/cron.daily/里执行,表明syslog的日志轮转的最小周期是1天。

日志轮转备份。

包括rsyslog、apache2、apt等服务或者进程等产生的日志。

/etc/logrotate.conf、

/etc/logrotate.d/rsyslog

/etc/logrotate.d/apt等

/var/log/目录下的

syslog.1

syslog.2.gz

apt/term.log

cron

cron.service

执行定时计划任务,包括logrotate,也可以自己添加

/etc/crontab

/etc/cron.d/

/etc/cron.daily/

/etc/cron.hourly/

/etc/cron.monthly/

/etc/cron.weekly/

这些文件中,默认最小的时间间隔是hourly。

如果需要minutely,需要使用crontab -e编辑新的配置文件。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/article/detail/43085
推荐阅读
相关标签
  

闽ICP备14008679号