Rsyslog-日志未显示在服务器上

时间:2019-08-01 13:17:03

标签: logging centos firewall syslog rsyslog

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

两台机器都在Vagrant的Centos7上运行。

请参阅下面的每台计算机的配置。

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

例如:

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文件中具有以下常见设置:

#### 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))

2 个答案:

答案 0 :(得分:1)

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

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

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


编辑:

从评论中粘贴-在解决问题的syslog服务器上完成了另外两个步骤:

  1. 注释服务器上的#### Rules ####部分。

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

答案 1 :(得分:0)

@Alexey的信用帮助了我两个关键点。

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

1:首先,检查两台计算机的连接。 例如,如果使用无聊的网络,则将两台计算机置于它们可以互相看到(ping)的网络模式。例如,仅主机模式可以,但是每台计算机都位于其隔离网络上的内部模式将无法工作。

2:仅在syslog服务器中才需要取消注释以下代码:

$ModLoad imudp
$UDPServerRun 514

3:在客户端计算机上-您可以注释所有#### Rules ####部分并将转发规则放在文件 OR 的末尾 您可以指定转发内联(使用客户端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:在syslog服务器上-确保已启用防火墙并将其配置为在相关端口上接受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