SSブログ
エステ

パワーダウン時にZabbixからサーバーをシャットダウンする [ZABBIX]

Zabbixから他のサーバーをシャットダウンできるようにしましたが、Zabbixの動きがところどころおかしく(バグ?)、忘れないように、メモメモ。


以前のエントリでオムロンのBY50SをUbuntu11.10で認識させて、Zabbixから監視できるようにしました。

オムロン 無停電電源装置(常時商用給電/正弦波出力) 500VA/300W BY50S

オムロン 無停電電源装置(常時商用給電/正弦波出力) 500VA/300W BY50S

  • 出版社/メーカー: オムロン
  • メディア: Personal Computers
その時は、VoltageとStatusだけでしたが、充電率を簡易的に得て、特定の容量を下回った場合に、UPSに接続されているサーバーをZabbixからシャットダウンすることにします。

1.BY50Sの充電容量が30%を下回り
かつ
2.BY50Sがオフライン(電源断)
の時にシャットダウンします。


こんな状況です。
                     AC100V
                         |
       -----------[BY50S]---------
       |                                 |
[サーバー:ws]---------------[サーバー:fs]
-Zabbixサーバー                -Zabbixエージェント
-nut



1.充電容量の取得

ここに取得方法が記載されています。

                       battery.voltage - battery.voltage.low
battery.charge =  ------------------------------------------------ x 100 %
                     battery.voltage.high - battery.voltage.low


battery.voltageの最大値と最小値を取得します。

最大値は充電完了後の状態で、battery.voltageを確認します。

# upsc by50s battery.voltage

最小値はBY50Sへの電源供給を止めた状態で、nutが自動的にシャットダウンを実施した時点のbattery.voltageを確認します。

battery.voltage.high=13.6
battery.voltage.low=11.9

これらを、/etc/nut/ups.confに追記します。

[by50s]
driver = blazer_usb
port = /dev/usb/hiddev0
desc = "Omron UPS"
vendorid = 0590
productid = 0081
subdriver = ippon

default.battery.voltage.high = 13.6
default.battery.voltage.low = 10.9

これで、battery.chargeを参照することで、簡易ですが、充電率を取得できます。

# upsc by50s battery.charg
100

# echo 'UserParameter=UPS.charge[*],upsc $1 battery.charge' >> /etc/zabbix/zabbix_agentd.conf

スクリーンショット 2012-04-17 14.49.46.png

これで、ZabbixからUPSの充電率が見えるようになりました。


2.UPSが電源断がZabbixから判るようにします

じつは、battery.statusで判るのですが、Zabbixのトリガーがテキストの変化を検出できない(バグ?)ので、一旦数値型に書き換えて、その変化で電源断を検出します。

/usr/local/bin/ups-statusを新規作成。
これで、一旦、battery.statusを数値型に書き換えます。
--
#! /bin/sh

if [ ! -x /bin/upsc ]; then
        "Couldn't find command upsc"
        exit 1
fi

str="initial"
status="0"

str=`/bin/upsc $1 ups.status`

if [ "$str" = "OL BYPASS" ]; then
        status="1"
elif [ "$str" = "OB" ]; then
        status="2"
elif [ "$str" != "initial" ]; then
        status="3"
fi

echo ${status}

exit 0
--
# /usr/local/bin/ups-status by50s
1

これで、OK
あとは、Zabbixエージェントの設定と再起動

# echo 'UserParameter=UPS.status[*],/usr/local/bin/ups-status $1 ups.status>> /etc/zabbix/zabbix_agentd.conf
# service zabbix-agent restart

これでOK

あとは、

3.Zabbixでトリガーの登録
4.Zabbixでアクションの登録
です。


3.Zabbixでトリガーの登録

Configuration - Template から作りたい先のテンプレートのtriggerを選択し、そこから、[Create Trigger]ボタンから作成。
テンプレートは、Linux_template内に作成。

スクリーンショット 2012-04-17 15.04.05.png

Expressionはこんな感じで。
{Template_Linux:UPS.charge[by50s].last(0)}<30 & {Template_Linux:UPS.status[by50s].last(0)}=2

UPS.charge[by50s].last(0):充電率の直近値
UPS.status[by50s].last(0):ステータスの直近値

SeverityはDisasterで。

4.Zabbixでアクションの登録

Configuretion - Action の [Create Action]から新規作成。

スクリーンショット 2012-04-17 15.13.16.png

Action Conditions と Action Operations を登録します。

Action ConditionsはTrigger SeverityはDisaster にしました。Trigger名とステータスからTriggerとして検出したかったのですが、Triggerを選択後[select]ボタンからtriggerを選択しても反映されないのでSeverityから検出するようにしました。他のTriggerでDisasterを選択している場合は他のTriggerでもシャットダウンが実行されることになってしまうので、注意が必要です。私の場合は、Disaster=サーバー停止が必要な状態という考えで、これでよしとしました。

Action OperationはOperation typeを"Remote command"に変更し、Remote command欄にシャットダウンコマンドを記載します。

fs:sudo /sbin/shutdown -h 0

:の前はシャットダウンしたい(Zabbix内でのサーバー名です。

ただ、Zabbixではshutdownコマンドを実行する権限がないので、シャットダウンしたいサーバーで/etc/sudoerを編集します。

$ sudo visudo

で 
zabbix ALL=NOPASSWD: /sbin/shutdown
を追記して、保存します。

以上。。

あとは実際に、アンプラグしてみて、ちゃんとシャットダウンされるか確認します。

電源断の状態でかつ充電率が30%を下回っていると、シャットダウンされたサーバーの電源をonにしても、zabbix agentが立ち上がった段階で再度シャットダウンが実行されますよ。



Zabbix統合監視「実践」入門 ~障害通知、傾向分析、可視化による省力運用 (Software Design plusシリーズ)

Zabbix統合監視「実践」入門 ~障害通知、傾向分析、可視化による省力運用 (Software Design plusシリーズ)

  • 作者: 寺島 広大
  • 出版社/メーカー: 技術評論社
  • 発売日: 2010/04/08
  • メディア: 大型本

AVAHIがうるさいので、だまらせることに [Netatalk]

以前から、Avahi daemonがログでうるさかったのが気になっていたのですが、どうもバグっぽいので、/var/log/syslogから他へ捨てることに。

Apr 16 17:36:51 fs avahi-daemon[836]: Invalid query packet.
Apr 16 17:37:28 fs avahi-daemon[836]: last message repeated 2 times
Apr 16 17:45:06 fs avahi-daemon[836]: Invalid query packet.
Apr 16 17:46:29 fs avahi-daemon[836]: last message repeated 2 times
Apr 16 17:49:45 fs avahi-daemon[836]: Invalid query packet.
Apr 16 17:50:59 fs avahi-daemon[836]: last message repeated 2 times
Apr 16 19:34:10 fs avahi-daemon[836]: Invalid query packet.
Apr 16 19:35:35 fs avahi-daemon[836]: last message repeated 11 times
Apr 16 19:57:38 fs avahi-daemon[836]: Invalid query packet.
Apr 16 19:59:07 fs avahi-daemon[836]: last message repeated 3 times
Apr 16 20:00:57 fs avahi-daemon[836]: Invalid query packet.
Apr 16 20:02:07 fs avahi-daemon[836]: last message repeated 6 times
Apr 16 20:10:58 fs avahi-daemon[836]: Invalid query packet.
Apr 16 20:12:07 fs avahi-daemon[836]: last message repeated 6 times
Apr 16 20:23:32 fs avahi-daemon[836]: Invalid query packet.
Apr 16 20:24:38 fs avahi-daemon[836]: last message repeated 6 times
Apr 16 20:25:38 fs avahi-daemon[836]: last message repeated 7 times
Apr 16 20:40:18 fs avahi-daemon[836]: Invalid query packet.
Apr 16 20:41:39 fs avahi-daemon[836]: last message repeated 2 times



# vi /etc/rsyslog.d/40-avahi.conf

--
:programname, contains, "avahi-daemon" /var/log/avahi/avahi.log
:programname, contains, "avahi-daemon" ~
--
を新規で作成。


# vi /etc/logrotate.d/avahi

--
/var/log/avahi/avahi.log {
        rotate 1
        daily
        missingok
        notifempty
        compress
        delaycompress
}
--
これも新規で作成。

# service rsyslog restart

これで静かになる。対処療法的ですが。。。

apt-cache コマンド [Linux コマンド・設定 Memo]

インストールされているパッケージのバージョンや依存関係を知りたい時に利用します。

便利。

# apt-cache show avahi-daemon

Package: avahi-daemon
Priority: optional
Section: net
Installed-Size: 400
Maintainer: Ubuntu Developers <ubuntu-devel-discuss@lists.ubuntu.com>
Original-Maintainer: Utopia Maintenance Team <pkg-utopia-maintainers@lists.alioth.debian.org>
Architecture: amd64
Source: avahi
Version: 0.6.25-1ubuntu6.2
Depends: libavahi-common3 (>= 0.6.16), libavahi-core6 (>= 0.6.24), libc6 (>= 2.4), libcap2 (>= 2.10), libdaemon0 (>= 0.12), libdbus-1-3 (>= 1.1.1), libexpat1 (>= 1.95.8), upstart-job, adduser, dbus (>= 1.2.16-0ubuntu3), lsb-base (>= 3.0-6), bind9-host | host
Recommends: libnss-mdns
Suggests: avahi-autoipd
Filename: pool/main/a/avahi/avahi-daemon_0.6.25-1ubuntu6.2_amd64.deb
Size: 65204
MD5sum: 9d3449a755bb55700464eb0db478df5a
SHA1: 23e4310fddacc5707d9ca52c4c4e221e7887c069
SHA256: d3538191f5ae0dbfe76a0de4f02b74c1450b410a007e8a5030ebbbc93447eaa6
Description: Avahi mDNS/DNS-SD daemon
 Avahi is a fully LGPL framework for Multicast DNS Service Discovery.
 It allows programs to publish and discover services and hosts
 running on a local network with no specific configuration.  For
 example you can plug into a network and instantly find printers to
 print to, files to look at and people to talk to.
 .
 This package contains the Avahi Daemon which represents your machine
 on the network and allows other applications to publish and resolve
 mDNS/DNS-SD records.
Origin: Ubuntu
Supported: 5y
Task: ubuntu-desktop, eucalyptus-cloud, eucalyptus-cluster, eucalyptus-node, eucalyptus-storage, eucalyptus-walrus, print-server, kubuntu-desktop, kubuntu-netbook, edubuntu-desktop, xubuntu-desktop, ubuntu-netbook

Package: avahi-daemon
Priority: optional
Section: net
Installed-Size: 392
Maintainer: Ubuntu Core Developers <ubuntu-devel-discuss@lists.ubuntu.com>
Original-Maintainer: Utopia Maintenance Team <pkg-utopia-maintainers@lists.alioth.debian.org>
Architecture: amd64
Source: avahi
Version: 0.6.25-1ubuntu6
Depends: libavahi-common3 (>= 0.6.16), libavahi-core6 (>= 0.6.24), libc6 (>= 2.4), libcap2 (>= 2.10), libdaemon0 (>= 0.12), libdbus-1-3 (>= 1.1.1), libexpat1 (>= 1.95.8), upstart-job, adduser, dbus (>= 1.2.16-0ubuntu3), lsb-base (>= 3.0-6), bind9-host | host
Recommends: libnss-mdns
Suggests: avahi-autoipd
Filename: pool/main/a/avahi/avahi-daemon_0.6.25-1ubuntu6_amd64.deb
Size: 64914
MD5sum: 9f4bb4b08a4c427899b648d7ef5922d7
SHA1: 148bbacf83e21d716250f9524e9e369b5c98e3c5
SHA256: ce31df3aa3d7d383c74ec57ae50e6dde6c73c1360789e72366d3b84d9c723076
Description: Avahi mDNS/DNS-SD daemon
 Avahi is a fully LGPL framework for Multicast DNS Service Discovery.
 It allows programs to publish and discover services and hosts
 running on a local network with no specific configuration.  For
 example you can plug into a network and instantly find printers to
 print to, files to look at and people to talk to.
 .
 This package contains the Avahi Daemon which represents your machine
 on the network and allows other applications to publish and resolve
 mDNS/DNS-SD records.
Origin: Ubuntu
Supported: 5y
Task: ubuntu-desktop, eucalyptus-cloud, eucalyptus-cluster, eucalyptus-node, eucalyptus-storage, eucalyptus-walrus, print-server, kubuntu-desktop, kubuntu-netbook, edubuntu-desktop, xubuntu-desktop, ubuntu-netbook



この広告は前回の更新から一定期間経過したブログに表示されています。更新すると自動で解除されます。