無料サーバープローブシステムが必要な理由

3台以上のVPSを異なるデータセンターや地域に分散して持っている場合、次のような状況を経験したことがあるでしょう:あるサーバーが突然ダウンし、お客様からクレームが来るか、サービスが数時間オフラインになっていることに気づくまで、全くわからない。

従来の解決策は限られています:UptimeRobotなどの商用監視サービスにお金を払うか、自分でPrometheus + Grafanaを構築する——前者は機能が制限され、後者は追加の監視サーバーを維持する必要があります。個人の開発者や小規模チームにとって、これらの解決策は十分にエレガントではありません。

CF-Server-Monitorはよりスマートな選択肢を提供します:Cloudflareの無料枠で完全に動作するマルチサーバー監視システム。独自のサーバーは不要で、有料サブスクリプションも不要で、ダッシュボード、API、データベース、リアルタイムプッシュはすべてCloudflareのエッジネットワーク上で動作します。現在、このプロジェクトはGitHubで1,500以上のスターを獲得し、多くのVPS愛好家や小規模チームに採用されています。

プロジェクト概要:CF-Server-Monitorとは

CF-Server-Monitorは、Cloudflare Workersにデプロイされる軽量なマルチサーバー監視ダッシュボードで、主要な技術スタックは次のとおりです:

  • Cloudflare Workers:APIリクエストとエージェントの報告を処理するエッジコンピューティング関数
  • Cloudflare D1:監視データを永続的に保存するエッジSQLiteデータベース
  • Durable Objects:WebSocketを介してフロントエンドにリアルタイムプッシュを行うステートフルオブジェクト
  • Vue.jsフロントエンド:レスポンシブな監視ダッシュボードと管理バックエンド
  • Goエージェント:監視対象サーバーにインストールされる軽量プローブ

設計思想は非常にシンプルです:エージェントがWorkerにメトリクスを一方的に報告し、WorkerがD1に書き込んでフロントエンドにブロードキャストする。WebSSHもなく、リモートコマンドの実行もなく、マスターチャネルもありません——これにより、従来のプローブよりも安全です。

主要機能一覧

機能モジュール 具体的な機能
リアルタイム監視 CPU、GPU、メモリ、スワップ、ディスク、ディスクIO、ネットワークトラフィック、接続数、プロセス数、負荷、稼働時間
履歴データ 7日間の履歴チャート、長期間サンプリング、リアルタイムネットワーク速度、月間トラフィック統計と補正
ネットワーク品質 中国電信/聯通/移動/BGPノードの遅延とパケット損失率の追跡
マルチビューダッシュボード 棒グラフ、リングチャート、テーブル、マップビュー、デスクトップとモバイルの適応
管理バックエンド サーバーの追加/削除/編集、ドラッグ&ドロップでの並べ替え、サーバーの非表示、インポート/エクスポート、バッチ操作
クロスプラットフォームエージェント Linux、Alpine、OpenWrt、Synology DSM、fnOS、FreeBSD、macOS、Windows
リアルタイムプッシュ Durable Objects + WebSocket、エージェント報告後にフロントエンドが即座に更新
アラート通知 オフラインアラート、復旧通知、期限切れリマインダー、リソース負荷アラート
テーマエコシステム 組み込みテーマ、テーマストア、サードパーティテーマのリバースプロキシとプレビュー
多言語 フロントエンドに中国語/英語の切り替えを内蔵

Cloudflare Workers + D1を選択する理由

ゼロコストで運用

Cloudflareの無料枠は非常に寛大です:

  • Workers:1日10万リクエスト
  • D1:1日500万行の読み取り、10万行の書き込み
  • Durable Objects:1日10万リクエスト

CF-Server-Monitorはこれらの枠に合わせて特別に最適化されています:デフォルトの60秒報告間隔で約60台のサーバーをサポートし、120秒に変更すると理論上2倍になります。履歴クエリはサンプリング戦略を採用し、月次データテーブルは自動的にローテーションし、キャッシュとレート制限設計と組み合わせて、無料枠を超えないようにしています。

グローバルエッジコンピューティング

Cloudflareは世界中の300以上の都市にエッジノードを持っています。Workersはユーザーに最も近いノードで実行され、API応答遅延は非常に低いです。D1データベースもエッジアーキテクチャに基づいており、読み書き操作はすべてエッジで完了し、中央サーバーに戻る必要はありません。

保守不要

パッチを当てる必要があるサーバーもなく、再起動が必要なDockerコンテナもなく、バックアップが必要なデータベースもありません。Cloudflareがすべてのインフラをホストしており、監視対象のサーバー自体に集中するだけで済みます。

他の監視ツールとの比較

機能 CF-Server-Monitor UptimeRobot Prometheus + Grafana Netdata
費用 無料(Cloudflare無料枠) 無料版50個の監視 無料(独自サーバー必要) 無料(独自サーバー必要)
独自サーバー必要 いいえ いいえ はい はい
サーバーメトリクス CPU/メモリ/ディスク/ネットワーク全メトリクス HTTPステータスコードのみ 全メトリクス(設定必要) 全メトリクス
リアルタイムプッシュ WebSocket即時プッシュ ポーリング 追加設定必要 リアルタイム
保守コスト ゼロ(Cloudflareがホスト) ゼロ 高い(サーバー保守必要) 中程度
オフラインアラート サポート(Telegram/WeChat/DingTalk等) サポート(制限あり) Alertmanager設定必要 サポート
履歴データ 7日間 解決策による 無制限(ストレージによる) 制限あり
セキュリティ 一方的報告、リモートチャネルなし N/A 自分で強化必要 WebSSHリスクあり

複数のVPSを所有する個人の開発者や小規模チームにとって、CF-Server-Monitorはコストと利便性の面で明確な優位性があります。PB規模の履歴データやエンタープライズSLAが必要な場合は、Prometheus + Thanosの方が適しているかもしれません。

システムアーキテクチャ解析

┌─────────────────┐     POST /update     ┌──────────────────────┐
│  Server Agent   │ ───────────────────> │  Cloudflare Worker   │
│  (Go/Shell/PS)  │                      │  (エッジコンピューティング)│
└─────────────────┘                      └──────────┬───────────┘
                                                    │
                                        ┌───────────┼───────────┐
                                        │           │           │
                                   ┌────▼───┐ ┌────▼────┐ ┌───▼────┐
                                   │  D1    │ │Durable  │ │ Vue    │
                                   │ SQLite │ │Objects  │ │フロント │
                                   │ データ │ │WebSocket│ │エンド   │
                                   │ ベース │ │         │ │ダッシュ │
                                   └────────┘ └────┬────┘ └───┬────┘
                                                    │          │
                                               ┌────▼──────────▼───┐
                                               │ ブラウザ/モバイル │
                                               │ リアルタイムデータ │
                                               │ 表示              │
                                               └───────────────────┘

主要なデータフロー:

  1. 管理バックエンドでサーバーを追加し、インストールコマンドをコピー
  2. 対象サーバーにエージェントをインストールし、設定された間隔でWorkerにメトリクスを送信
  3. WorkerがAPI_SECRETを検証し、D1に書き込み、Durable Objectを介してリアルタイムデータをブロードキャスト
  4. フロントエンドダッシュボード、詳細ページ、管理バックエンド、iOSウィジェットが同じAPIを読み取る

実践デプロイ:ゼロから監視システムを構築

事前準備

  • Cloudflareアカウント(無料版で十分)
  • GitHubアカウント
  • 十分に複雑なAPI_SECRET(エージェント報告キーと初期バックエンドパスワードを兼ねる)

方法1:Cloudflare WorkersがGitHubに接続(推奨)

これが最も手間のかからないデプロイ方法で、後の更新も簡単に同期できます。

ステップ1:リポジトリをフォーク

CF-Server-Monitor GitHubリポジトリにアクセスし、Forkボタンをクリックします。

ステップ2:Workerを作成

  1. Cloudflareダッシュボードにログイン
  2. Workers & Pagesに移動
  3. 「Workerを作成」をクリック
  4. 「GitHubリポジトリを接続」を選択し、フォークしたリポジトリをインポート

ステップ3:ビルドを設定

  • ビルドコマンド:npm run build:frontend
  • デプロイコマンド:npx wrangler deploy

ステップ4:環境変数を追加

WorkerのVariables and Secretsに追加:

変数名 値 説明
API_SECRET 強力なパスワード エージェント報告キー + 初期バックエンドパスワード

ステップ5:デプロイ

デプロイをクリックし、ビルドが完了するのを待ちます。デプロイが成功すると、xxx.workers.devドメインが取得できます。

方法2:GitHub Actions自動デプロイ

GitHubを介してデプロイプロセスを完全に管理したいユーザーに適しています。

  1. リポジトリをフォーク
  2. CloudflareでD1データベースを作成(名前推奨:server-monitor-db)
  3. Cloudflare Account IDをコピー
  4. Cloudflare APIトークンを作成(Workers編集とD1デプロイ権限が必要)
  5. フォークしたリポジトリのSettings → Secrets → Actionsに追加:
YAML
CF_API_TOKEN: Cloudflare APIトークン
CF_ACCOUNT_ID: Cloudflare Account ID
D1_DATABASE_ID: D1データベースID
API_SECRET: 強力なパスワード
CORS_ALLOWED_ORIGINS: (オプション)許可されるクロスオリジンソース

mainブランチにプッシュすると自動的にデプロイされます。

方法3:ワンクリックデプロイ

Deploy to Cloudflare Workers

ワンクリックデプロイは快速な体験に適していますが、長期保守の場合は前述の2つの方法に移行することをお勧めします。

初回使用:バックエンドにログインしてサーバーを追加

管理バックエンドにログイン

デプロイ成功後にアクセス:

TEXT
https://あなたのWorkerドメイン/admin#/admin

デフォルトの認証情報:

  • ユーザー名:admin
  • パスワード:設定したAPI_SECRET

ログイン後、直ちに管理者ユーザー名とパスワードを変更してください。 バックエンドパスワードはAPI_SECRETから分離できます——エージェント報告は引き続き環境変数のAPI_SECRETを使用しますが、バックエンドログインパスワードは独立して設定できます。

最初のサーバーを追加

  1. /admin#/adminに移動
  2. 「サーバー管理」でサーバー名を入力
  3. 「サーバーを追加」をクリック
  4. コピーボタンをクリックし、対象システムとエージェントバージョンを選択
  5. 生成されたインストールコマンドを対象サーバーで実行

バックエンドで生成されるコマンドには、サーバーID、Worker URL、Secret、報告間隔などのパラメータが自動的に含まれ、手動で結合するよりも信頼性が高くなります。

監視対象サーバーの設定:エージェントのインストールとデータ報告

Goエージェント(推奨)

v2.8.3から、独立したcfsm-agent(Go言語で記述)がデフォルトで使用され、インストール後のサービス名はcf-probeです。

非rootインストール(推奨)

systemd --userをサポートするLinux環境では、非rootユーザーでのインストールをお勧めします:

BASH
# 通常ユーザーに切り替え
su - youruser

# バックエンドで生成されたインストールコマンドを実行(例)
curl -sSL https://your-worker.example.com/install | bash -s -- \
  -id 1 \
  -secret "your-api-secret" \
  -url "https://your-worker.example.com" \
  -interval 60

インストール後、ファイルは~/.cf-probe/に書き込まれ、systemd --userを使用して自動起動を管理します。

ユーザーがログアウトした後もサービスを実行し続けたい場合:

BASH
# rootで実行
loginctl enable-linger youruser

rootインストール

非rootユーザーを使用できない場合は、直接rootでインストールすることもできます:

BASH
curl -sSL https://your-worker.example.com/install | bash -s -- \
  -id 1 \
  -secret "your-api-secret" \
  -url "https://your-worker.example.com"

エージェントの一般的なパラメータ

パラメータ 説明 デフォルト値
-id サーバーの一意のID 必須
-secret エージェント報告キー、API_SECRETと等しい必要がある 必須
-url Worker報告アドレス 必須
-collect_interval ローカルの追加収集間隔、0は追加サンプリングなしを意味する 0
-interval 報告間隔(秒) 60
-ct / -cu / -cm / -bd カスタムネットワーク品質テストノード 組み込みノード
-reset_day 月間トラフィックリセット日 1
-rx_correction 下り月間トラフィック補正(GB) 空
-tx_correction 上り月間トラフィック補正(GB) 空

サポートされるプラットフォーム

  • Linux:Ubuntu、Debian、CentOS、Rocky Linux、AlmaLinuxなどの主要ディストリビューション
  • Alpine Linux:OpenRCを使用して管理
  • OpenWrt:ルーターに最適
  • Synology DSM:NAS監視
  • fnOS:国産NASシステム
  • FreeBSD:BSD系サポート
  • macOS:開発マシン監視
  • Windows:PowerShellバージョン

監視ダッシュボード機能詳細

リアルタイムステータス表示

フロントエンドダッシュボードは4つのビューモードをサポート:

  • 棒グラフモード:各サーバーのCPU/メモリ/ディスク使用率を直感的に表示
  • リングチャートモード:コンパクトな表示、サーバー数が多いシナリオに適している
  • テーブルモード:詳細なデータリスト、ソートとフィルタリングをサポート
  • マップモード:地理的位置に基づいてサーバー分布を表示

各モードはデスクトップとモバイルの適応をサポートしています。

履歴データとチャート

  • 7日間履歴チャート:CPU、メモリ、ディスク、ネットワークトラフィックの時系列
  • 長期間サンプリング:履歴クエリはD1の超過を避けるためにサンプリング戦略を採用
  • リアルタイムネットワーク速度:アップロード/ダウンロード速度のリアルタイム曲線
  • 月間トラフィック統計:トラフィックリセット日と上り/下りの補正をサポート

ネットワーク品質監視

中国電信、聯通、移動、BGPの4ネットワークの遅延とパケット損失率の追跡をサポート。3ネットワーク詳細を有効にすると、ホームページはD1の過去2時間から最大20の実際のデータポイントを表示し、5分間キャッシュされます。

アラート通知

管理バックエンド → グローバル設定 → 通知で設定します。サポートされる通知チャネル:

プラットフォーム 設定方法
Telegram BotFather Bot Token + Chat ID
企業微信 グループボットWebhook URL
飛書 グループボットWebhook URL
釘釘 カスタムボットWebhook URL
Bark https://api.day.app/xxxx/
Server酱 https://sctapi.ftqq.com/<SendKey>.send
Gotify https://gotify.example.com/message?token=xxx
カスタムWebhook 任意のHTTP POSTエンドポイント

アラートタイプには:オフラインアラート、復旧通知、期限切れリマインダー、リソース負荷アラートが含まれます。

高度な設定

カスタムドメイン

CloudflareダッシュボードでWorkerにカスタムドメインをバインド:

  1. Worker設定 → トリガーに移動
  2. カスタムドメインを追加(例:monitor.yourdomain.com)
  3. CloudflareがSSL証明書とDNS解決を自動的に処理

複数Workerの集約

複数のWorkerインスタンス(異なるCloudflareアカウントに分散)がある場合、API_BASE環境変数を介して集約できます:

YAML
API_BASE: "https://worker1.example.com,https://worker2.example.com"

フロントエンドは同時に複数のWorkerにリクエストを送信し、統合して表示します。

GitHub Pages静的フロントエンド

プロジェクトはフロントエンドを静的サイトとしてビルドし、GitHub Pagesにデプロイすることをサポートしており、リモートWorker APIを介してデータを取得します:

BASH
# ビルドコマンド
npm run build:github-page

GitHub SecretsでAPI_BASEをWorkerアドレスに指向するように設定する必要があります。

iOS Scriptableウィジェット

プロジェクトはiOS Scriptableウィジェットスクリプトを提供し、iPhoneデスクトップに単一サーバーのステータスを表示できます:

  1. Scriptableアプリをインストール
  2. 新しいスクリプトを作成し、scripts/ios-scriptable-widget.jsの内容を貼り付け
  3. 上部のCONFIG.baseURLをサイトアドレスに変更
  4. Scriptableウィジェットを追加し、ParameterにサーバーIDを入力

ウィジェットはオンラインステータス、CPU、メモリ、ディスク、月間トラフィック、リアルタイム速度、更新時刻を表示します。

セキュリティ強化

  • Turnstile検証:バックエンドセキュリティ設定でCloudflare Turnstileを有効にし、ブルートフォース攻撃を防止
  • CORSホワイトリスト:CORS_ALLOWED_ORIGINSを介してAPIアクセスソースを制限
  • CSPポリシー:カスタムコンテンツセキュリティポリシー、XSS攻撃を防止
  • JWT Secret:API_SECRETから分離された独立したJWT署名キー

パフォーマンス最適化とコスト管理

Cloudflare無料枠の最適化

CF-Server-Monitorには複数の枠に優しい設計が組み込まれています:

  • 月次データテーブルローテーション:履歴データは月ごとに分割され、単一テーブルが大きくなりすぎるのを防止
  • 履歴クエリサンプリング:長期間範囲クエリは自動サンプリングを使用し、D1読み取り行を削減
  • キャッシュ戦略:3ネットワーク詳細データは5分間キャッシュされ、重複クエリを削減
  • レート制限設計:APIリクエスト頻度制限、悪意のあるインターフェーススパムを防止

報告間隔の調整

シナリオ 推奨間隔 サポートされるサーバー数
リアルタイム監視(60秒) -interval 60 約60台
通常監視(120秒) -interval 120 約120台
低電力監視(300秒) -interval 300 約300台

サーバー数が多い場合は、報告間隔を120秒以上に調整することをお勧めします。ほとんどのシナリオでは、2分の監視粒度で十分です。

WSS報告の最適化

v2.8.4ではWSS(WebSocket Secure)報告機能が導入されました。エージェントは特定の時間帯にWSSを使用して報告し、リアルタイムデータプッシュの適時性を向上させることができます。対象時間帯外では自動的にPOSTに切り替えられ、Durable Objectsの時間消費を削減します。

制限事項と注意事項

無料枠の境界

  • D1ストレージ上限:無料版D1データベースは最大500 MB、長期実行では履歴データを定期的にクリーンアップする必要がある
  • Workersリクエスト数:1日10万リクエスト、60台のサーバー × 60秒間隔 ≈ 86,400回/日、上限に近い
  • Durable Objects:無料版には並行制限があり、多数のフロントエンドが同時に接続するとレート制限がトリガーされる可能性がある

機能制限

  • 履歴データは7日間のみ:D1無料枠の制限により、7日を超えるデータはサンプリングまたはクリーンアップされる
  • WebSSHなし:セキュリティ上の理由から、リモートターミナル機能は提供されない(これは実際には利点)
  • Cloudflareへの依存:Cloudflareサービスが中断した場合、監視システムも使用できなくなる

セキュリティ推奨

  • 強力なパスワード:API_SECRETはランダムな強力なパスワードである必要があり、デフォルト値を使用しない
  • パスワードの timely変更:初回ログイン後、直ちに管理者ユーザー名とパスワードを変更
  • 非root実行:可能な限り非rootユーザーでエージェントをインストール
  • 定期的な更新:プロジェクトの更新に注目し、Workerとエージェントのバージョンを timelyにアップグレード

まとめ

CF-Server-Monitorは現在最もエレガントな無料サーバー監視ソリューションの一つです。Cloudflareの無料枠を巧みに利用し、ダッシュボード、API、データベース、リアルタイムプッシュをすべてエッジネットワーク上にホストし、真のゼロコスト、ゼロ保守を実現しています。

誰に適しているか:

  • 複数のVPSを所有する個人の開発者
  • 軽量監視が必要な小規模チーム
  • 監視サーバーを保守したくないユーザー
  • セキュリティに関心のあるユーザー(一方的報告、リモートチャネルなし)

誰に適していないか:

  • PB規模の履歴データが必要なエンタープライズユーザー
  • WebSSHとリモートコマンド実行が必要なユーザー
  • SLAに厳格な要件がある本番環境

無料、安全、使いやすいマルチサーバー監視ソリューションを探している場合、CF-Server-Monitorは試す価値があります。エンタープライズレベルのPrometheus + Grafanaソリューションを置き換えることはできないかもしれませんが、個人の開発者や小規模チームにとっては十分に優れています。

プロジェクトアドレス: https://github.com/huilang-me/CF-Server-Monitor オンラインデモ: https://demo.huilang.me/


よくある質問(FAQ)

1. CF-Server-Monitorは本当に完全に無料ですか?

はい、監視規模がCloudflareの無料枠内(1日10万Workersリクエスト、500万行D1読み取り)であれば、1銭も支払う必要はありません。デフォルトの60秒報告間隔で約60台のサーバーをサポートし、120秒に変更すると2倍になります。

2. データはどこに保存されますか?安全ですか?

データはCloudflare D1(エッジSQLiteデータベース)に保存され、Cloudflareによってホストされます。エージェントは一方的報告設計を採用し、WebSSHやリモートコマンド実行機能を提供せず、エージェントが侵害されてもサーバーをリモート制御することはできません。

3. どのオペレーティングシステムをサポートしていますか?

主要なLinuxディストリビューション(Ubuntu、Debian、CentOS等)、Alpine Linux、OpenWrt、Synology DSM、fnOS、FreeBSD、macOS、Windowsをサポートしています。デフォルトでGo言語で記述されたエージェントを使用し、パフォーマンスが良く、クロスプラットフォーム互換性が強いです。

4. オフラインアラート通知を受信するには?

管理バックエンド → グローバル設定 → 通知で設定します。Telegram、企業微信、飛書、釘釘、Bark、Server酱、Gotify、カスタムWebhookをサポートしています。設定後、サーバーがオフラインになると直ちに通知がプッシュされます。

5. カスタムドメインをバインドできますか?

はい。CloudflareダッシュボードのWorker設定でカスタムドメインを追加すると、CloudflareがSSL証明書とDNS解決を自動的に処理します。フロントエンドをGitHub Pagesにデプロイし、カスタムドメインを使用することもサポートしています。