🔋

MackerelプラグインでAPCのUPSを監視!「mackerel-plugin-apcupsd」の紹介

2024/07/02に公開

こんにちは、マインディアのCTOをしているまつぼっくりです。今回は、私が開発したMackerelプラグイン「mackerel-plugin-apcupsd」について紹介します。

https://github.com/matsubo/mackerel-plugin-apcupsd

なぜUPS監視プラグインを作ったのか

スタートアップのCTOとして、サービスの安定運用は常に頭を悩ませる問題です。特に、電源の安定性は見過ごせない重要なポイント。そこで目をつけたのが、UPS(無停電電源装置)の監視でした。

「既存のMackerelプラグインでUPSを監視できないかな?」と探してみたものの、ニーズにぴったり合うものがありません。「それなら自分で作っちゃえ!」というノリで開発を始めました。

プラグインの機能

このプラグインは、APC UPSの以下の項目を監視します:

  • バッテリー残量
  • 入力電圧
  • 出力電圧
  • 負荷
  • 内部温度

データの取得には apcupsd コマンドを利用しています。これらのデータをMackerelで監視することで、UPSの状態をリアルタイムに把握し、潜在的な問題を早期に発見できるようになりました。

開発で苦労したポイント

開発中、最も苦労したのは apcupsd コマンドの出力を適切にパースすることでした。出力形式が微妙に不規則で、単純な行分割では対応できない場合がありました。

結局、以下のような正規表現を使って対応しました:

re := regexp.MustCompile(`^(\w+)\s+:\s+(.*)$`)

この正規表現で、キーと値のペアを適切に抽出できるようになりました。

また、Goの testing パッケージを使って単体テストを書くことで、パースの正確性を担保しています。テスト駆動開発(TDD)の良さを改めて実感した開発でした。

プラグインの使い方

インストールは以下のコマンドで簡単に行えます:

sudo mkr plugin install matsubo/mackerel-plugin-apcupsd

mackerel-agent.conf に以下の設定を追加するだけで使用可能です。

[plugin.metrics.apcupsd]
command = "/path/to/mackerel-plugin-apcupsd"

設定を反映するためにmackerel-agentを再起動します。

sudo systemctl restart mackerel-agent.service

今後の展望

現在のバージョンでも十分実用的ですが、さらに以下の機能を追加したいと考えています。

  1. メトリックの単位ごとにグラフを変更する
  2. グラフのカスタマイズオプション

まとめ

「mackerel-plugin-apcupsd」の開発を通じて、改めてオープンソースの素晴らしさを実感しました。自分のニーズを満たすツールを作り、それを他の人と共有できる。これこそがエンジニアの醍醐味だと思います。

みなさんも、「あったらいいな」と思うツールがあれば、ぜひ自分で作ってみてください。そして、それをオープンソースとして公開することで、エンジニアコミュニティに貢献できるはずです。

最後になりましたが、このプラグインへのフィードバックをお待ちしています。GitHubのIssueやプルリクエストをお待ちしています!

参考リンク

みなさんのUPS監視ライフが充実することを願っています!

Discussion