Uptime Kumaで自宅サーバー監視

サーバーやWebサービスを運用していると、「今ちゃんと動いているのか?」を手軽に確認したくなる場面は意外と多いものです。
特に自宅サーバーやVPS運用では、気づかないうちにサービスが停止していた……という経験をした人も少なくないはず。

そこで今回は、OSSの監視ツール「Uptime Kuma」を使って、誰でも簡単に“自分専用のステータスページ”を構築する方法を紹介します。
Dockerなら数コマンドで立ち上げられ、Webサイト・API・Dockerコンテナ・Ping監視などにも対応。さらに、OpenAIやDiscordのような「障害情報ページ」風の公開ステータスページまで作成できます。

UptimeKumaとは

自分のサーバーの死活を簡単に監視できるようにするOSS(オープンソースソフトウェア)です。

Dockerを使えば1コマンドで運用を始められるため、とてもお手軽なツールです。サーバーステータスページがあると、自分のサーバーがいつ落ちて、いつ復旧したかなどを直観的に把握することができるためwebサーバーやいろんなソフトを常時起動している人におすすめのソフトです。

このUptimeKumaのいいところとして、監視先に難しいソフトを入れずとも、PINGを投げてサービスが応答するか否かで死活を管理することもできますので、手軽にサービス監視することが可能です。

企業のステータスページ

企業はどんな見た目のステータスページを保有しているのかについて調べてみました。ここではOpenAIやDiscordを見てみます。

それぞれグラフのようなものがありまして、それぞれタイムラインになっており、黄色は何かしらの不具合や、遅延、赤はサービス停止のように、一目でサーバー状態がわかるようになっています。

いざ構築!

簡単に立ち上げられるのでDokerを利用して構築していきます!

前提

端末にDockerがインストールされており、ターミナルやシェルスクリプトで「dockerコマンド」を利用できること。下の記事で紹介しておりますので、もしインストールしていない方はセットアップをおこなってくdさい。

死活管理ですので、できれば24h動くサーバーや、24時間つけっぱなしの端末で動かすと良いのかなと思います。

また、できれば監視対象のリソース群と別の独立した監査端末みたいなのを設けられると監視基盤自体の安定性も高くなるかもしれません。

ちなみにUptimeKumaの要求リソースは限りなく低いのでRaspberry Pi Zero 2 Wとかでも良いかもしれません(今あまりに高すぎるのでリンクは省略しておきます)

構築手順

ポート解放
sudo ufw allow 3001/tcp

もし特定のアドレスからのみにしたいなら…

sudo ufw allow from <許可したいIPアドレス> to any port 3001 proto tcp
構築ディレクトリと設計図

作業ディレクトリをopt直下に作成し、そこにDocker の設計図であるdocker-compose.ymlファイルを作成します

sudo mkdir -p /opt/uptime-kuma
sudo tee /opt/uptime-kuma/docker-compose.yml > /dev/null <<'EOF'
services: uptime-kuma: image: louislam/uptime-kuma: container_name: uptime-kuma restart: always ports: - "3001:3001" volumes: - uptime-kuma-data:/app/data
volumes: uptime-kuma-data:
EOF
起動。
cd /opt/uptime-kuma
sudo docker compose up -d

使い方

ダッシュボード(管理画面)と公開ページに分かれているので、それぞれをセットアップする必要があります。

セットアップ

どこにも送信されないので適当にユーザー名とPWを入れます。公開する人は複雑なパスワードにしておきましょう。

ステータスページの作成

公開ページ(こんな感じのサイト)のURLを設定します。

監視対象の追加

監視対象を追加します。先頭のページに戻り、監視の追加ボタンを押します。

赤枠を入力してください。※自分の監視対象のURLに適宜書き換えてください。

他人のサイトや、管理権限のないURLを無断で監視対象に追加しないでください。
Uptime Kumaは定期的にアクセスを行うため、設定によっては相手サーバーへの負荷や迷惑行為、DoSとみなされる可能性があります。
監視対象は、自分が管理しているサイト、または許可を得ているサイトのみにしてください。

色々な通信タイプがあります。Dockerなどを直接監視できるのはいいですね。

ステータスページに追加

このままだと死活監視が追加されただけで、公開の方にはまだ表示されません。表示されるようにしていきましょ う。先ほど作成したTestページに追加します。

全て終わったら左下の保存を押せば設定完了です。

http://serverurl/status/testにアクセスすればこんな感じで表示されると思います。

そのほかできること

そのほかできることを箇条書きにまとめてみました。

不具合が起きた時、復旧した時にDiscordなどに通知を飛ばせるのは便利ですね

  • Discord、Slack、Telegram、メールなどに通知を送れる
  • WebサイトやAPIの死活監視ができる
  • DNS・WebSocket・TCPレコード・Docker・Pingを監視できる
  • コンテナの状態を監視できる
  • SSL証明書の有効期限を確認できる
  • サービス停止時だけでなく、復旧時にも通知を受け取れる
  • メンテナンス予定を登録できる
  • 複数のステータスページを作成できる
  • 稼働状況を示すバッジを作成できる
  • Prometheus形式でメトリクスを出力できる
  • 管理画面を2FAで保護できる

まとめ

筆者の運営しているマイクラサーバーや、ブログなど様々な公開系サービスの死活管理に利用できたらな〜と淡く考えています。