DockerでUptime Kumaをセルフホストする:推測に頼らずHomeLabの監視を始めよう

HomeLab tutorial - IT technology blog
HomeLab tutorial - IT technology blog

サイレント障害の不満

金曜日の夜9時、家族から苦情が出始めました。映画を見ようとした矢先、Jellyfinサーバーにアクセスできなくなったのです。ログを調べてみると、単純な設定ミスで3時間前にコンテナがクラッシュしていました。私はそのことに全く気づいていませんでした。これはHomeLabにおける典型的な罠です。Home AssistantやTrueNASのようなサービスの構築には何週間も費やすのに、それらが停止したときに通知してくれるシステムの構築を忘れてしまうのです。

手動でURLをチェックするのは時間の無駄です。障害の報告を家族に頼るのはストレスの元でしかありません。この分野での経験から言えることは、最も重要な転換点は「起きた問題を直す」受動的な姿勢から「未然に防ぐ」プロアクティブな監視へと移行することです。Uptime Kumaはそのための完璧なツールです。UptimeRobotのようなプロフェッショナルなダッシュボードを提供しながら、ローカルのハードウェアで動作し、データをプライベートに保つことができます。

なぜUptime Kumaが優れた選択肢なのか

以前、ZabbixやNagiosといったエンタープライズ向けのツールを試したことがありますが、それらは強力な反面、設定だけでフルタイムの仕事のような労力が必要でした。Uptime Kumaは完璧なバランスを保っています。通常、RAMの使用量は200MB未満で、Raspberry Piや古いNUCでの運用に最適です。以下が、あなたのスタックに加えるべき理由です:

  • 多彩な監視項目: Webサイトだけでなく、DNSレコード、Dockerコンテナ、Steamゲームサーバー、さらには特定のTCP/UDPポートまで追跡できます。
  • 即時の通知: 90以上のサービスをサポートしています。ドライブの故障やサービスのハングアップが発生すると、数秒以内にTelegram、Discord、またはSlackに通知が届きます。
  • 美しいステータスページ: 公開用のページを作成して、99.9%の稼働率を誇示したり、メンテナンス中に他のユーザーへ情報提供したりできます。
  • Dockerによる簡素化: 1つのDocker Composeファイルで、2分以内にシステム全体をデプロイできます。

Docker Composeを使用したUptime Kumaのデプロイ

私は常に、基本的なdocker runコマンドよりもDocker Composeを推奨しています。設定が整理され、アップデートも非常に簡単になるからです。以下は、私が本番環境で使用している実際の設定です。

1. ディレクトリ構造の準備

監視データを永続化し、整理しておくための専用フォルダを作成します。

mkdir -p ~/homelab/uptime-kuma
cd ~/homelab/uptime-kuma

2. Docker Composeファイルの作成

docker-compose.ymlという名前のファイルを作成し、以下の設定を貼り付けます。永続ボリュームを使用することで、コンテナの再起動時に履歴やアラート設定が失われないようにします。

version: "3.8"
services:
  uptime-kuma:
    image: louislam/uptime-kuma:1
    container_name: uptime-kuma
    volumes:
      - ./data:/app/data
      - /var/run/docker.sock:/var/run/docker.sock
    ports:
      - "3001:3001"
    restart: always

プロのヒント: /var/run/docker.sockのマッピングは非常に強力です。これにより、Uptime KumaがDockerエンジンと直接通信できるようになります。コンテナが停止した場合、KumaはHTTPタイムアウトを待つことなく、即座に状態の変化を検知します。

3. サービスの起動

次のコマンドでコンテナを起動します:

docker-compose up -d

起動したら、ブラウザでhttp://your-server-ip:3001にアクセスしてください。管理者アカウントの作成を求められるので、強力なパスワードを設定しましょう。このダッシュボードが、最終的にネットワークインフラ全体のステータスを管理することになります。

最初のモニターを設定する

インターフェースはクリーンですが、いくつかの微調整を行うことでアラートの信頼性が大幅に向上します。Jellyfinのようなサービスに対する標準的なチェックを設定してみましょう。

  1. [新規モニターを追加]をクリックします。
  2. モニタータイプ: 「HTTP(s)」を選択します。
  3. フレンドリー名: 「メディアサーバー」のように分かりやすい名前を付けます。
  4. URL: 内部IPまたはローカルドメインを入力します。
  5. ハートビート間隔: 60秒に設定します。5秒ごとのチェックは、ほとんどのHomeLabにとって過剰であり、不要なログを増やすだけです。
  6. リトライ: 3に設定します。これにより、1秒程度のネットワークの瞬断による誤報(フラッピング)を防ぐことができます。

前のステップでDockerソケットをマッピングした場合は、「Dockerコンテナ」モニタータイプを試してみてください。コンテナ名を入力するだけで、Kumaがそのライフサイクルステータスを直接追跡します。

万全な通知設定

監視ダッシュボードは、何かが壊れたときに教えてくれてこそ価値があります. Telegramは無料で設定が非常に簡単なため、HomeLab愛好家にとっての「王道」です。

Telegramアラートの設定

  1. Telegramで@BotFatherを検索して新しいボットを作成し、ボットトークンを保存します。
  2. @myidbotにメッセージを送り、固有のチャットIDを確認します。
  3. Uptime Kumaで、[設定] > [通知] > [通知を設定]に移動します。
  4. 「Telegram」を選択し、取得した情報を入力します。
  5. [テスト]をクリックします。スマホが震えたら、次の障害への備えは万全です。

バックアップとしてメール (SMTP)の設定もおすすめします。自宅のインターネットがダウンしてTelegramが機能しない場合でも、モバイルデータ通信に切り替えた際に受信トレイでアラートを確認できます。これにはGmailのアプリパスワードが最適です。

より快適に使うための高度なヒント

リバースプロキシによる安全なアクセス

テストにはポート3001で十分ですが、最終的にはstatus.yourdomain.comのようなクリーンなURLを使用すべきです。これにはNginx Proxy Managerが便利です。この方法を採る場合は、プロキシ設定でWebsocketsのサポートを有効にすることを忘れないでください。これがないと、ダッシュボードがリアルタイムで更新されません。

「監視ツールを監視する」戦略

Uptime Kumaを実行しているサーバー自体が停電したらどうなるでしょうか?通知エンジンがオフラインになるため、アラートは届きません。これを解決するために、私は月額5ドル程度の安いHetznerやDigitalOceanのVPSで2つ目のUptime Kumaインスタンスを動かしています。Push型モニターを使用して、自宅からVPSへハートビートを送信します。VPSがそのハートビートを受信できなくなると、アラートを送信するようにします。これにより、自宅の全停電時でも状況を把握できます。

タグで整理する

ラボが成長するにつれ、モニターの数は40や50に増えるかもしれません。タグ機能を使用して、「ネットワーク」「ストレージ」「外部」といったカテゴリーにグループ化しましょう。これにより、ダッシュボードのフィルタリングや、グループ全体への特定の通知ルールの適用が容易になります。

まとめ

Uptime Kumaを導入することは、趣味のレベルを脱し、自分のインフラをプロフェッショナルな配慮を持って管理し始める瞬間です。それは安心感をもたらしてくれます。ハードドライブの故障やコンテナのクラッシュを、家族の誰かが気づくよりもずっと前に知ることができるようになります。緑色の稼働状況バーが並んでいるのを見れば、これなしでどうやってサーバーを管理していたのか不思議に思うはずです。

Share: