当前位置: 首页 > news >正文

syslog 和 logrotate

syslogd

简介

syslogd 是 Unix 和类 Unix 系统中用于系统日志记录的标准守护进(daemon),它是系统日志(syslog)协议的主要实现之一。

基本功能

日志收集:接收来自系统内核、应用程序和其他进程的日志消息

日志分类:根据设施(facility)和优先级(priority)对日志进行分类

日志分发:根据配置将日志消息写入本地文件或转发到远程服务器

日志过滤:可以基于各种条件过滤日志消息

主要特性

设施分类:将日志分为 auth, cron, daemon, kern, lpr, mail, news, syslog, user, uucp, local0-local7等不同类别

日志分级:优先级从高到低为:emerg > alert > crit > err > warning > notice > info > debug

灵活配置:通过 /etc/syslog.conf文件配置

网络支持:可以通过 UDP 514 端口接收和发送远程日志

配置文件

典型的 syslogd 配置文件包含如下格式的规则:

       facility.priority    action

注意事项

       每条规则通常占一行

       以#开头的行是注释,会被忽略

facility

facility

说明

auth

安全/授权消息

cron

系统守护进程

daemon

系统守护进程

kern

内核消息

lpr

打印子系统

mail

邮件系统

news

USENET 新闻子系统

syslog

syslogd 内部消息

user

通用用户级消息

uucp

UUCP 子系统

local0-local7

本地使用的设施

priority

priority

说明

emerg

系统不可用

alert

需要立即采取行动

crit

严重条件

err

错误条件

warning

警告条件

notice

正常但重要的事件

info

信息性消息

debug

调试级别消息

示例配置

# 将所有设施的info及以上级别的消息记录到/var/log/messages*.info /var/log/messages# 将kern设施的debug及以上级别的消息记录到/var/log/kern.logkern.debug /var/log/kern.log# 将mail设施的err及以上级别的消息记录到/var/log/mail.errmail.err /var/log/mail.err# 将所有设施的warning及以上级别的消息转发到远程服务器192.168.1.100*.warning @@192.168.1.100:514# 将所有设施的debug消息丢弃*.debug /dev/null

logrotate

简介

logrotate 是一个 Linux/Unix 系统上的日志管理工具,用于自动轮转(rotate)、压缩、删除和邮寄日志文件,防止日志文件过大占用过多磁盘空间

基本功能

日志轮转:按时间或大小自动创建新的日志文件

日志压缩:可配置对旧日志进行压缩以节省空间

日志清理:删除过期的日志文件

日志邮寄:可选将日志通过邮件发送(不常用)

脚本执行:轮转前后可执行自定义脚本

工作原理

logrotate 通常作为 cron 作业定期运行(通常是每天),检查日志文件是否满足轮转条件,执行配置的操作。

配置文件

典型的 logrotate配置文件包含如下格式的规则:

# 全局配置DIRECTIVES # 指令# 局部配置log_file {DIRECTIVES # 指令}include xxxx # logrotate 支持从文件夹加载配置

注意事项

       每个 DIRECTIVES 通常占一行

       以#开头的行是注释,会被忽略

       局部指令会覆盖全局指令

示例配置

daily       # 按天轮询rotate 2    # 最多备份2个日志文件create      # 备份后新建日志notifempty  # 日志文件为空时不备份nomail      # 不发送日志到邮件olddir /var/log/backup/ # 将日志备份到指定目录createolddir # 当 olddir 指定的目录不存在时自动创建它missingok   # 日志文件不存在时不报错dateext     # 在备份后日志文件名后添加时间compress    # 使用 gzip 压缩备份的日志# 针对 /var/log/messages 文件的单独配置
/var/log/messages {maxsize 2M}# 包含指定目录下的配置文件或者指定的配置文件
include /etc/logrotate.d

指令说明

compress

       使用 gzip 压缩旧的日志文件。可以减少磁盘占用。

compresscmd

       指定用于压缩日志文件的命令。默认是 gzip。

uncompresscmd

       指定用于解压缩日志文件的命令。默认是gzip。

compressext

       如果启用了压缩,则指定要对压缩日志文件使用的扩展名。缺省值与配置的压缩命令相同。

compressoptions

如果正在使用压缩程序,可以将命令行选项传递给压缩程序。gzip(1)的默认值是“-6”(以牺牲速度为代价偏向于高压缩)。如果使用不同的压缩命令,可能需要更改压缩选项以匹配。

copy

创建日志文件的副本,但不要更改原始文件。当其他实用程序需要截断或解析该文件时可以使用此选项来创建当前日志文件的快照。当使用此选项时,create选项将不起作用,因为旧的日志文件将保留在原位。

copytruncate

在创建副本后,将原始日志文件截断到零大小,而不是移动旧的日志文件并创建一个新文件。当某些程序无法被告知关闭其日志文件,从而可能永远继续写入(追加)到以前的日志文件时,可以使用它。请注意,在复制文件和截断文件之间有一个非常小的时间片,因此可能会丢失一些日志数据。当使用此选项时,create选项将不起作用,因为旧的日志文件将保留在原位。

create

       create mode owner group

       在旋转之后(在运行postrotate脚本之前)立即创建日志文件(与刚刚旋转的日志文件名称相同)。mode以八进制指定日志文件的权限(与chmod(2)相同),owner指定拥有日志文件的用户名,group指定日志文件所属的组。任何日志文件属性都可以被省略,在这种情况下,新文件的这些属性将使用与原始日志文件中被省略属性相同的值。可以使用nocreate选项禁用此选项。

createolddir

       createolddir mode owner group

       如果olddir指令指定的目录不存在,则创建该目录。mode以八进制指定olddir目录的模式(与chmod(2)相同),owner指定将拥有olddir目录的用户名,group指定olddir目录所属的组。可以使用nocreateolddir选项禁用此选项。

daily

       按天轮询日志文件

dateext

       更新旧版本的日志文件,添加日期扩展名,如YYYYMMDD,而不是简单地添加数字。扩展可以使用dateformat和dateyesterday选项进行配置。

dateformat

       dateformat format_string

使用类似于strftime(3)函数的表示法指定dateext的扩展名。只允许%Y %m %d % h %m %S %V和%S说明符。默认值是-%Y%m%d,但“小时”除外,“小时”使用-%Y%m%d%H作为默认值。请注意,分隔日志名和扩展名的字符也是dateformat字符串的一部分。系统时钟必须设置为2001年9月9日以后,%s才能正常工作。注意,由这种格式生成的日期戳必须是按词法排序的(即首先是年,然后是月,然后是日)。例如,2001年12月1日是可以的,但2001年1月12日就不行,因为2002年1月11日排序较低。这是因为在使用rotate选项时,logrotate会对所有旋转的文件名进行排序,以找出哪些日志文件较旧,应该删除。

dateyesterday

       使用昨天的日期而不是今天的日期来创建日期文本扩展名,以便旋转的日志文件的名称中有一个与其中的时间戳相同的日期。

delaycompress

       将前一个日志文件的压缩推迟到下一个旋转周期。这只有在与compress结合使用时才有效果。当某些程序无法被告知关闭其日志文件,因此可能会在一段时间内继续写入前一个日志文件时,可以使用它。

extension

       extension ext

带ext扩展名的日志文件可以在轮换后保留。如果使用压缩,压缩扩展名(通常是.gz)出现在ext之后。例如,您有一个名为mylog的日志文件。我想把它旋转到mylog.1.foo.gz而不是mylog.foo.1.gz。

hourly

       日志文件每小时轮换一次。请注意,logrotate通常被配置为每天由cron运行。您必须更改此配置并每小时运行logrotate才能真正每小时轮换日志。

addextension

       addextension ext

       日志文件在旋转后被赋予最终扩展名ext。如果原始文件已经以ext结尾,则扩展名不会重复,而只是移动到末尾,即filename和filenameext都将旋转到filename.1ext。如果使用压缩,ext之后会出现压缩扩展名(通常是.gz)。

ifempty

       即使日志文件为空,也会轮换它,覆盖  notifempty选项(ifempty是默认值)。

include

       include file_or_directory

       指定包含其他配置文件,如果是目录,则包含目录下的所有配置文件

mail

mail address

       将日志发送到指定的地址

mailfirst

       当使用mail命令时,将发送刚刚旋转的文件,而不是即将过期的文件。

maillast

       当使用mail命令时,发送即将过期的文件,而不是刚刚轮换的文件(这是默认值)。

minage

       minage count

       请勿旋转小于count天的日志。

maxage

       maxage count

       删除超过<count>天的旋转日志。只有在要旋转日志文件时才检查时间。如果配置了mailast和mail,则将文件发送到配置的地址。

maxsize

       maxsize size

       当日志文件的大小超过size字节时,即使在额外指定的时间间隔(每天、每周、每月或每年)之前,也会轮换日志文件。相关的大小选项与时间间隔选项相似,只是它与时间间隔选项相互排斥,并且它会导致日志文件被旋转,而不考虑上次旋转的时间。当使用maxsize时,会同时考虑日志文件的大小和时间戳。

minsize  

       minsize  size

       当日志文件的大小超过size字节时,将轮换日志文件,但不会在额外指定的时间间隔(每天、每周、每月或每年)之前轮换。相关的大小选项与时间间隔选项相似,只是它与时间间隔选项相互排斥,并且它会导致日志文件被旋转,而不考虑上次旋转的时间。当使用minsize时,会同时考虑日志文件的大小和时间戳。

missingok

       如果缺少日志文件,则继续执行下一个日志文件,而不会发出错误消息。参见nomissingok。

monthly

       日志文件每月旋转一次,通常是每月的第一天。

nocompress

       旧版本的日志文件未被压缩。另请参阅compress

nocopy

       不要复制原始日志文件并将其留在原位。(这将覆盖copy选项)。

nocopytruncate

       不要在创建副本后就地截断原始日志文件(这会覆盖copytruncate选项)。

nocreate

       不会创建新的日志文件(这会覆盖create选项)。

nocreateolddir

       当olddir目录不存在时,logrotate不会创建该目录。

nodelaycompress

       不要将前一个日志文件的压缩推迟到下一个循环周期(这将覆盖delaycompress选项)。

nodateext

       不要在旧的日志文件名添加时间(这会覆盖dateext选项)。

nomail

       不要通过邮件发送日志。

nomissingok

       如果日志文件不存在,则发出错误。这是默认值

noolddir

       日志将在它们原来的目录中轮换(这将覆盖olddir选项)。

nosharedscripts

       为每个被旋转的日志文件运行private和postrotate脚本(这是默认设置,并覆盖sharedscripts选项)。日志文件的绝对路径作为第一个参数传递给脚本。如果脚本退出时出现错误,则仅对受影响的日志执行其余操作。

noshred

       删除旧的日志文件时,不要使用shred功能。参见shred。

notifempty

       如果日志为空,请勿旋转日志(这覆盖了Ifempty 选项)

olddir

       olddir directory

       日志被移动到目录中进行轮换。除非使用了copy、copytruncate或renamecopy选项,否则该目录必须与要旋转的日志文件位于同一物理设备上。除非指定了绝对路径名,否则假定该目录是相对于保存日志文件的目录的。当使用此选项时,所有旧版本的日志结束在目录。这个选项可以被noolddir选项覆盖。

postrotate/endscript

       在旋转日志文件后执行的命令

prerotate/endscript

       在旋转日志文件前执行的命令

firstaction/endscript

       只有当至少有一个日志被实际旋转之前执行的命令。这些指令只能出现在日志文件定义中。整个模式作为第一个参数传递给脚本。如果脚本退出并出现错误,则不会进行进一步处理。参见lastaction。

lastaction/endscript

       在postrotate脚本运行之后,并且只有在至少一个日志被旋转之后执行的命令。这些指令只能出现在日志文件定义中。整个模式作为第一个参数传递给脚本。如果脚本退出时出现错误,则只显示一条错误消息(因为这是最后一个操作)。参见firstaction。

preremove/endscript

       在删除日志文件之前执行的命令

rotate

       rotate count

       日志文件在被删除或邮寄到邮件指令中指定的地址之前将被旋转计数次。如果count为0,旧版本将被删除而不是旋转。默认为0。

renamecopy

       日志文件通过添加“.tmp”扩展名被重命名为同一目录下的临时文件名。之后,运行postrotate脚本,并将日志文件从临时文件名复制到最终文件名。这允许使用olddir指令在不同的设备上存储轮换的日志文件。最后,临时文件名被删除。

size

       size size

       只有当日志文件的大小超过size字节时,才会轮换日志文件。如果size后面跟着k,则假定大小以千字节为单位。如果使用M,则以兆为单位,如果使用G,则以千兆为单位。所以100号、100k号、100M号和100G号都是有效的。

sharedscripts

       通常,对每个被旋转的日志运行私有和后旋转脚本,并将日志文件的绝对路径作为脚本的第一个参数传递给该脚本。这意味着一个脚本可能会为匹配多个文件的日志文件条目运行多次(例如/var/log/news/*示例)。如果指定了sharedscripts,则无论有多少日志与通配符模式匹配,脚本都只运行一次,并且将整个模式传递给它们。但是,如果模式中的日志都不需要旋转,则根本不会运行脚本。如果脚本退出时出现错误,则不会对任何日志执行其余操作。该选项覆盖nosharedscripts选项并暗示创建选项。

shred 

       使用shred -u而不是unlink()删除日志文件。这将确保日志在计划删除后不可读;默认情况下是关闭的。参见noshred。

shredcycles

       shredcycles count

       要求GNU shred(1)在删除日志文件之前覆盖日志文件计数。如果没有这个选项,将使用shred的默认值。

start

       start count

       这是用来作为旋转基数的数。例如,如果指定0,则在从原始日志文件旋转日志时,将以.0扩展名创建日志。如果指定9,将使用.9创建日志文件,跳过0-8。文件仍然会按照rotate指令指定的次数旋转。

su

       su user group

       旋转在该用户和组下设置的日志文件,而不是使用默认用户/组(通常是root)。User表示用于旋转的用户名,group表示用于旋转的组。如果您在这里指定的用户/组没有足够的权限来创建具有您在create指令中指定的所有权的文件,则会导致错误。

tabooext

       tabooext       [+] list

       当前禁忌扩展列表被更改(参见include指令获取禁忌扩展的信息)。如果a +在扩展列表之前,则增加当前禁忌扩展列表,否则将替换当前禁忌扩展列表。在启动时,禁忌扩展列表,v, .cfsaved, .disabled, .dpkg-bak, .dpkg-del, .dpkg-dist, .dpkg-new, .dpkg-old, . rnn -cfg-tmp-*, .rpmnew, .rpmsave, .swp, .ucf-dist, .ucf-new, .ucf-old, ~

taboopat

       taboopat      [+] list

       当前的禁忌全局模式列表被更改(有关禁忌扩展和模式的信息,请参阅include指令)。如果a +在模式列表之前,则增加当前禁忌模式列表,否则替换当前禁忌模式列表。在启动时,禁忌模式列表为空。

weekly

       weekly [weekday]

       日志文件每个工作日轮换一次,或者如果日期比上次轮换提前至少7天(同时忽略确切的时间)。工作日的解释如下:0表示周日,1表示周一,…, 6表示星期六;特殊值7表示每7天,与工作日无关。如果省略weekday参数,默认为0。

yearly

       按年轮换日志文件

相关文章:

  • 字节跳动BAGEL-7B-MoT模型开源:多模态AI技术的新范式与行业涟漪
  • NLua性能对比:C#注册函数 vs 纯Lua实现
  • SMT贴片制造流程关键环节解析
  • React从基础入门到高级实战:React 核心技术 - 动画与过渡效果:提升 UI 交互体验
  • Qt基础终结篇:从文件操作到多线程异步UI,深度解析核心要点
  • Excel 操作 转图片,转pdf等
  • 新编辑器编写指南--给自己的备忘
  • 【数据结构】——二叉树堆(下)
  • 【深度学习】7. 深度卷积神经网络架构:从 ILSVRC、LeNet 到 AlexNet、ZFNet、VGGNet,含pytorch代码结构
  • uni-app学习笔记十五-vue3页面生命周期(一)
  • pycharm终端遇不显示虚拟环境的问题
  • 【第1章 基础知识】1.8 在 Canvas 中使用 HTML 元素
  • WPF【11_3】WPF实战-重构与美化(可复用的UI组件)
  • 【AI工具应用】使用 trae 实现 word 转成 html
  • PH热榜 | 2025-05-24
  • 【Linux】shell脚本的常用命令
  • winform LiveCharts2的使用--图表的使用
  • Linux 使用 Docker 安装 Milvus的两种方式
  • 微信小程序的软件测试用例编写指南及示例--性能测试用例
  • 【CSS】CSS 和 SASS 的区别
  • 南京建设监理协会网站/2022年度关键词
  • 网站建设专题的意义/做网络推广为什么会被抓
  • 海宁市网站建设/太原企业网站建设
  • 网站关闭了域名备案/google优化排名
  • 人才招聘网网站策划方案/2023网站推广入口
  • 做 爱 网站视频/南京高端品牌网站建设