14 其他问题

登录与 systemd

我们建议创建一个 zabbix 用户作为系统用户,也就是说,该用户不具备登录能力。一些用户忽略了这一建议,并使用同一个账户登录(例如使用 SSH)到运行 Zabbix 的主机。这可能会在注销时导致 Zabbix 守护进程崩溃。在这种情况下,你会在 Zabbix 服务器日志中看到如下内容:

zabbix_server [27730]: [file:'selfmon.c',line:375] lock failed: [22] Invalid argument
zabbix_server [27716]: [file:'dbconfig.c',line:5266] lock failed: [22] Invalid argument
zabbix_server [27706]: [file:'log.c',line:238] lock failed: [22] Invalid argument

并且在 Zabbix agent 日志中看到:

zabbix_agentd [27796]: [file:'log.c',line:238] lock failed: [22] Invalid argument

出现这种情况的原因是,在 /etc/systemd/logind.conf 中配置了默认的 systemd 设置 RemoveIPC=yes。当你从系统注销时,Zabbix 之前创建的信号量会被移除,从而导致崩溃。

systemd 文档中的一段说明:

RemoveIPC=

控制当用户完全注销后,是否移除属于该用户的 System V 和 POSIX IPC 对象。接受布尔参数。如果启用,则在该用户的最后一个会话终止后,用户将不能再占用 IPC 资源。这包括 System V 信号量、共享内存和消息队列,以及 POSIX 共享内存和消息队列。请注意,root 用户和其他系统用户的 IPC 对象不受此设置影响。默认值为 "yes"。

此问题有 2 种解决方案:

  1. (推荐)不要将 zabbix 账户用于 Zabbix 进程之外的任何用途,为其他用途创建专用账户。
  2. (不推荐)在 /etc/systemd/logind.conf 中设置 RemoveIPC=no,然后重启系统。请注意,RemoveIPC 是系统范围的参数,更改它会影响整个系统。

Zabbix 前端使用代理

如果 Zabbix 前端在代理服务器后面运行,则需要重写代理配置文件中的 cookie 路径以匹配反向代理路径。请参阅下面的示例。如果不重写 cookie 路径,用户在尝试登录 Zabbix 前端时可能会遇到授权问题。

nginx 的示例配置
# ..
location / {
# ..
proxy_cookie_path /zabbix /;
proxy_pass http://192.168.0.94/zabbix/;
# ..
Apache 的示例配置
# ..
ProxyPass "/" http://host/zabbix/
ProxyPassReverse "/" http://host/zabbix/
ProxyPassReverseCookiePath /zabbix /
ProxyPassReverseCookieDomain host zabbix.example.com
# ..