手動でサーバマシンの再起動

はじめて投稿させていただきます。

現在、CentOS5.3 上で ZABBIX1.6.4 を動かしてシステムの監視のテストを行っています。
サーバプログラムが停止した際に自動的にサーバプログラムを再起動させ、アラートメールを送信する設定もできて非常に満足していますが、ふと思ったことがあります。

例えば、停電が起こる前など緊急にサーバを停止させる必要がある場合、ZABBIXから手動でサーバマシンをシャットダウンさせる設定はないでしょうか(あるいはできないでしょうか)。これができれば、現場にいない管理者でも操作ができるのですが…。
# シェルに詳しくない人でもブラウザは触れるので、管理者権限が
# あれば緊急操作ができて助かります。

マニュアルやウェブサイトにはこのあたりのことが触れられていない感じだったので、投稿させていただきました。

どなたか御存知の方はいらっしゃいませんか?
よろしくお願い申し上げます。

コメント表示オプション

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

POCOさん

MAPやスクリーンからサーバの再起動をするということでしょうか?
それならば、以下の機能が使えるかと思います。(言語:日本語の説明です。)

1)「管理」−「スクリプト」を選択
2)「スクリプトの追加」ボタンをクリック
3)以下を入力し「保存」ボタンをクリック
名前:mapに表示される名前です。
コマンド:シャットダウンコマンド
ユーザグループ:このスクリプトが実行できるユーザグループ
ホストグループ:このスクリプトが実行できるホストグループ
要求されるホストパーミッション:コマンドを実行する際の権限です。
4)「監視データ」−「マップ」を選択
5)登録したスクリプトを実行する対象をクリック
6)ポップアップしたメニューからスクリプトを選択し実行

スクリプトの設定について詳しくはマニュアル「ZABBIX Manual v1.6 19.3.4.Scripts」をお読みください。

ユーザー POCO の写真

KAZさん

お返事ありがとうございます。

> MAPやスクリーンからサーバの再起動をするということでしょうか?
はい。このとおりです。私の言葉足らずで申し訳ありません。
正確には、「ZABBIX サーバで監視をされている各ZABBIXクライアントを
手動で再起動したい(あるいは停止したい)」ということです。

各ZABBIXクライアントはLinuxで、エージェントをインストール&起動している
状態です。ZABBIXサーバ『zbx』と同様に CentOS 5.3 が動いています。
試しに、ZABBIXクライアント『web』に対して設定を行ってみました。
『-->』以降は私が入力 or 操作したものです。

(1) 実現したいこと(これができれば最高)
> 3)以下を入力し「保存」ボタンをクリック
> 名前: --> web
> コマンド: --> /sbin/shutdown -h now
> ユーザグループ:--> ALL
> ホストグループ:--> ALL
> 要求されるホストパーミッション: --> Read

上記を設定した上で、
> 4)「監視データ」−「マップ」を選択 --> この通りに操作
> 5)登録したスクリプトを実行する対象をクリック --> ZABBIXクライアント『web』を選択
> 6)ポップアップしたメニューから
> スクリプトを選択し実行 --> メニューから『web』を選択

この後、ポップアップウィンドウが開きましたが、
『web』はシャットダウンされませんでした。

(2) 試してみたことその1(シェルスクリプトを実行する)
(1)の設定を一度削除した後に試した内容です。

shutdown.sh のパーミッションは 755 で、内容は
#!/bin/sh
/sbin/shutdown -h now
とあるだけです。だから、(1)とやりたい内容は変わりありません。

> 3)以下を入力し「保存」ボタンをクリック
> 名前: --> web
> コマンド: --> /usr/local/sbin/shutdown.sh
> ユーザグループ:--> ALL
> ホストグループ:--> ALL
> 要求されるホストパーミッション: --> Read

4)〜6)は上記と同様の操作をしました。
その後、ポップアップウィンドウが開きましたが、
……『web』はシャットダウンされませんでした。

(3) 試してみたことその2(サーバプログラム停止のテスト)
(1)や(2)の設定を一度削除した後に試した内容です。

> 3)以下を入力し「保存」ボタンをクリック
> 名前: --> web
> コマンド: --> /etc/rc.d/init.d/mysqld stop
> ユーザグループ:--> ALL
> ホストグループ:--> ALL
> 要求されるホストパーミッション: --> Read

4)〜6)は上記と同様の操作をしました。
すると今度はポップアップウィンドウが開いて、

MySQL を停□

という文字が表示されて暫く経っても何も起こらず、mysqld は
動き続けていました。
# □は文字化けみたいな印象ですけど…

ZABBIXクライアント『web』ですが、ユーザ「zabbix」を使って
shell> sudo /sbin/shutdown -h now
でシャットダウンができます。パスワードは尋ねられません。

マニュアルを見ましたが、これって、ZABBIXサーバ(ここでいう『zab』のこと)
上でしか動作できないんでしょうか。各ZABBIXクライアントに対しては
手動でシャットダウン処理をするより他はないのでしょうか。

長文失礼いたしました。

ユーザー KAZ の写真

POCOさん

マニュアルをよく読むと色々わかると思うのですが…A(^^;
まずはマニュアルの事例を試して下さい。
色々仕組みや使い方が理解できますよ。

実行はZabbixアカウントで行います。
また、コマンドははZabbixサーバで実行されるとマニュアルに書いてあります。

なので、各サーバのシャットダウンを行うには少々仕掛けを作る必要があります。例えば、Zabbixサーバ側にリモートでシャットダウンさせるシェルを作るとか天
また、各サーバのシャットダウンを行うスクリプトをURL要求で実行できるようにすれば、マップのURLリンクに登録すればできます。

ちなみにIPMI機能を使えば上記の設定をしなくてもシャットダウンができると思います。(只、IPMIの設定が全ハード分必要ですが…)

Zabbixの機能で全部やろうとするより、色々組み合わせて実現する方向で考えた方が楽ですよ。

最後に文字化けについてですが、CentOS5.3を使用していると言うことなので、php.iniに「mbstring.func_overload 6」を設定するかhttpd.conf(また、そこからincludeしているzabbix用のconf)に「php_value mbstring.func_overload 6」を設定して下さい。
これで、正しく表示されると思います。

蛇足:
Google ChromeではZabbixの日本語モードは正しく表示できないようです。FireFoxかIEを御使用下さい。

ユーザー kodai の写真

こんにちは。

ZABBIXクライアント『web』ですが、ユーザ「zabbix」を使って
shell> sudo /sbin/shutdown -h now
でシャットダウンができます。パスワードは尋ねられません。

上記コマンドで実行できるようにsudoersを設定されているのであれば、shutdown.sh内でもsudoを利用して

<code>#!/bin/sh
sudo /sbin/shutdown -h now</code>

と設定しないと正しく権限昇格できないと思います。

/var/log/secureあたりに何かエラーログは出ていないでしょうか?

ユーザー POCO の写真

kodaiさん

お返事ありがとうございます。

> 上記コマンドで実行できるようにsudoersを設定されているのであれば、
> shutdown.sh内でもsudoを利用して
>
> #!/bin/sh
> sudo /sbin/shutdown -h now
>
> と設定しないと正しく権限昇格できないと思います。

このとおりに設定してみました。
…やはりシャットダウンがされません。

> /var/log/secureあたりに何かエラーログは出ていないでしょうか?

上記のように shutdown.sh を設定した後に、
> 4)「監視データ」−「マップ」を選択 --> この通りに操作
> 5) 登録したスクリプトを実行する対象をクリック --> ZABBIXクライアント『web』を選択
> 6) ポップアップしたメニューから
> スクリプトを選択し実行 --> メニューから『web』を選択
を操作してみました。そのあたりの /var/log/secure ですが、

---- ここから ----
Mar 1 12:03:20 web sshd[6791]: fatal: Read from socket failed: Connection reset by peer
Mar 1 12:04:20 web sshd[28841]: fatal: Read from socket failed: Connection reset by peer
Mar 1 12:05:20 web sshd[19255]: fatal: Read from socket failed: Connection reset by peer
Mar 1 12:06:20 web sshd[9263]: Connection closed by UNKNOWN
Mar 1 12:07:20 web sshd[31505]: Connection closed by UNKNOWN
【タイミングとしては、ここ(12:08:20 頃)で上の 4〜6 の操作をしたことになります】
---- ここまで ----

となっていました。

一緒にしてしまい恐縮ですが、KAZ さんの

> 最後に文字化けについてですが、CentOS5.3を使用していると言うことなので、
> php.iniに「mbstring.func_overload 6」を設定するかhttpd.conf(また、
> そこからincludeしているzabbix用のconf)に
> 「php_value mbstring.func_overload 6」を設定して下さい。
> これで、正しく表示されると思います。

こちらの御指摘ですがphp.iniで「mbstring.func_overload 6」を
設定して文字化けは直りました。ありがとうございました。
# ただ、mysql は停止できませんでした…。shutdown と同じ理由のような印象です。

また、shutdown.sh と同様に、/usr/local/sbin/mysqlstop.sh を

#!/bin/sh
sudo /etc/rc.d/init.d/mysqld stop

という形で作って、スクリプトのコマンドを

sudo /usr/local/sbin/mysqlstop.sh

というように設定してテストしてみたところ、
/var/log/secure に

Mar 1 12:25:32 web sudo: root : TTY=pts/0 ; PWD=/usr/local/sbin ; USER=root ; COMMAND=/etc/rc.d/init.d/mysqld stop
Mar 1 12:26:20 web sshd[1850]: Connection closed by UNKNOWN
Mar 1 12:27:20 web sshd[24698]: fatal: Read from socket failed: Connection reset by peer

という行が現れました。でも、mysql は停止できませんでした。
この後、何度マップからこのスクリプトを選んでもこの形のログは
二度と現れませんでした。

# マニュアルを読んではいますが、英語が苦手で…

ユーザー KAZ の写真

POCOさん

文字化けの件解消して良かったです。

マップからのシャットダウンについてですが…

まず、マニュアルにある設定は試されましたか?(ここ重要です。)
マニュアル通りに動かないと環境的におかしいかも知れません。

下記はZabbixアカウントから「sudo /usr/local/sbin/mysqlstop.sh」で動作するのでしょうか?
<code>
#!/bin/sh
sudo /etc/rc.d/init.d/mysqld stop
</code>
只、MySQLがストップするとZabbixサーバまでダウンしてしまいますが…

クライアントのシャットダウンの方法ですが、以下でできるはずです。
1)パスワード不要のsshログインアカウントを作る
2)1で作ったアカウントで対象サーバにログインし、シャットダウンするシェルをZabbixサーバに作成する。
3)2で作ったシェルにZabbixアカウントで実行できるようにする
4)マップからシェルを実行する。

マップから実行する時、{HOST.CONN}を使えばサーバを指定できるようになります。

蛇足:
英語苦手と言うことですが私も苦手で、高校の時いつも赤点でした。多分、ZABBIX-JPで一番英語が苦手かと…A(^^;

Zabbixのマニュアルは英語が全然だめだった私でも「読んでやる」と腹をくくれば、それなりに読めてしまうレベルなんです。
簡単とは言いませんが、何回か読み直して実際にZabbixの動作を見ると何となく感じがつかめてきます。頑張ってみて下さい。

尚、1.8のマニュアルは今ZABBIX-JPで翻訳を進めています。
少々お待ち下さい。

フォーラムの雑談等でマニュアルの分からないところどうしても読めない英文を質問する方法もあるかと。

ユーザー kodai の写真

sudoの設定で1点ご説明し忘れていました。

<code>Defaults requiretty</code>

の設定をコメントアウトして無効にしてみてください。

上記を設定しておかないと、zabbixエージェントのプロセスからsudoが実行できません。CentOSやRedHat系のOSではデフォルト有効になっているので、コンソールからログインしてsudoコマンドを実行した場合しか許可しないようになっています。

ユーザー POCO の写真

kodaiさん

お返事ありがとうございます。
# 話の流れで返事の順序を逆にしています。

> sudoの設定で1点ご説明し忘れていました。
> Defaults requiretty
> の設定をコメントアウトして無効にしてみてください。
こちらはコメントアウトしてあります。
# 本スレッドを立てる以前の段階で思うような動作が実現
# しなかった原因がまさにこれでした。
## 私の場合は何を勘違いしたのか「コメントアウトを外す」と
## 読んでしまい、『おかしいなぁ…』と苦しみました。

KAZさん

お返事ありがとうございます。
# 先に結論を書きますが、当初の目的が達成されました。

> まず、マニュアルにある設定は試されましたか?(ここ重要です。)
教えていただいた「ZABBIX Manual v1.6 19.3.4.Scripts」ですよね?
試してみました。これに関しては無事に動きました。

> 下記はZabbixアカウントから「sudo /usr/local/sbin/mysqlstop.sh」で動作するのでしょうか?
>
> #!/bin/sh
> sudo /etc/rc.d/init.d/mysqld stop
これは動作しました。

> 只、MySQLがストップするとZabbixサーバまでダウンしてしまいますが…
仰られるとおりZabbixサーバ自体もダウンしてしまいました…
# でも、とりあえずは動いたということで感激しましたが…

以下、『-->』以降は私が入力 or 操作したものです。

> クライアントのシャットダウンの方法ですが、以下でできるはずです。
> 1)パスワード不要のsshログインアカウントを作る --> zabbix アカウントでやってみました
> 2)1で作ったアカウントで対象サーバにログインし、
> シャットダウンするシェルをZabbixサーバに作成する。
> --> 既に『web』に作成していた「shutdown.sh」をそのまま使いました。
> 3)2で作ったシェルにZabbixアカウントで実行できるようにする
> --> パーミッションを 755、所有者を zabbix:zabbix にしました。
> 4)マップからシェルを実行する。
> マップから実行する時、{HOST.CONN}を使えばサーバを指定できるようになります。

以下、補足です:
1) は、http://www.turbolinux.co.jp/support/document/knowledge/152.html をヒントに設定しました。
併せて /etc/ssh/sshd_config の設定も変更しています。
Protocol 2 --> Protocol 1,2
3) では、「shell> ssh zabbix@web /usr/local/sbin/shutdown.sh」を実行して、
パスワード不要でシャットダウンすることを確認しました。
4) では、command のところに「ssh zabbix@{HOST.CONN} /usr/local/sbin/shutdown.sh」と
記述しました。

以上の設定を行った上で実際にマップから実行して、Zabbixクライアント『web』が
シャットダウンすることを確認しました。
これで私の当初の目的が達成されました。

未熟な私に対して懇切丁寧に御指導、御助言をいただき、ありがとうございました。

> Zabbixのマニュアルは英語が全然だめだった私でも「読んでやる」と腹をくくれば、それなりに読めてしまうレベルなんです。
> 簡単とは言いませんが、何回か読み直して実際にZabbixの動作を見ると何となく感じがつかめてきます。頑張ってみて下さい。
ありがとうございます。挑戦してみます。
# 社内からも期待されているので。

> 尚、1.8のマニュアルは今ZABBIX-JPで翻訳を進めています。
こちらも楽しみにしています。

ユーザー KAZ の写真

POCOさん

目的が達成できて良かったです。

> 3)2で作ったシェルにZabbixアカウントで実行できるようにする
> --> パーミッションを 755、所有者を zabbix:zabbix にしました。

所有者がzabbix:zabbixならパーミッションは700か750の方が良いと思います。(zabbix以外のアカウントでサーバがダウンできてしまうと危険ではないですか?)

では、これからもがんばって下さい。m(__)m