mcpField
O
oodle-synthetic

oodle-synthetic

github.com/oodle-aiクラウド・DevOps0125 回インストール3 週間前に更新
リポジトリ

oodle-synthetic について

oodle-synthetic は、`oodle` コマンドラインで HTTP と TCP のシンセティックモニターを設定するエージェントスキルです。チェック条件や間隔の設定、対象の到達確認、更新時の設定保持を説明します。

主な機能

  1. 01HTTP・TCP チェックの設定
  2. 02ステータス・レイテンシ・内容の条件指定
  3. 03プローブ間隔とタイムアウトの設定
  4. 04作成前の到達性確認
  5. 05更新時のルール設定の保持

活用シーン

  1. 01API のヘルスチェックエンドポイントの監視
  2. 02TCP サービスの到達性確認
  3. 03遅い応答や想定外の応答の検出
  4. 04既存のシンセティックモニターの更新

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/oodle-ai/agent-skills --skill oodle-synthetic

インストール後、Claude Code で/oodle-syntheticを入力して読み込まれたか確認します。

詳細

Oodle Synthetic Monitors — HTTP / TCP チェック

このスキルでは、失敗を確実に検知する合成モニターの設定方法を説明します。期待するステータスとレイテンシ、適切な間隔、既存の設定を上書きしない更新方法を扱います。

前提条件

brew install oodle-ai/oodle/oodle
oodle configure

synthetic-monitors エンドポイントが動作することを確認します。

oodle synthetic-monitors list -o json | jq 'length'

コマンド実行の順序

oodle コマンドを実行する前に、次の手順を行います。

  1. 対象の URL または hostport がすでにコンテキストに含まれているか確認します。
  2. 含まれていない場合は、対象についてユーザーに確認します。
  3. 対象に手動でアクセスし(curl -I <url>)、パブリックインターネットから到達できることを確認します。
  4. oodle synthetic-monitors create -f monitor.json を実行します。
  5. 作成後、oodle synthetic-monitors get <id> -o json を実行して、初回の実行が成功したことを確認します。

クイックリファレンス

タスクコマンド
モニターの一覧表示oodle synthetic-monitors list -o json
モニターの取得oodle synthetic-monitors get <id> -o json
モニターの作成oodle synthetic-monitors create -f monitor.json
モニターの更新oodle synthetic-monitors update <id> -f monitor.json
モニターの削除oodle synthetic-monitors delete <id> --force

よくある操作

合成モニターのスキーマ(HTTP)
{
  "name": "API health check",
  "enabled": true,
  "rule_type": "http",
  "rule_config": {
    "http": {
      "url": "https://api.example.com/health",
      "method": "GET",
      "expected_status_codes": [200],
      "max_response_time_ms": 2000
    }
  },
  "interval": "60s",
  "timeout": "10s",
  "conditions": {
    "critical": {"op": "<", "value": 1}
  }
}
フィールド意味
rule_typehttp または tcp(ping、dns、ssl、traceroute、multistep も指定できます)
rule_config.httpurl と method(HTTP)
rule_config.tcphost と port(TCP)
intervalプローブの実行間隔を表す期間文字列("60s")。最小値は 10s、推奨値は 60s 以上です
timeout期間文字列。1s 以上かつ interval 以下にします
expected_status_codes合格とするステータスコード(200)またはパターン("2XX")。一致した場合に失敗とするコードは excluded_status_codes で指定します
max_response_time_msレスポンスが指定値より遅い場合、チェックは失敗します
expected_body、expected_headersレスポンスに含まれている必要がある内容(例:"ok")
conditionsチェック結果は 1(稼働中)または 0(停止中)です。そのため、{"op": "<", "value": 1} を指定すると、チェック失敗時にアラートが発生します。op は文字列で、>、>=、<、<=、==、!= を指定します
合成モニターのスキーマ(TCP)
{
  "name": "Postgres reachability",
  "enabled": true,
  "rule_type": "tcp",
  "rule_config": {
    "tcp": {"host": "postgres.example.com", "port": 5432}
  },
  "interval": "60s",
  "timeout": "5s",
  "conditions": {
    "critical": {"op": "<", "value": 1}
  }
}
モニターの作成
# ✅ CORRECT — manual reachability test, then create
curl -sSfI https://api.example.com/health
oodle synthetic-monitors create -f monitor.json

# ❌ WRONG — creating against an unreachable target leaves a permanently-failing monitor
oodle synthetic-monitors create -f monitor.json
モニターの更新
# ✅ CORRECT — get → edit → update preserves rule_config
oodle synthetic-monitors get syn_123 -o json > monitor.json
jq '.interval = "30s"' monitor.json > monitor.new.json
oodle synthetic-monitors update syn_123 -f monitor.new.json

# ❌ WRONG — partial payload removes rule_config
oodle synthetic-monitors update syn_123 -f <(echo '{"interval":"30s"}')
モニターの削除
# ✅ CORRECT
oodle synthetic-monitors get syn_123 -o json > /dev/null
oodle synthetic-monitors delete syn_123 --force

# ❌ WRONG — name-grep delete
oodle synthetic-monitors delete "$(oodle synthetic-monitors list | grep health | awk '{print $1}')" --force

ベストプラクティス

重要度の高くないエンドポイントでは interval: "60s"(またはそれ以上)を使用します

すべてのエンドポイントで10秒間隔にすると、コストとノイズが増大します。短い間隔は、ユーザー向けの重要なフローに限って使用してください。

# ✅ CORRECT — 60s interval for a /health endpoint
"interval": "60s"

# ❌ WRONG — 10s on dozens of internal endpoints
"interval": "10s"
必ず expected_status_codes を設定します

設定しない場合、どのような 2XX レスポンスでもチェックに合格しますが、それが期待するレスポンスとは限りません。

# ✅ CORRECT
"expected_status_codes": [200], "max_response_time_ms": 2000

# ❌ WRONG — monitor "succeeds" on any 2XX response
"expected_status_codes": []
遅い依存関係を検知するために max_response_time_ms を追加します

30秒かかる200レスポンスは、ユーザーにとっては依然として失敗です。

# ✅ CORRECT
"expected_status_codes": [200],
"max_response_time_ms": 2000

# ❌ WRONG — only checks status code, doesn't catch latency regressions
"expected_status_codes": [200]
rule_config を保持するため、必ず更新前に get を実行します

更新はドキュメント全体を置き換えます。

# ✅ CORRECT
oodle synthetic-monitors get syn_123 -o json > m.json
jq '.rule_config.http.expected_body = "ok"' m.json > m.new.json
oodle synthetic-monitors update syn_123 -f m.new.json

# ❌ WRONG — drops `rule_config`
oodle synthetic-monitors update syn_123 -f <(echo '{"interval":"120s"}')
環境ごとに一貫した name を使用します

名前に環境を含めます(API health check (prod)、API health check (staging))。こうすることで、アラートの受信者は調査すべき環境を把握できます。

# ✅ CORRECT
"name": "API health check (prod)"

# ❌ WRONG
"name": "health"

障害への対処

エラー原因対処方法
401 認証されていませんAPI キーが無効または設定されていませんoodle configure を実行するか、OODLE_API_KEY を設定します
404 見つかりません合成モニター ID が存在しませんoodle synthetic-monitors list -o json で確認します
接続が拒否されましたOODLE_DEPLOYMENT の URL が正しくありませんOODLE_DEPLOYMENT 環境変数を確認します
モニターが常に異常状態プローブの送信元からターゲットに到達できませんパブリックインターネットから curl -I を実行し、ファイアウォール、DNS、TLS 証明書を確認します
モニターの状態が不安定interval の間隔が短すぎるか、max_response_time_ms の値が厳しすぎます間隔を 60s に延ばし、max_response_time_ms を p95 +余裕分に引き上げます
interval must be at least 10 seconds / timeout cannot exceed interval期間の指定が正しくないか、単なる数値です"60s" や "10s" などの期間文字列を使用します
rule_config が通知なく破棄されます部分的なペイロードで update が呼び出されました最後の get のスナップショットから再作成し、必ず get → 編集 → update の順に実行します
429 リクエストが多すぎます多数のプローブが同じ秒にスケジュールされていますモニターごとに interval を編集して時間をずらします。一括操作では --retries 3 を使用します

参考資料

コメント