無料サーバープローブシステムが必要な理由
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│ │エンド │
│ ベース │ │ │ │ダッシュ │
└────────┘ └────┬────┘ └───┬────┘
│ │
┌────▼──────────▼───┐
│ ブラウザ/モバイル │
│ リアルタイムデータ │
│ 表示 │
└───────────────────┘
主要なデータフロー:
- 管理バックエンドでサーバーを追加し、インストールコマンドをコピー
- 対象サーバーにエージェントをインストールし、設定された間隔でWorkerにメトリクスを送信
- Workerが
API_SECRETを検証し、D1に書き込み、Durable Objectを介してリアルタイムデータをブロードキャスト - フロントエンドダッシュボード、詳細ページ、管理バックエンド、iOSウィジェットが同じAPIを読み取る
実践デプロイ:ゼロから監視システムを構築
事前準備
- Cloudflareアカウント(無料版で十分)
- GitHubアカウント
- 十分に複雑な
API_SECRET(エージェント報告キーと初期バックエンドパスワードを兼ねる)
方法1:Cloudflare WorkersがGitHubに接続(推奨)
これが最も手間のかからないデプロイ方法で、後の更新も簡単に同期できます。
ステップ1:リポジトリをフォーク
CF-Server-Monitor GitHubリポジトリにアクセスし、Forkボタンをクリックします。
ステップ2:Workerを作成
- Cloudflareダッシュボードにログイン
- Workers & Pagesに移動
- 「Workerを作成」をクリック
- 「GitHubリポジトリを接続」を選択し、フォークしたリポジトリをインポート
ステップ3:ビルドを設定
- ビルドコマンド:
npm run build:frontend - デプロイコマンド:
npx wrangler deploy
ステップ4:環境変数を追加
WorkerのVariables and Secretsに追加:
| 変数名 | 値 | 説明 |
|---|---|---|
API_SECRET |
強力なパスワード | エージェント報告キー + 初期バックエンドパスワード |
ステップ5:デプロイ
デプロイをクリックし、ビルドが完了するのを待ちます。デプロイが成功すると、xxx.workers.devドメインが取得できます。
方法2:GitHub Actions自動デプロイ
GitHubを介してデプロイプロセスを完全に管理したいユーザーに適しています。
- リポジトリをフォーク
- CloudflareでD1データベースを作成(名前推奨:
server-monitor-db) - Cloudflare Account IDをコピー
- Cloudflare APIトークンを作成(Workers編集とD1デプロイ権限が必要)
- フォークしたリポジトリのSettings → Secrets → Actionsに追加:
CF_API_TOKEN: Cloudflare APIトークン
CF_ACCOUNT_ID: Cloudflare Account ID
D1_DATABASE_ID: D1データベースID
API_SECRET: 強力なパスワード
CORS_ALLOWED_ORIGINS: (オプション)許可されるクロスオリジンソース
mainブランチにプッシュすると自動的にデプロイされます。
方法3:ワンクリックデプロイ
ワンクリックデプロイは快速な体験に適していますが、長期保守の場合は前述の2つの方法に移行することをお勧めします。
初回使用:バックエンドにログインしてサーバーを追加
管理バックエンドにログイン
デプロイ成功後にアクセス:
https://あなたのWorkerドメイン/admin#/admin
デフォルトの認証情報:
- ユーザー名:
admin - パスワード:設定した
API_SECRET
ログイン後、直ちに管理者ユーザー名とパスワードを変更してください。 バックエンドパスワードはAPI_SECRETから分離できます——エージェント報告は引き続き環境変数のAPI_SECRETを使用しますが、バックエンドログインパスワードは独立して設定できます。
最初のサーバーを追加
/admin#/adminに移動- 「サーバー管理」でサーバー名を入力
- 「サーバーを追加」をクリック
- コピーボタンをクリックし、対象システムとエージェントバージョンを選択
- 生成されたインストールコマンドを対象サーバーで実行
バックエンドで生成されるコマンドには、サーバーID、Worker URL、Secret、報告間隔などのパラメータが自動的に含まれ、手動で結合するよりも信頼性が高くなります。
監視対象サーバーの設定:エージェントのインストールとデータ報告
Goエージェント(推奨)
v2.8.3から、独立したcfsm-agent(Go言語で記述)がデフォルトで使用され、インストール後のサービス名はcf-probeです。
非rootインストール(推奨)
systemd --userをサポートするLinux環境では、非rootユーザーでのインストールをお勧めします:
# 通常ユーザーに切り替え
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を使用して自動起動を管理します。
ユーザーがログアウトした後もサービスを実行し続けたい場合:
# rootで実行
loginctl enable-linger youruser
rootインストール
非rootユーザーを使用できない場合は、直接rootでインストールすることもできます:
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にカスタムドメインをバインド:
- Worker設定 → トリガーに移動
- カスタムドメインを追加(例:
monitor.yourdomain.com) - CloudflareがSSL証明書とDNS解決を自動的に処理
複数Workerの集約
複数のWorkerインスタンス(異なるCloudflareアカウントに分散)がある場合、API_BASE環境変数を介して集約できます:
API_BASE: "https://worker1.example.com,https://worker2.example.com"
フロントエンドは同時に複数のWorkerにリクエストを送信し、統合して表示します。
GitHub Pages静的フロントエンド
プロジェクトはフロントエンドを静的サイトとしてビルドし、GitHub Pagesにデプロイすることをサポートしており、リモートWorker APIを介してデータを取得します:
# ビルドコマンド
npm run build:github-page
GitHub SecretsでAPI_BASEをWorkerアドレスに指向するように設定する必要があります。
iOS Scriptableウィジェット
プロジェクトはiOS Scriptableウィジェットスクリプトを提供し、iPhoneデスクトップに単一サーバーのステータスを表示できます:
- Scriptableアプリをインストール
- 新しいスクリプトを作成し、
scripts/ios-scriptable-widget.jsの内容を貼り付け - 上部の
CONFIG.baseURLをサイトアドレスに変更 - 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にデプロイし、カスタムドメインを使用することもサポートしています。