客户端rsyslog配置文件详解

最近再开发一个rsyslog的接收服务端,支持udp,tcp和tls三种协议。所以去仔细研究了一下rsyslog.conf的配置文件,下面来详细说一下。

因为我这儿重点在于怎么将信息发送到我的服务器,所以只讲了一些发送应该配置的内容,至于rsyslog.conf配置的详细内容,大家可以去rsyslog的官网自行查看。

准备

系统: centos 7.4

rsyslog版本: 8.24.0

UDP和TCP

udp和tcp都比较简单

UDP

cd /etc/rsyslog.d
vim udp.conf # udp.conf
$template myFormat,"192.168.82.129_34 %syslogpriority% %timestamp% %hostname% %syslogtag% %msg%"
# *.* /var/log/tls
*.* @192.168.92.1:9898;myFormat

TCP

cd /etc/rsyslog.d
vim udp.conf # tcp.conf
$template myFormat,"192.168.82.129_34 %syslogpriority% %timestamp% %hostname% %syslogtag% %msg%"
*.* @@192.168.92.1:9898;myFormat

现在来讲一下各个参数的意义

  • template:这是配置的模板,rsyslog发送的日志信息都会按照这个模板的格式来发送
  • *.* :将本机所有的日志全部发送
  • @:udp为一个“@,tcp为两个“@@”
  • 192.168.92.1:我的服务端地址
  • 9898:我指定的服务端用哪个端口来接收信息
  • ;myFormat:设定按这个模板来发送信息,如果你不设置,会按照默认的格式来发送

最后别忘记重启下rsyslog服务:

# centos7
systemctl restart rsyslog.service

TLS

TLS才是真正麻烦的地方,让我纠结了很久。

首先你想使用tls协议必须要有一个证书还有密钥来进行加密。这个证书怎么生成我下次会开一个单章来讲(因为太长了)。然后我这儿现在是有一个.crt的文件(文章末尾会提供下载地址,如果想偷懒可以直接用我这个):

server.crt

然后在官网给出的client端中的配置是这么写的:

# make gtls driver the default
$DefaultNetstreamDriver gtls # certificate files
$DefaultNetstreamDriverCAFile /rsyslog/protected/ca.pem
$DefaultNetstreamDriverCertFile /rsyslog/protected/machine-cert.pem
$DefaultNetstreamDriverKeyFile /rsyslog/protected/machine-key.pem $ActionSendStreamDriverAuthMode x509/name
$ActionSendStreamDriverPermittedPeer central.example.net
$ActionSendStreamDriverMode 1 # run driver in TLS-only mode
*.* @@central.example.net:10514 # forward everything to remote server

可以大致分为三块:

  • 第一块设置使用gtls
  • 第二块设置证书
  • 第三块设置发送信息

然后我就按照自己的需求改成了这个样子:

cd /etc/rsyslog.d
vim tls.conf # tls.conf
$DefaultNetstreamDriver gtls $DefaultNetstreamDriverCAFile /root/test/server.crt $ActionSendStreamDriverAuthMode x509/name
$ActionSendStreamDriverPermittedPeer 192.168.92.1
$ActionSendStreamDriverMode 1
$template myFormat,"unique %syslogpriority% %timestamp% %hostname% %syslogtag% %msg%"
*.* @@192.168.92.1:9898;myFormat

重启服务后发现什么都没有,去查看日志/var/log/message,找到一条可能是问题的原因的记录:

Dec  1 22:18:16 here rsyslogd-2066: could not load module '/usr/lib/rsyslog/lmnsd_gtls.so', dlopen: /usr/lib/rsyslog/lmnsd_gtls.so: cannot open shared object file: No such file or directory
[try http://www.rsyslog.com/e/2066 ]
Dec 1 22:18:56 here rsyslogd-2066: last message repeated 4 times

然后去看了看这个/usr/lib/rsyslog/lmnsd_gtls.so到底是什么东西,在这儿找到了答案 could not load module '/usr/lib/rsyslog/lmnsd_gtls.so',原来是它这儿少了一些包和依赖,需要去安装一下:

sudo yum install -y rsyslog-gnutls

问题解决。

然后再运行,发现还是什么日志都没有,然后去查看记录,也没有报错,这时候就很纳闷了。这时候只能又去面向google编程了,翻了一大圈翻到了这篇文章 gtls Network Stream Driver,里面对于配置的第三大部分做了详细的解答。贴上一段问题所在:

Supported Authentication Modes

  • anon - anonymous authentication as described in IETF's draft-ietf-syslog-transport-tls-12 Internet draft
  • x509/fingerprint - certificate fingerprint authentication as described in IETF's draft-ietf-syslog-transport-tls-12 Internet draft
  • x509/certvalid - certificate validation only
  • x509/name - certificate validation and subject name authentication as described in IETF's draft-ietf-syslog-transport-tls-12 Internet draft

意思就是说,x509/name这种模式是需要进行身份认证的,但我这儿提供的证书(即server.crt)是一个公用的证书,这就冲突了,所以只能用anon的模式:

$ActionSendStreamDriverAuthMode anon

修改完成,重启服务,信息接收成功,大功搞定。

最终的crt.conf文件:

# tls.conf
$DefaultNetstreamDriver gtls $DefaultNetstreamDriverCAFile /root/test/server.crt $ActionSendStreamDriverAuthMode anon
$ActionSendStreamDriverMode 1
$template myFormat,"unique %syslogpriority% %timestamp% %hostname% %syslogtag% %msg%"
*.* @@192.168.92.1:9898;myFormat

附件

官方文档:https://www.rsyslog.com/doc/v8-stable/tutorials/tls_cert_summary.html

server.crt文件:https://pan.baidu.com/s/1MyZmTWq03-Nslrt4jlA3GQ

服务端项目:https://github.com/yisany/syslog-server

最新文章

  1. 1.44tft
  2. 【如何快速的开发一个完整的iOS直播app】(采集篇)
  3. Tree
  4. jquery中json数据转换为字典
  5. [o] duplicate column name: _id 问题解决
  6. Perf 简介
  7. Javascript模块化编程:AMD规范及require.js用法【转】 - loheonly的笔记 - 前端网(W3Cfuns)
  8. xshell安装运行时提示缺少mfc110.dll
  9. 尝试在CentOS7.2上编译安装Swift
  10. 《深入理解java虚拟机》 - 需要一本书来融汇贯通你的经验(下)
  11. CentOS6.5下安装Apache2.4+PHP7
  12. 延时、输入输出接口P0~P3
  13. vscode卡死问题
  14. 循序渐进学.Net Core Web Api开发系列【6】:配置文件appsettings.json
  15. webstorm快捷键汇总
  16. Neo4j在Centos7下的安装笔记
  17. fb bin_debug下的swf不见了
  18. PS想象的力量无限大,设计师的脑洞无限大!
  19. MFRC522开发笔记
  20. 可能是全网首个支持阿里云Elasticsearch Xapck鉴权的Skywalking

热门文章

  1. bzoj 2626: JZPFAR k-D树
  2. POJ3660(foyld闭包问题)
  3. POJ1195(二维树状数组)
  4. 七 vue学习 async/await
  5. [CentOS] 结合Nginx部署DotNetCore的demo项目【转载】
  6. WPF win7+vs2010开发的打印功能,怎么在XP系统上无法打印
  7. IIS PHP的Loaded Configuration File为空解决[转]
  8. Newtonsoft.Json序列化字符串-格式化和时间格式问题
  9. LeetCode: 669 Trim a Binary Search Tree(easy)
  10. Weekly Contest 112