UPSの状態をMackerelで可視化する: apcupsdとPythonを使ったカスタムプラグイン
UPSの状態をMackerelで可視化する: apcupsdとPythonを使ったカスタムプラグイン
はじめに
サーバーの安定稼働にとって、電源の安定供給は非常に重要です。そのため、多くの環境で UPS(無停電電源装置)が使用されています。UPS の状態を常に監視することで、潜在的な問題を早期に発見し、対応できます。
この記事では、apcupsd を使用して UPS の情報を取得し、それを Python スクリプトで Mackerel に送信する方法を紹介します。これにより、UPS の状態をリアルタイムで可視化し、監視することが可能になります。

前提条件
- Linux 環境(Ubuntu, CentOS など)
- Python 3.x
- apcupsd
- Mackerel アカウントとエージェント
セットアップ手順
1. apcupsdのインストールと設定
まず、apcupsd をインストールします:
sudo apt install apcupsd # Ubuntu/Debian# またはsudo yum install apcupsd # CentOS/RHEL次に、/etc/apcupsd/apcupsd.conf を編集します。
変更した差分は以下です。
320fc> UPSNAME BR550S---< #UPSDNAME90c90> #DEVICE /dev/ttyS0---< DEVICE /dev/ttyS0変更後の設定ファイル例を以下に記載します。
UPSNAME BR550SUPSCABLE usbUPSTYPE usb
NETSERVER onNISIP 127.0.0.1NISPORT 3551
ONBATTERYDELAY 6BATTERYLEVEL 5MINUTES 3TIMEOUT 0
ANNOY 300ANNOYDELAY 60NOLOGON disableKILLDELAY 0
EVENTSFILE /var/log/apcupsd.eventsEVENTSFILEMAX 10
STATFILE /var/log/apcupsd.statusSTATTIME 0
LOGSTATS offDATATIME 0この設定では、USBでUPSに接続し、standaloneで動作する前提の設定ファイルです。
2. Pythonスクリプトの作成
以下のPythonスクリプトを作成し、/etc/mackerel-agent/plugins/ups.py として保存します
#!/usr/bin/env python3
import subprocessimport reimport time
def get_apcaccess_output(): result = subprocess.run(['apcaccess'], capture_output=True, text=True) return result.stdout
def parse_apcaccess_output(output): metrics = {} patterns = { 'linev': r'LINEV\s+:\s+([\d.]+)\s+Volts', 'loadpct': r'LOADPCT\s+:\s+([\d.]+)\s+Percent', 'bcharge': r'BCHARGE\s+:\s+([\d.]+)\s+Percent', 'timeleft': r'TIMELEFT\s+:\s+([\d.]+)\s+Minutes', 'battv': r'BATTV\s+:\s+([\d.]+)\s+Volts' }
for key, pattern in patterns.items(): match = re.search(pattern, output) if match: metrics[key] = float(match.group(1))
return metrics
def main(): output = get_apcaccess_output() metrics = parse_apcaccess_output(output)
timestamp = int(time.time())
for key, value in metrics.items(): print(f"ups.{key}\t{value}\t{timestamp}")
if __name__ == '__main__': main()スクリプトに実行権限を付与します:
sudo chmod +x /etc/mackerel-agent/plugins/ups.py3. Mackerelエージェントの設定
Mackerelエージェントの設定ファイル(通常は /etc/mackerel-agent/mackerel-agent.conf)に以下の設定を追加します:
[plugin.metrics.ups]command = ["python3", "/etc/mackerel-agent/plugins/ups.py"]設定後、Mackerelエージェントを再起動します:
sudo systemctl restart mackerel-agent動作確認
設定が完了したら、Mackerelのダッシュボードを確認します。“Ups”という名前のグラフグループが作成され、以下のメトリクスが表示されるはずです:
- ups.linev: 入力電圧 (V)
- ups.loadpct: 負荷率 (%)
- ups.bcharge: バッテリー充電率 (%)
- ups.timeleft: 残り稼働時間 (分)
- ups.battv: バッテリー電圧 (V)
まとめ
このセットアップにより、UPSの重要な情報をMackerelで可視化し、監視できます。異常な値が検出された場合にアラートを設定するなど、さらなるカスタマイズも可能です。
UPSの状態を常に把握することで、電源関連の問題を事前に察知し、サーバーの安定稼働を維持するための対策を講じることができます。
追記
mackerelの慣習に則って、mkr コマンドでインストールできるように Go でも書いておきました。