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
---
< #UPSDNAME
90c90
> #DEVICE /dev/ttyS0
---
< DEVICE /dev/ttyS0
変更後の設定ファイル例を以下に記載します。
UPSNAME BR550S
UPSCABLE usb
UPSTYPE usb
NETSERVER on
NISIP 127.0.0.1
NISPORT 3551
ONBATTERYDELAY 6
BATTERYLEVEL 5
MINUTES 3
TIMEOUT 0
ANNOY 300
ANNOYDELAY 60
NOLOGON disable
KILLDELAY 0
EVENTSFILE /var/log/apcupsd.events
EVENTSFILEMAX 10
STATFILE /var/log/apcupsd.status
STATTIME 0
LOGSTATS off
DATATIME 0
この設定では、USBでUPSに接続し、standaloneで動作する前提の設定ファイルです。
2. Pythonスクリプトの作成
以下のPythonスクリプトを作成し、/etc/mackerel-agent/plugins/ups.py
として保存します
#!/usr/bin/env python3
import subprocess
import re
import 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.py
3. 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
コマンドでインストールできるようにGolangでも書いておきました。
Discussion