【问题标题】:Rsyslog - logs not displayed on serverRsyslog - 日志未显示在服务器上
【发布时间】:2019-12-10 02:28:59
【问题描述】:

正在尝试配置Rsyslog 客户端以将日志发送到 Rsyslog 服务器。

两台机器都在 Centos7 上运行,Vagrant

查看下面每台机器的配置。

当我在客户端机器中登录时 - 它不会反映在服务器的日志中。

例如:

logger "Some message..."

但是当我将服务器的IP添加到命令中时:

logger -n 192.168.11.11 "Some message..."

我可以看到在服务器机器上正在创建一个带有客户端 IP 的目录:

[root@server log]# ls -la
total 200
drwxr-xr-x. 11 root   root     4096 Aug  1 12:02 .
drwxr-xr-x. 18 root   root      254 Jul 31 21:39 ..
drwx------.  2 root   root       25 Jul 31 22:18 192.168.11.22 <--- HERE
drwxr-xr-x.  2 root   root      191 Feb 28 20:54 anaconda
drwx------.  2 root   root       23 Jul 31 21:39 audit
-rw-------.  1 root   utmp        0 Aug  1 03:14 btmp
drwxr-xr-x.  2 chrony chrony      6 Apr 12  2018 chrony
-rw-------.  1 root   root      188 Jul 31 21:39 cron
-rw-r--r--.  1 root   root    26911 Aug  1 12:02 dmesg
-rw-r--r--.  1 root   root    26742 Jul 31 21:39 dmesg.old
-rw-r--r--.  1 root   root      374 Jul 31 21:47 firewalld
-rw-r--r--.  1 root   root   292292 Aug  1 12:12 lastlog
-rw-------.  1 root   root      198 Jul 31 21:39 maillog
.......
.......

其中有一个vagrant.log 文件,我可以在其中看到客户端的日志消息:

2019-08-01T13:00:06+00:00 192.168.11.22 vagrant: Some message...

问题:知道为什么我看不到客户端本地日志吗?

对于本次讨论:

  1. SELINUX 已禁用。
  2. This 没有帮助。

Rsyslog 配置

服务器IP:192.168.11.11.
客户端IP:192.168.11.22

两台机器都安装并启用了 rsyslog,并且在 /etc/rsyslog.conf 文件中具有以下 common 设置:

#### MODULES ####    
$ModLoad imuxsock 
$ModLoad imjournal

#Open port 514 For UDP    
$ModLoad imudp
$UDPServerRun 514

#### GLOBAL DIRECTIVES ####
$WorkDirectory /var/lib/rsyslog
$ActionFileDefaultTemplate RSYSLOG_TraditionalFileFormat
$IncludeConfig /etc/rsyslog.d/*.conf
$OmitLocalLogging on
$IMJournalStateFile imjournal.state

#### RULES ####
kern.*                                       /dev/console    
*.info;mail.none;authpriv.none;cron.none     /var/log/messages
authpriv.*                                   /var/log/secure    
local7.*                                     /var/log/boot.log

/etc/rsyslog.conf 文件中每台机器的添加。

服务器机器上:

## Rules for processing remote logs 
 $template RemoteLogs,"/var/log/%HOSTNAME%/%PROGRAMNAME%.log" 
 *.* ?RemoteLogs 
 & ~

客户端机器上我设置UDP转发到服务器的IP:

# ### begin forwarding rule ###
#UDP Forwarding
*. * @192.168.11.11:514 
# ### end of the forwarding rule ###

防火墙配置

服务器机器上 - 在防火墙上打开端口 514:

sudo firewall-cmd --permanent --add-port=514/udp
sudo firewall-cmd --reload

并验证:

[root@server /]#  sudo ss -tulnp | grep "rsyslog"

udp    UNCONN     0   0     *:514  *:*   users:(("rsyslogd",pid=2711,fd=3))
udp    UNCONN     0   0    :::514  :::*  users:(("rsyslogd",pid=2711,fd=4))

【问题讨论】:

    标签: logging centos firewall syslog rsyslog


    【解决方案1】:

    尝试删除客户端主机上*.之后的一个空白:
    *. * @192.168.11.11:514

    在远程主机上发送任何级别的日志的默认格式如下:
    *.* @remote-host:514

    然后用systemctl restart rsyslog重新启动客户端和服务器上的rsyslog服务并再次检查。


    编辑:

    从 cmets 粘贴 - 在解决问题的 syslog 服务器上完成的另外 2 个步骤:

    1. 评论服务器上的#### Rules #### 部分。

    2. ## Rules for processing remote logs 部分中删除&amp; ~

    【讨论】:

    • @Rotemya 请检查服务器的本地日志中是否有来自客户端的事件?以下一些提示可能会有所帮助: 1.确保配置文件的最后一个字符串是空白的。 2.在服务器的配置上:注释掉字符串&amp; ~并检查。 3.在服务器的配置上:尝试在处理远程日志的规则之后粘贴本地规则。
    • 谢谢@Alexey:关于“服务器的本地日志中是否有来自客户端的事件?”不是我看到的,你能指定哪个文件夹来'tail'吗? $ ~ 被删除。关于远程规则的放置 - 在我的配置中(在问题中指定)## 处理远程日志的规则部分放置在服务器的 rsyslog.conf 文件中,位于 GLOBAL DIRECTIVES 和 RULES 部分之前。
    • 您可以尝试以下步骤:1) 为了正确解析名称,请在主机上的 /etc/hosts 中添加记录并检查 ping 2) 将部分 Rules for processing remote log 放在部分 GLOBAL DIRECTIVES 之后并注释掉Rules 部分 2) 使用 systemctl restart rsyslog 重新启动服务器服务 3) 在客户端配置上指定:*.info @192.168.11.11:514 4) 使用 systemctl restart rsyslog 重新启动客户端服务 5) 检查服务器上的文件夹 /var/log,如果有文件夹具有 dns-name客户端(不是ip),可能有systemd.logrsyslog.log,是客户端发送的。
    • 谢谢@Alexey。根据您的所有说明,应将以下内容作为答案: 1. 服务器上的评论规则部分。 2.去掉&~。您可以将其添加到您的答案中吗?
    • @Rotemya,很高兴它有帮助。只是想问一下,您现在是否正在查看服务器生成的日志更新?
    【解决方案2】:

    感谢@Alexey 在两个关键点上帮助了我。

    我还会添加一些可能对其他人有帮助的有用点:

    1:首先检查两台机器的连通性。 例如,如果使用 vagrant 网络,请将两台机器置于可以互相看到(ping)的网络模式。例如,仅主机模式是可以的,但每台机器都在其隔离网络上的内部模式 - 将不起作用。

    2:仅在系统日志服务器中需要取消注释以下代码:

    $ModLoad imudp
    $UDPServerRun 514
    

    3:在客户端机器上 - 您可以注释所有 #### Rules #### 部分并将转发规则放在文件末尾 您可以指定内联转发(使用客户端 IP 或主机名,如果在 /etc/hosts 中配置):

    #### RULES ####
    kern.*                                       /dev/console    
    *.info;mail.none;authpriv.none;cron.none     @192.168.11.11:514 # <--- Like this
    auth,authpriv.*                              /var/log/secure    
    local7.*                                     /var/log/boot.log
    

    4:快速检查UDP连接是否成功:

    将身份验证日志转发到服务器(如auth,authpriv.* @192.168.11.11:514)。

    ssh进入客户端,切换用户,查看服务器/var/log/目录下的以下文件:

    sshd.log  su.log  sudo.log  systemd-logind.log
    

    5:注意 rsyslog 语法 - 例如,如果您使用 sed 作为配置脚本的一部分,以便替换和编辑配置文件中的行 - 请检查输出:

    在一行中指定 $template 部分:

    $template RemoteLogs,"/var/log/%HOSTNAME%/%PROGRAMNAME%.log" *.* ?RemoteLogs
    

    会导致错误:

    8 月 3 日 13:50:04 服务器 rsyslogd[5539]:错误:额外字符 配置行被忽略:'. ?RemoteLogs' [v8.24.0-34.el7]

    这是正确的语法 - 将规则拆分为新行(如果使用 sed 生成 - 只需添加 /n):

    $template RemoteLogs,"/var/log/%HOSTNAME%/%PROGRAMNAME%.log" 
    *.* ?RemoteLogs
    

    6:不要忘记 systemctl restart rsyslog 在每次更改 /etc/rsyslog.conf 之后。由于像 #5 这样的情况,请始终检查 rsyslog 状态:systemctl status rsyslog

    7:较新版本的 rsyslog(我认为是 5+)支持更简洁的语法 - 例如,它现在作为较新版本的 Ubuntu 的默认设置,但由于某种原因不在 Centos7 上。

    8:在系统日志服务器上 - 确保您的防火墙已启用并配置为在相关端口上接受 UDP(请参阅问题中的配置脚本):

    Chain IN_public_allow (1 references)
    target     prot opt source               destination         
    ACCEPT     tcp  --  anywhere             anywhere             tcp dpt:ssh ctstate NEW
    ACCEPT     udp  --  anywhere             anywhere             udp dpt:syslog ctstate NEW
    

    【讨论】:

      猜你喜欢
      • 2020-12-26
      • 1970-01-01
      • 2012-08-03
      • 1970-01-01
      • 2012-05-24
      • 2017-03-01
      • 2021-12-11
      • 1970-01-01
      • 2012-02-14
      相关资源
      最近更新 更多