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.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所示:
基于设施/优先级的过滤器是最常用的方法,语法如下:FACILITY.PRIORITY,如图3所示,为rsyslog的默认规则。
基础格式,即最简单的配置格式,没有任何多余的功能,配置中默认的内容即为此格式。
# 邮件的所有信息存在/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所示,非加密方式与加密方式客户端服务端的对比:
下面我来介绍下如何加密:
步骤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所示:
应用场景2:对多台服务器日志进行汇聚存储后,经过LogCheck对日志文件的监控和审查,检查和过滤系统日志文件中的特定事件或错误,通过mail或其他形式进行反馈;同时经过LogAnalyzer对体制进行分析和可视化各种日志数据。并提供实时搜索、过滤、报表和图表等功能,展示给用户。如图2所示:
Part 05、 总结
rsyslog是一种功能强大的日志管理工具,具有可靠性、灵活性和可扩展性。无论是企业日志管理、应用故障排除还是安全事件监控,rsyslog都能提供强大的日志收集、过滤、处理和存储功能。通过使用 rsyslog,可以更高效地管理日志数据,提高系统可用性、性能和安全性。