Rsyslog简介

  • Rsyslog的全称是 rocket-fast system for log,它提供了高性能,高安全功能和模块化设计。rsyslog能够接受从各种各样的来源,将其输入,输出的结果到不同的目的地。rsyslog可以提供超过每秒一百万条消息给目标文件。
  • 日志是任何软件或操作系统的关键组件。 日志通常会记录用户的操作、系统事件、网络活动等等,具体取决于它们的用途。 Linux 系统上使用最广泛的日志系统之一是 rsyslog 。
  • Rsyslog 是一个强大、安全和高性能的日志处理系统,它接受来自不同类型源(系统/应用程序)的数据并输出为多种格式。
  • 它已经从一个常规的 syslog 守护进程发展成为一个功能齐全的企业级日志系统。 它采用客户端/服务器模型设计,因此可以配置为客户端和/或其他服务器、网络设备和远程应用程序的中央日志服务器。

功能特性:

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

Rsyslog提供了三种远程传输协议:

  • UDP 传输协议

  基于传统UDP协议进行远程日志传输,也是传统syslog使用的传输协议; 可靠性比较低,但性能损耗最少, 在网络情况比较差, 或者接收服务器压力比较高情况下,可能存在丢日志情况。 在对日志完整性要求不是很高,在可靠的局域网环境下可以使用。

  • TCP 传输协议

  基于传统TCP协议明文传输,需要回传进行确认,可靠性比较高; 但在接收服务器宕机或者两者之间网络出问题的情况下,会出现丢日志情况。 这种协议相比于UDP在可靠性方面已经好很多,并且rsyslog原生支持,配置简单, 同时针对可能丢日志情况,可以进行额外配置提高可靠性,因此使用比较广。

  • RELP 传输协议

  RELP(Reliable Event Logging Protocol)是基于TCP封装的可靠日志消息传输协议; 是为了解决TCP 与 UDP 协议的缺点而在应用层实现的传输协议,也是三者之中最可靠的。 需要多安装一个包rsyslog-relp以支持该协议。

Rsyslog架构阐述:

    

      

环境准备

属性 Rsyslog服务器 Rsyslog客户端
节点 rsyslog-server rsyslog-client
系统 CentOS Linux release 7.5.1804 (Minimal) CentOS Linux release 7.5.1804 (Minimal)
内核 3.10.0-862.el7.x86_64 3.10.0-862.el7.x86_64
SELinux setenforce 0 | disabled setenforce 0 | disabled
IP地址 172.16.70.186 172.16.70.187

Rsyslog服务端/客户端前提设置。

  1. [root@rsyslog-server ~]# rpm -qa | grep rsyslog
  2. [root@rsyslog-server ~]# yum install -y rsyslog
  3.  
  4. [root@rsyslog-server ~]# rsyslogd -v # 查看版本
  5. rsyslogd 8.24.0-57.el7_9, compiled with:
  6. PLATFORM: x86_64-redhat-linux-gnu
  7. PLATFORM (lsb_release -d):
  8. FEATURE_REGEXP: Yes
  9. GSSAPI Kerberos 5 support: Yes
  10. FEATURE_DEBUG (debug build, slow code): No
  11. 32bit Atomic operations supported: Yes
  12. 64bit Atomic operations supported: Yes
  13. memory allocator: system default
  14. Runtime Instrumentation (slow code): No
  15. uuid support: Yes
  16. Number of Bits in RainerScript integers: 64
  17.  
  18. See http://www.rsyslog.com for more information.
  19.  
  20. [root@rsyslog-server ~]# rpm -qc rsyslog # 相关配置文件
  21. /etc/logrotate.d/syslog
  22. /etc/rsyslog.conf
  23. /etc/sysconfig/rsyslog
  24.  
  25. [root@rsyslog-server ~]# setenforce 0
  26. [root@rsyslog-server rsyslog]# getenforce
  27. Permissive
  28.  
  29. # 防火墙允许tcp/udp的514端口
  30. [root@rsyslog-server ~]# firewall-cmd --permanent --add-port=514/udp
  31. [root@rsyslog-server ~]# firewall-cmd --permanent --add-port=514/tcp
  32. [root@rsyslog-server ~]# firewall-cmd --reload
  33. [root@rsyslog-server ~]# firewall-cmd --list-all
  34. public (active)
  35. target: default
  36. icmp-block-inversion: no
  37. interfaces: ens33
  38. sources:
  39. services: ssh dhcpv6-client
  40. ports: 514/tcp 514/udp
  41. protocols:
  42. masquerade: no
  43. forward-ports:
  44. source-ports:
  45. icmp-blocks:
  46. rich rules:

 默认/etc/rsyslog.conf详解。注:rsyslog官方文档:https://www.rsyslog.com/doc/v8-stable/index.html

  1. # rsyslog v5 configuration file
  2.  
  3. # For more information see /usr/share/doc/rsyslog-*/rsyslog_conf.html
  4. # If you experience problems, see http://www.rsyslog.com/doc/troubleshoot.html
  5.  
  6. #### MODULES #### # 模块
  7.  
  8. $ModLoad imuxsock # provides support for local system logging (e.g. via logger command) # 支持本地系统日志记录(例如通过logger命令)
  9. $ModLoad imjournal # provides access to the systemd journal  # 提供对systemd日志的访问
  10. #$ModLoad imklog # provides kernel logging support (previously done by rklogd) # 提供内核日志记录支持(以前由rklogd完成)
  11. #$ModLoad immark # provides --MARK-- message capability # 提供了--MARK--消息功能
  12.  
  13. # Provides UDP syslog reception # 提供UDP系统日志接收
  14. #$ModLoad imudp
  15. #$UDPServerRun 514
  16.  
  17. # Provides TCP syslog reception # 提供TCP系统日志接收
  18. #$ModLoad imtcp
  19. #$InputTCPServerRun 514
  20.  
  21.  
  22. #### GLOBAL DIRECTIVES #### # 全局设置
  23.  
  24. # Where to place auxiliary files ; 辅助文件路径
  25. $WorkDirectory /var/lib/rsyslog
  26.  
  27. # Use default timestamp format # 使用默认的时间戳格式
  28. $ActionFileDefaultTemplate RSYSLOG_TraditionalFileFormat
  29.  
  30. # File syncing capability is disabled by default. This feature is usually not required, # 文件同步功能默认是关闭的。这个功能通常不是必需的
  31. # not useful and an extreme performance hit
  32. #$ActionFileEnableSync on
  33.  
  34. # Include all config files in /etc/rsyslog.d/ # 将所有配置文件包含在/etc/rsyslog.d/中
  35. $IncludeConfig /etc/rsyslog.d/*.conf
  36.  
  37. # Turn off message reception via local log socket;  # 关闭本地日志消息,使用imjournal
  38. # local messages are retrieved through imjournal now.
  39. $OmitLocalLogging on
  40.  
  41. # File to store the position in the journal # 存放日志文件位置
  42. $IMJournalStateFile imjournal.state
  43.  
  44.  
  45. #### RULES #### # 规则
  46.  
  47. # Log all kernel messages to the console. # 将所有内核消息记录到控制台
  48. # Logging much else clutters up the screen.
  49. #kern.* /dev/console
  50.  
  51. # Log anything (except mail) of level info or higher. # 记录级别信息或更高级别的任何信息(邮件除外)
  52. # Don't log private authentication messages! # 不要记录私人认证信息!
  53. *.info;mail.none;authpriv.none;cron.none /var/log/messages
  54. # 记录info级别的日志信息 排除mail authpriv cron
  55. # The authpriv file has restricted access. # authpriv文件具有受限制的访问权限。
  56. authpriv.* /var/log/secure
  57.  
  58. # Log all the mail messages in one place. # 将所有的邮件记录在一个地方。
  59. mail.* -/var/log/maillog
  60. # -/var/log/maillog 前面"-"是:代表异步写入,邮件量大占I/O在系统不忙时做
  61.  
  62. # Log cron stuff # 日志计划任务的东西
  63. cron.* /var/log/cron
  64.  
  65. # Everybody gets emergency messages # 每用户都得到紧急消息
  66. *.emerg *
  67.  
  68. # Save news errors of level crit and higher in a special file.  # 保存级别更高的错误信息的文件
  69. uucp,news.crit /var/log/spooler
  70.  
  71. # Save boot messages also to boot.log # 将启动信息保存到boot.log 只记录当前系统启动日志
  72. local7.* /var/log/boot.log
  73.  
  74.  
  75. # ### begin forwarding rule ### # 开始转发规则
  76. # The statement between the begin ... end define a SINGLE forwarding
  77. # rule. They belong together, do NOT split them. If you create multiple
  78. # forwarding rules, duplicate the whole block!
  79. # Remote Logging (we use TCP for reliable delivery)
  80. #
  81. # An on-disk queue is created for this action. If the remote host is
  82. # down, messages are spooled to disk and sent when it is up again.
  83. #$WorkDirectory /var/lib/rsyslog # where to place spool files
  84. #$ActionQueueFileName fwdRule1 # unique name prefix for spool files
  85. #$ActionQueueMaxDiskSpace 1g # 1gb space limit (use as much as possible)
  86. #$ActionQueueSaveOnShutdown on # save messages to disk on shutdown
  87. #$ActionQueueType LinkedList # run asynchronously
  88. #$ActionResumeRetryCount -1 # infinite retries if host is down
  89. # remote host is: name/ip:port, e.g. 192.168.0.1:514, port optional
  90. #*.* @@remote-host:514
  91. # ### end of the forwarding rule ### 转发规则结束

 情景一:收集主机的crond,history的日志转发到rsyslog服务端上做备份。

  1. 步骤1.Rsyslog服务端操作
  2. [root@rsyslog-server ~]# cp /etc/rsyslog.conf /etc/rsyslog.conf_bak
  3. [root@rsyslog-server ~]# cat /etc/rsyslog.conf
  4. #### MODULES ####
  5. $ModLoad imuxsock # provides support for local system logging (e.g. via logger command)
  6. $ModLoad imjournal # provides access to the systemd journal
  7. # 开启udp 514
  8. $ModLoad imudp
  9. $UDPServerRun 514
  10. # 开启tcp 514
  11. $ModLoad imtcp
  12. $InputTCPServerRun 514
  13.  
  14.  
  15. #### GLOBAL DIRECTIVES ####
  16. $WorkDirectory /var/lib/rsyslog
  17. $ActionFileDefaultTemplate RSYSLOG_TraditionalFileFormat
  18. $IncludeConfig /etc/rsyslog.d/*.conf
  19. $OmitLocalLogging on
  20. $IMJournalStateFile imjournal.state
  21.  
  22.  
  23. #### RULES ####
  24. *.info;mail.none;authpriv.none;cron.none /var/log/messages
  25. authpriv.* /var/log/secure
  26. mail.* -/var/log/maillog
  27. cron.* /var/log/cron
  28. *.emerg :omusrmsg:*
  29. uucp,news.crit /var/log/spooler
  30. local7.* /var/log/boot.log
  31.  
  32. # 新增内容
  33. $template local1_path, "/data/rsyslog/%FROMHOST-IP%/history/%$YEAR%-%$MONTH%-%$DAY%.log"
  34. if $fromhost-ip != '127.0.0.1' and $syslogfacility-text == 'local1' then ?local1_path
  35. & ~
  36.  
  37. $template remote_path, "/data/rsyslog/%FROMHOST-IP%/%syslogfacility-text%/%$YEAR%-%$MONTH%-%$DAY%.log"
  38. if $fromhost-ip != '127.0.0.1' then ?remote_path
  39. & ~
  40.  
  41. # 验证配置文件是否正确
  42. [root@rsyslog-server ~]# rsyslogd -f /etc/rsyslog.conf -N8    //其中,-N后面的数值代表rsyslog的版本。
  43.  
  44. 配置解析:
  45.   格式::
  46.     日志设备(类型).(连接符号)日志级别 日志处理方式(action)
  47. 1.日志级别
  48. debug 有调式信息的,日志信息最多
  49. info 一般信息的日志,最常用
  50. notice 最具有重要性的普通条件的信息
  51. warning 警告级别
  52. err 错误级别,阻止某个功能或者模块不能正常工作的信息
  53. crit 严重级别,阻止整个系统或者整个软件不能正常工作的信息
  54. alert 需要立刻修改的信息
  55. emerg 内核崩溃等严重信息
  56. none 什么都不记录
  57.    local 1~7 自定义的日志设备
  58. 从上到下,级别从低到高,记录的信息越来越少
  59.  
  60. 2.连接符号
  61. .xxx :表示大于等于xxx级别的信息
  62. .=xxx:表示等于xxx级别的信息
  63. .!xxx:表示在xxx之外的等级的信息
  64.  
  65. 3.Actions
  66. 记录到普通文件或设备文件:
  67. . /var/log/file.log # 绝对路径
  68. . /dev/pts/0
  69. logger 命令用于产生日志: logger -p local3.info 'KadeFor is testing the rsyslog and logger'
  70.   转发到远程::
  71. . @172.16.0.1 # 使用UDP协议转发到172.16.0.1的514(默认)端口
  72. . @@172.16.0.1:10514 # 使用TCP协议转发到172.16.0.1的10514(默认)端口
  73.  
  74. 发送给用户(需要在线才能收到)::
  75. . root
  76. . root,kadefor,up01 # 使用,号分隔多个用户
  77. . * # *号表示所有在线用户
  78.  
  79. 忽略,丢弃::
  80. local3.* ~ # 忽略所有local3类型的所有级别的日志
  81.  
  82. 执行脚本::
  83. local3.* ^/tmp/a.sh # ^号后跟可执行脚本或程序的绝对路径
  84. # 日志内容可以作为脚本的第一个参数. 可用来触发报警
  85. 注意: 日志记录的顺序有先后关系!
  86.  
  87.  自定义模板
  88.   $template定义了两个模板,名称分别为local1_path和remote_path,模板名称后面指定了将消息保存到的日志文件的路径。
  89.   if开头的指令是基于表达式的过滤器。第一条if指令的意思是,如果日志消息的来源IP地址不是本机,且消息的syslogfacility-text为local1,那么将这条消息写入由模板local1_path对应的文件。
  90.   & ~的含义是让满足上面过滤器条件的消息不再匹配后续的规则。默认情况下,日志消息会按顺序匹配rsyslog.conf中的每条规则。& ~在这里会让消息跳过后面的规则,这样这条消息就不会再被写入其他的日志文件了。
  91.   第二条if开头的指令将来自于本机之外的所有日志消息(由于前面的& ~,满足这个条件的只有auth、authpriv和cron消息)写入remote_path所对应的文件。
  92.  
  93. [root@rsyslog-server ~]# systemctl restart rsyslog
  94. [root@rsyslog-server ~]# netstat -auntpl | grep rsyslog
  95. tcp 0 0 0.0.0.0:514 0.0.0.0:* LISTEN 1351/rsyslogd
  96. tcp6 0 0 :::514 :::* LISTEN 1351/rsyslogd
  97. udp 0 0 0.0.0.0:514 0.0.0.0:* 1351/rsyslogd
  98. udp6 0 0 :::514 :::* 1351/rsyslogd
  99. [root@rsyslog-server ~]# mkdir -p /data/rsyslog/
  100. [root@rsyslog-server ~]# ls -ld /data/rsyslog/
  101. drwxr-xr-x. 2 root root 6 Jun 9 10:06 /data/rsyslog
  102.  
  103.  
  104. 步骤2.rsyslog客户端操作
  105. root@rsyslog-client ~]# cp /etc/rsyslog.conf /etc/rsyslog.conf_bak
  106.  
  107. # 在/etc/rsyslog.conf最尾行添加内容
  108. [root@rsyslog-client ~]# sed -i '$acron.* @@172.16.70.186:514\nlocal1.notice @@172.16.70.186:514' /etc/rsyslog.conf
  109. [root@rsyslog-client ~]# tail -2 /etc/rsyslog.conf
  110. cron.* @@172.16.70.186:514
  111. local1.notice @@172.16.70.186:514
  112.  
  113. [root@rsyslog-client ~]#rsyslogd -f /etc/rsyslog.conf -N8
  114.  
  115. # 在/etc/crontab最尾行添加内容
  116. [root@rsyslog-client ~]# sed -i '$a* * * * * root ls -l /etc /var/log' /etc/crontab
  117. [root@rsyslog-client ~]# tail -1 /etc/crontab
  118. * * * * * root ls -l /etc /var/log
  119.  
  120. # 在/etc/profile最尾行添加内容
  121. [root@rsyslog-client ~]# tail -2 /etc/profile
  122. export HISTTIMEFORMAT
  123. export PROMPT_COMMAND='{ command=$(history 1 | { read x y; echo $y; }); logger -p local1.notice -t bash -i "user=$USER,ppid=$PPID,from=$SSH_CLIENT,pwd=$PWD,command:$command"; }'
  124. [root@rsyslog-client ~]# source /etc/profile
  125.  
  126. [root@rsyslog-client ~]# systemctl restart crond rsyslog
  127. # history Server端验证作用
  128. [root@rsyslog-client ~]# ls -l /etc/
  129. [root@rsyslog-client ~]# ls -la /var/log/
  130.  
  131.  
  132. 步骤3.rsyslog服务端验证
  133. [root@rsyslog-server ~]# cd /data/rsyslog/
  134. [root@rsyslog-server rsyslog]# tree ./
  135. ./
  136. └── 172.16.70.187
  137. ├── cron
  138. │ └── 2021-06-11.log
  139. └── history
  140. └── 2021-06-11.log
  141. 若无生成log,Server端,Client端各重启几遍rsyslog即可。
  142.  
  143. [root@rsyslog-server rsyslog]# tail 172.16.70.187/cron/2021-06-11.log
  144. Jun 11 10:48:01 rsyslog-client CROND[9085]: (root) CMD (ls -l /etc /var/log)
  145. Jun 11 10:49:01 rsyslog-client CROND[9090]: (root) CMD (ls -l /etc /var/log)
  146. Jun 11 10:50:01 rsyslog-client CROND[9095]: (root) CMD (ls -l /etc /var/log)
  147. Jun 11 10:51:01 rsyslog-client CROND[9100]: (root) CMD (ls -l /etc /var/log)
  148.  
  149. [root@rsyslog-server rsyslog]# tail 172.16.70.187/history/2021-06-11.log
  150. Jun 11 10:54:07 rsyslog-client bash[9158]: user=root,ppid=1287,from=172.16.70.187 11930 22,pwd=/root,command:ls -l /etc/
  151. Jun 11 10:54:14 rsyslog-client bash[9163]: user=root,ppid=1287,from=172.16.70.187 11930 22,pwd=/root,command:ls -la /var/log/

 情景二:收集主机的应用服务的日志转发到rsyslog服务端上做备份。

  1. 步骤1.Rsyslog服务端
  2. [root@rsyslog-server ~]# cat /etc/rsyslog.conf
  3. #### MODULES ####
  4. $ModLoad imuxsock # provides support for local system logging (e.g. via logger command)
  5. $ModLoad imjournal # provides access to the systemd journal
  6.  
  7. $ModLoad imudp
  8. $UDPServerRun 514
  9.  
  10. $ModLoad imtcp
  11. $InputTCPServerRun 514
  12.  
  13.  
  14. #### GLOBAL DIRECTIVES ####
  15. $WorkDirectory /var/lib/rsyslog
  16. $ActionFileDefaultTemplate RSYSLOG_TraditionalFileFormat
  17. $IncludeConfig /etc/rsyslog.d/*.conf
  18. $OmitLocalLogging on
  19. $IMJournalStateFile imjournal.state
  20.  
  21.  
  22. #### RULES ####
  23. *.info;mail.none;authpriv.none;cron.none /var/log/messages
  24. authpriv.* /var/log/secure
  25. mail.* -/var/log/maillog
  26. cron.* /var/log/cron
  27. *.emerg :omusrmsg:*
  28. uucp,news.crit /var/log/spooler
  29. local7.* /var/log/boot.log
  30.  
  31. $template HttpAccess,"%msg%\n"
  32. $template AccessFile,"/data/rsyslog/%FROMHOST-IP%/httpd/http-access.log"
  33. $template HttpError,"%msg%\n"
  34. $template ErrorFile,"/data/rsyslog/%FROMHOST-IP%/httpd/http-error.log"
  35.  
  36. user.* ?AccessFile;HttpAccess
  37. user.* ?ErrorFile;ErrorFile
  38.  
  39. [root@rsyslog-server ~]# systemctl restart rsyslog
  40. [root@rsyslog-server ~]# mkdir /data/rsyslog
  41.  
  42.  
  43. 步骤2.Rsyslog客户端
  44. [root@rsyslog-client ~]# yum install -y hpptd
  45. [root@rsyslog-client ~]# systemctl start httpd
  46. [root@rsyslog-client ~]# netstat -nutpl | grep httpd
  47. tcp6 0 0 :::80 :::* LISTEN 9225/httpd
  48. # apache日志文件路径
  49. [root@rsyslog-client ~]# ls -l /var/log/httpd/*
  50. -rw-r--r--. 1 root root 43059 Jun 11 16:38 /var/log/httpd/access_log
  51. -rw-r--r--. 1 root root 8823 Jun 11 16:38 /var/log/httpd/error_log
  52.  
  53. [root@rsyslog-client ~]# cp /etc/rsyslog.conf /etc/rsyslog.conf_bak
  54. [root@rsyslog-client ~]# vim /etc/rsyslog.conf
  55. ....
  56. # 最末行添加
  57. $ModLoad imfile    # 加载imfile模块
  58.  
  59. $InputFileName /var/log/httpd/access_log    
  60. $InputFileTag apache_access           
  61. $InputFileStateFile apache-access       
  62.  
  63. $InputFileName var/log/httpd/error_log
  64. $InputFileTag apache_error
  65. $InputFileStateFile apache-error
  66.  
  67. $InputFileSeverity info
  68. $InputFileFacility user
  69. $InputFilePollInterval 1
  70. $InputFilePersistStateInterval 1
  71. $InputRunFileMonitor
  72. user.* @172.16.70.186
  73.  
  74. 配置解析:
  75.   $InputFileName           # 访问应用日志文件路径
  76.   $InputFileTag            # tag 标签,可用作过滤或分类 
  77.   $InputFileStateFile        # 状态文件,只需要指定文件名,程序会在工作目录$WorkDirectory下创建指定文件
  78.  
  79.   $InputFileSeverity         # 日志级别
  80.   $InputFileFacility         # 日志类型,user代表应用日志
  81.   $InputFilePollInterval       # 频率轮询新数据,单位秒
  82.   $InputFilePersistStateInterval  # 写入状态文件时间间隔,单位秒
  83.   $InputRunFileMonitor        # 激活当前监视器
  84.   user.* @172.16.70.186       # 接收服务器IP
  85.  
  86. root@rsyslog-client ~]# systemctl restart rsyslog
  87.  
  88.  
  89. 步骤3.rsyslog服务端验证
  90. 在任意Window 10主机浏览器访问rsyslog客户端apache服务
  91.  http://172.16.70.187    # 正确访问会生成access.log
  92.  http://172.16.70.187:808  # 错误访问会生成error.log
  93.  
  94. [root@rsyslog-server ~]# cd /data/rsyslog
  95. [root@rsyslog-server rsyslog]# tree
  96. .
  97. └── 172.16.70.187
  98. └── httpd
  99. ├── http-access.log
  100. └── http-error.log
  101.  
  102. 注:若无生成log,Server端,Client端各重启几遍rsyslog即可。
 
 
 
 
 
 

版权声明:本文为zhangwencheng原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://www.cnblogs.com/zhangwencheng/p/14862190.html