当前位置: 首页 > 工具软件 > Rsyslog > 使用案例 >

rsyslog配置文档

相德宇
2023-12-01

rsyslog配置文档

1.rsyslog介绍

Rsyslog的全称是 rocket-fast system for log,它提供了高性能,高安全功能和模块化设计。rsyslog能够接受从各种各样的来源,将其输入,输出的结果到不同的目的地。rsyslog可以提供超过每秒一百万条消息给目标文件。

特点:

1.多线程
2.可以通过许多协议进行传输UDP,TCP,SSL,TLS,RELP;
3.直接将日志写入到数据库;
4.支持加密协议:ssl,tls,relp
5.强大的过滤器,实现过滤日志信息中任何部分的内容
6.自定义输出格式;

2.配置

配置文件/etc/rsyslog.conf主要有3个部分

MODULES :模块
GLOBAL DRICTIVES :全局设置
RULES:规则

  #rsyslog v3 config file   [兼容版本号]

  #### MODULES ####    加载模块
  $ModLoad imuxsock             # 本地系统日志 (e.g. via logger command) 
  $ModLoad imklog               # provides kernel logging support (previously done by rklogd)

  # 允许514端口接收使用UDP协议转发过来的日志
  #$ModLoad imudp.so
  #$UDPServerRun 514
  # 允许514端口接收使用TCP协议转发过来的日志
  #$ModLoad imtcp.so
  #$InputTCPServerRun 514

  #### GLOBAL DIRECTIVES ####
  # 定义日志格式默认模板  
  $ActionFileDefaultTemplate RSYSLOG_TraditionalFileFormat  
  # File syncing capability is disabled by default. This feature is usually not required,
  # not useful and an extreme performance hit
  #$ActionFileEnableSync on

  #### RULES ####
  # 关于内核的所有日志都放到/dev/console(控制台)
  #kern.*                                                 /dev/console
  # 记录所有日志类型的info级别以及大于info级别的信息到 /var/log/messages,但是mail邮件信息,authpriv验证方面的信息和cron时间任务相关的信息除外
  *.info;mail.none;authpriv.none;cron.none                /var/log/messages  
  # authpriv验证相关的所有信息存放在/var/log/secure
  authpriv.*                                              /var/log/secure  
  # 邮件的所有信息存放在/var/log/maillog; 这里有一个-符号, 表示是使用异步的方式记录, 因为日志一般会比较大
  mail.*                                                  -/var/log/maillog  
  # 计划任务有关的信息存放在/var/log/cron
  cron.*                                                  /var/log/cron  
  # 记录所有的大于等于emerg级别信息, 以wall方式发送给每个登录到系统的人(* 代表所有在线用户 )
  *.emerg                                                 * 
  # 记录uucp,news.crit等存放在/var/log/spooler
  uucp,news.crit                                          /var/log/spooler  
  # Save boot messages also to boot.log     启动的相关信息
  local7.*                                                /var/log/boot.log

  #  转发规则
  # remote host is: name/ip:port,  port optional (e.g. 192.168.0.1:514)
  *.*                                                     @@remote-host:514                    
  # @@表示通过tcp协议发送    @表示通过udp进行转发

RULES

facitlity.priority          Target
 
auth         #pam产生的日志,认证日志
authpriv     #ssh,ftp等登录信息的验证信息,认证授权认证
cron         #时间任务相关
kern         #内核
lpr          #打印
mail         #邮件
mark(syslog) #rsyslog服务内部的信息,时间标识
news         #新闻组
user         #用户程序产生的相关信息
uucp         #unix to unix copy, unix主机之间相关的通讯
local 1~7    #自定义的日志设备
===============================================================
#priority: 级别日志级别:
=====================================================================
7 debug           #有调式信息的,日志信息最多
6 info            #一般信息的日志,最常用
5 notice          #最具有重要性的普通条件的信息
4 warning, warn   #警告级别
3 err, error      #错误级别,阻止某个功能或者模块不能正常工作的信息
2 crit            #严重级别,阻止整个系统或者整个软件不能正常工作的信息
1 alert           #需要立刻修改的信息
0 emerg, panic    #内核崩溃等严重信息
none            #什么都不记录
###从上到下,级别从低到高,记录的信息越来越少,如果设置的日志内性为err,则日志不会记录比err级别低的日志,只会记录比err更高级别的日志,也包括err本身的日志。
=====================================================================
Target:
  #文件, 如/var/log/messages
  #用户, root,*(表示所有用户)
  #日志服务器,@172.16.22.1
  #管道        | COMMAND

连接符号

.xxx: 表示大于等于xxx级别的信息
.=xxx:表示等于xxx级别的信息
.!xxx:表示在xxx之外的等级的信息

处理方式

/var/log/file	发送到日志文件
@@192.168.0.1	发送到TCP server
@192.168.0.1	发送到UDP server
user1,user2	    发送到在线用户user1,user2
~		        丢弃该日志
^/path/script	执行的脚本,^后面跟可以执行的脚本,日志内容可以作为脚本的第一个参数,可以用来触发告警

结合使用的 rule 示例

# 记录mail日志等级为error及以上日志
mail.err							/var/log/mail_err.log

# 记录mail所有等级为warn级别的日志(仅记录warn级别)
mail.=warn							/var/log/mail_err.log

# 记录kern所有日志
kern.*								/var/log/kern.log

# 将mail的所有信息,除了info以外,其他的都写入/var/adm/mail
mail.*;mail.!=info   /var/adm/mail

# 将日志等级为crit或更高的内核消息定向到远程主机finlandia
# 如果主机崩溃,磁盘出现不可修复的错误,可能无法读取存储的消息。如果有日志在远程主机上,可以尝试找出崩溃的原因。
kern.crit    						 @finlandia

# 记录所有类型的warning等级及以上日志
*.warning							/var/log/syslog_warn.log

# 记录mail的warning日志和kern的error日志,其他所有的info日志
*.info;mail.warning;kern.error		/var/log/messages

# 记录kernel的info到warning日志
kern.info;kern.!err   /var/adm/kernel-info

# 将mail和news的info级别日志写入/var/adminfo
mail,news.=info    /var/adm/info

# 将所有系统中所有类型的info日志和notice日志存入/var/log/massages,mail的所有日志除外。
*.=info;*.=notice;\
mail.none /var/log/messages

# 紧急消息(emerg级别)将使用wall显示给当前所有登录的用户
*.=emerg   		*

# 该规则将所有alert以及更高级别的消息定向到操作员的终端,即登录的用户“root”和“joey”的终端。
*.alert      root,joey

属性替代

Rsyslog 预定义了一些属性,来代表消息中的信息,我们可以在定义输出格式、动态文件名的时候使用到这些属性。

属性释义|
msg日志的信息内容,message。
rawmsg不转义的日志内容。转义是默认开启的(EscapecontrolCharactersOnReceive),所以它有可能与socket中接收到的内容不同。
rawmsg-after-pri几乎与rawmsg相同,但是删除了syslog PRI。
hostname打印该日志的主机名。
sourcehostname属性的别名。
fromhost接收的信息来自于哪个节点。这里是DNS解析的名字。
fromhost-ip接收的信息来自于哪个节点,这里是IP,本地的是127.0.0.1。
syslogtag信息标签。大致形如 programed[14321] 。
programnametag的一部分,就是上面的programed那个位置。
pri消息的PRI部分-未解码(单值)
pri-text文本形式的消息的PRI部分,并在括号中添加数值PRI(例如“local0.err<133>”)
iutInfoUnitType 一款监视器软件,在与监视器后端通信的时候使用
syslogfacility设备信息,数字形式表示
syslogfacility-text设备信息,文本形式表示
timegenerated高精度时间戳
timereported日志中的时间戳。精度取决于日志中提供的内容(在大多数情况下,为秒级)
timestamp同 timereported
protocol-versionIETF draft draft-ietf-syslog-protocol 中的 PROTOCOL-VERSION 字段的内容
structured-dataIETF draft draft-ietf-syslog-protocol 中的 STRUCTURED-DATA 字段的内容
app-nameIETF draft draft-ietf-syslog-protocol 中的 APP-NAME 字段的内容
procidIETF draft draft-ietf-syslog-protocol 中的 PROCID 字段的内容
msgidIETF draft draft-ietf-syslog-protocol 中的 MSGID 字段的内容
inputname生成日志的输入模块的名称(如“imuxsock”、“imudp”)
jsonmesg整个日志对象作为json表示。可能出现数据重复,譬如syslogtag包含着programname,但两者都会分别表示。所以这个属性有一些额外开销,建议只有在实际需要的时候再用。

与时间相关的系统属性(以 2020-07-08 16:57:36 为例)

属性释义
$now当前日期时间戳,格式为YYYY-MM-DD (2020-07-08)
$year当前年份, 四位数 (2020)
$month当前月份, 两位数 (07)
$day当前月份的日期,两位数 (08)
$wday当前天数周几 :0=Sunday,…6=Saturday
$hour当前小时(24小时机制),两位数(16)
$hhour半小时机值,就是0-29分钟显示0,30-59分钟显示1。
$qhour一刻钟机值,通过0-3显示,每15分钟一截。
$minute当前分钟数,两位数(57)

Filter模块

Rsyslog可以使用syslog标准的过滤规则,同时自己添加了一些扩展。比如可以在输出中指定rsyslog自己的处理方式,可以指定输出template

# 过滤日志, 由:号开头
:msg, contains, “error” /var/log/error.log
:msg, contains, “error” ~                # 忽略包含error的日志
:msg, contains, “user nagios”   ~
:msg, contains, “user kadefor”   ~
:msg, contains, “module-alsa-sink.c: ALSA woke us up to write new data to the device, but there was actually nothing to write” ~
local3.*    ~
&   ~                                     # 忽略所有的日志. 

模板

通过模板修改日志

vim /etc/rsyslog.conf

# 创建一个名为cky_format的模板,其中 TIMESTAMP:8:15 表示timestamp属性值切片第八位到第十五位。
$template cky_format, "%$NOW% %TIMESTAMP:8:15% %hostname% %syslogseverity-text% %syslogtag% %msg%\n"
$ActionFileDefaultTemplate cky_format

#重启rsyslog
systemctl restart rsyslog

日志格式效果样例

# NOW | timestamp:8:15| hostname| syslogseverity-text | syslogtag | msg
2020-07-09 09:59:54 mycomputer    info    systemd:  Started System Logging Service.
#    时间戳         | 	 主机名   | 日志等级 | 服务进程 |   日志内容

文件存储模板示例

1.排除本地主机IP日志记录,只记录远程主机。

打开/etc/rsyslog.conf文件,启用UDP协议,尽量避免修改主配置文件,我们在/etc/rsyslog.d/中新建default.conf,追加如下模板:

#### GLOBAL DIRECTIVES ####

# Use default timestamp format  # 使用自定义的格式
$ActionFileDefaultTemplate RSYSLOG_TraditionalFileFormat
$template myFormat,"%timestamp% %fromhost-ip% %syslogtag% %msg%\n"
$ActionFileDefaultTemplate myFormat     

# 根据客户端的IP单独存放主机日志在不同目录,rsyslog需要手动创建
$template RemoteLogs,"/var/log/rsyslog/%fromhost-ip%/%fromhost-ip%_%$YEAR%-%$MONTH%-%$DAY%.log"
# 排除本地主机IP日志记录,只记录远程主机日志
:fromhost-ip, !isequal, "127.0.0.1" ?RemoteLogs
# 忽略之前所有的日志,远程主机日志记录完之后不再继续往下记录
& ~

转发到远程主机

有3种方式转发消息:

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

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

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

写法:

UDP 在主机名前加"@"

TCP 在主机名前加"@@"

RELP 在主机名前加":omrelp:"

例: . @192.168.0.1 将所有日志信息通过UDP协议发送到192.168.0.1

 类似资料: