๐ŸŽ Get the FREE AI Skills Starter Guide โ€” Subscribe โ†’
BytesAgainBytesAgain
๐Ÿฆ€ ClawHub

Gateway Watchdog

by @guoqunabc

Monitor OpenClaw Gateway health by detecting abnormal error rates in logs. Use when: (1) setting up Gateway error monitoring, (2) diagnosing repeated API fai...

Versionv1.4.0
Downloads1,379
Installs10
TERMINAL
clawhub install gateway-watchdog

๐Ÿ“– About This Skill


name: gateway-watchdog description: "Monitor OpenClaw Gateway health by detecting abnormal error rates in logs. Use when: (1) setting up Gateway error monitoring, (2) diagnosing repeated API failures (429, quota, timeouts), (3) user asks about Gateway health or error trends, (4) integrating error detection into heartbeat checks. Detects rate-limiting, server errors, auth failures, network errors, and message delivery failures across all channels."

Gateway Watchdog

Detect abnormal error patterns in the OpenClaw Gateway before they cause damage. Works with all channels: Telegram, WhatsApp, Discord, Slack, Signal, iMessage, Feishu, and more.

Born from a real incident: a silent try-catch caused 76,744 failed retries in 8 hours โ€” undetected until the API quota was exhausted.

What It Detects

| Category | Patterns | |----------|----------| | Rate limiting | HTTP 429, rate.limit, too many requests | | Server errors | HTTP 5xx status codes | | Auth/permission | HTTP 401/403, unauthorized, forbidden, token expired | | Network errors | ETIMEDOUT, ECONNREFUSED, ECONNRESET, ENOTFOUND, socket hang up | | Delivery failures | sendMessage failed, deliver failed, fetch failed | | Custom | User-defined via WATCHDOG_EXTRA_PATTERNS env var |

Smart Analysis

  • Error rate (errors/min) โ€” more meaningful than raw count
  • Spike detection โ€” alerts when errors jump 3x+ vs last check
  • Error concentration โ€” flags when 80%+ errors are one type (single fault source)
  • Quick Start

    bash scripts/gateway-watchdog.sh check     # silent unless errors exceed threshold
    bash scripts/gateway-watchdog.sh verbose   # always outputs full report
    bash scripts/gateway-watchdog.sh history   # show monitoring history
    bash scripts/gateway-watchdog.sh trend     # last 24h error trend
    

    Heartbeat integration

    Add to HEARTBEAT.md:

    ## Gateway Error Monitoring (every heartbeat)
    
  • Run ~/.openclaw/workspace/skills/gateway-watchdog/scripts/gateway-watchdog.sh check
  • If output is non-empty, report to user immediately
  • No output = healthy, skip reporting
  • Cron (optional)

    openclaw cron add \
      --name "gateway-watchdog" \
      --schedule "*/30 * * * *" \
      --task "Run gateway-watchdog.sh verbose. If errors detected, notify user with the report." \
      --channel last
    

    Configuration

    All via environment variables:

    | Variable | Default | Description | |----------|---------|-------------| | WATCHDOG_THRESHOLD | 30 | Error count that triggers alert | | WATCHDOG_WINDOW | 30 | Monitoring window in minutes | | WATCHDOG_SPIKE_RATIO | 3 | Alert when errors jump Nx vs last check | | WATCHDOG_EXTRA_PATTERNS | _(empty)_ | Custom regex patterns (e.g., 99991400\|99991403) | | WATCHDOG_STATE | ~/.local/state/gateway-watchdog/state.json | State file | | WATCHDOG_LOG | ~/.local/state/gateway-watchdog/history.log | History log |

    Adding channel-specific patterns

    # Feishu-specific error codes
    export WATCHDOG_EXTRA_PATTERNS='99991400|99991403|99991404|99991429'

    Telegram-specific

    export WATCHDOG_EXTRA_PATTERNS='Too Many Requests|FLOOD_WAIT|bot was blocked'

    Discord-specific

    export WATCHDOG_EXTRA_PATTERNS='DiscordAPIError|Missing Permissions|Unknown Channel'

    Interpreting Results

    ๐Ÿ”ด Alert (Chinese locale)

    ๐Ÿ”ด Gateway ๆœ€่ฟ‘ 30 ๅˆ†้’Ÿๅ‡บ็Žฐ 150 ๆกๅผ‚ๅธธ้”™่ฏฏ๏ผˆ้˜ˆๅ€ผ: 30๏ผŒ5/min๏ผ‰
    ๐Ÿ“ˆ ้”™่ฏฏ็ชๅขž: 12 โ†’ 150๏ผˆ3ๅ€้˜ˆๅ€ผ่งฆๅ‘๏ผ‰

    ้”™่ฏฏๅˆ†็ฑป๏ผš 429/้™ๆต: 120 5xxๆœๅŠก็ซฏ้”™่ฏฏ: 5 ่ฎค่ฏ/ๆƒ้™: 0 ็ฝ‘็ปœ้”™่ฏฏ: 5 ๆถˆๆฏๆŠ•้€’ๅคฑ่ดฅ: 20

    โš ๏ธ ๅ•ไธ€้”™่ฏฏ็ฑปๅž‹ใ€Œ429/้™ๆตใ€ๅ ๆฏ” 80%๏ผŒๅฏ่ƒฝๆ˜ฏๅ•ไธ€ๆ•…้šœๆบ

    ๐Ÿ”ด Alert (English equivalent)

    ๐Ÿ”ด Gateway detected 150 errors in the last 30 min (threshold: 30, 5/min)
    ๐Ÿ“ˆ Error spike: 12 โ†’ 150 (3x threshold triggered)

    Error breakdown: 429/Rate-limit: 120 5xx Server errors: 5 Auth/Permission: 0 Network errors: 5 Delivery failures: 20

    โš ๏ธ Single error type "429/Rate-limit" accounts for 80%+ โ€” likely a single fault source

    ๐Ÿ’š Healthy

    No output from check mode.

    Limitations

  • Requires systemd + journalctl (falls back to ~/.openclaw/logs/ on macOS)
  • Reactive, not preventive
  • Cannot pinpoint which extension is failing โ€” check error details for clues
  • Security

  • Read-only: Only reads logs
  • No credentials: No API keys accessed
  • No network: No outbound requests
  • User state only: State in ~/.local/state/gateway-watchdog/ (XDG standard, no elevated permissions needed)
  • ๐Ÿ’ก Examples

    bash scripts/gateway-watchdog.sh check     # silent unless errors exceed threshold
    bash scripts/gateway-watchdog.sh verbose   # always outputs full report
    bash scripts/gateway-watchdog.sh history   # show monitoring history
    bash scripts/gateway-watchdog.sh trend     # last 24h error trend
    

    Heartbeat integration

    Add to HEARTBEAT.md:

    ```markdown

    โš™๏ธ Configuration

    All via environment variables:

    | Variable | Default | Description | |----------|---------|-------------| | WATCHDOG_THRESHOLD | 30 | Error count that triggers alert | | WATCHDOG_WINDOW | 30 | Monitoring window in minutes | | WATCHDOG_SPIKE_RATIO | 3 | Alert when errors jump Nx vs last check | | WATCHDOG_EXTRA_PATTERNS | _(empty)_ | Custom regex patterns (e.g., 99991400\|99991403) | | WATCHDOG_STATE | ~/.local/state/gateway-watchdog/state.json | State file | | WATCHDOG_LOG | ~/.local/state/gateway-watchdog/history.log | History log |

    Adding channel-specific patterns

    # Feishu-specific error codes
    export WATCHDOG_EXTRA_PATTERNS='99991400|99991403|99991404|99991429'

    Telegram-specific

    export WATCHDOG_EXTRA_PATTERNS='Too Many Requests|FLOOD_WAIT|bot was blocked'

    Discord-specific

    export WATCHDOG_EXTRA_PATTERNS='DiscordAPIError|Missing Permissions|Unknown Channel'