rsyslog 配置

安装 rsyslog 和 logroate 服务

yum install rsyslog
yum install logrotate

rsyslog配置文件

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

  #### MODULES ####    加载模块
  $ModLoad imuxsock.so             # 本地系统日志 (e.g. via logger command) 
  $ModLoad imklog.so               # 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进行转发

日志级别

  • debug 有调式信息的,日志信息最多
  • info 一般信息的日志,最常用
  • notice 最具有重要性的普通条件的信息
  • warning 警告级别
  • err 错误级别,阻止某个功能或者模块不能正常工作的信息
  • crit 严重级别,阻止整个系统或者整个软件不能正常工作的信息
  • alert 需要立刻修改的信息
  • emerg 内核崩溃等严重信息
  • none 什么都不记录
    从上到下,级别从低到高,记录的信息越来越少

连接符号

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

Actions

  1. 记录到普通文件或设备文件:
    . /var/log/file.log # 绝对路径
    . /dev/pts/0
    logger 命令用于产生日志: logger -p local3.info 'KadeFor is testing the rsyslog and logger'

  2. 转发到远程::
    . @192.168.0.1 # 使用UDP协议转发到192.168.0.1的514(默认)端口
    . @@192.168.0.1:10514 # 使用TCP协议转发到192.168.0.1的10514(默认)端口

  3. 发送给用户(需要在线才能收到)::
    . root
    . root,kadefor,up01 # 使用,号分隔多个用户
    . * # *号表示所有在线用户

  4. 忽略,丢弃::
    local3.* ~ # 忽略所有local3类型的所有级别的日志

  5. 执行脚本::
    local3.* ^/tmp/a.sh # ^号后跟可执行脚本或程序的绝对路径
    # 日志内容可以作为脚本的第一个参数. 可用来触发报警
    注意: 日志记录的顺序有先后关系!

实例: 过滤特定的日志到文件

# 过滤日志, 由:号开头
: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.*    ~
&   ~                                     # 忽略所有的日志. 

实例: 使用模板来定义日志格式

定义默认的日志格式:

$template myFormat,”%rawmsg%\n”  
$ActionFileDefaultTemplate myFormat  

如果不要$ActionFileDefaultTemplate myFormat这一行, 就需要像这样来使用模板:
在日志文件后添加模板名, 并用;号分隔

$template myFormat,”%rawmsg%\n”  
authpriv.*      /var/log/secure;myFormat  
mail.*          /var/log/maillog;myFormat  
cron.*          /var/log/cron;myFormat  
*.emerg                                       *  
uucp,news.crit  /var/log/spooler;myFormat  
local7.*        /var/log/boot.log;myFormat

实例: remote log 远程发送与接收:

配置服务端(接收)

$ModLoad imtcp.so                  # 使用tcp方式
$InputTCPMaxSessions 500           # tcp接收连接数为500个
$InputTCPServerRun 514             # tcp接收信息的端口

# 定义一个名为logformat模板, 为信息加上日志时间
$template logformat, "%TIMESTAMP:::date-mysql% %FROMHOST-IP%%msg%\n"
# 定义日志文件的名称,按照年月日
$template DynFile, "/var/log/tlog%$year%%$month%%$day%.log"
# 把rawmsg(也可以使用msg)日志中包含sdns_log标志的信息写到DynFile定义的日志文件里
:rawmsg, contains, "sdns_log" ?DynFile;logformat
# 这个表示丢弃包含sdns_log标志的信息, 一般都加上它, 以免多个日志文件记录重复的日志
:rawmsg, contains, "sdns_log"  ~ 

配置客户端(发送)
# 把包含sdns_log的信息通过tcp发到192.168.1.2 @@表示tcp @表示udp
:rawmsg, contains, “sdns_log” @@192.168.1.2 # 默认514端口
# 这个表示丢弃包含sdns_log标志的信息,防止这个信息写到本机的/var/log/message
:rawmsg, contains, “sdns_log” ~
测试:在客户端上执行 logger -p user.info "sdns_log 34334" 在服务端的/var/log/目录里是否有tlog*日志产生

如果要把不同服务器发送过来的日志保存到不同的文件, 可以这样操作

:fromhost-ip, isequal, “192.168.0.160″ /var/log/host160.log
:FROMHOST-IP, isequal, “192.168.0.161″ /var/log/host161.log
:FROMHOST-IP, startswith, “192.168.1.” /var/log/network1.log
:FROMHOST-IP, startswith, “192.168.2.” /var/log/network2.log

属性替代

  1. 属性替代
    Rsyslog 预定义了一些属性,来代表消息中的信息,我们可以在定义输出格式、动态文件名的时候使用到这些属性。这里面比较重要的属性比如:msg(消息体)、hostname、pri(消息等级和类别)、time(时间有关),属性的名称中以开头的是从本地系统获得的变量、不带是从消息中获得变量。
    属性替代的语法格式:
    %propname:fromChar:toChar:options:fieldname%
    属性替换的功能很强大,你可以使用起始字符获取自己所需的字段,也可以使用正则表达式,也可以使用分隔符。举几个例子:为了兼容一个rfc协议,rsyslog规定如果用户输入的msg不是以空格开头,rsyslog会自动补充一个空格,因此如果你希望输出的时候去掉这个空格,就可以使用:
    %msg:2:$%
    选取msg变量中,起始位置为2,终止位置为结尾我们经常需要根据空格来分析字符串,F表示使用字符分割,32是空格的ascii码。 按照空格分隔,取第三个子串,例:
    %msg:F,32:3%

  2. 模板
    模板的功能是定义输出格式,或者定义omfile模块的动态路径、动态文件。需要使用上面提到的属性替换。
    模板定义的形式有四种,适用于不同的输出模块,一般简单的格式,可以使用string的形式,复杂的格式,建议使用list的形式,使用list的形式,可以使用一些额外的属性字段(property statement),例如:position.fromposition.end
    如果不指定输出模板,rsyslog会默认使用 RSYSLOG_DEFAULT
    如果你只想输出msg,可以定义模板
    template t_msg, “%msg\n%” 如果想按日期保存输出,需要使用动态路径。可以定义模板template f_debug, “/data0/logs/%year%-%month%-%$day%/debug.log”

  3. Ruleset
    Ruleset实现的是多实例的功能,可以针对syslog的来源使用不同的过滤规则。需要注意的是,在配置文件中需要先定义ruleset,才可以使用。比较典型的一个例子,针对不同的端口使用不同的过滤规则。

     $Ruleset tcp1999
     $RulesetCreateMainQueue on
     Local3.*      @@10.0.0.44:1999
     $Ruleset tcp2000
     $RulesetCreateMainQueue on
     Local4.*      @@10.0.0.44:2000
    

在定义好ruleset后,各个输出模块就可以指定自己使用的ruleset了,具体如何指定,可以查看输出模块的手册,一般会有一个ruleset的参数,用来实现这个功能。

  1. Filter模块
    Rsyslog可以使用syslog标准的过滤规则,同时自己添加了一些扩展。比如可以在输出中指定rsyslog自己的处理方式,可以指定输出template,方法是在规则后面添加template的名字,用分号隔开。
    例如我们可以编写一个规则
    Local3.* -/data0/logs/local3.log;t_msg
    #在这个输出中使用t_msg的模板
    Local4.* -?f_local3_test;t_msg
    问号表示要使用模板定义的动态路径.
    除了syslog标准的规则,rsyslog的作者还自己开发了一个叫做rainerscript的脚本语言,来定义更复杂的过滤过则,rainerscript 可以对属性进行 startwithcontains%(取余)等过滤规则,例如
    If pri-txt == local3.* andmsg contains “abc” then{ #pri为local3,且在消息中包含子串‘abc’
    . -/data0/logs/local3.log;t_msg
    }
    还有第三种方式是使用属性的表示方式,例如
    :msg, regex, "^ [g-z]" /root/rsyslog_worker_dir/2000.log
    # 以字母g到z开头的消息,注意msg开头有个空格
  2. 队列
    队列是rsyslog中比较重要的一个部分,作为使用者,我们需要了解的是队列的种类:主队列工作队列。从输入模块接收的消息会进入主队列,主队列中的消息,经过过滤模块,会进入到相应的工作队列;队列的四种工作模式:direct mode、disk mode、FixedArray mode 和 LinkedList mode,前两种是磁盘队列,更可靠,但是性能也较差,后两种是内存队列,区别是前者是预分配队列长度,后者是动态分配,如果你的系统日志流量比较平稳,可以使用预分配队列,如果日志属于突发型,可以使用动态队列。此外,内存队列还可以通过指定一个queuename来添加DA模式,DA模式主要是为了防止意外情况(进程关闭、server端宕机)下,内存队列可以不丢失。
    通过查看rsyslog的系统命令,可以知道rsyslog对队列进行大量的可配参数,来定义队列的行为。可以根据需要来进行优化。
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 199,636评论 5 468
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 83,890评论 2 376
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 146,680评论 0 330
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 53,766评论 1 271
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 62,665评论 5 359
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,045评论 1 276
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,515评论 3 390
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,182评论 0 254
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,334评论 1 294
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,274评论 2 317
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,319评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,002评论 3 315
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,599评论 3 303
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,675评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,917评论 1 255
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,309评论 2 345
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 41,885评论 2 341

推荐阅读更多精彩内容

  • ryslog工作流,输入-处理-输出。linux系统自带的日志收集工具,依赖守护进程。在linux系统中,/var...
    王歪歪102几阅读 2,979评论 0 0
  • ORA-00001: 违反唯一约束条件 (.) 错误说明:当在唯一索引所对应的列上键入重复值时,会触发此异常。 O...
    我想起个好名字阅读 5,076评论 0 9
  • http://liuxing.info/2017/06/30/Spring%20AMQP%E4%B8%AD%E6%...
    sherlock_6981阅读 15,842评论 2 11
  • 技术交流QQ群:1027579432,欢迎你的加入! 一、常见的日志 日志是一个系统管理员,一个运维人员,甚至是开...
    CurryCoder阅读 1,511评论 0 5
  • 折腾一上午就为让宝宝体验冰雪世界。 期待了一星期,本来周六就要完成心愿的,由于宝宝学习要紧,不错过成为“播音主持”...
    明天阳光阅读 73评论 0 1