𝕏 f B! L
案件・求人数 12,345
案件を探す(準備中) エージェントを探す(準備中) お役立ち情報 ログイン
案件・求人数 12,345
OpenClawでAPI監視を自動化|ヘルスチェック・レスポンス検証・アラート通知の構築ガイド

OpenClawでAPI監視を自動化|ヘルスチェック・レスポンス検証・アラート通知の構築ガイド

OpenClawAPI監視SRE自動化
目次
⚡ 3秒でわかる!この記事のポイント
  • OpenClawのcronジョブ+カスタムスキルでAPI監視パイプラインを完全自動化
  • LLMの推論力で「ステータス200だが実質エラー」のような従来ツールでは検出困難な異常を発見
  • Datadog等の高額SaaSを使わずに、SES現場で即導入できる監視基盤を構築

「APIのレスポンスが遅くなっているのに気づけなかった」「ステータスコードは200だが、レスポンスボディが空になっていた」「外部APIの仕様変更でフロントが壊れていたが、3時間気づかなかった」——SES現場のインシデント報告で頻繁に見かける事象です。

2026年現在、マイクロサービスアーキテクチャの普及により、1つのアプリケーションが依存するAPIエンドポイントは平均15〜30にのぼります。すべてを手動で監視するのは現実的ではありません。

OpenClawを使えば、AIエージェントによるインテリジェントなAPI監視を、DatadogやNew Relicのような高額SaaSなしで構築できます。本記事では、エンドポイント監視からレスポンス検証、パフォーマンス計測、アラート通知まで、SES現場で即導入できるAPI監視基盤の構築方法を解説します。

API監視におけるOpenClawの優位性

従来の監視ツールとの違い

項目従来ツール(UptimeRobot等)OpenClaw API監視
監視対象ステータスコードのみステータスコード+レスポンスボディの内容検証
異常検知固定閾値LLMによるコンテキスト理解
レポート定型フォーマット自然言語での異常説明
コスト$7〜29/月OpenClaw+LLM APIの従量課金のみ
カスタマイズ限定的スキルとして自由に拡張可能
障害対応アラート通知のみ初動対応の自動実行が可能

OpenClawが解決する「見えない障害」

従来の監視ツールでは検出が難しい問題パターン:

  • ステータス200、レスポンス空: APIが正常応答を返すが、データが空
  • レスポンス時間の緩やかな劣化: 100ms → 200ms → 500ms と徐々に悪化
  • 部分的なデータ欠損: 10件返るはずのリストが3件だけ
  • フォーマット変更: APIの仕様変更でフィールド名が変わった
  • 証明書の有効期限切れ予兆: 残り30日以下で警告

実践①:基本的なAPIヘルスチェック

監視スキルの作成

まず、OpenClawのカスタムスキルとしてAPI監視機能を実装します:

<!-- ~/.openclaw/skills/api-monitor/SKILL.md -->
# API Monitor Skill

## 概要
APIエンドポイントの死活監視・レスポンス検証を行うスキル。

## 監視設定ファイル
`~/.openclaw/skills/api-monitor/endpoints.json` に監視対象を定義。

## 監視項目
1. HTTPステータスコード
2. レスポンス時間(ms)
3. レスポンスボディの構造検証
4. SSL証明書の有効期限

エンドポイント設定ファイル

{
  "endpoints": [
    {
      "name": "Main API",
      "url": "https://api.example.com/v1/health",
      "method": "GET",
      "interval": "5m",
      "timeout": 10000,
      "expectedStatus": 200,
      "expectedBody": {
        "status": "ok"
      },
      "maxResponseTime": 2000,
      "headers": {
        "Authorization": "Bearer ${API_TOKEN}"
      }
    },
    {
      "name": "User Service",
      "url": "https://api.example.com/v1/users?limit=1",
      "method": "GET",
      "interval": "10m",
      "timeout": 5000,
      "expectedStatus": 200,
      "responseValidation": {
        "type": "json",
        "rules": [
          { "path": "$.data", "type": "array", "minLength": 1 },
          { "path": "$.data[0].id", "type": "string" },
          { "path": "$.meta.total", "type": "number", "min": 0 }
        ]
      }
    },
    {
      "name": "Payment Gateway",
      "url": "https://payment.example.com/api/status",
      "method": "POST",
      "interval": "3m",
      "timeout": 15000,
      "expectedStatus": 200,
      "body": { "test": true },
      "critical": true,
      "alertChannels": ["slack", "pagerduty"]
    }
  ],
  "defaults": {
    "interval": "5m",
    "timeout": 10000,
    "retries": 2,
    "retryDelay": 3000
  }
}

監視スクリプトの実装

#!/bin/bash
# ~/.openclaw/skills/api-monitor/check.sh
# APIヘルスチェック実行スクリプト

set -euo pipefail

ENDPOINTS_FILE="$(dirname "$0")/endpoints.json"
LOG_DIR="$HOME/.openclaw/logs/api-monitor"
mkdir -p "$LOG_DIR"

check_endpoint() {
  local name="$1"
  local url="$2"
  local method="${3:-GET}"
  local timeout="${4:-10}"
  local expected_status="${5:-200}"

  local start_time=$(date +%s%N)
  local response
  local http_code

  response=$(curl -s -w "\n%{http_code}\n%{time_total}" \
    -X "$method" \
    --max-time "$timeout" \
    "$url" 2>/dev/null) || true

  local end_time=$(date +%s%N)
  local elapsed=$(( (end_time - start_time) / 1000000 ))

  http_code=$(echo "$response" | tail -1)
  local time_total=$(echo "$response" | tail -2 | head -1)
  local body=$(echo "$response" | sed '$d' | sed '$d')

  local status="OK"
  local details=""

  if [ "$http_code" != "$expected_status" ]; then
    status="FAIL"
    details="Expected status $expected_status, got $http_code"
  elif [ "$elapsed" -gt 2000 ]; then
    status="SLOW"
    details="Response time: ${elapsed}ms (threshold: 2000ms)"
  fi

  echo "{\"name\":\"$name\",\"url\":\"$url\",\"status\":\"$status\",\"http_code\":$http_code,\"response_time_ms\":$elapsed,\"details\":\"$details\",\"timestamp\":\"$(date -u +%Y-%m-%dT%H:%M:%SZ)\"}"
}

# 実行結果をログに追記
RESULTS="[]"
while IFS= read -r endpoint; do
  name=$(echo "$endpoint" | jq -r '.name')
  url=$(echo "$endpoint" | jq -r '.url')
  method=$(echo "$endpoint" | jq -r '.method // "GET"')
  result=$(check_endpoint "$name" "$url" "$method")
  echo "$result" >> "$LOG_DIR/$(date +%Y-%m-%d).jsonl"
  echo "$result"
done < <(jq -c '.endpoints[]' "$ENDPOINTS_FILE")

OpenClawによるAPI監視アーキテクチャのインフォグラフィック

実践②:LLMによるインテリジェントなレスポンス検証

コンテキスト理解に基づく異常検知

OpenClawの最大の強みは、LLMにレスポンスの意味的な分析をさせられる点です。これにより、従来の固定ルールでは検出できない異常を発見できます。

## API監視 - レスポンス分析プロンプト

以下のAPIレスポンスを分析し、異常がないか判定してください:

### エンドポイント情報
- URL: {url}
- 期待されるレスポンス: ユーザー一覧(通常10〜50件)
- 前回のレスポンス要約: {previous_summary}

### 今回のレスポンス
```json
{response_body}

判定基準

  1. データの整合性(IDの形式、必須フィールドの存在)
  2. データ量の妥当性(前回比で大幅な増減がないか)
  3. レスポンス構造の変更(フィールドの追加・削除・型変更)
  4. ビジネスロジック上の異常(マイナスの金額、未来の日付等)

出力形式

  • status: “normal” | “warning” | “critical”
  • findings: 発見した問題のリスト
  • recommendation: 推奨アクション

### 実際の活用例:ECサイトのAPI監視

```bash
# cronジョブで5分ごとに実行
# openclaw.json の cron 設定例
{
  "cron": [
    {
      "schedule": "*/5 * * * *",
      "command": "API監視チェックを実行してください。endpoints.jsonに基づいてすべてのエンドポイントをチェックし、異常があればSlack #alerts に通知してください。",
      "skill": "api-monitor"
    }
  ]
}

実践③:パフォーマンストレンド分析

レスポンスタイムの推移追跡

単純な閾値チェックだけでなく、レスポンスタイムの推移をトレンド分析することで、障害の予兆を検知します:

// パフォーマンストレンド分析スクリプト
const fs = require('fs');
const path = require('path');

function analyzeTrend(logDir, endpointName, days = 7) {
  const results = [];

  for (let i = 0; i < days; i++) {
    const date = new Date();
    date.setDate(date.getDate() - i);
    const logFile = path.join(logDir, `${date.toISOString().split('T')[0]}.jsonl`);

    if (fs.existsSync(logFile)) {
      const lines = fs.readFileSync(logFile, 'utf8').split('\n').filter(Boolean);
      for (const line of lines) {
        const entry = JSON.parse(line);
        if (entry.name === endpointName) {
          results.push({
            timestamp: entry.timestamp,
            responseTime: entry.response_time_ms,
            status: entry.status,
          });
        }
      }
    }
  }

  if (results.length < 10) return null;

  // 移動平均の計算
  const windowSize = 10;
  const movingAvg = [];
  for (let i = windowSize; i < results.length; i++) {
    const window = results.slice(i - windowSize, i);
    const avg = window.reduce((sum, r) => sum + r.responseTime, 0) / windowSize;
    movingAvg.push({ timestamp: results[i].timestamp, avg });
  }

  // トレンド検出(線形回帰)
  const n = movingAvg.length;
  const xMean = (n - 1) / 2;
  const yMean = movingAvg.reduce((sum, p) => sum + p.avg, 0) / n;

  let numerator = 0;
  let denominator = 0;
  for (let i = 0; i < n; i++) {
    numerator += (i - xMean) * (movingAvg[i].avg - yMean);
    denominator += (i - xMean) ** 2;
  }

  const slope = numerator / denominator;
  const percentChange = (slope * n) / yMean * 100;

  return {
    endpoint: endpointName,
    dataPoints: results.length,
    avgResponseTime: Math.round(yMean),
    trend: slope > 0 ? 'increasing' : 'decreasing',
    percentChange: Math.round(percentChange * 10) / 10,
    alert: percentChange > 30 ? 'DEGRADATION_WARNING' : 'OK',
  };
}

実践④:Slackアラート通知

アラートのフォーマットと通知ロジック

OpenClawのmessageツールを使って、構造化されたアラートを送信します:

## アラート通知テンプレート

### Critical アラート
🚨 **API障害検知**
- エンドポイント: {name} ({url})
- ステータス: {http_code} (期待値: {expected_status})
- レスポンスタイム: {response_time_ms}ms
- 検知時刻: {timestamp}
- 詳細: {details}

### Warning アラート
⚠️ **APIパフォーマンス劣化**
- エンドポイント: {name}
- 平均レスポンスタイム: {avg_response_time}ms → {current_response_time}ms
- 変化率: +{percent_change}%(過去7日比)
- 推奨: {recommendation}

エスカレーションポリシー

{
  "escalation": {
    "levels": [
      {
        "delay": 0,
        "channel": "slack",
        "target": "#alerts",
        "severity": ["critical", "warning"]
      },
      {
        "delay": 300,
        "channel": "slack",
        "target": "#oncall",
        "severity": ["critical"],
        "message": "5分経過しても復旧していません。エスカレーションします。"
      },
      {
        "delay": 900,
        "channel": "slack",
        "target": "@oncall-engineer",
        "severity": ["critical"],
        "message": "15分経過。即時対応が必要です。"
      }
    ],
    "recovery": {
      "channel": "slack",
      "target": "#alerts",
      "message": "✅ {name} が復旧しました(ダウンタイム: {downtime})"
    }
  }
}

実践⑤:SSL証明書の有効期限監視

証明書の自動チェック

Let’s Encryptの自動更新が失敗するケースは意外と多く、SSL証明書切れは深刻なインシデントにつながります:

#!/bin/bash
# SSL証明書の有効期限チェック

check_ssl() {
  local domain="$1"
  local warning_days="${2:-30}"

  local expiry_date
  expiry_date=$(echo | openssl s_client -servername "$domain" -connect "$domain":443 2>/dev/null | \
    openssl x509 -noout -enddate 2>/dev/null | cut -d= -f2)

  if [ -z "$expiry_date" ]; then
    echo "{\"domain\":\"$domain\",\"status\":\"ERROR\",\"message\":\"Could not retrieve certificate\"}"
    return
  fi

  local expiry_epoch=$(date -j -f "%b %d %T %Y %Z" "$expiry_date" +%s 2>/dev/null || \
    date -d "$expiry_date" +%s 2>/dev/null)
  local now_epoch=$(date +%s)
  local days_left=$(( (expiry_epoch - now_epoch) / 86400 ))

  local status="OK"
  if [ "$days_left" -le 7 ]; then
    status="CRITICAL"
  elif [ "$days_left" -le "$warning_days" ]; then
    status="WARNING"
  fi

  echo "{\"domain\":\"$domain\",\"status\":\"$status\",\"days_left\":$days_left,\"expiry\":\"$expiry_date\"}"
}

# 監視対象ドメイン
DOMAINS=("api.example.com" "app.example.com" "admin.example.com")

for domain in "${DOMAINS[@]}"; do
  check_ssl "$domain"
done

実践⑥:ダッシュボードとレポート生成

日次レポートの自動生成

OpenClawのcronジョブで毎朝レポートを生成し、Slackに投稿します:

## 日次API監視レポート - {date}

### サマリー
- 監視エンドポイント数: {total_endpoints}
- 正常: {ok_count} / 警告: {warning_count} / 障害: {critical_count}
- 平均レスポンスタイム: {avg_response_time}ms
- SLA達成率: {sla_percent}%

### パフォーマンス推移
| エンドポイント | 昨日平均 | 今日平均 | 変化 |
|:---|:---:|:---:|:---:|
| Main API | 120ms | 135ms | +12.5% |
| User Service | 85ms | 82ms | -3.5% |
| Payment Gateway | 200ms | 450ms | +125% ⚠️ |

### インシデント
1. 08:15 - Payment Gateway レスポンス遅延(450ms → 復旧 08:22)
2. 14:30 - User Service 一時的な500エラー(1回のみ、自動復旧)

### 推奨アクション
- Payment Gateway のレスポンスタイムが悪化傾向。DB接続プールの確認を推奨。
- SSL証明書 (api.example.com) の有効期限まで残り25日。更新の確認を。

SES面談でのAPI監視スキルアピール

SRE/運用系の案件で評価されるポイント

インフラ・運用スキル

  • 監視設計の経験(SLI/SLO/SLAの定義)
  • アラート設計のベストプラクティス(アラート疲れの防止)
  • インシデント対応フロー(検知 → 判断 → 対応 → 復旧 → 振り返り)
  • オンコール体制の構築経験

ツール経験

  • Datadog / New Relic / Grafana の利用経験
  • PagerDuty / OpsGenie でのアラート管理
  • Terraform / CloudFormation による監視インフラのIaC

コスト意識

  • 監視SaaSのコスト最適化(不要なメトリクスの削減)
  • OpenClawのような軽量ツールでの代替手法の提案能力

まとめ

OpenClawを活用したAPI監視は、従来の監視ツールの「ステータスコードチェック」を超えたインテリジェントな監視を実現します。

特に以下の点が、SES現場での導入メリットです:

  1. 低コスト: Datadog等の高額SaaSが不要(LLM APIの従量課金のみ)
  2. 柔軟性: カスタムスキルとして自由に監視ロジックを拡張可能
  3. インテリジェント: LLMによるレスポンスの意味的分析で、「見えない障害」を検知
  4. 運用自動化: アラート→初動対応まで一気通貫で自動化

SRE・DevOps領域のスキルは、2026年のSES市場で高い需要があります。OpenClawで効率的に監視基盤を構築しながら、実践的な運用スキルを磨いていきましょう。

関連記事

SES案件をお探しですか?

SES記事をもっと読む →
🏗️

SES BASE 編集長

SES業界歴10年以上のメンバーが在籍する編集チーム。SES企業での営業・エンジニア経験、フリーランス独立経験を持つメンバーが、業界のリアルな情報をお届けします。

📊 業界データに基づく記事制作 🔍 IPA・経済産業省データ参照 💼 SES実務経験者が執筆・監修