UPS監視 · 2 min read · Oct 16, 2025

Network UPS Tools (NUT) 2.2.0を使用した複数のOpenSuSE 10.3サーバーのUPS電源状態の監視

Network UPS Tools (NUT) 2.2.0を使用した複数のOpenSuSE 10.3サーバーのUPS電源状態の監視

Network UPS Toolsは、UPSハードウェアの監視と管理のための共通インターフェースを提供するプログラムのコレクションです。

Network UPS Tools (NUT)プロジェクトの主な目標は、UPSハードウェアの信頼性の高い監視を提供し、接続されたシステムの安全なシャットダウンを確保することです。

これは、多種多様なUPSハードウェアを監視するための開発プロジェクトです。多くのモデルには、他のデバイスが状態を確認できるようにするためのポートがあります。電力とバッテリーの状態に関する基本情報を提供する場合、あまり難なくサポートできるでしょう。高級モデルのより高度な機能もサポートされており、温度や電圧などの値を時間の経過とともに追跡できます。

ネットワーク通信が使用されているため、複数のシステムが単一の物理UPSを監視し、必要に応じて一緒にシャットダウンできます。UPS自体に特別な「共有ハードウェア」を必要としません。

プレインストール

サーバーで全てを稼働させる前に、UPSを電源コンセントに接続し、信号ケーブル(シリアルまたはUSB)をupsdを実行するサーバーに接続します。NUTの動作とハードウェアとの相性に自信が持てるまで、UPSのコンセントにサーバーの電源ケーブルを接続しないでください。UPSをテストする際には、ランプなどのダミーロードを使用することが推奨されます。これにより、UPSが電力を供給しているときとオフのときがわかり、安全に実験し、実稼働サーバーをUPSに接続する前にコマンドに自信を持つことができます。

インストール

nut RPMパッケージをインストールします。YaST2を使用する場合、必要なパッケージが自動的に追加されます。コマンドラインからは、次のように実行できます。

yast2 -i nut

rootとして実行します。

OpenSuSE 10.3では、nut 2.2.0がインストールされます。

これにより、必要なバイナリがパスに配置され、一連のスケルトン構成ファイルが作成されます。UPSハードウェアを定義するために、rootとしてファイルを編集する必要があります。

構成

ローカル接続UPSの構成

rootシェルを開くか、例えば次のようにします。

sudo vi

構成ファイルを編集します。

ファイル/etc/ups/ups.confには、次のようなデフォルト値を持つダミーセクションがあります。

[myups]
       driver = undefined
       port = /dev/undefined
       desc = "Local UPS"

ファイルを編集し、ドライバーをUPSに適した正しいドライバーに設定し、ポートを信号ケーブルを接続した場所に設定し、説明を追加します。サポートされているブランドとモデルのリストは/usr/share/nut/driver.listを参照してください。

私のAPC SmartUPS 1400のエントリは、シリアルポートに接続されています。

[apc_smartups_1400]
       driver = apcsmart
       port = /dev/ttyS0
       desc = "APC SmartUPS 1400"

ユーザーと権限を構成するために/etc/ups/upsd.usersファイルを修正する必要があります。パスワードはインストール中に自動的に生成されるため、これらのランダムな値のままにしておくこともできます。覚えやすいパスワードを使用したい場合は、ファイルを編集してください。デフォルトファイルには2つのエントリがあり、コマンドラインからUPSをキャリブレーションおよびテストできるようにadminユーザーも追加しました。

これらのユーザーはlocalhostからのみ接続できるため、現時点ではセキュリティは大きな問題ではありません。リモートスレーブを使用する場合は、これらの例にあるよりも高度なパスワードを使用する必要があります。

/etc/ups/upsd.usersファイルに定義されている3つのユーザーは次のとおりです。

[upsmaster]
        password = masterpass123
        allowfrom = localhost
        upsmon master
[upsslave]
        password = slavepass123
        allowfrom = localhost
        upsmon slave
[upsadmin]
        password = upspass
        allowfrom = localhost
        actions = SET
        instcmds = ALL

upsdデーモンはUPSをポーリングするだけで、状態を確認するには他のプログラムが必要です。新しいUPSの名前とログインおよびパスワードを反映するように構成ファイルを編集します。

/etc/ups/upsmon.conf
# MONITOR myups@localhost 1 upsmaster 67fc9377aa master
MONITOR apc_smartups_1400@localhost 1 upsmaster masterpass123 master

また、リモートで作業している場合や短時間の電力障害が発生した場合に、電力が復旧したときに「wall」通知を受け取ることを好みます。次の行を変更します。

NOTIFYFLAG ONLINE   SYSLOG

次のようにします。

NOTIFYFLAG ONLINE   SYSLOG+WALL

/etc/ups/upsmon.confファイル内で。

/etc/ups/hosts.confは含まれているCGIプログラム専用ですが、ここに正しい情報を追加することもできます。

/etc/ups/hosts.conf
# MONITOR myups@localhost "Local UPS"
MONITOR apc_smartups_1400@localhost "APC SmartUPS 1400"

これで、すべてのプログラムを最終的に開始できます。

rcupsd start

linux:~ # rcupsd start
Starting NUT UPS drivers done
Starting NUT UPS server done
Starting NUT UPS monitor done

稼働していることを確認し、UPSから保存された値を読み取れることを確認します。まず、利用可能なデバイスをリストします。

upsc -l

… 次に、すべての値を読み取ります。

upsc 

linux:~ # upsc -l
apc_smartups_1400
linux:~ # upsc apc_smartups_1400
battery.alarm.threshold: 0
battery.charge: 100.0
battery.charge.restart: 00
[…]

テスト

サーバーを電源に接続する前に、UPSユニットの電源コードを抜いて現実的な電力障害をテストします。UPSはバッテリーに切り替わり、警告メッセージが表示されるはずです。KDEを実行している場合、ログインしていると、KWritedから次のようなメッセージがポップアップします。

Broadcast Message from upsd@linux
(somewhere) at 22:51
UPS apc_smartups_1400@localhost on battery

ケーブルを再接続し、電力が復旧したことを示す安心するメッセージを観察します。

Broadcast Message from upsd@linux
(somewhere) at 22:51
UPS apc_smartups_1400@localhost on line power

これが機能する場合、サーバーの電源を切り、UPSに電源コードを接続します。電力障害が発生した場合、テスト中に見たメッセージが表示されます。バッテリーの充電が非常に低くなり、UPSが「低バッテリー」信号を送信すると、NUTはサーバーをシャットダウンします。このしきい値をUPSレジスタで設定できる場合もありますし、UPSがバッテリーに切り替わったときに次のようにスクリプトを作成する必要があります。

shutdown -h -t

後にシステムを停止)し、その後、UPSが再び電力に戻ったときに次のようにします。

shutdown -c

(シャットダウンをキャンセル)。ただし、すべてのUPSデバイスがこの「復旧」メッセージを送信するわけではありません。ここでは、テストとカスタマイズを行う必要があります。

UPSでの機器の運用

サーバーはバッテリー電源で稼働しており、バッテリーが切れるまで続きます。バッテリーが切れるまで実際にサーバーを運用して、どれくらいのバッテリー時間があるかを把握することをお勧めします。ほとんどのUPSデバイスは、負荷とバッテリー充電のパーセンテージを表示できます。UPSは、非常に重要な作業を行っているときに短時間の電力サージやブラウンアウトが発生した場合に非常に便利で、長時間の停電の場合は、バッテリーが低下したときにマシンをサスペンド、ハイバネート、またはシャットダウンできます。

BIOSを設定して、電源が入ると自動的にマシンを起動するようにすると、電力が復旧したときに自動的にブートします。再発する電力障害がある場合、サーバーを稼働させ続けてバッテリーを消耗させたくありません。UPSを電力サージやスパイクから保護するユニットと考え、電力障害が発生した場合にクリーンなシャットダウンを提供できるユニットとして考えてください。できるからといって、バッテリーでサーバーを運用しないでください。UPSのバッテリーは消耗することを目的としておらず、電力が復旧すると通常は完全充電に数時間かかります。停電直後に安全ネットなしでサーバーを運用したくありません - 充電が十分に残っている状態でサーバーをシャットダウンし、電力復旧直後の厳しい時間帯に備えて保存してください。この理由から、UPSに保持するものは重要なサーバーに制限してください。

電力障害中にサーバーを運用するために必要なネットワーク機器、KVM、モニターなどのサポートハードウェアを追加することを忘れないでください。UPS電源でプリンターやほとんどのワークステーションを運用することは避けてください。通常の照明が消えているときに作業できるように、サーバールームに非常灯を設置してください。自分の電源(発電機など)でサーバーをしばらく運用する場合、部屋の過熱を避けるためにHVACも同じ電源で運用することをお勧めします。

また、すべての機器が一度に電力を消費し始めると、サーバーとワークステーションが同時に起動し、すべてのモニターと照明が点灯し、レーザープリンターが暖まると、ヒューズが飛ぶことを予想しなければなりません。これにより、停電が長引くことになります。電力障害中はすべての非重要機器をオフにし、その後手動で再度オンにしてください。

リモートクライアント

リモートクライアントの許可

ローカルUPSが正常に機能していることがわかったので、サーバーを電源に接続し、他の電源コンセントに接続したい場合があります。ただし、USBまたはシリアルケーブルは1本しかありません。これが、シリアルケーブルを持つマシン上のNUT upsdデーモンが、ネットワーク経由で他のサーバーに通知する必要がある理由です。

/etc/ups/upsd.confを編集してクライアントを許可することから始めます。ここでは、全サブネットが許可されていますが、より詳細に特定のIPのみを含めることもできます。

ACL all 0.0.0.0/0
ACL localhost 127.0.0.1/32
ACL upsnet  192.168.1.0/24
ACCEPT localhost
ACCEPT upsnet
REJECT all

このネットワークからスレーブが接続できるように/etc/ups/upsd.usersを編集します。

[upsslave]
        password = slavepass123
        allowfrom = localhost upsnet
        upsmon slave

変更を反映させるために、upsdデーモンを再起動します。

rcupsd restart

linux:~ # rcupsd restart
Shutting down NUT UPS monitor done
Shutting down NUT UPS server done
Shutting down NUT UPS drivers. done
Starting NUT UPS drivers done
Starting NUT UPS server done
Starting NUT UPS monitor done

または、設定を再読み込みする方が良いです。これは、ドライバー設定以外の設定を再構成する必要がある場合、デーモンを再起動するよりもはるかに速いです。

rcupsd reload

linux:~ # rcupsd reload
Reload service NUT UPS (excluding upsdrvctl) done

ファイアウォールを通過するクライアントを許可します(OpenSuSEはデフォルトでSuSEfirewallと呼ばれるiptablesファイアウォールを実行しています)。upsdはTCPポート3493でリッスンし、デフォルトではすべてのインターフェースでリッスンします。

SuSEfirewall2サービス定義を作成します。RPMには含まれていませんでした。次の内容で新しいファイル/etc/sysconfig/SuSEfirewall2.d/services/upsdを作成します。

# Service description for upsd, the UPS daemon from NUT
# (Network UPS Tools)
#
## Name: NUT upsd
## Description: Allows remote monitoring of UPS power status
# space separated list of allowed TCP ports
TCP="3493"
# space separated list of allowed UDP ports
UDP=""
# space separated list of allowed RPC services
RPC=""
# space separated list of allowed IP protocols
IP=""
# space separated list of allowed UDP broadcast ports
BROADCAST=""

次に、次のように開始します。

YaST

rootとして実行し、「セキュリティとユーザー」->「ファイアウォール」を選択します。正しいネットワークを選択し、ドロップダウンリストからNUT upsdを選択します。サービスを追加し、次へボタンをクリックします。これにより、/etc/sysconfig/SuSEfirewall2構成スクリプトのFW_CONFIGURATIONS_EXT変数にupsdが許可されたサービスのリストに追加されます。ポート3493は、iptablesファイアウォールを通過することが許可されました。

リモートクライアントの構成

リモートマシンにnutをインストールします。このマシンはlinux64と呼ばれます。

ローカルUPSが接続されていないため、/etc/ups/ups.confのすべてをコメントアウトします。

#[myups]
#       driver = undefined
#       port = /dev/undefined
#       desc = "Local UPS"

UPSが接続されているサーバーを監視するために/etc/ups/upsmon.confを編集します。

#MONITOR myups@localhost 1 upsmaster 04fb251a3f master
MONITOR apc_smartups_1400@linux 1 upsslave slavepass123 slave

UPSサーバーを/etc/ups/hosts.confに追加します。

#MONITOR myups@localhost "Local UPS"
MONITOR apc_smartups_1400@linux "APC SmartUPS 1400"

次に、upsdサービスを開始します。これは、実際のupsdおよびUPSドライバーを無視し、upsmonのみを開始します。

rcupsd start

linux64:~ # rcupsd start
Starting NUT UPS monitor done

接続が機能していることを確認し、リモートUPSサーバーの状態値を読み取れることを確認します。

upsc apc_smartups_1400@linux

linux64:~ # upsc apc_smartups_1400@linux
battery.alarm.threshold: 0
battery.charge: 094.0
battery.charge.restart: 00
[…]

UPSを再度テストし、新しいクライアントがメッセージを受信することを確認します。

Broadcast Message from upsd@linux64
(somewhere) at 0:13 …
UPS apc_smartups_1400@linux on battery

このサーバーの電源ケーブルをUPSに接続し、これで2つのサーバーが停電から保護され、両方が電源状態を監視しています。

参考文献

  • Network UPS Tools (NUT)のホームページ
Share: X/Twitter LinkedIn

新しい投稿を受信箱で受け取る

スパムはありません。いつでも購読を解除できます。