🐙

apcupsd_exporterをセットアップしてUPSの状態を監視する手順

2022/11/30に公開

この記事では、apcupsd_exporterをセットアップしてUPSの状態を監視する手順を紹介します。

はじめに

サーバー監視においてメトリクスの収集に Prometheus を、アラーティングに Alertmanager を、可視化に Grafana を使うのは、そこそこ一般的なことではないでしょうか。

また、その場合はサーバーに node_exporter をセットアップすることも一般的だと思います。

そしてサーバーが物理サーバーの場合には、さらにUPSの状態も監視したくなります。[1]

というわけで、今回はサーバーに apcupsd_exporter をセットアップしてUPSの状態を監視する手順を説明します。

概要

今回扱うシステムで情報の流れを図示すると次のようになります。

図中のUbuntu 20.04 ServerがUPSと接続されている監視対象サーバー、Ubuntu 22.04 Serverがモニタリングサーバーという立ち位置ですね。[2]

apcupsd_exporter

それでは監視対象サーバーにapcupsd_exporterをセットアップしましょう。

Goのインストール

apcupsd_exporterはGoのパッケージなので、はじめにGoの実行環境をインストールします。

公式の手順 Download and install に沿って進めましょう。アーカイブを取得して /usr/local に展開します。(古いバージョンが存在する場合は、先に sudo rm -rf /usr/local/go を実行して古い方を削除しておきます)

wget https://go.dev/dl/go1.19.3.linux-amd64.tar.gz
sudo tar -C /usr/local -xzf go1.19.3.linux-amd64.tar.gz

これでGoのファイル一式が /usr/local/go に配置されました。

それからパスを通します。ホームディレクトリの ~/.profile に下記の変更を加えてログインし直しましょう。[3]

+export PATH=$PATH:/usr/local/go/bin

次のコマンドを実行して、Goのバージョンが表示されたらGoのインストールは完了です。

go version

apcupsd_exporterのインストール

続いてapcupsd_exporterをインストールします。

次のように go install コマンドを実行してください。

go install github.com/mdlayher/apcupsd_exporter/cmd/apcupsd_exporter@latest

これで ~/go/bin/ にバイナリ(実行ファイル)の apcupsd_exporter がインストールされると思います。次のようにコマンドを叩いて実行してみましょう。

./go/bin/apcupsd_exporter

念のため、ここで http://192.168.0.10:9162/metrics のような感じでブラウザから当該サーバーにアクセスし、メトリクスが取得できることを確認しておくと安心かも知れません。

サービスの登録と実行

あとは apcupsd_exporter がサービスとして動くようにすれば良さそうですね。

まずはユーザーの作成、実行ファイルの移動、所有権の変更を行います。

sudo useradd -s /sbin/nologin apcupsd_exporter
sudo mv ~/go/bin/apcupsd_exporter /usr/local/bin/
sudo chown apcupsd_exporter:apcupsd_exporter /usr/local/bin/apcupsd_exporter

さらにサービスファイルを作ります。

sudo vim /etc/systemd/system/apcupsd_exporter.service

中身はnode_exporterの時とほとんど同じです。

/etc/systemd/system/apcupsd_exporter.service
[Unit]
Description=Apcupsd Exporter

[Service]
User=apcupsd_exporter
ExecStart=/usr/local/bin/apcupsd_exporter

[Install]
WantedBy=multi-user.target

最後にサービスを有効化して実行を開始します。

sudo systemctl daemon-reload
sudo systemctl enable apcupsd_exporter.service
sudo systemctl start apcupsd_exporter.service

Prometheus

モニタリングサーバー側もPrometheusでメトリクスが収集できるようにしましょう。

次のような感じでPrometheusの設定ファイルを変更し、Prometheusを再起動すればOKです。

scrape_configs:
中略
  - job_name: ups
    static_configs:
      - targets:
        - 192.168.0.10:9162

Grafana

仕上げにGrafanaにダッシュボード APC UPS を追加しましょう。

まず左端のメニュー「Dashboards」から「Import」を選びます。ID 13525 を指定して「Load」を実行し、データソースにPrometheusを指定して「Import」すれば追加は完了です。

ダッシュボードの調整

しかしながらデフォルトのままだと、APC UPSの各パネルが参照するメトリクス名が微妙に違っているため、うまく表示されないと思います。

デフォルトのままではうまく表示されない
デフォルトのままではうまく表示されない

この場合はGrafanaに管理者権限のあるユーザーでログインし、各パネルの「Edit」からメトリクス名を手直しすれば表示されるようになります。

メトリクス名の対応を下表にまとめました。

メトリクス名(デフォルト) メトリクス名(手直し後)
apcups_status_numeric apcupsd_info
apcups_battery_charge_percent apcupsd_battery_charge_percent
apcups_time_on_battery_seconds apcupsd_battery_time_on_seconds
apcups_load_percent apcupsd_ups_load_percent
apcups_time_left_seconds apcupsd_battery_time_left_seconds
apcups_line_volts apcupsd_line_volts
apcups_ apcupsd_output_volts
apcups_nom_battery_volts apcupsd_battery_nominal_volts
apcups_battery_volts apcupsd_battery_volts

メトリクス名の手直し後、表示が次のように変わってUPSの状態を監視できるようになりました。

メトリクス名を手直しするとうまく表示される
メトリクス名を手直しするとうまく表示される

よかったよかった。

おわりに

今回はapcupsd_exporterをセットアップしてUPSの状態を監視する手順を紹介しました。どなたかのお役に立てば幸いです。

参考資料

脚注
  1. サーバーをUPSで停電や瞬停等から守っていない場合はこの限りではありませんが。 ↩︎

  2. 図では省略しましたけれど、監視対象サーバーにはnode_exporterもセットアップされています。 ↩︎

  3. ログインし直さずに source ~/.profile を実行してもパスが通ります。この方法でもOKです。 ↩︎

Discussion