Site icon rpine lab Tech Blog

趣味のプログラミング(Web系・バックエンド)や自宅ラボ(Homelab)構築・マイコンを使った電子工作などを雑多に扱った技術ブログです。

👁️ Uptime Kumaによるシンプルなネットワーク監視

はじめに

家のインターネット接続が不安定で、YouTubeライブが途中で切れてしまったりWebサイトが一瞬見れなくなったりすることが多々発生していました。これらの原因切り分けのために、家から外部インターネットへの接続状況を常時監視したいと思い、ネットワーク監視ツールを色々探していました。

探した中でUptime Kumaというツールが一番簡単に使えそうだったので、今回はこれの紹介をします。

Uptime Kuma

Uptime Kumaはセルフホスト型のシンプルなネットワーク監視ツールです。Webベースのダッシュボードで各種サービスのステータスを視覚的に分かりやすいグラフとしていい感じに表示してくれます。とりあえず何かしらのサービスが動いているかどうかを監視したい場合に向いていると思います。

主な監視対象

  • HTTP(s): Webサイトの可用性やレスポンス時間の監視
  • TCP: 任意のネットワークサービスの監視
  • Ping: ルーターやスイッチなどのネットワーク機器の死活監視・疎通チェック
  • DNS Record: DNSサーバーの応答確認

機能

  • 多様な通知対象(メール, Slack, Discord, LINE など)
  • 日本語を含む多言語対応
  • SSL/TLS証明書の有効期限監視(Let's Encryptを使っている場合など)
  • 2要素認証対応のWeb UIへのログイン認証機能
Uptime Kumaによる監視画面
Uptime Kumaによる監視画面

構築環境

  • デプロイ先:Windows 11 + WSL2 (Ubuntu 20.04) + microk8s
  • Uptime Kuma バージョン: 1.23.13
  • Helmチャート(uptime-kuma)バージョン: 2.21.2

インストール

Uptime KumaにはDockerイメージが用意されているので、簡易的な利用であればDockerコマンド1行ですぐ使えます。

docker run -d --restart=always -p 3001:3001 -v uptime-kuma:/app/data --name uptime-kuma louislam/uptime-kuma:1
Dockerでの実行コマンド

しかし、敢えて今回は汎用性を考えてKubernetesを使った構築方法を説明したいと思います。説明をローカル環境で完結させたいのでmicrok8s環境で説明しますが、microk8s以外のKubernetesにデプロイしたい場合はコマンドの頭についているsudo microk8sを抜いて実行してください。

KubernetesへのデプロイにはHelmを利用し、チャートとして dirsigler/uptime-kuma-helm (Uptime Kumaとは別の作者による非公式チャート)を使います。

  1. (必要に応じて)microk8s環境のセットアップ
    sudo snap install microk8s --classic
    sudo microk8s status --wait-ready
    
    # アドオンの追加(永続ストレージが必要なため)
    sudo microk8s enable hostpath-storage
  2. Helmレポジトリーの追加
    sudo microk8s helm repo add uptime-kuma https://helm.irsigler.cloud
  3. uptime-kumaチャートのインストール
    sudo microk8s helm install my-uptime-kuma uptime-kuma/uptime-kuma --namespace monitoring --create-namespace

Uptime Kumaへのアクセス

  1. Uptime Kumaのポッドに対するポートフォワードを実行
    export POD_NAME=$(sudo microk8s kubectl get pods --namespace monitoring -l "app.kubernetes.io/name=uptime-kuma,app.kubernetes.io/instance=my-uptime-kuma" -o jsonpath="{.items[0].metadata.name}")
    export CONTAINER_PORT=$(sudo microk8s kubectl get pod --namespace monitoring $POD_NAME -o jsonpath="{.spec.containers[0].ports[0].containerPort}")
    sudo microk8s kubectl --namespace monitoring port-forward $POD_NAME 3001:$CONTAINER_PORT
  2. http://127.0.0.1:3001にアクセス
  3. 初回のみ管理者ユーザーの作成画面が出るのでAdminアカウントを作成
    Uptime Kuma初期画面 日本語にも対応しています
    Uptime Kuma初期画面 日本語にも対応しています
  4. ダッシュボード画面が表示されます。

監視対象の追加

左上の監視の追加から監視サービスを追加できます。監視間隔は最短 20 秒までが設定可能です。

監視対象設定画面
監視対象設定画面

実際の監視設定例

参考までに実際に稼働させたUptime Kumaのダッシュボードをお見せします。

追加している監視対象は次の4つです。

  • External Connectivity (GCP)
    • 目的: 家から外部へのインターネット接続状況や安定性の確認
    • 方式: GCPに構築したサーバーへの疎通チェックや応答時間の監視 (Ping)

    (適当に8.8.8.8に向けてもいいが、テスト以外でPingを継続的に送りまくるのは行儀が良くない気がするので自分で建てたサーバーに向け設定)

  • IX router
    • 目的: ルーターの稼働状況確認
    • 方式: 家に設置しているルーター(IX2215)への疎通チェック (Ping)
  • rpine lab site, rpine lab Tech Blog
    • 目的: 自Webサイトの可用性確認
    • 方式: HTTPS監視
Uptime Kumaによる監視画面(再掲)
Uptime Kumaによる監視画面(再掲)

通知設定

通知設定ボタンから設定できます。通知先としてはSlackやDiscordの他LINEにも対応しています。(各種サービスのAPIキーの発行や開発アカウントなどが必要)

Uptime Kuma通知設定
Uptime Kuma通知設定

Slackの通知はこんな感じです。

Slack通知
Slack通知

まとめ

Uptime Kumaを使ったネットワーク監視システムの構築方法について解説しました。シンプルながら必要十分な機能を持っており、簡単な設定で本格的なサービス監視ダッシュボードが作成できます。本記事で紹介した設定例を参考に、ご自身の環境でのネットワーク監視を始めてみてはいかがでしょうか。