Guides

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.

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.

How to get JSON output from journalctl

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.

How to view Docker container logs

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.

How to check Nginx error logs

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.

How to show only errors in journalctl

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.

How to check cron logs on Linux

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.

How to find out why a Linux server rebooted

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.

How to monitor website uptime from your own server

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.

How to get alerted when errors appear in your logs

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.

How to log cron job output to a file

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.

How to query logs with SQL

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.

Sending Node.js application logs to a central server

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.

Sending MySQL and MariaDB logs to a central server

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.

Sending Apache logs to a central server

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.

Sending Kubernetes logs to a central server

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.

Sending Caddy logs to a central server

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.

Sending Proxmox logs to a central server

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.

How to view logs for a specific systemd service

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.

How to save journalctl output to a file

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.

Sending PostgreSQL logs to a central server

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.

Sending rsyslog logs to a central server

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.

Sending Nginx logs to a central server

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.

💌 Get notified on new features and updates

Only sent when a new version is released. Nothing else.