When something goes wrong, logs are always the first place to look. Opterius spreads log output across several locations depending on which component is involved. This article maps each log to its location and what it contains.
Log Locations
| Log | Location / Command | Contains |
|---|---|---|
| Panel application | /opt/opterius/storage/logs/laravel.log |
PHP exceptions, queue failures, API errors from the Panel app |
| Agent | journalctl -u opterius-agent |
Agent startup, request handling, license checks, Certbot output |
| Nginx access (per account) | /home/{user}/{domain}/logs/access.log |
HTTP requests to the site: IP, method, URL, status code, response time |
| Nginx error (per account) | /home/{user}/{domain}/logs/error.log |
PHP-FPM errors, upstream failures, permission errors |
| PHP-FPM | journalctl -u php{version}-fpm |
Pool start/stop, worker crashes, slow request logs |
/var/log/mail.log |
Postfix send/receive, delivery status, bounce reasons | |
| Rspamd | journalctl -u rspamd |
Spam scoring decisions, DKIM signing events, rejected messages |
| PowerDNS | journalctl -u pdns |
DNS query handling, zone reload events, backend errors |
| Queue worker | journalctl -u opterius-queue |
Background jobs: migrations, imports, certificate renewals |
Viewing Logs
Panel log — tail in real time:
tail -f /opt/opterius/storage/logs/laravel.log
Agent log — last 50 lines:
journalctl -u opterius-agent -n 50
Agent log — follow in real time:
journalctl -fu opterius-agent
Filter agent log for errors only:
journalctl -u opterius-agent | grep -i "error\|fail\|panic"
Mail log — check delivery status for a specific address:
grep "alice@example.com" /var/log/mail.log | tail -20
PHP-FPM for a specific version:
journalctl -u php8.3-fpm -n 50
All services since last boot:
journalctl -b -p err
This shows all error-level (and above) log entries from every systemd service since the last boot — useful for catching panics and OOM kills across the whole stack.
Reading Laravel Log Entries
The Panel's laravel.log uses a structured format. Each entry starts with a timestamp and level:
[2026-04-08 14:32:00] production.ERROR: Unable to connect to agent ...
Levels in order of severity: DEBUG, INFO, WARNING, ERROR. In a healthy system, you should only see INFO and occasionally WARNING. Any ERROR entry is worth investigating.
Stack traces follow the first error line — scroll down to see the full trace if the cause isn't obvious from the first line.
Reading journalctl Output
journalctl -u opterius-agent --since "1 hour ago"
journalctl -u opterius-agent --since "2026-04-08 14:00" --until "2026-04-08 15:00"
Add -o json to get structured output if you are piping to a log aggregator:
journalctl -u opterius-agent -o json | jq '.MESSAGE'
Log Rotation
Laravel logs rotate daily by default. Logs older than 14 days are deleted automatically. Nginx per-account logs are managed by logrotate. Agent and mail logs are managed by journald retention settings (/etc/systemd/journald.conf).