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 エージェントログには次のように出力されます。

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.confRemoveIPC=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
# ..