章工运维 章工运维
首页
  • linux
  • windows
  • 中间件
  • 监控
  • 网络
  • 存储
  • 安全
  • 防火墙
  • 数据库
  • 系统
  • docker
  • 运维工具
  • other
  • elk
  • K8S
  • ansible
  • Jenkins
  • GitLabCI_CD
  • 随笔
  • 面试
  • 工具
  • 收藏夹
  • Shell
  • python
  • golang
友链
  • 索引

    • 分类
    • 标签
    • 归档
    • 首页 (opens new window)
    • 关于我 (opens new window)
    • 图床 (opens new window)
    • 评论 (opens new window)
    • 导航栏 (opens new window)
周刊
GitHub (opens new window)

章工运维

业精于勤,荒于嬉
首页
  • linux
  • windows
  • 中间件
  • 监控
  • 网络
  • 存储
  • 安全
  • 防火墙
  • 数据库
  • 系统
  • docker
  • 运维工具
  • other
  • elk
  • K8S
  • ansible
  • Jenkins
  • GitLabCI_CD
  • 随笔
  • 面试
  • 工具
  • 收藏夹
  • Shell
  • python
  • golang
友链
  • 索引

    • 分类
    • 标签
    • 归档
    • 首页 (opens new window)
    • 关于我 (opens new window)
    • 图床 (opens new window)
    • 评论 (opens new window)
    • 导航栏 (opens new window)
周刊
GitHub (opens new window)
  • linux

    • rsync

      • rsync用法及参数详解
      • rsync服务实现推送,拉取
    • dns

    • sed、awk、grep、find四剑客

    • LVM管理
    • sudo权限规划
    • linux修改网卡为eth0的两种方法
    • Logrotate入门了解及生产实践
    • linux中用dd命令来测试硬盘读写速度
    • linux 阿里云盘挂载错误
    • CentOS7安装Android SDK
    • centos7安装更新git
    • linux启动顺序
    • centos7升级openssl
    • expect工具的安装和使用方法
    • linux下使用v2ray
    • centos7安装java环境的两种方式
    • linux-centos7系统设置时区及同步时间
    • rsyslog日志系统:rsyslog配置文件
      • 日志文件Rotating(滚动日志)
        • logrotate配置文件实例
        • logrotate配置项
    • rsyslog的安装、使用、详解
    • safe-rm防止删除重要的文件
    • linux如何获取打开文件和文件描述符数量
    • LVS集群-DR模式
    • linux服务器安装ffmpeg
    • linux服务器安装samba
    • 使用openssl创建自签发证书
    • linux服务器部署next.js服务
    • linux服务器ionice命令使用方式
    • linux服务器curl命令常用操作
  • windows

  • 中间件

  • 网络

  • 安全

  • 存储

  • 防火墙

  • 数据库

  • 系统

  • docker

  • other

  • 监控

  • 运维
  • linux
章工运维
2024-05-26
目录

rsyslog日志系统:rsyslog配置文件

# rsyslog配置文件模块介绍

  • modules,模块,配置加载的模块,如:ModLoad imudp.so配置加载UDP传输模块

  • global directives,全局配置,配置ryslog守护进程的全局属性,比如主信息队列大小(MainMessageQueueSize)

  • rules,规则(选择器+动作),每个规则行由两部分组成,selector部分和action部分,这两部分由一个或多个空格或tab分隔,selector部分指定源和日志等级,action部分指定对应的操作

  • 模板(templates)

  • 输出(outputs)

# 常用的modules

imudp,传统方式的UDP传输,有损耗

imtcp,基于TCP明文的传输,只在特定情况下丢失信息,并被广泛使用

imrelp,RELP传输,不会丢失信息,但只在rsyslogd 3.15.0及以上版本中可用

# 规则(rules)

规则的选择器(selectors)
selector也由两部分组成,设施和优先级,由点号.分隔。第一部分为消息源或称为日志设施,第二部分为日志级别。多个选择器用;分隔,如:*.info;mail.none。

日志设施有:

facility可以理解为日志的来源或设备或选择条件,目前常用的facility有以下几种

               auth                      #认证相关的

               authpriv                #权限,授权相关的

               cron                      #任务计划相关的

               daemon                #守护进程相关的

               kern                       #内核相关的

               lpr                          #打印相关的

               mail                        #邮件相关的

               mark                       #标记相关的

               news                       #新闻相关的

               security                   #安全相关的,与auth类似

               syslog                      #syslog自己的

               user                         #用户相关的

               uucp                        #unix to unix cp相关的

               local0到local7          #用户自定义使用

               *                                #*表示所有的facility
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

日志级别有(从低到高):

注:级别越低记录的越详细

debug:程序或系统的调试信息,通常只在调试一个程序时使用。
info:正常的系统消息,比如骚扰报告,带宽数据等,不需要处理。
notice: 不是错误情况,也不需要立即处理,不影响正常的功能,需要提醒用户的重要事件。
warning: 警告信息,不是错误,比如系统磁盘使用了85%等,可能影响系统功能,需要提醒用户的重要事件。
err:错误,不是非常紧急,在一定时间内修复即可。
crit:比较严重的,如硬盘错误,备用连接丢失。
alert:必须马上处理的,如系统数据库被破坏,ISP连接丢失。
emerg:紧急情况,会导致系统不可用的,需要立即通知技术人员。
*   : #表示所有的日志级别
none : #跟*相反,表示什么也没有
1
2
3
4
5
6
7
8
9
10

action(动作)日志记录的位置

系统上的绝对路径 #普通文件 如:/var/log/XXX

        |                                #管道 通过管道送给其他的命令出来

        终端                          #终端 如:/dev/console

        @host                      #远程主机  如@10.1.1.1

        用户                          #系统用户 如:root

        *                         #登录到系统上的所有用户,一般emerg级别的日志是这样定义的
1
2
3
4
5
6
7
8
9

日志设施的配置:

. 代表比后面还要高的消息等级都会记录下来
.= 代表只有后面的这个消息等级会被记录下来
.! 代表除了后面的这个消息等级,其他的都会被记录下来,对于多个选择器可以用;分隔。

                mail.info  /var/log/mail.log   #表示将mail相关的,级别为info及info以上级别的信息记录到/var/log/mail.log文件中 

                auth.=info  @10.1.1.1            #表示将auth相关的,级别为info的信息记录到10.1.1.1主机上去,前提是10.1.1.1要能接收其主机发来的日志信息

                user.!=error                            #表示记录user相关的,不包括error级别的信息

                 user.!error                           #表示user.error相反

                *.info                                      #表示记录所有的日志信息的info级别

                mail.*                                      #表示记录所有mail相关的所有级别的信息

                *.*                                           #表示记录所有的日志信息的所有的日志级别

                cron.info;mail.info                  #多个日志来源可以用“ ; ”隔开

                cron,mail.info                         #与cron.info;mail.info        是一个意思

                mail.*;mail.!=info                    #表示记录mail相关的所有级别的信息,但是不包括info级别的信息
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19

动作 (action)
action是规则描述的一部分,位于选择器的后面,规则用于处理消息。总的来说,消息内容被写到一种日志文件上,但也可以执行其他动作,比如写到数据库表中或转发到其他主机。

在前面的实例中的是写到本地文件中的

# The authpriv file has restricted access.
authpriv.*                                              /var/log/secure
1
2

也可以写到mysql数据库中

# modules, 要将日志写到mysql中需要加载ommysql模块
$ModLoad ommysql 
# rule, send to mysql
#*.*       :ommysql:database-server,database-name,database-userid,database-password
*.*       :ommysql:127.0.0.1,Syslog,syslogwriter,topsecret
1
2
3
4
5

action的配置:

  • 保存到文件,cron.* -/var/log/cron.log如果路径前有-则表示每次输出日志时不同步(fsync)指定日志文件。 文件路径既可以是静态文件也可以是动态文件。动态文件由模板前加 ? 定义。
  • 通过网络发送日志 格式如下: @[()]:[] @ 表示使用 UDP 协议。@@ 表示使用 TCP 协议。 可以为: z 表示使用 zlib 压缩,NUMBER 表示压缩级别。多个选项 使用 , 分隔。 例如: . @192.168.0.1 # 使用 UDP 发送日志到 192.168.0.1 .@@example.com:18 # 使用 TCP 发送到 “example.com” 的 18 端口 . @(z9)[2001::1] # 使用 UDP 发送消息到 2001::1,启用 zlib 9 级压缩
  • cron.* ~ 丢弃所有信息,即该配置之后的动作不会看到该日志。 随 rsyslog 版本不同,如果有如下警告信息,则将 ~ 修改为 stop。

# 模板(templates)

模板允许你指定日志信息的格式,也可用于生成动态文件名,或在规则中使用。其定义如下所示,其中TEMPLATE_NAME是模板的名字,PROPERTY是rsyslog本身支持的一些属性参数。

$template TEMPLATE_NAME,"text %PROPERTY% more text", [OPTION]
1

使用例子:

$template DynamicFile,"/var/log/test_logs/%timegenerated%-test.log"
$template DailyPerHostLogs,"/var/log/syslog/%$YEAR%/%$MONTH%/%$DAY%/%HOSTNAME%/messages.log"

*.info ?DailyPerHostLogs
*.* ?DynamicFile
1
2
3
4
5

在模板中我们用到的properties可以参考官方文档说明 (opens new window),例子中用到的timegenerated是指接收到消息时的时间戳。

# 输出(outputs)

输出频道为用户可能想要的输出类型提供了保护,在规则中使用前要先定义.其定义如下所示,其中NAME指定输出频道的名称,FILE_NAME指定输出文件,MAX_SIZE指定日志文件的大小,单位是bytes, ACTION指定日志文件到达MAX_SIZE时的操作。

$outchannel NAME, FILE_NAME, MAX_SIZE, ACTION
1

在规则中使用输出频道按照如下的格式:

selectors :omfile:$NAME
1

例子:

$outchannel log_rotation, /var/log/test_log.log, 104857600, /home/joe/log_rotation_script

*.* :omfile:$log_rotation
1
2
3

配置的验证

通过下面命令可以校验配置文件是否配置正确:

sudo rsyslogd -f /etc/rsyslog.conf -N4
1

其中 -N后面的数值代表rsyslog启动时-c 后指定的版本。

通过下面命令可以手动发送日志信息:

logger -p local0.info "hello world"
1

# 日志文件Rotating(滚动日志)

随着日志文件越来越大,这不仅会带来性能问题,同时对日志的管理也非常棘手。 当一个日志文件被rotated,会创建一个新的日志文件,同时旧的日志文件会被重命名。这些文件在一段时间内被保留,一旦产生一定数量的旧的日志,系统就会删除一部分旧的日志。

# logrotate配置文件实例

logrotate是通过cron任务调用的,在安装的时候就自动创建了,所以通过ps命令看不到logrotate,可查看定时任务调用:cat /etc/cron.daily/logrotate:

#!/bin/sh

/usr/sbin/logrotate /etc/logrotate.conf >/dev/null 2>&1
EXITVALUE=$?
if [ $EXITVALUE != 0 ]; then
    /usr/bin/logger -t logrotate "ALERT exited abnormally with [$EXITVALUE]"
fi
exit 0
1
2
3
4
5
6
7
8

cron.daily下的文件执行都是通过/etc/crontab配置的:

0 0 * * * root run-parts /etc/cron.daily #定时执行cron.daily
1

logrotate的配置文件为/etc/logrotate.conf,下面给一个例子:

# see "man logrotate" for details
# rotate log files weekly
weekly           #每周滚动一次

# keep 4 weeks worth of backlogs
rotate 4            #只保留4个切割版本文件,超过后清除 

# create new (empty) log files after rotating old ones
create             #滚动完之后创建一个空的新的文件

# uncomment this if you want your log files compressed
#compress

# packages drop log rotation information into this directory
include /etc/logrotate.d            #包括/etc/logrotate.d 下的文件,手动添加可直接添加到此目录

# no packages own wtmp, or btmp -- we'll rotate them here
/var/log/syslog
{
    rotate 7              #保留7份旧的日志
    daily
    missingok
    notifempty
    delaycompress
    compress
    postrotate
        invoke-rc.d rsyslog reload > /dev/null
    endscript
}
/var/log/cron.log
/var/log/debug
/var/log/messages
{
    rotate 4
    weekly
    missingok
    notifempty
    compress
    delaycompress
    sharedscripts
    postrotate
        invoke-rc.d rsyslog reload > /dev/null
    endscript
}
# system-specific logs may be configured here
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

syslog (opens new window)的日志文件每天被rotated,保留7份旧的日志。其他的日志文件每周进行一次rotate,并保留4份旧的日志。

# logrotate配置项

我们可以通过man logrotate来获取所有的参数和详细描述。这里列出一部分:

daily 指定转储周期为每天 weekly 指定转储周期为每周 monthly 指定转储周期为每月 compress 通过gzip 压缩转储以后的日志 nocompress 不需要压缩时,用这个参数 copytruncate 用于还在打开中的日志文件,把当前日志备份并截断 nocopytruncate 备份日志文件但是不截断 missingok 如果文件不存在,继续下一个文件,不报异常 nomissingok 如果文件不存在,报异常(默认配置) create mode(文件权限) owner(拥有者) group(组) 转储文件,使用指定的文件模式创建新的日志文件 nocreate 不建立新的日志文件 delaycompress 和 compress 一起使用时,转储的日志文件到下一次转储时才压缩 nodelaycompress 覆盖 delaycompress 选项,转储同时压缩。 errors address 转储时的错误信息发送到指定的Email 地址 ifempty 即使是空文件也转储,(logrotate 的缺省选项) notifempty 如果是空文件的话,不转储 mail address 把转储的日志文件发送到指定的E-mail 地址 nomail 转储时不发送日志文件 olddir directory 转储后的日志文件放入指定的目录,必须和当前日志文件在同一个文件系统 noolddir 转储后的日志文件和当前日志文件放在同一个目录下 prerotate/endscript 在转储以前需要执行的命令可以放入这个对,这两个关键字必须单独成行 postrotate/endscript 在转储以后需要执行的命令可以放入这个对,这两个关键字必须单独成行 rotate count 指定日志文件删除之前转储的次数,0 指没有备份,5 指保留5 个备份 tabootext [+] LIST 让logrotate 不转储指定扩展名的文件,缺省的扩展名是:.rpm-orig, .rpmsave, v, 和 ~ size SIZE 当日志文件到达指定的大小时才转储,Size 可以指定 bytes (缺省)以及KB (sizek)或者MB (sizem)


原文链接 (opens new window)

微信 支付宝
上次更新: 2025/04/03, 13:47:00

← linux-centos7系统设置时区及同步时间 rsyslog的安装、使用、详解→

最近更新
01
shell脚本模块集合
05-13
02
生活小技巧(认知版)
04-29
03
生活小技巧(防骗版)
04-29
更多文章>
Theme by Vdoing | Copyright © 2019-2025 | 点击查看十年之约 | 鄂ICP备2024072800号
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式