| # Analyze Journal Errors |
|
|
| You are helping the user parse systemd journal logs to identify recent errors and issues. |
|
|
| ## Task |
|
|
| 1. **Check recent errors from current boot:** |
| ```bash |
| # Errors from current boot |
| journalctl -b -p err |
| |
| # Errors and warnings |
| journalctl -b -p warning |
| |
| # Critical and alert level messages |
| journalctl -b -p crit |
| ``` |
|
|
| 2. **Show errors from specific time periods:** |
| ```bash |
| # Last hour |
| journalctl --since "1 hour ago" -p err |
| |
| # Last 24 hours |
| journalctl --since "24 hours ago" -p err |
| |
| # Specific date range |
| journalctl --since "2025-10-25" --until "2025-10-26" -p err |
| |
| # Last 100 error entries |
| journalctl -p err -n 100 |
| ``` |
|
|
| 3. **Group errors by service/unit:** |
| ```bash |
| # List units with failures |
| systemctl --failed |
| |
| # Errors from specific service |
| journalctl -u SERVICE_NAME -p err |
| |
| # Common problematic services |
| journalctl -u NetworkManager -p err |
| journalctl -u systemd-resolved -p err |
| journalctl -u bluetooth -p err |
| ``` |
|
|
| 4. **Analyze error frequency:** |
| ```bash |
| # Count errors by message |
| journalctl -b -p err --no-pager | grep -oP '(?<=: ).*' | sort | uniq -c | sort -rn | head -20 |
| |
| # Errors per unit |
| journalctl -b -p err --no-pager | grep -oP '\w+\.service' | sort | uniq -c | sort -rn |
| ``` |
|
|
| 5. **Check for kernel errors:** |
| ```bash |
| # Kernel errors |
| journalctl -k -p err |
| |
| # Segfaults |
| journalctl | grep -i "segfault" |
| |
| # OOM killer events |
| journalctl | grep -i "killed process" |
| ``` |
|
|
| 6. **Find patterns and recurring issues:** |
| ```bash |
| # I/O errors |
| journalctl -b | grep -i "i/o error" |
| |
| # Disk errors |
| journalctl -b | grep -i "ata.*error" |
| |
| # Network errors |
| journalctl -b | grep -i "network.*error\|dhcp.*fail" |
| |
| # GPU/graphics errors |
| journalctl -b | grep -i "amdgpu\|drm.*error" |
| ``` |
|
|
| 7. **Export error summary:** |
| ```bash |
| # Save errors to file for analysis |
| journalctl -b -p err --no-pager > /tmp/system-errors-$(date +%Y%m%d).log |
| |
| # Create error report |
| cat > /tmp/error-report.txt << EOF |
| System Error Report - $(date) |
| ====================================== |
| |
| Failed Services: |
| $(systemctl --failed --no-pager) |
| |
| Recent Errors (last 24h): |
| $(journalctl --since "24 hours ago" -p err --no-pager | tail -50) |
| |
| Error Summary by Service: |
| $(journalctl -b -p err --no-pager | grep -oP '\w+\.service' | sort | uniq -c | sort -rn) |
| EOF |
| |
| cat /tmp/error-report.txt |
| ``` |
|
|
| ## Present Summary to User |
|
|
| Provide: |
| - Number of errors found in timeframe |
| - Most frequent error messages |
| - Services/units with errors |
| - Critical vs warning vs error breakdown |
| - Any patterns (disk, network, GPU issues) |
| - Recommended actions for common errors |
|
|
| ## Common Error Patterns & Solutions |
|
|
| **NetworkManager errors:** |
| - DHCP timeout: Check network cable/WiFi |
| - DNS resolution: Check /etc/resolv.conf |
|
|
| **Bluetooth errors:** |
| - Adapter reset: `sudo systemctl restart bluetooth` |
| - Firmware missing: Check `dmesg | grep -i bluetooth` |
|
|
| **Disk errors:** |
| - I/O errors: Run SMART checks with `/check-disk-errors` |
| - Filesystem errors: May need `fsck` |
|
|
| **GPU errors:** |
| - AMDGPU: Check ROCm installation and kernel modules |
| - DRM errors: May indicate driver issues |
|
|
| **systemd-resolved errors:** |
| - DNSSEC validation failures: Common with some ISPs |
| - Fallback DNS: Configure in `/etc/systemd/resolved.conf` |
|
|
| ## Additional Analysis |
|
|
| If requested: |
| - Compare error frequency over different boots: `journalctl --list-boots` |
| - Check correlation with specific events (updates, configuration changes) |
| - Identify error spikes: `journalctl -b -p err --output=short-monotonic` |
| - Export for external analysis: `journalctl -b -p err -o json` |
|
|
| ## Notes |
|
|
| - Priority levels: 0=emerg, 1=alert, 2=crit, 3=err, 4=warning, 5=notice, 6=info, 7=debug |
| - Use `--no-pager` for scripting and piping |
| - Journal size can be checked with: `journalctl --disk-usage` |
| - Persistent journal: stored in `/var/log/journal/` |
| - Consider rotating old logs: `journalctl --vacuum-time=30d` |
|
|