zoukankan      html  css  js  c++  java
  • 客户端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
  • 相关阅读:
    区块链 超级节点什么鬼?
    堆排序--模版类
    梯度下降算法Python简单试验
    svn: Can't convert string from 'UTF-8' to native encoding
    常用加密算法比较
    快速排序结合插入排序
    无法解析的外部符号
    mysql 远程连接出错问题
    50个C/C++经典面试题
    设计算法找出字符串中重复出现最长的子串
  • 原文地址:https://www.cnblogs.com/zhengchunyuan/p/11262340.html
Copyright © 2011-2022 走看看