このチュートリアルでは、Cloudflare Workers と Durable Objects で作られたオープンソースの Cloudflare Prometheus Exporter ↗ を使い、Cloudflare のメトリクスを Prometheus ↗ に書き出す方法を説明します。
Cloudflare Prometheus Exporter を設定する前に、次の点を確認してください。
- すべての Cloudflare プラン(Free、Pro、Business、Enterprise)で使えます。Free プランのゾーンは、取得できるメトリクスが限られます。
- Cloudflare GraphQL Analytics API と REST API を使います。
- リクエスト、帯域、脅威、Workers、ロードバランサー、SSL 証明書、ファイアウォールイベント、ヘルスチェック、Magic Transit、Stream など、90 以上の Prometheus メトリクスを書き出します。
- Cloudflare Worker として動き、Durable Objects でステートフルなカウンターの蓄積とバックグラウンド更新を行います。
- 複数アカウントに対応し、アクセスできるアカウントとゾーンを自動で検出します。
Exporter をデプロイする前に、次を用意してください。
- Cloudflare アカウント
- 必要な権限を持つ Cloudflare API トークン(後述の API トークンを作成する を参照)
- Exporter をスクレイプする Prometheus インスタンス
Exporter は、ボタンからデプロイするか、手動でデプロイできます。
次のボタンを選び、Cloudflare Workers アカウントに Exporter をデプロイします。
デプロイ後、シークレットとして CLOUDFLARE_API_TOKEN を設定します。Exporter を HTTP Basic Auth で保護する場合は、任意で BASIC_AUTH_USER と BASIC_AUTH_PASSWORD も設定します。
git clone https://github.com/cloudflare/cloudflare-prometheus-exporter.git
cd cloudflare-prometheus-exporter
bun install
wrangler secret put CLOUDFLARE_API_TOKEN
bun run deploy次の権限を持つ Cloudflare API トークンを作成します。
| 権限 | アクセス | 必須 |
|---|---|---|
| Zone > Analytics | Read | 必須 |
| Account > Account Analytics | Read | 必須 |
| Account > Workers Scripts | Read | 必須 |
| Zone > SSL and Certificates | Read | 任意 |
| Zone > Firewall Services | Read | 任意 |
| Zone > Load Balancers | Read | 任意 |
| Account > Logs | Read | 任意 |
| Account > Magic Transit | Read | 任意 |
Prometheus の設定に、Exporter をスクレイプ対象として追加します。
scrape_configs:
- job_name: 'cloudflare'
scrape_interval: 60s
scrape_timeout: 30s
static_configs:
- targets: ['your-worker.your-subdomain.workers.dev']Exporter で Basic Auth を設定した場合は、Prometheus の設定を次のように更新します。
scrape_configs:
- job_name: 'cloudflare'
scrape_interval: 60s
scrape_timeout: 30s
basic_auth:
username: 'your-username'
password: 'your-password'
static_configs:
- targets: ['your-worker.your-subdomain.workers.dev']設定の優先順位は、KV の上書き > 環境変数 > デフォルト です。ランタイムの設定 API を使うと、再デプロイせずに動的に変更できます。
環境変数は wrangler.jsonc で設定するか、wrangler secret put で設定します。
| 変数 | デフォルト | 説明 |
|---|---|---|
CLOUDFLARE_API_TOKEN |
- | Cloudflare API トークン(シークレット) |
SCRAPE_DELAY_SECONDS |
300 |
メトリクス取得前の待ち時間(データの伝播を待つ) |
TIME_WINDOW_SECONDS |
60 |
クエリの時間窓 |
METRIC_REFRESH_INTERVAL_SECONDS |
60 |
バックグラウンド更新の間隔 |
CF_ACCOUNTS |
- | 対象にするアカウント ID のカンマ区切り一覧(デフォルト: すべて) |
CF_ZONES |
- | 対象にするゾーン ID のカンマ区切り一覧(デフォルト: すべて) |
METRICS_DENYLIST |
- | 除外するメトリクスのカンマ区切り一覧 |
EXCLUDE_HOST |
false |
メトリクスからホストラベルを除外する |
METRICS_PATH |
/metrics |
メトリクスエンドポイントのカスタムパス |
BASIC_AUTH_USER |
- | Basic Auth のユーザー名(シークレット) |
BASIC_AUTH_PASSWORD |
- | Basic Auth のパスワード(シークレット) |
設定オプションの一覧は、Exporter の README ↗ を参照してください。
| パス | メソッド | 説明 |
|---|---|---|
/ |
GET | トップページ |
/metrics |
GET | Prometheus メトリクス |
/health |
GET | 稼働確認 |
/config |
GET | ランタイム設定をすべて取得する |
/config/:key |
PUT | 設定の上書きを保存する(KV に永続化) |
/config/:key |
DELETE | 設定キーをデフォルトに戻す |
Exporter は、次のカテゴリで 90 以上のメトリクスを提供します。
- ゾーンのリクエスト — 総リクエスト数、キャッシュ済みリクエスト、ステータスコード・国・コンテンツタイプ・HTTP バージョン別のリクエストなど
- ゾーンの帯域 — 総帯域、キャッシュ済み帯域、コンテンツタイプ別・国別の帯域
- ゾーンの脅威 — 国別・種類別の脅威件数
- Firewall — アクション・ソース・ルール別のファイアウォールイベント。ボット検出メトリクス
- Workers — スクリプト別のリクエスト数、エラー数、CPU 時間、所要時間
- ロードバランサー — プールの健全性、リクエスト数、RTT、ステアリングポリシー、オリジンの重み
- ヘルスチェック — ヘルスチェックイベント、RTT、TTFB、TCP 接続時間、TLS ハンドシェイク時間
- SSL 証明書 — 種類・発行者別の証明書検証ステータス
- Cache — キャッシュヒット率と、キャッシュミス時のオリジン所要時間
- エラー率 — 4xx/5xx の件数、エッジとオリジンのエラー率、オリジン応答時間
- Logpush — アカウント単位・ゾーン単位の失敗ジョブ数
- Magic Transit — トンネルの健全性、SLO ステータス、トンネルごとのトラフィック(ビットとパケット)
- Magic Firewall — ルールごとのサンプリング済みトラフィック(ビットとパケット)
- Network Analytics — Magic Transit、DDoS 防御、IDPS、TCP 保護、DNS 保護のトラフィック量
- Stream — 動画再生回数、視聴時間、ライブ入力のメトリクス
- ホスト名メトリクス — ホスト名ごとのリクエスト数、レイテンシの平均とパーセンタイル(
HOST_METRICS_ALLOWLISTが必要)
型とラベルを含むメトリクスの一覧は、Exporter の README ↗ を参照してください。
Cloudflare の Free プランのゾーンは、GraphQL Analytics API を使えません。Exporter は、この API が必要なメトリクスについて、Free プランのゾーンを自動で検出し、スキップします。
Free プランのゾーンでも、次は書き出します。
cloudflare_zone_certificate_validation_status(SSL 証明書)cloudflare_zone_lb_origin_weight(設定済みの場合のロードバランサーの重み)
スキップしたゾーンは、cloudflare_zones_skipped_free_tier メトリクスで監視できます。