On this page
13 其他问题
登录和 systemd
我们建议创建一个 zabbix 用户作为系统用户,也就是说,该用户不能用于登录。有些用户忽略了这一建议,并使用同一个账户登录到运行 Zabbix 的主机(例如通过 SSH)。这可能会在注销时导致 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 种方法:
- (推荐)不要再使用 zabbix 账户执行除 Zabbix 进程之外的其他操作,为其他用途创建一个专用账户。
- (不推荐)在
/etc/systemd/logind.conf中设置RemoveIPC=no,然后重启系统。请注意,RemoveIPC是一个系统级参数,修改它会影响整个系统。
在 proxy 后方使用 Zabbix 前端
如果 Zabbix 前端运行在 proxy 服务器之后,则需要在 proxy 配置中重写 file 的 cookie 路径,以匹配反向代理的路径。请参见下面的示例。如果 cookie 路径未 被重写,用户在尝试 login 到 Zabbix 前端时可能会遇到授权 问题。
nginx 的示例配置
# ..
location / {
# ..
proxy_cookie_path /zabbix /;
proxy_pass http://192.168.0.94/zabbix/;
# ..
Apache 配置示例
# ..
ProxyPass "/" http://主机/zabbix/
ProxyPassReverse "/" http://主机/zabbix/
ProxyPassReverseCookiePath /zabbix /
ProxyPassReverseCookieDomain 主机 zabbix.example.com
# ..