Skip to main content

Systemd journal monitoring and notification tool with priority filtering, pattern matching and security violation detection

Project description

journalcheck

CI codecov PRs Welcome License: MIT

Systemd journal monitoring and notification tool with priority filtering, pattern matching and security violation detection.

Inspired by logcheck, but designed for systemd's journal with output that can be piped to other programs for notifications, monitoring, or alerting.

Key Differences from logcheck

  • Priority-based filtering: Filter messages by systemd priority levels (emerg, alert, crit, err, warning, notice, info, debug) - logcheck only supports pattern matching
  • Per-service priority control: Set different priority thresholds for different services without writing individual ignore patterns
  • Flexible output: Pipe to any command, send via email, or output to stdout - not limited to email only
  • JSON output: Machine-readable format for integration with monitoring systems
  • Cursor-based tracking: Only process new entries since last run using systemd journal cursors

Features

  • Priority-based filtering (emerg, alert, crit, err, warning, notice, info, debug)
  • Per-identifier priority configuration
  • Regex pattern matching for identifiers (case-sensitive; (?i) is supported)
  • Regex pattern matching for ignore and violations patterns (always case-insensitive)
    • Ignore patterns: Must match the entire message (implicit anchors)
    • Violation patterns: Can match anywhere in the message (substring match)
  • Two-level pattern hierarchy:
    • Violations: Always shown (e.g., failed logins, security events)
    • Ignore: Suppress matching messages (exact match)
  • Pre-configured violation patterns for common services (sshd, sudo, su, smartd)
  • Cursor-based tracking (only process new entries)
  • Multiple output formats (short, json)
  • Modular configuration via /etc/journalcheck.yaml and /etc/journalcheck.d/*.yaml

Installation

From PyPI

pip install journalcheck

From Debian package

Download the .deb file from the releases page and install:

sudo dpkg -i journalcheck_*.deb

via APT Repository

  • download the public key:
curl -fsSL https://gms1.github.io/journalcheck/apt/public.gpg | sudo gpg --dearmor -o /usr/share/keyrings/journalcheck-archive-keyring.gpg
  • register the apt repository
echo "deb [signed-by=/usr/share/keyrings/journalcheck-archive-keyring.gpg] https://gms1.github.io/journalcheck/apt ./" | sudo tee /etc/apt/sources.list.d/journalcheck.list
  • install this package
sudo apt update && sudo apt install journalcheck

From source

pip install -e .

Configuration

Main config: /etc/journalcheck.yaml

Additional configs: /etc/journalcheck.d/*.yaml (merged automatically)

Example:

priority: warning
format: short

# Optional: pipe output to a command
output_command: "notify-send 'Journal Alert'"

# Optional: send output via email
email_to: "admin@example.com"
email_subject: "Journal Alerts"

identifiers:
  ssh: # Exact match
    priority: info
    ignore:
      - ".*session opened.*"   # Full match: must match entire message
      - ".*session closed.*"
    violations:
      - "Failed password"       # Substring: matches anywhere in message
  /^(?i)cron$/: # Match both "cron" and "CRON" using case-insensitive regex
    priority: notice
    ignore:
      - ".*session opened.*"
      - ".*session closed.*"
  /^.*$/: # Any other identifier
    violations:
    - (error|failed)

Output Options:

  • If output_command is set, output will be piped to that command
  • If email_to is set, output will be sent via email using the mail command
  • If neither is set, output goes to stdout by (default), except if running as systemd service

Default Violations

The following identifiers have pre-configured violation patterns that are automatically included:

  • sshd: Failed password, Invalid user, Connection closed by authenticating user, etc.
  • sudo: authentication failure, user NOT in sudoers, incorrect password attempt
  • su: FAILED su, authentication failure
  • smartd: SMART Failure, Attribute.*failed, Error.*occurred
  • kernel: I/O error, Buffer I/O error, end_request: I/O error

You can add additional violations to these identifiers - they will be appended to the defaults.

Usage

Basic usage

journalcheck

Filter output

journalcheck | grep ssh

Save to file

journalcheck > /var/log/journal-alerts.log

Send via email

journalcheck | mail -s "Journal Alerts" admin@example.com

Run via systemd timer

The package includes systemd service and timer units for automated checking.

Enable the timer:

sudo systemctl enable --now journalcheck.timer

Check timer status:

sudo systemctl status journalcheck.timer
sudo systemctl list-timers journalcheck.timer

Customize the schedule: The default schedule is hourly. To change it:

sudo systemctl edit journalcheck.timer

Add your custom schedule:

[Timer]
OnCalendar=daily

See systemd.time(7) for schedule syntax.

License

MIT License - see LICENSE file for details.

Repository

https://github.com/gms1/journalcheck

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

journalcheck-1.0.2.tar.gz (21.3 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

journalcheck-1.0.2-py3-none-any.whl (12.9 kB view details)

Uploaded Python 3

File details

Details for the file journalcheck-1.0.2.tar.gz.

File metadata

  • Download URL: journalcheck-1.0.2.tar.gz
  • Upload date:
  • Size: 21.3 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for journalcheck-1.0.2.tar.gz
Algorithm Hash digest
SHA256 2be30ba0b8e15873c59399f42e4f4f6ccd828be5c2869328b9fd706b878e38e6
MD5 91d7ca45cc294d69f4611f3eb2daaa8e
BLAKE2b-256 42e58368aa37035cc3fb8d259ae7da96aa6ad61cb89432f18ea156c6c6d9c034

See more details on using hashes here.

Provenance

The following attestation bundles were made for journalcheck-1.0.2.tar.gz:

Publisher: release.yml on gms1/journalcheck

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file journalcheck-1.0.2-py3-none-any.whl.

File metadata

  • Download URL: journalcheck-1.0.2-py3-none-any.whl
  • Upload date:
  • Size: 12.9 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for journalcheck-1.0.2-py3-none-any.whl
Algorithm Hash digest
SHA256 c58673215a9d536a3692162743f7adf4dc4e4529ba6bfa9a8684189eedda6beb
MD5 1ad6f6715804925446d4e59dff7e54f2
BLAKE2b-256 e937c5724fc52e3a921e48a453500f196cc031c565abc1d2bbd62e4e8e786302

See more details on using hashes here.

Provenance

The following attestation bundles were made for journalcheck-1.0.2-py3-none-any.whl:

Publisher: release.yml on gms1/journalcheck

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page