
CPRAは、大規模なマイクロサービスアーキテクチャを管理するプラットフォームチーム向けに設計された高性能インフラストラクチャ監視システムです。Entity-Component-System(ECS)アーキテクチャと待ち行列理論の原理に基づき、CPRAは自動ワーカープールスケーリングによりSLO目標を達成しながら、100万以上の同時ヘルスチェックを処理します。
Continuous Pulse and Recovery Agent
サービスをチェックし、アラートを送信し、設定した復旧アクションを実行します。
CPRaはGoで書かれたセルフホスト型の監視・復旧エージェントです。スケジュールに従ってサービスに対してヘルスチェックを実行し、設定可能なしきい値に基づいてインシデントを開始・終了し、通知を送信し、サービス障害時に復旧アクション — コンテナの再起動、Webhookの呼び出し、Kubernetesワークロードの再起動またはスケール、EC2インスタンスの再起動、systemdユニットの再起動 — を実行します。単一のサーバーバイナリとして提供され、組み込みの読み取り専用ダッシュボード、HTTP API、およびcpractlコマンドラインクライアントを備えています。MITライセンスです。
ドキュメント: ziad-hsn.github.io/cpra — クイックスタート · モニター設定 · ドライバー · HTTP API · デプロイ · FAQ
ドキュメントソースには、現在の開発リファレンスと、以前のリビジョン向けに明示的に日付を付けたガイドが含まれています。公開サイトは別途更新されます。バージョンと可用性はそれらの境界を示します:
410fbfbリビジョンを説明しており、この開発ブランチのリリース認定ではありません。出荷計画が公開を規定します。ソースの可用性は、完了したプロバイダー検証や耐久性検証を確立するものではありません。
以下に示すソースワークスペースには、Go 1.25以降、Make、およびPython 3が必要です。リポジトリにはビルド済みのダッシュボードアセットが既に含まれています。
MakeはアプリケーションとそのローカルSDKモジュール用に無視されるbin/cpra-sdk.workを作成するため、未公開のSDK候補をこのチェックアウトからビルドできます。統合のサンプルモジュールはオプトインのままです。明示的なGOWORKパスまたはGOWORK=offが優先されます。Makeは選択された外部ワークスペースを決して変更しません。
make
cp examples/monitors.yaml monitors.yaml
# Set the service address in monitors.yaml.
./bin/cpra -yaml monitors.yaml
直接Goコマンドを使用する場合は、make dev-workspaceの後にワークスペースを明示的に選択します:
GOWORK="$PWD/bin/cpra-sdk.work" go test ./internal/cpractl/cli
公式リリースビルドはGOWORK=offを維持し、別途認定されたモジュール依存関係を必要とします。ローカルワークスペースビルドは、公開モジュールの可用性やリリース準備完了を確立するものではありません。
状態はデフォルトでプラットフォームのユーザー状態ディレクトリ(cpractl local paths)に永続化されます。Linuxのシステムサービスは明示的に/var/lib/cpraを使用します。再起動をまたいでそのディレクトリを保持してください。明示的な-data-dirはランタイム設定とプラットフォームのデフォルトを上書きします。レガシーの./cpra-dataには明示的なパスまたは停止した移行が必要です。使い捨ての実行には-runtime-config examples/runtime-memory.yamlを使用します。永続化と復旧は、ID、不明な結果、完全なバックアップについて説明しています。
設定されたAPI認証情報を使用してhttp://localhost:8060を開きます。管理セットアップは、./bin/cpractl get monitorsのような現在のSDKコマンドを有効にします。これらのコマンドは安定したリソースIDを使用します。設定が欠落しているか不正な場合は起動が停止します。空の設定には-allow-emptyが必要です。
サンプルはHTTPエンドポイントをチェックし、インシデントの遷移をalerts.jsonlに書き込みます。各モニターは、チェック間隔、タイムアウト、失敗しきい値、復旧しきい値、通知先、および復旧アクションを指定できます。メンテナンスウィンドウはチェックを継続しながらアラートと復旧を抑制します。これらは5フィールドのcron式、期間、およびIANAタイムゾーンを使用します。
| 機能 | デフォルトビルド | オプションのビルドタグ |
|---|---|---|
| チェック | HTTP、TCP、ICMP、DNS、UDP、TLS、Docker、gRPCポート到達性 | redis postgres mysql mongo rabbitmq kafka |
| 復旧 | Docker、HTTP webhook | kubernetes aws systemd |
| アラート | Log、Slack、PagerDuty、email、webhook、Telegram、Discord、Opsgenie、Mattermost、VictorOps、Pushover、Datadog | teams twilio |
make BUILD_TAGS='redis postgres kubernetes'
grpcチェックはTCPポートをテストします。gRPCヘルスサービスを呼び出すわけではありません。UDPチェックにはペイロードと応答が必要です。PagerDutyにはEvents API v2ルーティングキーが必要です。EmailはSTARTTLSを使用したSMTPリレーを使用します。SMTPのユーザー名/パスワード認証は実装されていません。
TLSのwarn_daysは、復旧を開始せずに黄色のアラートと低下したモニターステータスを生成します。critical_daysはチェックを失敗させ、通常の復旧ポリシーに従います。Pushoverの緊急優先度はretryとexpireを秒単位で受け付け、デフォルトは60と1800です。Docker復旧は、タイムアウトが省略された場合、デーモンの停止猶予を保持します。
MongoDBチェックには直接のmongodb:// URIが必要です。選択されたドライバーは、初期のmongodb+srv://検出をチェックの期限で制限できないため、CPRaはそのモードを拒否します。Kubernetes復旧はトークン、証明書、およびクラスタ内認証情報をサポートします。kubeconfigのexec認証情報プラグインは、復旧の期限を超えて存続する可能性があるため拒否されます。
サーバーはデフォルトでループバックでリッスンします。他のバインドアドレスには認証トークンが必要です。トークンはサービスアカウントが読み取れるファイルに保管してください:
./bin/cpra -yaml monitors.yaml -web.addr 0.0.0.0:8060 -web.auth-file /run/secrets/cpra-token
./bin/cpractl --server https://monitor.example.com --token-file /run/secrets/cpra-token get monitors
ブラウザログインはユーザー名cpraとトークンをパスワードとして使用します。APIはBearerトークンを受け付けます。サーバーとCLIはCPRA_AUTH_TOKENとCPRA_AUTH_TOKEN_FILEも読み取ります。リモートアクセスにはHTTPSリバースプロキシが必要です。組み込みリスナーはHTTPを提供します。
マニフェストは、プロセスアカウントの権限でチェック、通知先、および復旧アクションを承認します。信頼できる設定を使用してください。-ssrf-protectは接続時に非公開のHTTP宛先をブロックします。他のプロトコルやローカルアクションを制限するものではありません。プロファイリングはオプトインです。認証情報を含むトークンファイルとマニフェストはバージョン管理外に保管してください。
/api/v2/healthzはライブネスを報告します。/api/v2/readyzは初期化されたアドミッション、コントローラーの進捗、および利用可能なストレージを必要とします。明示的に空の設定は準備完了になることができます。ダッシュボードプロジェクションの鮮度は別途報告されます。プロバイダーの停止はプロセスをデッドにしません。monitor_id値を追加します。ページは制限されています。/api/v1/historyはインシデントとアクションのイベントを30日間保持します。/api/v1/stateは永続化と不明なアクションを公開します。/api/v1/sloは測定されたレイテンシ分布を公開します。すべて読み取り専用のままで、既存の認証を使用します。make check
make test-all-drivers
ダッシュボードの再ビルドにはNode.js 24.21.0、pnpm 11.22.0、およびPython 3が必要です:
make dashboard-build dashboard-check
make release VERSION=v0.1.0
記録されたリリースレシピは、チェックサムで固定されたGo 1.27.1コンパイラと明示的なソースIDを使用します。Linux、macOS、Windowsのamd64/arm64向けに、ストリップされていない最適化されたサーバー/クライアントアーカイブ、Linuxパッケージ、ソースアーカイブ、およびエビデンスインベントリを生成します。Go 1.25の互換性は別のテストです。ネイティブ実行ゲートが各プラットフォームを認定します。クロスビルドの成功だけではサポートを確立しません。
バージョン付きインストールにはGoとコミットされた埋め込みアセットのみが必要です:
go install github.com/ziad-hsn/cpra@VERSION
go install github.com/ziad-hsn/cpra/cmd/cpractl@VERSION
cpractl local init
cpra -capabilities