「障害、お客様から聞きました」をなくす。CloudWatch Syntheticsで始めるAPI監視
お客様より先に気づきたい
「すみません、APIがエラーになってるんですけど...」
お客様からの問い合わせで障害に気づく。サーバーの死活監視はしている。CPUもメモリも正常。でもアプリケーションレベルで何かがおかしくて、APIが500を返し続けている。死活監視だけじゃ検知できない。
Synthetic Monitoring(合成モニタリング) は、本物のユーザーを待たずに定期的にAPIを叩いて動作確認する仕組み。お客様より先に異常を検知できる。
AWSの CloudWatch Synthetics を使って、API監視を設定するまでの手順をまとめます。
CloudWatch Synthetics(シンセティクス)とは
合成モニタリング
ユーザーと同じ操作を自動で実行して、システムが正常に動くか確認する監視手法。
ログインできるか、商品が検索できるか、決済が通るか。実際のユーザーアクセスを待たずに、こっちから能動的にチェックしに行く。5分おき、1時間おきなど、設定した間隔でリクエストを送って、おかしければアラートを上げてくれます。
CloudWatch Syntheticsは、AWSが提供するマネージドサービス。
Canary(カナリア)とは
CloudWatch Syntheticsでは、監視タスクのことを Canary と呼びます。「このエンドポイントを5分おきにチェックして」みたいな設定をCanaryとして作成します。
できること
- 指定したURLに定期的にリクエストを送信
- ステータスコードやレスポンス内容をチェック
- 失敗したらCloudWatch Alarmで通知
- リクエスト/レスポンスのログをS3に保存
料金
月100回までは無料枠。それ以上は従量課金。詳しくはCloudWatch料金ページで。
事前準備:テスト用APIサーバー
Canaryの動作確認用にシンプルなAPIサーバーを用意する。監視対象のAPIがあればスキップ。
app.js
const express = require('express');
const app = express();
const args = process.argv.slice(2);
const portIndex = args.indexOf('--port');
const PORT = portIndex !== -1 ? args[portIndex + 1] : (process.env.PORT || 3000);
app.get('/health', (req, res) => {
res.json({ status: 'ok', timestamp: new Date().toISOString() });
});
app.listen(PORT, () => {
console.log(`Server running on port ${PORT}`);
});
package.json
{
"name": "canary-test",
"version": "1.0.0",
"main": "app.js",
"scripts": {
"start": "node app.js",
"pm2:start": "pm2 start app.js --name canary-test -- --port 3000"
},
"dependencies": {
"express": "^5.2.1"
}
}
起動
npm install
npm install -g pm2
npm run pm2:start
確認:
curl http://localhost:3000/health
# {"status":"ok","timestamp":"2026-01-06T..."}
Canaryを作成する
1. CloudWatchを開く
AWSコンソールからCloudWatchを選択。

2. API Canaryを選択
左メニューの「Synthetics Canaries」から「Canaryを作成」をクリック。
設計図は「API Canary」を選択して、名前をつけます(今回は canary-test)。

3. エンドポイントを入力
監視したいAPIのURLを入力。

4. スケジュール設定
実行間隔を設定。今回は5分おきにしました。

5. 作成
「Canaryを作成」をクリックして完了。

結果を確認する
作成が完了すると、設定した間隔で自動実行が始まる。
成功/失敗
一覧画面で結果が確認できます。緑が成功、赤が失敗。

グラフ
一覧からCanary(canary-test)をクリックすると、成功率やレスポンスタイムの推移が見られる。

実行履歴
各実行のリクエスト/レスポンス、実行時間も確認できる。

今回の設定まとめ
| 項目 | 設定値 |
|---|---|
| 設計図 | API Canary |
| 名前 | canary-test |
| エンドポイントURL | http://your-server-ip:3000/health |
| HTTPメソッド | GET |
| ヘッダー | Content-Type: application/json |
| 実行間隔 | 5分 |
| データ保持 | 31日 |
スクリプトを書けばもっとできる
基本的なヘルスチェックはこれで十分だけど、スクリプトを編集すれば細かいチェックも可能。
- レスポンス内容の検証 — ステータスコードだけじゃなく、JSONの中身が期待通りかチェック
- 複数ステップの実行 — ログイン→API呼び出し→ログアウトのような一連のフローをテスト
- レスポンスタイムの監視 — 3秒以上かかったらエラーにする閾値設定
- 認証付きAPI — Bearerトークンなどの認証ヘッダーを付与
公式のスクリプトサンプルが参考になります。
30分で始められる
コンソールからポチポチするだけで、5分おきのAPIチェックが動き始める。死活監視だけでは守れなかった「アプリケーションレベルの異常」を、これでカバーできます。
CloudWatch Alarmと組み合わせれば、失敗時にSlackやメールへ通知も飛ばせる。「お客様から聞きました」を減らす第一歩として、手軽さの割に効果は大きい
Discussion