Анализ логов Docker контейнера для диагностики проблем и мониторинга здоровья системы. Использовать при отладке ошибок, отслеживании процессов воркеров, исследовании проблем API или мониторинге поведения системы после тестов.
Efficiently analyze logs inside MikoPBX Docker container to diagnose issues, monitor processes, and track system behavior.
For local development, logs are mounted on the host at:
/Users/nb/PhpstormProjects/mikopbx/dev_docker/tmp/projects/main/storage/usbdisk1/mikopbx/log/
Advantages of host access:
When to use host path:
Use this skill when:
Option A: Host Path (Recommended for analysis)
# Direct access to logs (faster)
HOST_LOG_PATH="/Users/nb/PhpstormProjects/mikopbx/dev_docker/tmp/projects/main/storage/usbdisk1/mikopbx/log"
# Use Grep tool
# Pattern: errors in system log
# Path: $HOST_LOG_PATH/system/messages
# Or use Read tool for specific log files
Option B: Docker Exec (Needed for process checks)
# Find MikoPBX container (needed for worker checks)
CONTAINER_ID=$(docker ps | grep mikopbx | awk '{print $1}' | head -1)
Quick Decision Guide:
Based on issue type, select appropriate logs:
API Issues:
Call Issues:
Database Issues:
Worker Issues:
Use targeted search patterns (see search-patterns.md):
# Recent errors
docker exec $CONTAINER_ID tail -500 /storage/usbdisk1/mikopbx/log/system/messages | grep -i error
# Specific worker
docker exec $CONTAINER_ID tail -300 /storage/usbdisk1/mikopbx/log/system/messages | grep WorkerApiCommands
# Real-time monitoring
docker exec $CONTAINER_ID tail -f /storage/usbdisk1/mikopbx/log/system/messages
When to use: First step in diagnosing any issue
Method A: Host Path (Recommended)
# Use Grep tool
# Pattern: error
# Path: /Users/nb/PhpstormProjects/mikopbx/dev_docker/tmp/projects/main/storage/usbdisk1/mikopbx/log/system/messages
# Options: -i (case insensitive), -C 2 (2 lines context)
Method B: Docker Exec
# Get last 500 lines, filter errors
docker exec $CONTAINER_ID tail -500 /storage/usbdisk1/mikopbx/log/system/messages | grep -i error
What to look for:
Common findings:
When to use: API request fails or returns unexpected result
Method A: Host Path (Recommended)
# Use Grep tool for WorkerApiCommands activity
# Pattern: WorkerApiCommands
# Path: /Users/nb/PhpstormProjects/mikopbx/dev_docker/tmp/projects/main/storage/usbdisk1/mikopbx/log/system/messages
# Use Read tool for PHP errors (recent)
# Path: /Users/nb/PhpstormProjects/mikopbx/dev_docker/tmp/projects/main/storage/usbdisk1/mikopbx/log/php/error.log
# Offset: calculate from file size
# Limit: 50
# Use Grep for nginx access
# Pattern: POST /pbxcore/api
# Path: /Users/nb/PhpstormProjects/mikopbx/dev_docker/tmp/projects/main/storage/usbdisk1/mikopbx/log/nginx/access.log
Method B: Docker Exec
# Check WorkerApiCommands activity
docker exec $CONTAINER_ID tail -200 /storage/usbdisk1/mikopbx/log/system/messages | grep WorkerApiCommands
# Check PHP errors
docker exec $CONTAINER_ID tail -50 /storage/usbdisk1/mikopbx/log/php/error.log
# Check nginx access log
docker exec $CONTAINER_ID tail -100 /storage/usbdisk1/mikopbx/log/nginx/access.log | grep "POST /pbxcore/api"
What to look for:
Expected flow:
[06:52:10] nginx: POST /pbxcore/api/v3/extensions
[06:52:11] WorkerApiCommands: Processing request
[06:52:12] WorkerApiCommands: Executing SaveRecordAction
[06:52:13] WorkerApiCommands: Response sent (200 OK)
See analysis-scenarios.md for detailed example.
When to use: Worker not responding, system seems stuck
# Check if worker is running
docker exec $CONTAINER_ID ps aux | grep WorkerApiCommands
# Check for crashes
docker exec $CONTAINER_ID tail -500 /storage/usbdisk1/mikopbx/log/system/messages | grep -E "WorkerApiCommands|terminated|crash"
# Count instances
docker exec $CONTAINER_ID ps aux | grep WorkerApiCommands | grep -v grep | wc -l
Expected: WorkerApiCommands should have 3 instances
What to look for:
Common issues:
See worker-processes.md for complete worker reference.
When to use: Constraint violations, lock errors, data inconsistency
# Check for database errors
docker exec $CONTAINER_ID tail -200 /storage/usbdisk1/mikopbx/log/system/messages | grep -iE "database|sqlite|constraint"
# Check PHP PDO errors
docker exec $CONTAINER_ID tail -100 /storage/usbdisk1/mikopbx/log/php/error.log | grep -iE "database|pdo|sql"
Common errors:
UNIQUE constraint failed: Extensions.number - Duplicate dataFOREIGN KEY constraint failed - Invalid referenceDatabase is locked - Concurrent accessDatabase disk image is malformed - CorruptionInvestigation steps:
See analysis-scenarios.md for detailed troubleshooting.
When to use: Need to see what's happening right now
# Follow system log
docker exec $CONTAINER_ID tail -f /storage/usbdisk1/mikopbx/log/system/messages
# Follow with error filter
docker exec $CONTAINER_ID tail -f /storage/usbdisk1/mikopbx/log/system/messages | grep -i error
# Follow specific worker
docker exec $CONTAINER_ID tail -f /storage/usbdisk1/mikopbx/log/system/messages | grep WorkerApiCommands
Use cases:
Pro tip: Press Ctrl+C to stop monitoring when done.
# Log base directory on host
HOST_LOG_BASE="/Users/nb/PhpstormProjects/mikopbx/dev_docker/tmp/projects/main/storage/usbdisk1/mikopbx/log"
# PRIMARY: Main system log
${HOST_LOG_BASE}/system/messages
# PHP errors
${HOST_LOG_BASE}/php/error.log
# Asterisk errors
${HOST_LOG_BASE}/asterisk/error
# Web server errors
${HOST_LOG_BASE}/nginx/error.log
# Fail2ban logs
${HOST_LOG_BASE}/fail2ban/fail2ban.log
# PRIMARY: Main system log
/storage/usbdisk1/mikopbx/log/system/messages
# PHP errors
/storage/usbdisk1/mikopbx/log/php/error.log
# Asterisk errors
/storage/usbdisk1/mikopbx/log/asterisk/error
# Web server errors
/storage/usbdisk1/mikopbx/log/nginx/error.log
Using Host Path (Faster)
# Check recent errors in system log
# Use Grep tool:
# Pattern: error
# Path: /Users/nb/PhpstormProjects/mikopbx/dev_docker/tmp/projects/main/storage/usbdisk1/mikopbx/log/system/messages
# Options: -i -C 2
# Read PHP error log
# Use Read tool:
# Path: /Users/nb/PhpstormProjects/mikopbx/dev_docker/tmp/projects/main/storage/usbdisk1/mikopbx/log/php/error.log
# Search for specific pattern
# Use Grep tool:
# Pattern: WorkerApiCommands
# Path: /Users/nb/PhpstormProjects/mikopbx/dev_docker/tmp/projects/main/storage/usbdisk1/mikopbx/log/system/messages
Using Docker Exec (For processes)
# Find container
docker ps | grep mikopbx
# Tail system log
docker exec <id> tail -100 /storage/usbdisk1/mikopbx/log/system/messages
# Tail errors only
docker exec <id> tail -500 /storage/usbdisk1/mikopbx/log/system/messages | grep -i error
# Check PHP errors
docker exec <id> tail -50 /storage/usbdisk1/mikopbx/log/php/error.log
# Check workers (MUST use docker exec)
docker exec <id> ps aux | grep Worker
Always structure log analysis output clearly:
📋 Log Analysis: <Component/Issue>
==================================
🔍 Search Criteria:
• Log file: /path/to/log
• Time range: HH:MM - HH:MM
• Pattern: <search pattern>
• Lines analyzed: N
📊 Summary:
• Total lines: N
• Errors: N
• Warnings: N
❌ Errors Found (N):
1. [HH:MM:SS] Error Type
Location: File.php:line
Message: Error description
Process: WorkerName[PID]
2. [HH:MM:SS] Error Type
...
⚠️ Warnings Found (top 5):
1. [HH:MM:SS] Warning description
2. ...
🔄 Process Status:
WorkerApiCommands:
✅ Running (3 instances)
PIDs: 1637, 1639, 1641
💡 Analysis:
<interpretation of findings>
🎯 Recommendations:
1. Fix X in File.php:line
2. Check Y in database
3. Monitor Z
Log Locations:
/storage/usbdisk1/mikopbx/log/
├── system/messages # Main system log
├── php/error.log # PHP errors
├── asterisk/error # Asterisk errors
├── nginx/error.log # Web errors
└── fail2ban/fail2ban.log # Security
Common Workers:
Start broad, then narrow
Use tail with limits
tail -500 | grep (fast)cat | grep (slow for large files)Filter aggressively
Check timestamps
Monitor processes
Look for patterns
uniq -c to count occurrencesSave findings
tail -N instead of cat for large fileshead to limit outputls -lh)-f for real-time monitoring only when neededIf logs are empty:
If container command fails:
docker psdocker exec -it for interactive modeIf can't find pattern:
-i-E "pattern1|pattern2"Fatal error: - PHP crashed, script stoppedUndefined variable: - Variable not initializedCall to undefined function: - Missing functionUNIQUE constraint failed: - Database duplicateProcess terminated - Worker crashedOrphaned process - Worker parent diedFailed to connect - Service unavailableTimeout exceeded - Operation too slowCould not create an object - Config errorError parsing allow= - Codec config issueAuthentication failed - Wrong credentialsNo route to destination - Routing problemOut of memory - Memory exhaustedCannot allocate memory - Resources lowToo many open files - File descriptor limitConnection refused - Service not runningLog analysis is successful when: