Skip to main content

A Python tool to synchronize AdGuard Home query logs between multiple instances

Project description

AdGuardHome-LogSync

A Python tool to synchronize AdGuard Home query logs between multiple instances with automatic log rotation.

Description

AdGuardHome-LogSync allows you to merge and synchronize query logs from multiple AdGuard Home instances while automatically managing log retention. This is useful when you're running multiple AdGuard Home instances and want to maintain a unified query log with configurable retention policies.

Features

  • Backup existing query logs
  • Merge multiple query log files
  • Automatic log rotation with configurable retention time
  • Safe atomic replacement of original logs
  • Asynchronous processing for better performance
  • Memory-efficient streaming for large log files
  • Command-line interface for easy automation

Installation

Using pipx (Recommended)

Install from PyPI:

pipx install adguardhome-logsync

Install from Git repository:

pipx install git+https://github.com/xz-dev/AdGuardHomeLogSync.git

Using pip

Install from PyPI:

pip install adguardhome-logsync

Install from Git repository:

pip install git+https://github.com/xz-dev/AdGuardHomeLogSync.git

Usage

adguardhome-logsync --name <instance-name> --path <querylog-path> --backup <backup-directory> [--retention <seconds>]

Parameters

  • --name: Current instance nickname (required)
  • --path: Path to the query log file (required)
  • --backup: Path to backup directory (required)
  • --retention: Log retention time in seconds (optional, default: 604800 = 7 days)

Examples

Basic usage with default 24-hour retention

adguardhome-logsync --name genx --path ~/adg/workdir/data/querylog.json --backup ~/adg/workdir/data/backup

Keep logs for 7 days (604800 seconds)

adguardhome-logsync --name genx --path ~/adg/workdir/data/querylog.json --backup ~/adg/workdir/data/backup --retention 604800

Keep logs for 12 hours (43200 seconds)

adguardhome-logsync --name genx --path ~/adg/workdir/data/querylog.json --backup ~/adg/workdir/data/backup --retention 43200

Keep logs for 1 hour only (3600 seconds)

adguardhome-logsync --name genx --path ~/adg/workdir/data/querylog.json --backup ~/adg/workdir/data/backup --retention 3600

Common Retention Values

Period Seconds Example Usage
1 hour 3600 --retention 3600
6 hours 21600 --retention 21600
12 hours 43200 --retention 43200
1 day 86400 --retention 86400
3 days 259200 --retention 259200
1 week 604800 --retention 604800 (default)
1 month 2592000 --retention 2592000

Example Output

Starting log synchronization for instance: genx
Log retention: 604800 seconds (168.0 hours)
Logs older than 2025-01-09 22:41:58 will be removed
Backing up querylog...
Searching for querylog files...
Found 3 querylog files
Merging querylogs...
Writing merged querylog...
Moving to updated querylog at /tmp/tmp2eqv7rdc.json...
Log synchronization completed successfully

Automation

Take care! it's from AI (If you have a tested version, please new PR for that, thanks a lot!)

Systemd Timer (Linux)

Create a systemd service file /etc/systemd/system/adguard-logsync.service:

[Unit]
Description=AdGuard Home Log Sync
After=network.target

[Service]
Type=oneshot
ExecStart=/usr/local/bin/adguardhome-logsync --name server1 --path /opt/adguard/querylog.json --backup /opt/adguard/backup --retention 604800
User=adguard
Group=adguard

Create a timer file /etc/systemd/system/adguard-logsync.timer:

[Unit]
Description=Run AdGuard Home Log Sync every 5 minutes
Requires=adguard-logsync.service

[Timer]
OnCalendar=*:0/5
Persistent=true

[Install]
WantedBy=timers.target

Enable and start:

sudo systemctl enable adguard-logsync.timer
sudo systemctl start adguard-logsync.timer

Cron Job

# Run every 5 minutes, keep logs for 1 week
*/5 * * * * /usr/local/bin/adguardhome-logsync --name server1 --path /opt/adguard/querylog.json --backup /opt/adguard/backup --retention 604800

# Run every hour, keep logs for 1 day
0 * * * * /usr/local/bin/adguardhome-logsync --name server1 --path /opt/adguard/querylog.json --backup /opt/adguard/backup --retention 86400

Development

Prerequisites

  • Python 3.9+
  • uv (for development)

Running from Source

Clone the repository:

git clone https://github.com/xz-dev/AdGuardHomeLogSync.git
cd AdGuardHomeLogSync

Run with uv:

uv run main.py --name genx --path ~/adg/workdir/data/querylog.json --backup ~/adg/workdir/data/backup --retention 604800

Project Structure

AdGuardHomeLogSync/
├── main.py                 # Main entry point
├── utils/
│   ├── querylog_copy.py   # Backup and file operations
│   └── querylog_merge.py  # Asynchronous log merging with retention
├── pyproject.toml         # Project configuration
└── README.md             # This file

How It Works

  1. Backup: Creates a backup of the current query log with instance name
  2. Discovery: Searches for all query log files in the backup directory
  3. Merge: Combines all found query logs into a single unified log
  4. Filter: Removes logs older than the specified retention time
  5. Replace: Safely replaces the original query log with the merged and filtered version

Performance Features

  • Asynchronous Processing: Multiple log files are processed concurrently
  • Streaming: Large files are processed in chunks to minimize memory usage
  • Efficient Sorting: Uses SortedList for optimal insertion performance
  • Memory Management: Configurable chunk sizes prevent memory spikes

Requirements

  • AdGuard Home instances with JSON format query logs
  • Write access to query log files and backup directory
  • Python 3.8 or higher

License

BSD-3-Clause

Contributing

  1. Fork the repository
  2. Create your feature branch (git checkout -b feature/amazing-feature)
  3. Commit your changes (git commit -m 'Add some amazing feature')
  4. Push to the branch (git push origin feature/amazing-feature)
  5. Open a Pull Request

Issues

Please report issues at: https://github.com/xz-dev/AdGuardHomeLogSync/issues

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

adguardhome_logsync-0.1.3.tar.gz (7.9 kB view details)

Uploaded Source

Built Distribution

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

adguardhome_logsync-0.1.3-py3-none-any.whl (8.8 kB view details)

Uploaded Python 3

File details

Details for the file adguardhome_logsync-0.1.3.tar.gz.

File metadata

  • Download URL: adguardhome_logsync-0.1.3.tar.gz
  • Upload date:
  • Size: 7.9 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.7.13

File hashes

Hashes for adguardhome_logsync-0.1.3.tar.gz
Algorithm Hash digest
SHA256 d8280dcc873cce462b715f0bfdd9bbd4613a38488362e0865dbf0786a21d12b9
MD5 588cd054269f4fcc122ab80978ab2459
BLAKE2b-256 25ecd278219904c2eaf7f1ced5f77476d0add1bba46ad755161ba1e805af93cd

See more details on using hashes here.

File details

Details for the file adguardhome_logsync-0.1.3-py3-none-any.whl.

File metadata

File hashes

Hashes for adguardhome_logsync-0.1.3-py3-none-any.whl
Algorithm Hash digest
SHA256 1d4a014133676edc946cf423acd214d0e4e4f24409e5f61f9c217259ad9be3d3
MD5 244658c3669acadd04ce56527d0f3eae
BLAKE2b-256 c95398511504e49583aab7584bd1912c46e4b3b3f5c4bf49df1deaeffffb684f

See more details on using hashes here.

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