因此,我正在尝试监控运行 Centos 7 的 VM 的日志。具体来说,出现问题的是 /var/log/messages。我已更改文件的组所有权(在 logrotate.conf 中进行了相关更改)并手动更改了已创建的文件。您可以在下面看到它的权限:
[matias@Centos_7_VM ~]$ sudo ls -lh /var/log/messages
-rw-rwx---+ 1 root zabbix 889K jul 25 10:53 /var/log/messages
[matias@Centos_7_VM ~]$ getfacl /var/log/messages
getfacl: Removing leading '/' from absolute path names
# file: var/log/messages
# owner: root
# group: zabbix
user::rw-
user:zabbix:rwx
group::---
mask::rwx
other::---
但即使进行了所有这些更改,zabbix 代理仍被拒绝读取该日志。是否有其他因素阻止该进程读取文件?
代理日志
993:20180725:062459.211 Starting Zabbix Agent [Centos_7_VM]. Zabbix 3.2.11 (revision 76339).
993:20180725:062459.256 **** Enabled features ****
993:20180725:062459.257 IPv6 support: YES
993:20180725:062459.257 TLS support: YES
993:20180725:062459.257 **************************
993:20180725:062459.257 using configuration file: /etc/zabbix/zabbix_agentd.conf
993:20180725:062459.303 agent #0 started [main process]
999:20180725:062459.359 agent #1 started [collector]
1003:20180725:062459.396 agent #2 started [listener #1]
1004:20180725:062459.406 agent #3 started [listener #2]
1005:20180725:062459.413 agent #4 started [listener #3]
1007:20180725:062459.472 agent #5 started [active checks #1]
1007:20180725:105103.700 active check "log[/var/log/messages,(?i)error]" is not supported: Cannot open file "/var/log/messages": [13] Permission denied
答案1
它被称为 SELinux。
不幸的是,Zabbix 代理的 SELinux 策略尚未完善(目前),几乎所有您想要监控的内容都将被拒绝。我个人将 Zabbix 代理类型设置为宽容以解决这个问题。这让 Zabbix 代理基本上可以绕过 SELinux,同时它仍然适用于系统上的所有其他内容。
semanage permissive -a zabbix_agent_t
答案2
如果您不想以任何方式禁用 SELinux:
你可以通过运行来检查它是否是 SELinux audit2allow -a
,并检查是否有任何包含 Zabbix 的输出。你也可以简单地暂时设置宽容模式来验证阻塞:
sudo setenforce 0
- 检查 zabbix 代理是否可以执行其操作
sudo setenforce 1
如果确实是 SELinux 拒绝代理,请尝试以下操作:
创建一个策略来允许任何拒绝 Zabbix 的操作(以 root 或 sudo 身份):
grep zabbix /var/log/audit/audit.log | audit2allow -M myzabbix
这会将任何 Zabbix 拒绝传送到 audit2allow,它会在您所在的目录中创建一个策略文件和编译的二进制文件。我通常这样做是/root/selinux
为了清洁。
然后运行semodule -i myzabbix.pp
这会将策略加载到 SELinux 中,并且该策略是永久性的,因此无需担心重启会破坏策略。