リモートコマンドが実行されない

お世話になっております。
タイトルの通り、どうにもうまくいきません。アドバイスをいただければ幸いです。

webサーバとDBサーバについて、zabbix(2.2.4)による監視を行い、リソース(メモリ・CPU)の使用率が閾値を超えた際に、
各サーバーでのプロセス一覧をログファイルに出力するということを考えています。

具体的には以下の流れになります。
①リソース監視のアイテム → ②使用率が80%を超えた際のトリガー → ③各サーバに対しリモートコマンドを実行するアクション → ④「ps」コマンドの結果をログファイルに出力するスクリプト

webサーバでは、正常にログファイルが出力されますが、DBサーバでは出力されません。

この問題について、以下を確認しています。

・zabbixのイベントは、web・DB共にアクションの実行結果は「正常」
・ログファイル出力先ディレクトリの権限は「777」
・zabbix_agentd.confの設定で「EnableRemoteCommands=1」としている
・visudoで「zabbix ALL=NOPASSWD: ALL」としている
・web・DB共に「zabbix_agentd.conf」、「psコマンド→ログのスクリプト」のdiffに差は見られない(ホスト名・IPアドレス等は除く)
・DBサーバのzabbix-agentの再インストールを実施したが、状況は変わらず

実行するスクリプトを添付いたします。アップロード制限で拡張子を「.sh」から「.txt」に変えています。
長文となり申し訳ございませんが、どなたかアドバイスをいただければと思います。
よろしくお願いします。

コメント表示オプション

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

poikmpoikmさん

Webサーバではリモートコマンドが実行されて
DBサーバではリモートコマンドが実行されない
と言う認識で良いですか?

念の為、「アクションの実行内容」の設定がどうなっているのか教えてください。
※:画面キャプチャして頂けると設定確認しやすいかと

あと、DBサーバで「sudo -u zabbix psalx.sh {イベントID}」を実行して確認ですかね…

それでわからない時はZabbixサーバのログレベルをdebugレベルにして検証でしょうか…

ユーザー poikmpoikm の写真

KAZさん コメントありがとうございます。

>Webサーバではリモートコマンドが実行されて
>DBサーバではリモートコマンドが実行されない
>と言う認識で良いですか?

その通りです。同じ設定のはずですが、DBサーバのみ実行されないのか、ログファイルが出力されません。

>念の為、「アクションの実行内容」の設定がどうなっているのか教えてください。
>※:画面キャプチャして頂けると設定確認しやすいかと

画面キャプチャを添付いたします。

>あと、DBサーバで「sudo -u zabbix psalx.sh {イベントID}」を実行して確認ですかね…

手動で実行したところ、正常にログファイルが出力されることを確認しました。

>それでわからない時はZabbixサーバのログレベルをdebugレベルにして検証でしょうか…

実はすでに検証しておりますので、zabbixサーバログの抜粋部分を添付いたします。
ログには当方の解釈コメントを記載しております。

ユーザー KAZ の写真

poikmpoikmさん

ログを見るとサーバ側からは旨くキックできているように見えますね…

因みに↓これはスクリプトの実行「成功」ではなく、スクリプト実行の登録「成功」と言う意味になります。
25878:20150226:184053.092 End of zbx_execute_script_on_agent():SUCCEED

OSにこのコマンド起動してね?と登録したけど、上手く動いたかは不明です。(nowaitなので…)

うーん、Zabbixエージェント側のログもdebugレベルで出したのありますか?

ユーザー poikmpoikm の写真

KAZさん

>因みに↓これはスクリプトの実行「成功」ではなく、スクリプト実行の登録「成功」と言う意味になります。
>25878:20150226:184053.092 End of zbx_execute_script_on_agent():SUCCEED

ありがとうございます。大変勉強になります。

>うーん、Zabbixエージェント側のログもdebugレベルで出したのありますか?

DBサーバのzabbixエージェントのログの抜粋版を添付いたします。

ユーザー KAZ の写真

poikmpoikmさん

OS側にコマンド引き渡してますね…
これでなぜ動かないのだろう…

Windows OSとかで負荷が高いと起動しないという現象ありましたが…
Linuxですよね…

DB負荷高いですか?

ユーザー poikmpoikm の写真

KAZさん

>Windows OSとかで負荷が高いと起動しないという現象ありましたが…
>Linuxですよね…
>
>DB負荷高いですか?

DBサーバのCPU使用率は1%台、メモリ使用率は40%で安定しています。
DBサーバよりwebサーバの方が負荷が高いので、高負荷が原因ではないと思われます。

ユーザー TNK の写真

これまで確認頂いた内容で確認できているはずなのですが、一応、
以下の状態も確認してみてください。

提示頂いたスクリプト内部にも、呼び出すリモートコマンドの設定
にもsudoが指定されていないので、スクリプトの実行は、zabbixユ
ーザでスクリプトが実行されていると思われます。

その際によくあるのが、ディレクトリやファイルのパーミッション
の問題です。

ログ出力先のディレクトリに、zabbixユーザはアクセスできますか?
ファイル作成や変更の権限はありますか?

ユーザー poikmpoikm の写真

TNKさん コメントありがとうございます。

>その際によくあるのが、ディレクトリやファイルのパーミッション
>の問題です。
>
>ログ出力先のディレクトリに、zabbixユーザはアクセスできますか?
>ファイル作成や変更の権限はありますか?

DBサーバで「sudo -u zabbix psalx.sh {イベントID}」を実行すると、正常にログファイルが出力されます。
これによって、パーミッションの問題ではないという切り分けにはならないでしょうか。

ユーザー zinten の写真

poikmpoikmさん

以下のようにZabbixサーバからDBサーバに対してzabbix_getコマンド投げてみてもらえますか?
何かエラーがあればエラーメッセージ、問題がなければ1が結果として返ってくると思いますので試してみてください。

# zabbix_get -s -k "system.run[\"zabbix psalx.sh {イベントID} 2>&1 && echo 1,wait\"]"

ユーザー poikmpoikm の写真

zintenさん コメントありがとうございます。

>以下のようにZabbixサーバからDBサーバに対してzabbix_getコマンド投げてみてもらえますか?
>何かエラーがあればエラーメッセージ、問題がなければ1が結果として返ってくると思いますので試してみてください。

zabbix-getがインストールされていなかったため、インストールを行いましてzabbix_getコマンドを実行しました。

webサーバは1が返ってきましたが、DBサーバは「Permission denied」となりました。

webサーバ、DBサーバ共に「psalx.sh」の実行権限は付与しているのですが、何故でしょう。。。

ユーザー zinten の写真

poikmpoikmさん

>webサーバは1が返ってきましたが、DBサーバは「Permission denied」となりました。
>webサーバ、DBサーバ共に「psalx.sh」の実行権限は付与しているのですが、何故でしょう。。。
SELinuxが有効になっているとか…
「psalx.sh」が保存しているフォルダに実行権限が付与されていなかったりしないですか?

ユーザー poikmpoikm の写真

zintenさん

>SELinuxが有効になっているとか…

DBサーバではSELinuxが有効、webサーバでは無効となっていました。
DBサーバのSELinuxを無効化したところ、zabbix経由でスクリプトが実行され、ログファイルが正常に出力されました。

これにて本事象の解決とさせていただきます。大変ありがとうございました。