Uptime Kuma:VPSに自分専用のWebサイト監視環境を構築する
Webサイトは壊れていても 200 OK を返し続けることがあります。バックアップも、目立ったエラーを出さずに停止することがあります。Uptime Kumaはこの両方を検出できます。Webサイト、API、ポート、バックグラウンド処理を確認し、問題が発生すると通知を送信します。
この記事では、監視環境をどこに置くべきか、どの程度のVPSが必要か、Uptime Kuma 2のインストール、HTTPS、Telegram、ステータスページの設定方法を説明します。
7ステップで導入するUptime Kuma
- 監視対象のプロジェクトとは別に、小規模なVPSを用意する。
monitor.example.comなどのサブドメインをVPSへ向ける。- Dockerをインストールし、Uptime Kuma 2を起動する。
- 内部ポート
3001を外部から閉じ、HTTPSを設定する。 - HTTP、DNS、TCP、Pushの各モニターを作成する。
- Telegramを設定し、必要に応じてステータスページを作成する。
- 更新手順と、データディレクトリの外部バックアップを用意する。
Uptime Kumaとは
Uptime Kumaは、無料で利用できるオープンソースの自己ホスト型ツールです。ダッシュボードとチェック履歴は、自分のサーバーに保存されます。
HTTP(S)、TCPポート、ping、DNS、WebSocket、レスポンス内のテキストやJSON、Pushシグナル、Dockerコンテナを監視できます。最短のチェック間隔は20秒です。さらに、多数の通知先、2FA、応答遅延グラフ、TLS証明書の監視、複数のステータスページにも対応しています。
200 OK の裏に隠れた障害を見つける方法
通常のHTTPチェックで確認できるのは、レスポンスコードだけです。しかし、Webサーバーが空白ページやアプリケーションのエラー画面を表示しながら、成功ステータスを返すことがあります。
より正確に監視するには、次の機能を使います。
- Keyword — サイト名や「アカウント画面」など、表示されるはずの文字列を探す;
- JSON Query — APIレスポンス内の値を確認する。たとえば
status: healthy。
これにより、ポートへ接続できるだけでなく、アプリケーションが正常に動作している最低限の条件も確認できます。
バックアップとcron用のPushモニター
Pushモニターはサービスを定期的に問い合わせるのではなく、サービス側から送られてくる定期シグナルを待ちます。バックアップスクリプトやcronジョブは、正常終了した後に固有のURLへアクセスします。シグナルが予定どおり届かなければ、Uptime Kumaが障害として通知します。
この仕組みにより、「サイトは動いているが、毎日のバックアップが数日間作成されていない」といった静かな問題を発見できます。
Uptime Kumaでは代替できないもの
Uptime Kumaが主に監視するのは、可用性と応答時間です。CPU、RAM、ディスク、ログ、コンテナメトリクスについては、Prometheus、Netdata、Zabbixなどの監視システムを併用します。Kumaは外部から問題を検出し、メトリクスは原因の特定に役立ちます。
監視環境を別のVPSに置くべき理由
Uptime KumaをWebサイトと同じ場所にインストールすると、VPS、ネットワーク、データセンターの障害によって、プロジェクトと監視環境が同時に停止する可能性があります。その場合、通知も送信されません。
ダッシュボードは別のVPSに配置し、重要なプロジェクトでは別地域または別事業者を選びます。また、Kuma自体を外部サービスで監視するのも有効です。監視システムそのものにも監視が必要です。
Uptime Kumaのサーバー要件
このプロジェクトでは、CPUとRAMについて厳密な公式最小要件を定めていません。小規模な環境で実用的な開始構成は次のとおりです。
- 1 vCPU;
- 1 GB RAM;
- 10 GB SSD;
- Ubuntu 24.04 LTS;
- IPv4;
- HTTPS用のドメインまたはサブドメイン。
この構成で、通常は数十件の単純なチェックを実行できます。数百件のモニター、長期間の履歴保存、ブラウザチェックを利用する場合は、2 GB以上のRAMを選びます。
VPSにUptime Kumaをインストールする方法
この例では、Ubuntu 24.04とサブドメイン monitor.example.com を使用します。
1. DNSとファイアウォールを設定する
VPSのIPv4アドレスを指すDNSの A レコードを作成します。SSHで接続し、必要なポートを開きます。
ssh root@SERVER_IP
apt update && apt upgrade -y
ufw allow OpenSSH
ufw allow 80/tcp
ufw allow 443/tcp
ufw --force enable新しい接続を確認するまでは、現在のSSHセッションを閉じないでください。
2. DockerとDocker Composeをインストールする
apt install -y ca-certificates curl
install -m 0755 -d /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg \
-o /etc/apt/keyrings/docker.asc
chmod a+r /etc/apt/keyrings/docker.asc
tee /etc/apt/sources.list.d/docker.sources > /dev/null <<EOF
Types: deb
URIs: https://download.docker.com/linux/ubuntu
Suites: $(. /etc/os-release && echo "${UBUNTU_CODENAME:-$VERSION_CODENAME}")
Components: stable
Architectures: $(dpkg --print-architecture)
Signed-By: /etc/apt/keyrings/docker.asc
EOF
apt update
apt install -y docker-ce docker-ce-cli containerd.io \
docker-buildx-plugin docker-compose-plugin
docker compose version3. Uptime Kuma 2を起動する
mkdir -p /opt/uptime-kuma
cd /opt/uptime-kuma
cat > compose.yaml <<'EOF'
services:
uptime-kuma:
image: louislam/uptime-kuma:2
restart: unless-stopped
ports:
- "127.0.0.1:3001:3001"
volumes:
- ./data:/app/data
EOF
docker compose up -d
docker compose psタグには :2 を使用します。latest は現在も古いv1ブランチを指しています。/app/data ディレクトリは、ローカルディスクまたは通常のDocker volumeに配置する必要があります。NFSや、適切なファイルロックに対応していないストレージでは、データベースが破損する可能性があります。
ポート 3001 は 127.0.0.1 からのみアクセスできます。外部公開は、HTTPS対応のリバースプロキシを通じて行います。
4. CaddyでHTTPSを設定する
apt install -y caddy
cat > /etc/caddy/Caddyfile <<'EOF'
monitor.example.com {
reverse_proxy 127.0.0.1:3001
}
EOF
caddy validate --config /etc/caddy/Caddyfile
systemctl reload caddyDNSがVPSを指していれば、CaddyはTLS証明書を自動的に取得し、WebSocketもプロキシします。ダッシュボードはドメインまたはサブドメインのルートに配置してください。example.com/kuma のようなURLはサポートされていません。
5. 管理者アカウントを作成する
https://monitor.example.com を開き、長くて一意なパスワードでアカウントを作成し、二要素認証を有効にします。
最初のモニターを追加する方法
Add New Monitor をクリックし、HTTP(s) を選択します。
- 名前と完全なURLを入力する。
- たとえば60秒のチェック間隔を設定する。
- 一時的なネットワーク障害による誤検知を避けるため、再試行を2回設定する。
- 通知先を選択する。
- モニターを保存し、成功したチェックが表示されることを確認する。
メインサイトにはHTTPとKeywordチェック、APIにはヘルスチェック用エンドポイントとJSON Queryが役立ちます。監視のためだけに、データベースや管理ポートをインターネットへ公開しないでください。信頼できるネットワークまたはVPNを使用します。
バックアップ用Pushモニターの例
Push タイプのモニターを作成した後、固有URLをスクリプトの末尾へ追加します。
backup-command && \
curl -fsS "https://monitor.example.com/api/push/SECRET_TOKEN?status=up&msg=backup-ok"リクエストは、バックアップが成功した場合にのみ実行されます。Pushトークンはパスワードと同様に扱ってください。URLを知っている第三者は、偽の成功シグナルを送信できます。
Telegramを接続する方法
@BotFather でBotを作成し、そのBotへメッセージを送信します。次に Settings → Notifications → Telegram を開きます。Bot TokenとChat IDを入力し、Test をクリックして、通知先をモニターへ割り当てます。重要なサービスでは、メールなど2つ目の通知先も追加します。
ステータスページを作成する方法
Status Pages では、モニターをグループ化し、現在の状態と稼働履歴を表示し、ドメインを割り当て、Maintenanceを使って計画メンテナンスを告知できます。内部IPや技術的なURLは公開しないでください。利用者には「Webサイト」「API」「アカウント画面」「決済」などの項目だけで十分です。
更新とバックアップ
大きな更新の前には、コンテナを停止してデータディレクトリを保存します。
cd /opt/uptime-kuma
docker compose down
tar -czf /root/uptime-kuma-$(date +%F).tar.gz \
data compose.yaml
docker compose up -dアーカイブは別の機器または外部ストレージへ移動します。同じVPS上に置いたコピーでは、サーバー削除やディスク障害から保護できません。
通常の更新では、次のコマンドを実行します。
cd /opt/uptime-kuma
docker compose pull
docker compose up -d --force-recreate起動後に docker compose ps、ダッシュボード、テスト通知を確認します。
Uptime Kumaに適したVPSの選び方
小規模な環境であれば、1 vCPUと1 GB RAMのLinux VPSで十分です。性能よりも独立性が重要です。メインプロジェクトが停止している間も、監視環境は動作し続ける必要があります。
監視対象のサービスが別のプラットフォームまたは独立したノード上にある場合、Uptime Kumaを tropic.host のVPSに配置できます。Ubuntu、Docker、固定IPによってダッシュボードをすばやく起動でき、チェック数が増えたときにはリソースを拡張できます。
本番環境がすでに同じインフラ上にある場合は、別のノードを選ぶか、外部の予備モニターを追加します。障害点を分離することは、CPUコアを1つ増やすことよりも有効です。
よくあるミス
| ミス | 問題になる理由 | 推奨される方法 |
|---|---|---|
| 監視環境をプロジェクトと同じ場所に置く | 共通障害でサービスと通知の両方が停止する | 別のVPSまたは地域を使う |
ポート 3001 を外部公開する | リバースプロキシやHTTPSなしでダッシュボードへアクセスできる | ポートを 127.0.0.1 にバインドする |
200 コードだけを確認する | アプリケーション障害が成功として見えることがある | KeywordまたはJSON Queryを追加する |
latest タグを使う | 古いv1ブランチを指している | louislam/uptime-kuma:2 を使う |
| バックアップを同じVPSに保存する | サーバーと一緒に失われる | data ディレクトリを外部へコピーする |
まとめ
Uptime Kumaを使うと、小規模なVPSをWebサイト、API、DNS、ポート、証明書、バックグラウンド処理のための専用監視センターにできます。Keywordは壊れたページを、JSON Queryは誤ったAPIレスポンスを、Pushは停止したバックアップやcronジョブを検出します。
信頼できる構成にするには、監視環境を本番環境から分離し、ポート 3001 を閉じ、HTTPS、2FA、2つの通知先を設定します。さらに、データディレクトリを外部へバックアップし、Uptime Kuma自体も独立した方法で監視します。
FAQ
Uptime Kumaは無料ですか?
はい。MITライセンスで公開されているオープンソースプロジェクトです。費用がかかるのは、インフラ、ドメイン、外部バックアップだけです。
Uptime KumaにはどのくらいのRAMが必要ですか?
小規模な環境では、1 GB RAMから始めるのが現実的です。数百件のチェック、長期間の履歴、Browser Engineを利用する場合は、2 GB以上を割り当てます。
Dockerを使わずにUptime Kumaをインストールできますか?
はい。Node.jsとPM2を使ってインストールできます。ただしVPSでは、通常Docker Composeのほうが更新、移行、復元を簡単に行えます。
ドメインなしでUptime Kumaを使えますか?
技術的には、IPアドレスまたはSSHトンネル経由で利用できます。インターネットから継続的にアクセスする場合は、サブドメインとHTTPSを使うほうが安全です。
Uptime KumaでCPU、RAM、ディスク使用量を確認できますか?
本格的なサーバーメトリクスシステムとしては使えません。サーバーリソースの監視には、Prometheus、Netdata、Zabbixなどの専用ツールを併用してください。
