workspace/skills/f5-health-check/SKILL.md
F5 BIG-IP health monitoring - virtual server status, pool member health, log analysis, performance statistics, and systematic health assessment. Use when checking F5 load balancer health, running a pre-change or post-change validation, investigating pool member failures, or auditing SSL certificate expiration.
npx skillsauth add automateyournetwork/netclaw f5-health-checkInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
The F5 MCP server provides 6 tools. Call them via mcp-call with the required environment variables:
IP_ADDRESS=$F5_IP_ADDRESS Authorization_string=$F5_AUTH_STRING python3 $MCP_CALL "python3 -u $F5_MCP_SCRIPT" <tool_name> '{"param":"value"}'
| Tool | Purpose | Key Arguments |
|------|---------|---------------|
| list_tool | List F5 objects by type | object_name, object_type (virtual/pool/irule/profile) |
| show_stats_tool | Show statistics for an F5 object | object_name, object_type (virtual/pool/irule/profile) |
| show_logs_tool | Show N lines of system logs | lines_number |
| create_tool | Create an F5 object via POST | url_body, object_type |
| update_tool | Update an F5 object via PATCH | url_body, object_type, object_name |
| delete_tool | Delete an F5 object | object_type, object_name |
Always run health checks in this exact order. Each section builds on the previous one.
List all virtual servers to establish the baseline inventory.
IP_ADDRESS=$F5_IP_ADDRESS Authorization_string=$F5_AUTH_STRING python3 $MCP_CALL "python3 -u $F5_MCP_SCRIPT" list_tool '{"object_name":"","object_type":"virtual"}'
Extract and report:
Flags:
offline -> CRITICAL: VIP not serving trafficunknown -> WARNING: Cannot determine healthdisabled -> INFO: Intentionally taken out of service (verify with change records)For each virtual server discovered in Step 1, collect detailed statistics:
IP_ADDRESS=$F5_IP_ADDRESS Authorization_string=$F5_AUTH_STRING python3 $MCP_CALL "python3 -u $F5_MCP_SCRIPT" show_stats_tool '{"object_name":"my_virtual_server","object_type":"virtual"}'
Key metrics to evaluate:
| Metric | HEALTHY | WARNING | CRITICAL |
|--------|---------|---------|----------|
| Status availability | available | unknown | offline |
| Current connections | < 80% of connection limit | 80-95% of limit | > 95% of limit or at limit |
| Packets in/out | Non-zero, balanced ratio | Highly asymmetric (>100:1) | Zero in either direction |
| Bits in/out | Non-zero | Sudden drop >50% from baseline | Zero (no traffic flowing) |
| Total requests (HTTP VIPs) | Incrementing | Flat (stalled) | Decreasing or zero |
| Client-side connection rate | Steady or growing | Spike >200% baseline | Zero |
Thresholds:
List all pools and their members:
IP_ADDRESS=$F5_IP_ADDRESS Authorization_string=$F5_AUTH_STRING python3 $MCP_CALL "python3 -u $F5_MCP_SCRIPT" list_tool '{"object_name":"","object_type":"pool"}'
Extract and report for each pool:
Flags:
offline -> CRITICAL: Pool is down, no healthy backendsoffline -> WARNING: Reduced capacity50% members
offline-> HIGH: Significant capacity degradation
disabled but not offline -> INFO: Intentionally drained (verify with change records)For each pool, collect statistics to assess utilization:
IP_ADDRESS=$F5_IP_ADDRESS Authorization_string=$F5_AUTH_STRING python3 $MCP_CALL "python3 -u $F5_MCP_SCRIPT" show_stats_tool '{"object_name":"my_pool","object_type":"pool"}'
Key metrics to evaluate:
| Metric | HEALTHY | WARNING | CRITICAL | |--------|---------|---------|----------| | Active member count | All members active | < 75% active | < 50% active or zero | | Current connections per member | Evenly distributed | Skewed >3:1 ratio | Single member handling all traffic | | Server-side connections | Incrementing | Flat | Zero | | Total requests served | Incrementing | Flat | Decreasing | | Bytes in/out | Balanced | Asymmetric | Zero |
Connection distribution analysis:
List all profiles to document the configuration posture:
IP_ADDRESS=$F5_IP_ADDRESS Authorization_string=$F5_AUTH_STRING python3 $MCP_CALL "python3 -u $F5_MCP_SCRIPT" list_tool '{"object_name":"","object_type":"profile"}'
Check for:
Flags:
List all iRules to document traffic manipulation logic:
IP_ADDRESS=$F5_IP_ADDRESS Authorization_string=$F5_AUTH_STRING python3 $MCP_CALL "python3 -u $F5_MCP_SCRIPT" list_tool '{"object_name":"","object_type":"irule"}'
Check for:
Flags:
log statements in high-traffic path -> WARNING: Performance impactHTTP::collect without HTTP::release -> CRITICAL: Memory leak riskcatch blocks -> INFO: Error handling present (good practice)Pull recent system logs to detect errors and anomalies:
IP_ADDRESS=$F5_IP_ADDRESS Authorization_string=$F5_AUTH_STRING python3 $MCP_CALL "python3 -u $F5_MCP_SCRIPT" show_logs_tool '{"lines_number":"200"}'
Scan for these critical patterns:
| Pattern | Severity | Meaning |
|---------|----------|---------|
| 01010028 | CRITICAL | No members available for pool |
| 01010029 | CRITICAL | Pool member monitor status down |
| 0107142f | CRITICAL | SSL handshake failure |
| 01070417 | CRITICAL | HTTP parse error |
| 01060102 | HIGH | Connection rate limit reached |
| 01010025 | HIGH | Virtual server connection limit reached |
| 01071681 | WARNING | Pool member has been marked down |
| 01071682 | INFO | Pool member has been marked up |
| 01010240 | WARNING | Connection queue full |
| 0107143c | WARNING | SSL certificate verification failure |
| 01070727 | WARNING | Pool member rate limit reached |
| MCP error | HIGH | Management plane communication issue |
| disk_usage | WARNING | Disk space issue on BIG-IP |
| memory | HIGH | Memory pressure on BIG-IP |
| ha_status | CRITICAL | High availability state change |
| failover | CRITICAL | HA failover event detected |
Log analysis guidelines:
If Step 7 reveals errors, pull more log lines for deeper analysis:
IP_ADDRESS=$F5_IP_ADDRESS Authorization_string=$F5_AUTH_STRING python3 $MCP_CALL "python3 -u $F5_MCP_SCRIPT" show_logs_tool '{"lines_number":"1000"}'
Advanced log analysis:
Always produce a summary table after completing all steps:
F5 BIG-IP Health Report
Device: $F5_IP_ADDRESS
Date: YYYY-MM-DD HH:MM UTC
+---------------------------+----------+------------------------------------------+
| Check | Status | Details |
+---------------------------+----------+------------------------------------------+
| Virtual Servers | HEALTHY | 5/5 available, all serving traffic |
| Pool Health | WARNING | pool_web: 3/4 members active (node3 dn) |
| Connection Utilization | HEALTHY | Peak VIP at 45% connection limit |
| Traffic Distribution | HEALTHY | Even distribution across pool members |
| SSL/TLS Profiles | WARNING | www_ssl cert expires in 21 days |
| iRules | HEALTHY | 3 active, no problematic patterns |
| System Logs | HIGH | 47x 01010029 (monitor down) in last hour |
+---------------------------+----------+------------------------------------------+
Overall: WARNING -- 2 items need attention
Action Items:
1. [WARNING] Investigate pool_web node3 health check failures
2. [WARNING] Renew SSL certificate for www_ssl profile (expires in 21 days)
3. [HIGH] Investigate spike in pool member monitor-down log messages
Severity order: CRITICAL > HIGH > WARNING > HEALTHY. Overall status = worst individual status.
When monitoring multiple F5 appliances, run the full procedure on each device and produce a fleet summary:
+------------------+----------+----------+--------+--------+-----------+
| BIG-IP | Virtuals | Pools | SSL | Logs | Overall |
+------------------+----------+----------+--------+--------+-----------+
| bigip-prod-01 | HEALTHY | WARNING | HEALTHY| HEALTHY| WARNING |
| bigip-prod-02 | HEALTHY | HEALTHY | WARN | HIGH | HIGH |
| bigip-dr-01 | HEALTHY | HEALTHY | HEALTHY| HEALTHY| HEALTHY |
+------------------+----------+----------+--------+--------+-----------+
Sort devices by severity (CRITICAL first) for triage prioritization.
After completing a health check, record the session in GAIT:
python3 $MCP_CALL "python3 -u $GAIT_MCP_SCRIPT" gait_record_turn '{"prompt":"F5 BIG-IP health check on $F5_IP_ADDRESS","response":"Health check completed. Virtual servers: 5/5 HEALTHY. Pools: WARNING (pool_web 3/4 members). SSL: WARNING (cert expires 21 days). Logs: HIGH (47x monitor-down events). Overall: WARNING. Action items: investigate pool_web node3, renew SSL cert, investigate log spike.","artifacts":["f5-health-report.txt"]}'
testing
Human-in-the-loop escalation via HumanRail — route low-confidence agent decisions, pre-destructive operation approvals, and ambiguous incident tickets to real human engineers. Human answers are verified and returned as structured output. Workers are paid via Lightning Network. Use when the agent is uncertain, when a destructive change needs explicit human sign-off beyond a ServiceNow CR, or when an ambiguous ticket requires human triage before automated handling.
testing
Manage EVE-NG node lifecycle. Use when listing nodes, checking runtime state, creating or deleting nodes, starting or stopping nodes or whole labs, verifying node details, or wiping node NVRAM back to factory defaults.
development
Manage EVE-NG labs and platform inventory. Use when listing labs, checking lab metadata, creating or deleting labs, importing or exporting lab archives, checking EVE-NG health or auth, or verifying available node images before build work.
tools
Execute live CLI commands on running EVE-NG nodes over telnet console. Use when running show commands, making live config changes, verifying protocol state, testing connectivity, checking console readiness, or interacting with IOS, Junos, VPCS, EOS, or NX-OS nodes.