客戶端rsyslog配置文件詳解


客戶端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 x509/name $ActionSendStreamDriverMode 1 $template myFormat,"unique %syslogpriority% %timestamp% %hostname% %syslogtag% %msg%" *.* @@192.168.92.1:9898;myFormat


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM