リモートコマンドの任意実行

Zabbix 2.0 を使用しています。

リモートコマンドを任意のタイミングでZabbix のユーザが実行することは可能でしょうか。
リモートコマンドはイベント発生時のアクションとして実行されると認識していますが、リモートコマンド単独で実行させる事は出来ないのでしょうか。

例えば、常に true となるイベントを定義しておき、そのイベントのアクションとして実行したいリモートコマンドをセットしておきます。
このイベントを通常は無効にしておくものの、コマンドを実行したいときだけイベントを有効にすれば、コマンドを実行できそうです。
しかし、もっとスマートなやり方が無いものかと、皆さんのお知恵を拝借できれば幸いです。

よろしくお願い致します。

コメント表示オプション

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

広瀬です

V2.0はまだ使い込んでいないので、はっきりとした回答は申し上げられませんが、
一般的な解釈からのご返答になりますが、ご容赦ください。

監視にしても、ジョブにしてもそうなのですが何らかのイベント(時間だったり、障害
だったり・・・色々です)があって初めて動作するものなので、任意とする意図が何で
あるか次第だと思います。

自身の思惑に従って動作させたいとするとなると、そのイベントをどのように発動させる
かが鍵になるのではと思います

この「任意」が何であるのか次第だと思いますが、以下の方法なら擬似的に可能かも
しれません

・system.runアイテムで定期的に指定したシェル、またはコマンドを実行する
・そのシェルにはsenderで適時値を通知させて、その値が真というトリガー条件を組む
・アクションに設定したリモートコマンドを実行させる・・・

というのならば可能ではあると思います。

※トリガーが常に連続値を真として通知させる場合は、ノーマル+障害イベントを継続~
  にしておくとよいかもしれません。

ただし、sender側からの通知を定期的に動かす必要があるので、こっちはCron的
なもので処理させる必要性があります。どちらにしても2度手間なんで、素直にCron
で動かした方が早いとは思いますが・・・ケースバイケースです

現状では指定した時間きっちりに動作させるというのは、ZABBIXの内部処理的には不可能
なので、搦め手を使わざるを得ないかと思います(本家のvoteではジョブ機能追加に結構要望
出ているようですね・・・)

ユーザー nhide の写真

「任意」の意味があいまいでしたね。すみません。
「定期的」ではなく「任意に」という意味の任意であり、Zabbixのユーザが画面上で何らかの操作を行った結果としてコマンドを実行させたいと考えています。

wakaba 様が示してくださったやり方も良さそうですが、結局、

> ・そのシェルにはsenderで適時値を通知させて、その値が真というトリガー条件を組む

の部分をどう実現するかというのが論点になりそうです。

定期的な実行には cron の方がおすすめなのですね。情報ありがとうございます。

ユーザー kodai の写真

wakabaさんが書かれている通り、「任意」が何を指すのかにもよると思います。

(1) Webインターフェースからユーザが任意のタイミングでコマンドやボタンをクリックすることでコマンドを実行したい
(2) 特定の時間に自動的にコマンドを実行したい

など、どのような動作を期待されてるのでしょう?

また、実行結果はどのように処理されるのが望ましいのでしょう?結果をWebインターフェースに表示したい、データをアイテムのヒストリとして保存したい、など、具体的に書いていただけると回答しやすいと思います。

ユーザー nhide の写真

「任意」の意味が曖昧で申し訳ありません。

> (1) Webインターフェースからユーザが任意のタイミングでコマンドやボタンをクリックすることでコマンドを実行したい

を意図していました。
実行結果の表示は不要と考えており、コマンドの実行結果として監視項目の状況が変化するはずなので、それで確認しようと思っていました。

具体的な例としては、下記のようなストーリーをイメージしています。

(1)あるプロセスが停止している兆候をトリガーがつかみ、Zabbixから運用者にメールで通知
(2)運用者がWebインタフェースでログの内容等を確認して状況を把握
(3)プロセスの再起動を決断し、Webインタフェースでプロセスの再起動
(4)再起動後の稼働状況をWebインタフェースで確認

もちろん、(1)から(3)を自動的に行えば良いんじゃないかという意見も出てくると思いますが、すべてが再起動で解決できる訳ではなく
運用が安定するまでは(2)のプロセスが必須であると考えています。なので(3)の実現手段を探しています。

以上、よろしくお願いいたします。

ユーザー kodai の写真

スクリプト機能を利用すれば、WebインターフェースからZabbixサーバに対してコマンド実行させることができます。
具体的には。[管理]->[スクリプト]から実行するスクリプトを設定すると、マップやダッシュボードのホスト名からコマンドを実行できます。

実行されるのはZabbixサーバの動作しているホスト上なので、監視対象に対して実行する場合は、エージェント経由でsystem.runアイテムを実行するように設定しておけば可能だと思います。

ユーザー nhide の写真

kodaiさん、返信ありがとうございます。

なるほど。マップから実行する ping や traceroute は [管理]->[スクリプト]の定義を参照していたのですね。
試しに簡単なスクリプトを追加して、マップから実行してみたところ、思い通りの結果が得られました。

課題が解決できそうです。ありがとうございました。

広瀬です

あ、そうかその手がありましたね。私もスクリプトにMindTerm突っ込んでます。
SSH起動させるのが楽なので・・・