浅谈rsyslog日志服务及应用

开源
rsyslog作为一个功能强大的开源工具,因其可靠性、灵活性和可扩展性而成为许多组织和开发人员的首选。

Labs 导读

在现代计算和网络环境中,日志管理变得至关重要,尤其是在企业日志管理、应用故障排除以及安全事件监控中。无论是在企业内部的服务器集群中,还是在公有云中的分布式应用系统中,分析日志数据对于监控、故障排除、性能优化和安全性都至关重要。

Part 01、 rsyslog介绍 

1.1 rsyslog日志服务简介

rsyslog (rocket-fast system for log)是基于syslog协议完成系统日志的处理转发,它是一个极速的日志处理系统,性能可以达到每秒百万级别。它提供高性能、极好的安全功能和模块化设计。

特性:

①高性能:rsyslog采用了高效的线程模型和异步处理机制,能够快速而稳定地处理大量的日志数据。

②灵活强大:rsyslog支持多种输入和输出模块,可以与各种设备和系统集成,例如syslog、tcp、udp、tls等。同时,rsyslog还支持多种过滤和处理规则,可以根据需求定制化日志的存储、转发和处理方式。

③可扩展性:rsyslog具有良好的可扩展性,可以根据需求进行定制开发和插件扩展,满足不同场景下的日志管理需求。

④安全性:rsyslog支持加密传输和认证机制,保证日志数据的安全性和完整性。

图1 rsyslog架构图

如图1所示,rsyslog的消息流是从输入模块->预处理模块->主队列->过滤模块- >执行队列->输出模块。

1.2 rsyslog基本配置

rsyslog引入了facility(设施)的概念,也就是 rsyslog服务进程所要接收日志的各代理,这些代理负责收集对应的日志信息;常用的日志设施有如下几种:

auth , authpriv , cron , daemon , kern , lpr , mail , news , syslog , user, ftp , uucp , security, local0 ~ local7 ;另外系统日志还有priority优先级概念,可用的优先级包含 debug (7) , info (6) , notice (5) , warning (4) , err (3) , crit (2) , alert (1) , emerg (0) ,如图2所示:

图2 rsyslog的设施/优先级图

基于设施/优先级的过滤器是最常用的方法,语法如下:FACILITY.PRIORITY,如图3所示,为rsyslog的默认规则。

图3 rsyslog默认rules图

基础格式,即最简单的配置格式,没有任何多余的功能,配置中默认的内容即为此格式。

# 邮件的所有信息存在/var/log/maillog;这里有一个“-”符号表示是使用异步的方式记录
mail.*                                   -/var/log/maillog
# 邮件的错误信息转发到server.example.com,使用tcp连接(@@)
mail.error                                @@server.example.com

高级格式,支持更多模块,更多参数,更多选项,并且允许对日志格式,内容等进行自定义修改的格式。

# 邮件的所有信息存在/var/log/maillog;这里有一个“-”符号表示是使用异步的方式记录
mail.* action(type="omfile" File="/var/log/maillog")
# 邮件的错误信息转发到server.example.com,使用tcp连接(@@)
mail.error  action(type="omfwd" Target="server.example.com" Port="10514" Protocol="tcp")

rsyslog.conf中还包括用于指定日志的输入、输出、过滤、格式化等操作,以下是rsyslog.conf配置文件的详解:

1.2.1 输入模块配置

rsyslog.conf文件中的输入模块用于指定从哪些源获取日志信息,包括本地日志、远程日志、系统日志等。常用的输入模块包括:

  • imuxsock: 用于从Unix域套接字读取本地日志信息。
  • imudp: 用于从UDP协议接收远程日志信息。
  • imtcp: 用于从TCP协议接收远程日志信息。
  • imiournal: 用于从systemd-iournald服务读取系统日志信息。

1.2.2 过滤模块配置

rsyslog.conf文件中的过滤模块用于根据规则过滤日志信息,只保留符合条件的日志信息。常用的过滤模块包括:

  • if: 用于根据条件过滤日志信息。
  • regex: 用于根据正则表达式过滤日志信息。
  • property: 用于根据属性过滤日志信息。

1.2.3 输出模块配置

rsyslog.conf文件中的输出模块用于指定将日志信息输出到哪些目标,包括文件、数据库、网络等。常用的输出模块包括:

  • omfile: 用于将日志信息输出到文件。
  • ommysgl: 用于将日志信息输出到MySQL数据库。
  • omelasticsearch: 用于将日志信息输出到Elasticsearch搜索引警。
  • omfwd: 用于将日志信息转发到远程rsyslog服务器。

1.2.4 格式化模块配置

rsyslg.conf文件中的格式化模块用于指定日志信息的格式,包括时间、主机名、进程名、日志级别等。常用的格式化模块包括:

  • template: 用于定义日志信息的格式模板。
  • property: 用于指定日志信息中的属性,如时间、主机名、进程名等。
  • msg: 用于指定日志信息的内容。

Part 02、  rsyslog转发 

2.1 客户端配置

对于客户端,我们需要在rsyslog的配置文件中进行一些设置。首先,我们需要指定要发送的目标主机和端口号。这可以通过设置*.* @@<目标主机>:<端口号>来实现,如下所示。

*.* @@192.168.75.137:514             # tcp 协议
*.* @192.168.75.137:514               # udp 协议

接着,我们可以设置一些过滤条件,以便只将某些特定类型的日志消息发送到目标系统。这可以通过设置类似于if $msg contains '<关键词>' then @@<目标主机>:<端口号>的语句来实现。最后,我们还可以设置一些其他的参数,如发送协议、超时时间等等。

2.2 服务端配置

对于服务端,我们需要配置rsyslog服务器来接收和处理转发过来的日志消息。首先,我们需要设置rsyslog服务器监听的端口号,接着,我们需要在配置文件中指定处理转发过来的日志消息的方式,如将其志消息保存到本地文件中、存储到数据库中、发送到其他系统等等。这可以通过在配置文件中设置类似于*.* /var/log/file的语句来实现。

# provides UDP syslog reception
$ModLoad imudp
$UDPServerRun 514
# provides TCP syslog reception
#$ModLoad imtcp
#$InputTCPServerRun 514
$AllowedSender tcp, 192.168.34.100/24
$template RemoteLogs,"/var/log/%fromhost-ip%_%$YEAR%-%$MONTH%-%$DAY%.log"
*.*  ?RemoteLogs
  • 可以通过$AllowedSender控制只允许192.168.34.0网段内的主机以 tcp 协议来传输。
  • $template Remote定义了模板,保存的路径和文件名均可自定义,同时也区分了不同主机的日志。
  • $InputTCPServerRun 514开启tcp,tcp和udp可以共存的。

Part 03、  rsyslog加密  

除了转发日志消息,rsyslog还提供了加密传输日志消息的功能。当我们需要在公共网络上传输敏感信息时,如个人身份信息、密码等等,加密传输就变得尤为重要。rsyslog提供了基于TLS/SSL协议的加密传输功能,可以保证日志消息在传输过程中的机密性和完整性。如图4所示,非加密方式与加密方式客户端服务端的对比:

图4 非加密方式与加密方式客户端服务端对比

下面我来介绍下如何加密:

步骤1:安装gnutls-utils

yum install gnutls-utils

步骤2:生成证书和密钥

certtool --generate-privkey --outfile ca-key.pem --bits 2048
certtool --generate-self-signed --load-privkey ca-key.pem --outfile ca.pem --template ca.cfg

步骤3:生成&分发各机器需要的证书

certtool --generate-privkey --outfile key.pem --sec-param 2048
certtool --generate-request --load-privkey key.pem --outfile request.pem
certtool --generate-certificate --load-request request.pem --outfile cert.pem --load-ca-certificate ca.pem --load-ca-privkey ca-key.pem

步骤4:配置rsyslog

$ DefaultNetstreamDriver gtls
#证书文件 
$DefaultNetstreamDriverCAFile="/etc/rsyslog.d/gnutls/ca.pem"
$DefaultNetstreamDriverCertFile="/etc/rsyslog.d/gnutls/server-cert.pem"
$DefaultNetstreamDriverKeyFile="/etc/rsyslog.d/gnutls/server-key.pem"

步骤5:重启rsyslog服务

service rsyslog restart

Part 04、  应用场景 

应用场景1:对多台服务器日志进行汇聚,通过Kafka+ELK(Elasticsearch、Logstash和Kibana)的形式对日志进行过滤、存储、分析、提供复杂的搜索和可视化功能,如图1所示:

图5 应用场景1

应用场景2:对多台服务器日志进行汇聚存储后,经过LogCheck对日志文件的监控和审查,检查和过滤系统日志文件中的特定事件或错误,通过mail或其他形式进行反馈;同时经过LogAnalyzer对体制进行分析和可视化各种日志数据。并提供实时搜索、过滤、报表和图表等功能,展示给用户。如图2所示:

图6 应用场景2

Part 05、  总结 

rsyslog是一种功能强大的日志管理工具,具有可靠性、灵活性和可扩展性。无论是企业日志管理、应用故障排除还是安全事件监控,rsyslog都能提供强大的日志收集、过滤、处理和存储功能。通过使用 rsyslog,可以更高效地管理日志数据,提高系统可用性、性能和安全性。

责任编辑:庞桂玉 来源: 移动Labs
相关推荐

2023-10-31 18:42:21

2009-07-01 13:54:03

JSP注释

2011-06-30 09:30:57

rsyslogLinux日志红帽企业级

2021-04-27 09:45:33

Nginx日志运维

2010-02-04 10:02:08

C++静态数据成员

2011-11-21 15:04:30

2018-04-04 10:14:18

LinuxRsyslog日志文件

2019-08-14 15:40:05

Web图片优化前端

2018-05-17 23:07:12

2011-05-04 10:47:40

打印技术染料热升华

2020-08-31 07:00:00

Android安卓日志分析

2023-06-18 19:26:10

蓝牙智能家居

2019-03-13 09:00:00

Web应用SPAJavaScript

2011-09-29 13:52:57

服务器HPC浪潮TS850

2011-11-21 16:45:26

2012-09-06 09:31:14

PHPmysqlpdo

2020-06-11 16:35:02

filebeatlogstash前端

2010-07-01 21:51:43

网络摄像机IP监控D-Link

2023-09-03 19:06:42

2010-07-22 12:09:42

Microsoft T
点赞
收藏

51CTO技术栈公众号