🐤

「障害、お客様から聞きました」をなくす。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を選択。

CloudWatchコンソール

2. API Canaryを選択

左メニューの「Synthetics Canaries」から「Canaryを作成」をクリック。

設計図は「API Canary」を選択して、名前をつけます(今回は canary-test)。

API Canary選択

3. エンドポイントを入力

監視したいAPIのURLを入力。

エンドポイント入力

4. スケジュール設定

実行間隔を設定。今回は5分おきにしました。

スケジュール設定

5. 作成

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

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