Admin

Reading the Logs

Where to find logs in Opterius and how to read them effectively.

Last updated 1775606400

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
Mail /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).

Related