AgentSkillsCN

troubleshooting-guide

创建全面的故障排除指南、常见问题文档、已知问题列表和调试指南。在记录常见问题、错误信息或调试步骤时使用。

SKILL.md
--- frontmatter
name: troubleshooting-guide
description: Create comprehensive troubleshooting guides, FAQ documents, known issues lists, and debug guides. Use when documenting common problems, error messages, or debugging procedures.

Troubleshooting Guide

Overview

Create structured troubleshooting documentation that helps users and support teams quickly diagnose and resolve common issues.

When to Use

  • FAQ documentation
  • Common error messages
  • Debug guides
  • Known issues lists
  • Error code reference
  • Performance troubleshooting
  • Configuration issues
  • Installation problems

Troubleshooting Guide Template

markdown
# Troubleshooting Guide

## Quick Diagnosis

### Is the Service Working?

Check our [Status Page](https://status.example.com) first.

### Quick Health Checks

```bash
# 1. Check service is running
curl https://api.example.com/health

# 2. Check your API key
curl -H "Authorization: Bearer YOUR_API_KEY" \
  https://api.example.com/api/v1/status

# 3. Check network connectivity
ping api.example.com

# 4. Check DNS resolution
nslookup api.example.com

Common Issues

Issue: "Authentication Failed"

Error Code: 401 Unauthorized

Error Message:

json
{
  "error": "Authentication failed",
  "code": "AUTH_001",
  "message": "Invalid or expired API key"
}

Possible Causes:

  1. Invalid API key
  2. Expired API key
  3. API key not included in request
  4. Wrong authentication method

Solution:

Step 1: Verify API Key Format

bash
# API keys should be 32 characters, alphanumeric
# Format: ak_1234567890abcdef1234567890abcdef

# Check your key
echo $API_KEY | wc -c  # Should be 32

Step 2: Test API Key

bash
curl -H "Authorization: Bearer $API_KEY" \
  https://api.example.com/api/v1/auth/verify

# Expected response:
# {"valid": true, "expires": "2025-12-31T23:59:59Z"}

Step 3: Generate New Key (if needed)

  1. Log in to Dashboard
  2. Navigate to Settings > API Keys
  3. Click "Generate New Key"
  4. Copy and save the key securely
  5. Update your application configuration

Step 4: Verify Configuration

javascript
// ✅ Correct
const response = await fetch('https://api.example.com/api/v1/data', {
  headers: {
    'Authorization': `Bearer ${apiKey}`,
    'Content-Type': 'application/json'
  }
});

// ❌ Incorrect - missing Bearer prefix
headers: {
  'Authorization': apiKey
}

// ❌ Incorrect - wrong header name
headers: {
  'X-API-Key': apiKey
}

Still Not Working?

  • Check if API key has required permissions
  • Verify account is active and not suspended
  • Check if IP whitelist is configured correctly
  • Contact support with request ID from error response

Issue: "Rate Limit Exceeded"

Error Code: 429 Too Many Requests

Error Message:

json
{
  "error": "Rate limit exceeded",
  "code": "RATE_001",
  "message": "You have exceeded the rate limit",
  "limit": 100,
  "remaining": 0,
  "reset": 1642694400
}

Understanding Rate Limits:

PlanRate LimitBurstReset Period
Free100/hour10/second1 hour
Pro1000/hour50/second1 hour
Enterprise10000/hour100/second1 hour

Solutions:

Option 1: Implement Exponential Backoff

javascript
async function fetchWithRetry(url, options = {}, maxRetries = 3) {
  for (let i = 0; i < maxRetries; i++) {
    try {
      const response = await fetch(url, options);

      if (response.status === 429) {
        const resetTime = response.headers.get('X-RateLimit-Reset');
        const waitTime = resetTime
          ? (resetTime * 1000) - Date.now()
          : Math.pow(2, i) * 1000;

        console.log(`Rate limited. Waiting ${waitTime}ms...`);
        await new Promise(resolve => setTimeout(resolve, waitTime));
        continue;
      }

      return response;
    } catch (error) {
      if (i === maxRetries - 1) throw error;
    }
  }
}

Option 2: Check Rate Limit Headers

javascript
const response = await fetch('https://api.example.com/api/v1/data', {
  headers: { 'Authorization': `Bearer ${apiKey}` }
});

console.log('Limit:', response.headers.get('X-RateLimit-Limit'));
console.log('Remaining:', response.headers.get('X-RateLimit-Remaining'));
console.log('Reset:', response.headers.get('X-RateLimit-Reset'));

Option 3: Batch Requests

javascript
// ❌ Don't do this - 100 separate requests
for (const id of userIds) {
  await fetchUser(id);
}

// ✅ Do this - 1 batch request
await fetchUsers(userIds);  // API supports bulk fetch

Option 4: Upgrade Plan

  • Visit Pricing
  • Upgrade to higher tier for increased limits

Issue: "Connection Timeout"

Error Message:

code
Error: connect ETIMEDOUT
Error: socket hang up

Possible Causes:

  1. Network connectivity issues
  2. Firewall blocking outbound connections
  3. DNS resolution failure
  4. Service temporarily unavailable
  5. Incorrect endpoint URL

Diagnostic Steps:

1. Check Network Connectivity

bash
# Test basic connectivity
ping api.example.com

# Test HTTPS connectivity
curl -v https://api.example.com

# Test with timeout
curl --max-time 10 https://api.example.com/health

2. Check DNS Resolution

bash
# Check DNS
nslookup api.example.com

# Expected output:
# Name:    api.example.com
# Address: 93.184.216.34

# Try alternative DNS
nslookup api.example.com 8.8.8.8

3. Check Firewall/Proxy

bash
# Test if using proxy
curl -v --proxy http://proxy.example.com:8080 \
  https://api.example.com

# Check if port 443 is open
nc -zv api.example.com 443

4. Test from Different Network

bash
# Test from different network to isolate issue
# Try mobile hotspot, different WiFi, etc.

Solutions:

Solution 1: Increase Timeout

javascript
// ✅ Set reasonable timeout
const controller = new AbortController();
const timeout = setTimeout(() => controller.abort(), 30000); // 30 seconds

try {
  const response = await fetch('https://api.example.com/api/v1/data', {
    signal: controller.signal,
    headers: { 'Authorization': `Bearer ${apiKey}` }
  });
} finally {
  clearTimeout(timeout);
}

Solution 2: Configure Proxy

javascript
// Node.js with proxy
const HttpsProxyAgent = require('https-proxy-agent');

const agent = new HttpsProxyAgent('http://proxy.example.com:8080');

fetch('https://api.example.com', { agent });

Solution 3: Use Alternative Endpoint

bash
# If primary endpoint fails, try alternative
curl https://api-backup.example.com/health

Issue: "Invalid JSON Response"

Error Message:

code
SyntaxError: Unexpected token < in JSON at position 0

Possible Causes:

  1. Server returned HTML error page instead of JSON
  2. Response is not valid JSON
  3. Empty response body
  4. Content-Type mismatch

Diagnostic Steps:

1. Inspect Raw Response

bash
curl -v https://api.example.com/api/v1/data \
  -H "Authorization: Bearer $API_KEY"

# Look at:
# - Status code
# - Content-Type header
# - Response body

2. Check Content-Type

javascript
const response = await fetch('https://api.example.com/api/v1/data');
console.log('Content-Type:', response.headers.get('Content-Type'));
// Expected: "application/json"

3. Check Response Body

javascript
const response = await fetch('https://api.example.com/api/v1/data');
const text = await response.text();
console.log('Raw response:', text);

// Then try to parse
try {
  const data = JSON.parse(text);
} catch (error) {
  console.error('Invalid JSON:', error.message);
}

Solutions:

Solution 1: Validate Before Parsing

javascript
async function fetchJSON(url, options) {
  const response = await fetch(url, options);

  // Check status
  if (!response.ok) {
    throw new Error(`HTTP ${response.status}: ${response.statusText}`);
  }

  // Check content type
  const contentType = response.headers.get('Content-Type');
  if (!contentType || !contentType.includes('application/json')) {
    const text = await response.text();
    throw new Error(`Expected JSON but got: ${text.substring(0, 100)}`);
  }

  // Parse JSON
  return response.json();
}

Solution 2: Handle Empty Responses

javascript
const response = await fetch('https://api.example.com/api/v1/data');
const text = await response.text();

// Handle empty response
if (!text || text.trim() === '') {
  return null;
}

return JSON.parse(text);

Issue: "Slow Performance"

Symptoms:

  • API requests taking > 5 seconds
  • Timeouts
  • Application feels sluggish

Diagnostic Steps:

1. Measure Request Time

bash
# Using curl
time curl https://api.example.com/api/v1/data

# Detailed timing
curl -w "@curl-format.txt" -o /dev/null -s \
  https://api.example.com/api/v1/data

# curl-format.txt:
#     time_namelookup:  %{time_namelookup}s\n
#        time_connect:  %{time_connect}s\n
#     time_appconnect:  %{time_appconnect}s\n
#    time_pretransfer:  %{time_pretransfer}s\n
#       time_redirect:  %{time_redirect}s\n
#  time_starttransfer:  %{time_starttransfer}s\n
#                     ----------\n
#          time_total:  %{time_total}s\n

2. Check Response Size

bash
curl -I https://api.example.com/api/v1/data
# Look at Content-Length header

3. Test from Different Locations

bash
# Use online tools to test from different regions
# - https://www.dotcom-tools.com/website-speed-test.aspx
# - https://tools.pingdom.com/

Solutions:

Solution 1: Use Pagination

javascript
// ❌ Fetching all data at once
const response = await fetch('/api/v1/users');
const users = await response.json(); // 10,000 users!

// ✅ Fetch paginated data
const response = await fetch('/api/v1/users?page=1&limit=50');
const { data, pagination } = await response.json();

Solution 2: Use Field Selection

javascript
// ❌ Fetching all fields
const response = await fetch('/api/v1/users/123');

// ✅ Select only needed fields
const response = await fetch('/api/v1/users/123?fields=id,name,email');

Solution 3: Implement Caching

javascript
const cache = new Map();
const CACHE_TTL = 5 * 60 * 1000; // 5 minutes

async function fetchWithCache(url) {
  const cached = cache.get(url);
  if (cached && Date.now() - cached.timestamp < CACHE_TTL) {
    return cached.data;
  }

  const response = await fetch(url);
  const data = await response.json();

  cache.set(url, {
    data,
    timestamp: Date.now()
  });

  return data;
}

Solution 4: Use CDN

javascript
// Use CDN endpoint for static assets
const cdnUrl = 'https://cdn.example.com/api/v1/data';

Error Code Reference

CodeHTTPDescriptionSolution
AUTH_001401Invalid API keyRegenerate API key
AUTH_002401Expired API keyGenerate new key
AUTH_003403Insufficient permissionsCheck API key scopes
RATE_001429Rate limit exceededWait or upgrade plan
RATE_002429Concurrent request limitReduce parallelism
VAL_001400Missing required fieldCheck request body
VAL_002400Invalid field formatValidate input
RES_001404Resource not foundCheck resource ID
RES_002409Resource already existsUse update instead
SRV_001500Internal server errorContact support
SRV_002503Service unavailableRetry with backoff

Getting Help

Before Contacting Support

  1. Check Status Page
  2. Search Documentation
  3. Check Community Forum
  4. Review this troubleshooting guide

When Contacting Support

Include the following:

  • Error message and error code
  • Request ID (from response headers)
  • Timestamp of the issue
  • API endpoint being called
  • Code snippet (without credentials!)
  • Steps to reproduce

Example Support Request:

code
Subject: Error 429 on /api/v1/users endpoint

Hi,

I'm getting a 429 error when calling the /api/v1/users endpoint.

Error message:
{
  "error": "Rate limit exceeded",
  "code": "RATE_001",
  "request_id": "req_abc123"
}

Details:
- Timestamp: 2025-01-15T14:30:00Z
- Request ID: req_abc123
- Endpoint: GET /api/v1/users
- Account: user@example.com
- Plan: Pro

I'm only making ~50 requests per hour, which should be within
the limit. Can you help investigate?

Thanks!

Useful Links

code

## Best Practices

### ✅ DO
- Start with most common issues
- Include error messages verbatim
- Provide step-by-step diagnostics
- Show expected vs actual output
- Include code examples
- Document error codes
- Add screenshots/videos
- Link to related documentation
- Keep solutions up-to-date
- Include workarounds
- Test all solutions

### ❌ DON'T
- Use vague descriptions
- Skip diagnostic steps
- Forget to show examples
- Assume technical knowledge
- Skip verification steps
- Forget edge cases

## Resources

- [Google's Technical Writing Guide](https://developers.google.com/tech-writing)
- [Microsoft Troubleshooting Guide](https://docs.microsoft.com/troubleshoot/)
- [Stack Overflow Documentation](https://stackoverflow.com/documentation)