zabbix agent の停止/起動の動作不良について

掲題の件について、知見がございましたら、お知恵を頂けると幸いです。

RHEL :7.1
Zabbix :2.2.10

zabbixエージェントの起動停止の確認をしているのですが、期待する動作をしていません。
同じような事象にあたり、対処されたご経験があればご教示下さい。

以下は実際に確認できた振る舞いですが、正常ではないと思われるポイントが2点あります。

① systemctl status zabbix-agentで状態を確認した際に、以下のメッセージが出力される。
 
zabbix-agent.service: Supervising process 6536 which is not our child. We'll most likely not notice when it exits.

② systemctl stop zabbix-agentで停止後にpsコマンドで確認すると、正常に停止していない。

---動作確認ログ---

★zabbix agentプロセスが起動していることを確認
# ps -ef | grep zabbix | grep -v grep
root 6536 1 0 00:43 ? 00:00:00 /usr/sbin/zabbix_agentd -c /etc/zabbix/zabbix_agentd.conf
root 6537 6536 0 00:43 ? 00:00:00 /usr/sbin/zabbix_agentd: collector [idle 1 sec]
root 6538 6536 0 00:43 ? 00:00:00 /usr/sbin/zabbix_agentd: listener #1 [waiting for connection]
root 6539 6536 0 00:43 ? 00:00:00 /usr/sbin/zabbix_agentd: listener #2 [waiting for connection]
root 6540 6536 0 00:43 ? 00:00:00 /usr/sbin/zabbix_agentd: listener #3 [waiting for connection]
root 6541 6536 0 00:43 ? 00:00:00 /usr/sbin/zabbix_agentd: active checks #1 [idle 1 sec]
#
#
#
★systemctlコマンドでzabbix agentプロセスを停止
# systemctl stop zabbix-agent

★systemctlコマンドでzabbix agentプロセスの状態を確認
# systemctl status zabbix-agent
● zabbix-agent.service - Zabbix Agent
Loaded: loaded (/usr/lib/systemd/system/zabbix-agent.service; enabled; vendor preset: disabled)
Active: inactive (dead) since 火 2016-01-19 00:44:25 JST; 3s ago
Process: 6534 ExecStart=/usr/sbin/zabbix_agentd -c $CONFFILE (code=exited, status=0/SUCCESS)
Main PID: 6536
CGroup: /system.slice/zabbix-agent.service
tq6537 /usr/sbin/zabbix_agentd: collector [idle 1 sec]
tq6538 /usr/sbin/zabbix_agentd: listener #1 [waiting for connection]
tq6539 /usr/sbin/zabbix_agentd: listener #2 [waiting for connection]
tq6540 /usr/sbin/zabbix_agentd: listener #3 [waiting for connection]
mq6541 /usr/sbin/zabbix_agentd: active checks #1 [idle 1 sec]

1月 19 00:43:41 xxxxxxxx systemd[1]: Starting Zabbix Agent...
1月 19 00:43:41 xxxxxxxx systemd[1]: zabbix-agent.service: Supervising process 6536 which is not our child. We'll most likely not notice when it exits.
1月 19 00:43:41 xxxxxxxx systemd[1]: Started Zabbix Agent.
1月 19 00:44:25 xxxxxxxx systemd[1]: Stopped Zabbix Agent.
1月 19 00:44:25 xxxxxxxx systemd[1]: Stopping Zabbix Agent...
#

★zabbix agentプロセスが停止している状態が期待値だが、下記の通り表示される。
 しかも、通常子プロセスであるものが親プロセスのようにみえる。
# ps -ef | grep zabbix | grep -v grep
root 6537 1 0 00:43 ? 00:00:00 /usr/sbin/zabbix_agentd: collector [idle 1 sec]
root 6538 1 0 00:43 ? 00:00:00 /usr/sbin/zabbix_agentd: listener #1 [waiting for connection]
root 6539 1 0 00:43 ? 00:00:00 /usr/sbin/zabbix_agentd: listener #2 [waiting for connection]
root 6540 1 0 00:43 ? 00:00:00 /usr/sbin/zabbix_agentd: listener #3 [waiting for connection]
root 6541 1 0 00:43 ? 00:00:00 /usr/sbin/zabbix_agentd: active checks #1 [idle 1 sec]
#
#

--------

よろしくお願いします。

コメント表示オプション

お好みのコメント表示方法を選び「設定の保存」をクリックすると変更が反映されます。
ユーザー TNK の写真

systemctl stop zabbix-agent実行後に、親プロセスであると思わ
れる

 /usr/sbin/zabbix_agentd -c /etc/zabbix/zabbix_agentd.conf

のみが終了してしまっているようですね。
/var/log/zabbbix/zabbix_agentd.logには何か出力されていません
か?

あと、そのZabbixはどのようにしてインストールされましたか?
Zabbix SIAのパッケージを利用していれば、systemdに対応した起
動停止のスクリプトになっているはずです。

Zabbix SIAのパッケージ以外を利用されているのであれば、Zabbix
SIAのパッケージに含まれる起動すスクリプトを利用するように入
れ替えてみてください。

RHEL 7.1でZabbix 2.2.10であるならば、以下のRPMファイル

 http://repo.zabbix.com/zabbix/2.2/rhel/7/x86_64/zabbix-agent-2.2.10-1.el7.x86_64.rpm

内に起動停止のスクリプト

 /usr/lib/systemd/system/zabbix-agent.service

が含まれています。
作業用のディレクトリを作成して、そこで、

 $ rpm2cpio zabbix-agent-2.2.10-1.el7.x86_64.rpm | cpio -id

などとして展開し、中に含まれるファイルを確認することができま
す。

ご確認ください。

ユーザー otokam の写真

さっそくありがとうございます。

何度か試行した際のログになりますが、同じ挙動をした際に以下のようなログが出力されています。
正常時と変わりはありません。

・・・・・
Got signal [signal:15(SIGTERM),sender_pid:1,sender_uuid:0,reason:0]. Exiting ...
Zabbix Agent stopped. Zabbix 2.2.10 (revision 54806)).
Starting Zabbix Agent [xxxxxxxx]. Zabbix 2.2.10 (revvision 54806).
using configuration file: /etc/zabbix/zabbix_agentd..conf
agent #0 started [collector]
agent #1 started [listener #1]
agent #2 started [listener #2]
agent #3 started [listener #3]
agent #4 started [active checks #1]
・・・・・

zabbix自体はZabbix SIA からyumインストールしています。
http://repo.zabbix.com/zabbix/2.2/rhel/7/x86_64/zabbix-agent-2.2.10-1.el...

zabbix-agent.serviceは以下の通りです。

[Unit]
Description=Zabbix Agent
After=syslog.target
After=network.target

[Service]
Environment="CONFFILE=/etc/zabbix/zabbix_agentd.conf"
EnvironmentFile=-/etc/sysconfig/zabbix-agent
Type=forking
Restart=always
PIDFile=/run/zabbix/zabbix_agentd.pid
KillMode=process
ExecStart=/usr/sbin/zabbix_agentd -c $CONFFILE

[Install]
WantedBy=multi-user.target

以上です。

ユーザー TNK の写真

CentOS 7.1.1503の環境を構築して、Zabbix SIAのリポジトリから
Zabbix 2.2.10のエージェントをyumでインストールしてみました。
あえて、ISOからのインストールのみで各種パッケージの更新は行
っていない7.1.1503そのままの環境上です。

sytemctlコマンドでの停止・起動・状態確認を複数回実行したり、
OSの再起動を行ってみましたが、一切、記載されていたような問題
は発生しませんでした。

otokamさんの環境では毎回発生するのですか?
それともまれに発生するのですか?

あと、OSは7.1.1503の初期から、各種パッケージは更新されていな
いのですか?
もう一つ、そのOSを稼働させている環境は、どのような環境上で稼
働させているものなのでしょうか?
例えば、どこかのクラウドサービスを利用されていたりしますか?

最後に、/var/log/messagesなど、Zabbix以外のログも確認してみ
てください。

ユーザー otokam の写真

当方の環境はVMware上の仮想環境ですが、一般的なクラウドサービス上ではありません。

yum updateは何度か更新しています。

同じでサーバ上で毎回発生している状況です。

もう少し多方面のログを確認してみます。

ユーザー TNK の写真

当方の環境はVMware上の仮想環境ですが、一般的なクラウドサービス上ではありません。

クラウド業者によっては、デフォルトでインストールするパッケー
ジの制限やカスタマイズが含まれる可能性が考えられたので、もし、
私がすぐに確認できるような環境であれば、そこにVMを作成して確
認しようと思っていました。

VMwareとのことですが、CentOS 7.1は、ご自身で、ISOイメージか
らインストールされたのですよね?
私は、ISOからインストールして、デフォルトの最低限のパッケー
ジのみを選択してOSをインストールして確認しました。

何も考えずにyum updateしてしまうと、CentOS 7.1ではなくCentOS
7.2になってしまうのですが、何回かyum updateされたとのことで
すので、私もyum updateを実行してみました。

CentOS 7.2.1511(updateあり) + Zabbix 2.2.11ですが、systemctl
を利用してzabbix-agentを何度も停止や起動を行っても、正常に終
了できないようなことは一切発生していません。

Zabbixエージェント側に何か設定の追加やダイナミックライブラリ
などの機能拡張とか設定されていますか?
私は、zabbix_agentd.confにServerとServerActive、Hostnameだけ
設定し、デフォルトで用意されているTemplate OS Linuxをリンク
してみましたが、それ以外に何か設定されている場合は、それらの
アイテムや設定が起因するかもしれません。

ユーザー otokam の写真

エージェント側の設定として特別なものは入れていません。
色々と試行して頂きありがとうございます。

TNKさんの切り分け情報も参考に継続調査します。

ユーザー otokam の写真

複数の同じ環境でも発生するホストと発生しないホストがある状態です。

zabbix-agent.serviceファイルにおいて、

KillMode=process

だとメインプロセスだけkillされるのはsystemdの機構としては正しいそうですがいかがでしょうか。
zabbixとしては望ましくないですが。。

2点ご意見をお聞かせください。

1.KillModeをcontrol-groupで運用されている方はいないでしょうか。
2.agentd.conf の PIDFileのパスと、zabbix-agent.serviceのPIDFileのパスが異なっても正常動いていませんか?
  ここはあわせる必要はないのでしょうか。

ユーザー TNK の写真

1.KillModeをcontrol-groupで運用されている方はいないでしょうか。

私は、現時点のパッケージに同梱されているスクリプトで安定して
起動停止できています。

2.agentd.conf の PIDFileのパスと、zabbix-agent.serviceのPIDFileのパスが異なっても正常動いていませんか?
  ここはあわせる必要はないのでしょうか。

ここは、なぜ変えているのかわからないのですが、ファイルの実体
は同じなので問題はありません。

あと、VMwareを利用されているとのことでしたが、それ以上の詳細
はお教えいただけていません。
可能性としてですが、インストールする際にパッケージをカスタマ
イズしたりOS標準以外のリポジトリを追加したりしていませんか?

例えば、正常に稼働する環境と稼働しない環境とで、zabbix_agentd
のlddの結果を比較してみてください。

# ldd /usr/sbin/zabbix_agentd

ユーザー heya の写真

実は私のところ(2.2.11、CentOS 7)も同様にサーバーがうまく停止できない(ので仕方なしに kill している)のですが、ここの内容が似たようなもののような気がします。
https://support.zabbix.com/browse/ZBX-9867

ここの何人かは、 zabbix_agentd.conf で
 PidFile=/tmp/zabbix_agentd.pid
として、zabbix-server.service で
 PIDFile=/tmp/zabbix_agentd.pid
とすればうまくいった、という人もいるみたいです。

それから、
> I updated systemd service file in 2.2.12rc1, 2.2.8rc1 and 3.0.0rc1. I hope the fix solve original issue.
とあって、現時点で最新の 2.2.13 の zabbix-agent.service を見てみると 2.2.11 のときと変わっていました。
差分は↓こんな感じ。
10c10
< Restart=always
---
> Restart=on-failure
12c12
< KillMode=process
---
> KillMode=control-group
13a14,15
> ExecStop=/bin/kill -SIGTERM $MAINPID
> RestartSec=10s
私のところは本番稼働していて簡単にバージョンアップできないのですが、2.2.13 に上げれば解決するかもしれません。
#zabbix-server.service も同様に変更されているようです。

あと、SELinux の確認も一応しておいた方がいいかもしれませんね。