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.
Oct 25, 2026
Where sshd writes its logs on Debian, Ubuntu and RHEL, why there may be no auth.log at all, and why journalctl -t sshd shows no logins since OpenSSH 9.8 renamed them sshd-session.
Oct 13, 2026
Use a journalctl cursor to pick up where the last run stopped. What --cursor-file, --after-cursor and --show-cursor do, the six ways they repeat or lose entries, and which systemd version changed what.
Oct 13, 2026
View kernel messages with journalctl -k, for this boot or an earlier one. Why -k --since still hides everything before the last reboot, why dmesg says "Operation not permitted", and how to search kernel errors on every server.
Oct 11, 2026
Show the last 100 journal entries with journalctl -n, for one service or one boot. Why piping to grep or tail gets the wrong 100, why -g flips the order, and how to see the full line.
Oct 11, 2026
Find out why a cron job is not running on Debian, Ubuntu and RHEL: the cron.d file names cron ignores without a word, the missing newline that drops a whole file, the permission rules, and where the error went when the job did run.
Oct 4, 2026
Docker never rotates container logs by default. Find the container filling the disk, set max-size and max-file so it stops, and avoid the three traps: existing containers, string values, and truncating the live file.
Oct 4, 2026
Find the log file for any Docker container, see why the path is empty under most drivers and on Docker Desktop, and save docker logs to a file without losing stderr.
Sep 27, 2026
Where every Proxmox VE log lives and how to read it: the journal for pvedaemon, pveproxy and pvescheduler, task logs with pvenode, backup logs under /var/log/vzdump, and why a VM or container that will not start leaves its error in the task log.
Sep 27, 2026
systemctl start said nothing and the service is dead anyway. Read the two lines of systemctl status that matter, what journalctl -xeu really shows, the status=203/EXEC family of exit codes, start-limit-hit, and how to get told when any service on any host fails.
Sep 20, 2026
Find what is filling /var/log, including the deleted files du cannot see, free the space without a reboot, and fix the logrotate config that let it happen.
Sep 20, 2026
journalctl has four ways of saying it found nothing, and three of them exit 0. Tell a missing journal from a blocked one from a filter that matched nothing, and fix each.
Sep 20, 2026
Find the Apache error log on any distribution, read the default line format, understand what LogLevel hides, and search every web server from one place.
Sep 20, 2026
Find the Nginx access log, read the combined format field by field, count status codes without the awk mistake everyone makes, and query every web server at once.
Sep 13, 2026
Post one log line or a whole file to an HTTP ingest endpoint with curl, using the token in the URL or a Bearer header, with gzip, and with the error handling that stops a cron job losing its output quietly.
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
docker logs shows what a container printed. Tail the last 100 lines, follow live, filter by time, grep without losing stderr, and fix the cases where it prints nothing.
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
Read successful SSH logins with last and journalctl, learn the two files that quietly hide half of them, then set a rule that tells you about the next one instead.
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
journalctl -u reads one systemd service. Get the unit name right, 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 or never finished, 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 to a remote server over HTTP with omhttp, or with omprog on Debian and Ubuntu, which do not package omhttp. Which rsyslog versions drop a batch on a 5xx, why a wrong token loses logs silently, and the queue settings that keep them.
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.