尝试配置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...
问题:为什么我看不到客户端本地日志?
对于此讨论:
服务器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))
答案 0 :(得分:1)
尝试在客户端主机的*.
之后删除一个空格:
*. * @192.168.11.11:514
用于发送远程主机上任意级别的日志的默认格式如下:
*.* @remote-host:514
然后使用systemctl restart rsyslog
在客户端和服务器上重新启动rsyslog服务,然后再次检查。
编辑:
从评论中粘贴-在解决问题的syslog服务器上完成了另外两个步骤:
注释服务器上的#### Rules ####
部分。
从& ~
部分删除## 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