How to read journal files from another server
Sep 6, 2026
Open a copied .journal file with journalctl --file, a whole directory with -D, and a mounted root filesystem with --root, plus the boot-offset and permission traps that make it look empty.
Step-by-step guides for getting logs off your servers and into one searchable place, then querying and alerting on them once they land.
Every guide covers three things: how to configure the source, how to ship the logs so a network blip does not lose them, and which queries are worth running on the result.
Running a homelab or a small rack? Start with Proxmox for the hypervisor and OPNsense, Synology and TrueNAS for the appliances that only speak syslog.
Logs already landing? Querying logs with SQL is where they start earning their keep.
Chasing a cron job instead? Checking cron logs covers where cron’s own log lives on each distribution and why it is so often empty, where cron job output goes covers keeping what a job printed, and monitoring cron jobs covers noticing when it stops printing anything at all.
Working with systemd? Viewing logs for a service covers reading the journal, and saving journalctl output to a file covers getting it out of the journal without losing entries.
Narrowing the journal down? Viewing journalctl logs for a specific time range covers --since and --until and the midnight trap that quietly drops a day, showing only errors in journalctl covers -p err and why an application full of errors often returns nothing, and searching journalctl logs for a specific string covers -g, the case rule nobody expects, and the fields it cannot see.
Tracking down a specific failure? Checking failed SSH login attempts covers reading the auth log and counting attempts by source, checking Nginx error logs covers finding the file and raising the level when it looks empty, and viewing Docker container logs covers docker logs and the three reasons it returns nothing.
Parsing the journal, or reading one that came off another machine? Getting JSON output from journalctl covers -o json and the three cases where a value is not a string, including the one that turns your longest messages into null. Reading journal files from another server covers --file, -D and --root, and the four reasons a copied journal looks empty when it is not.
Journal eating the disk? Clearing journalctl logs and limiting journal disk usage covers vacuuming and the caps that keep it vacuumed, and alerting on a disk running out of space covers hearing about the next one at 85% instead of 100%. Server rebooted and nobody knows why? Finding out why a Linux server rebooted covers reading the previous boot, and what to do when there is no previous boot to read.
Want to hear about problems instead of going to look for them? Alerting on errors in your logs covers writing rules that actually fire, including the one nobody writes — alert when the logs stop. Alerting on SSH logins applies it to the auth log.
No log server yet? Start with setting up a self-hosted logging server, then come back and pick a source.
Sep 6, 2026
Open a copied .journal file with journalctl --file, a whole directory with -D, and a mounted root filesystem with --root, plus the boot-offset and permission traps that make it look empty.
Sep 6, 2026
Use journalctl -o json for one object per line, and learn the three cases where a field is not a string: null over 4096 bytes, arrays for repeated fields, and byte arrays for binary data.
Aug 30, 2026
Read container logs with docker logs, follow them live, filter by time, find them on disk, and understand why the command sometimes returns nothing at all.
Aug 30, 2026
Find the Nginx error log, read its format, raise the level when it is too quiet, and search errors across every web server from one place.
Aug 30, 2026
Search the systemd journal with journalctl -g, understand the case-sensitivity rule and what -g cannot match, pipe to grep when you need more, and search every host at once.
Aug 30, 2026
Read failed SSH logins with lastb, journalctl and auth.log, count the attempts by source IP, and keep the record somewhere the attacker cannot reach.
Aug 29, 2026
Filter the systemd journal with journalctl -p err, read the eight priority levels, understand why an application full of errors returns nothing, and alert on the errors that -p misses.
Aug 28, 2026
Filter the systemd journal with --since and --until, use relative and absolute times correctly, avoid the midnight and timezone traps, and query the same window across every host at once.
Aug 22, 2026
Report df output from cron as a JSON log line, alert on it with SQL before the disk fills, and avoid the SQLite comparison that makes a 3% disk fire a disk-full alert.
Aug 22, 2026
Find the cron log on Debian, Ubuntu and the RHEL family, read it with journalctl or grep, work out why it is empty, and see why the line that proves a job ran does not prove it worked.
Aug 20, 2026
Follow the systemd journal live with journalctl -f, narrow it to one unit or one priority, fix the pipe that appears to hang, and follow every server at once instead of one.
Aug 16, 2026
Use last reboot, journalctl --list-boots and -b -1 to read the previous boot, tell a clean shutdown from a panic, and see why the answer is often missing from the machine itself.
Aug 16, 2026
Check journal disk usage, vacuum old entries with --rotate and --vacuum-time, cap it for good with SystemMaxUse in journald.conf, and keep the evidence you are about to delete.
Aug 10, 2026
Self-hosted uptime checks run from a box you own, next to the logs from the outage. Here is how to set them up, why a 500 will not alert you until you add a keyword, and what to do about the one check your own server cannot make.
Aug 10, 2026
Ship the journal to a central server, then alert on SSH logins. Covers what sshd actually writes, which logins are worth a notification, and how to reconstruct a session afterwards.
Aug 10, 2026
A log alert that never fires looks exactly like a healthy system. Here is how to write alert rules that match, how to alert on logs that stop arriving, and the mistakes that produce a rule which silently does nothing.
Aug 7, 2026
Cron mails job output to a mailbox nobody reads. Here is where cron logs actually go on Linux, why /var/log/syslog does not have your output, and how to ship each run to a central log server as one searchable record.
Aug 7, 2026
Query your logs with SQL instead of grep: the logs table schema, json_extract on JSON log lines, counting and grouping errors, time buckets, full-text search, and the json_valid trap that silently truncates results.
Aug 7, 2026
How to ship Node.js logs to a self-hosted central log server: structured JSON with pino, keeping stack traces on one line, shipping through journald or a batching transport, and SQL queries for the results.
Aug 7, 2026
How to ship MySQL and MariaDB slow query logs and error logs to a self-hosted central log server, including the multi-line problem the slow query log creates and how to get one row per query.
Aug 7, 2026
How to ship Apache access and error logs to a self-hosted central log server: a JSON LogFormat, piped logging through syslog, an offset-tracking shipper, and SQL queries for the results.
Aug 7, 2026
Ship Kubernetes and k3s pod logs to a self-hosted central logging server with a Fluent Bit DaemonSet posting to an HTTP ingest endpoint, then query them with SQL.
Aug 7, 2026
Firewalls and NAS boxes only speak syslog. Use an rsyslog relay to forward OPNsense, Synology DSM and TrueNAS logs into a self-hosted central logging server over HTTP.
Aug 7, 2026
Caddy already logs JSON. This guide enables access logging, ships it to a self-hosted central server through journald or a file, and gives the SQL queries worth running on it.
Aug 7, 2026
Ship Proxmox VE node logs, task logs and guest logs to a self-hosted central server with the CL Agent, then alert when a backup job fails or a node stops checking in.
Aug 7, 2026
Use journalctl -u to read one service, follow it live with -f, filter by time and severity, fix the five reasons it prints nothing, and run the same filters across every host at once.
Aug 7, 2026
Redirect journalctl to a file, narrow it first with -u, --since and -p, pick an output format, and use --cursor-file so the second export does not repeat the first.
Aug 7, 2026
Cron jobs fail silently by default. Here is how to add heartbeat monitoring to cron, detect jobs that never ran, catch hung jobs, and get alerted on failure.
Aug 7, 2026
Ship Python application logs to a centralized logging server with a custom logging handler, structured JSON output, batching, and safe handling of failures.
Aug 7, 2026
Configure PostgreSQL CSV or JSON logging, ship the logs to a centralized logging server, and query them with SQL to find slow queries, deadlocks, and failed connections.
Aug 7, 2026
Forward rsyslog messages to a centralized logging server over HTTP with omhttp, or via omfwd and omprog. Includes queueing, TLS, and template configuration.
Aug 7, 2026
Ship Docker container logs to a centralized logging server using the journald or syslog logging drivers, or by streaming docker logs directly over HTTP.
Aug 7, 2026
How to ship Nginx access and error logs to a centralized logging server: structured JSON log formats, syslog and journald forwarding, and SQL queries for the results.
Feb 22, 2024
Ship journald entries to a central log server: hold the cursor yourself, move it only after a 2xx, and keep the backlog from an outage in batches the server can take.
💌 Get notified on new features and updates