A Telegram bot for monitoring Docker containers and Unraid servers. Get real-time alerts, check container status, view logs, and control containers - all from Telegram.
- Container Monitoring - Status, health checks, and crash detection
- Resource Alerts - CPU/memory usage with configurable thresholds
- Log Watching - Automatic alerts when errors appear in container logs
- AI Diagnostics - Claude-powered log analysis and troubleshooting
- Smart Ignore Patterns - AI-generated patterns to filter known errors
- Container Control - Start, stop, restart, and pull containers remotely
- Unraid Server Monitoring - CPU/memory, temperatures, UPS status, and array health
- Memory Pressure Management - Automatic container priority handling during high memory
- Mute System - Temporarily silence alerts per container, server, or array
- Natural Language Chat - Ask questions naturally instead of using commands
The easiest way to install on Unraid.
-
Install from Community Apps
- Open the Unraid web UI
- Go to Apps tab
- Search for "Unraid Monitor Bot"
- Click Install
-
Configure the template
TELEGRAM_BOT_TOKEN- Your bot token (how to get one)TELEGRAM_ALLOWED_USERS- Your Telegram user ID (how to find it)ANTHROPIC_API_KEY(optional) - Enables AI diagnosticsUNRAID_API_KEY(optional) - Enables server monitoring
-
Start the container
-
Message your bot on Telegram - send
/helpto verify it's working -
Configure features (optional)
- Edit
/mnt/user/appdata/unraid-monitor/config/config.yaml - See Configuration for options
- Restart the container to apply changes
- Edit
If not using Community Apps, you can set it up manually.
mkdir -p /mnt/user/appdata/unraid-monitor/{config,data}Create /mnt/user/appdata/unraid-monitor/config/.env:
# Required
TELEGRAM_BOT_TOKEN=your_bot_token_here
TELEGRAM_ALLOWED_USERS=123456789
# Optional - enables AI features
ANTHROPIC_API_KEY=your_anthropic_api_key_here
# Optional - enables Unraid server monitoring
UNRAID_API_KEY=your_unraid_api_key_hereGo to Docker β Add Container and configure:
| Field | Value |
|---|---|
| Name | unraid-monitor-bot |
| Repository | ghcr.io/dervish666/unraidmonitor:latest |
| Network Type | bridge or your preferred network |
Add these paths:
| Container Path | Host Path | Access |
|---|---|---|
/app/config |
/mnt/user/appdata/unraid-monitor/config |
Read/Write |
/app/data |
/mnt/user/appdata/unraid-monitor/data |
Read/Write |
/var/run/docker.sock |
/var/run/docker.sock |
Read Only |
Add these variables:
| Name | Value |
|---|---|
TELEGRAM_BOT_TOKEN |
Your bot token |
TELEGRAM_ALLOWED_USERS |
Your user ID |
ANTHROPIC_API_KEY |
(optional) Your API key |
UNRAID_API_KEY |
(optional) Your API key |
TZ |
Your timezone (e.g., Europe/London) |
Start the container and check the logs for any errors. Message your bot on Telegram with /help.
- Open Telegram and message @BotFather
- Send
/newbot - Follow the prompts to name your bot
- Copy the bot token (looks like
123456789:ABCdefGHIjklMNOpqrsTUVwxyz)
- Message @userinfobot on Telegram
- It will reply with your numeric user ID (e.g.,
123456789)
This ID is used to restrict who can control your bot. You can add multiple IDs separated by commas: 123456789,987654321
Required for AI-powered features:
- Log analysis and diagnostics (
/diagnose) - Smart ignore pattern generation
- Natural language chat
- Sign up at console.anthropic.com
- Go to API Keys and create a new key
- Add it as
ANTHROPIC_API_KEY
Required for Unraid server monitoring (CPU, memory, temps, array status).
- In Unraid web UI, go to Settings β Management Access
- Generate an API key
- Add it as
UNRAID_API_KEY
Configuration is stored in config/config.yaml. A default file is created on first run.
Location:
- Unraid:
/mnt/user/appdata/unraid-monitor/config/config.yaml - Docker:
./config/config.yaml(relative to project root)
# Containers to watch for log errors
log_watching:
containers:
- plex
- radarr
- sonarr
- lidarr
error_patterns:
- "error"
- "exception"
- "fatal"
- "failed"
- "critical"
ignore_patterns:
- "DeprecationWarning"
- "DEBUG"
cooldown_seconds: 900 # 15 min between alerts for same container
# Containers to hide from status reports
ignored_containers:
- some-temp-container
# Containers that cannot be controlled via Telegram (safety)
protected_containers:
- unraid-monitor-bot
- mariadb
- postgresql14resource_monitoring:
enabled: true
poll_interval_seconds: 60
sustained_threshold_seconds: 120 # Alert after 2 min exceeded
defaults:
cpu_percent: 80
memory_percent: 85
# Per-container overrides
containers:
plex:
cpu_percent: 95 # Plex often uses high CPU
memory_percent: 90
handbrake:
cpu_percent: 100 # Expected to max outAutomatically kills low-priority containers when system memory is critical.
memory_management:
enabled: false # Disabled by default - enable with caution
warning_threshold: 90 # Notify at this %
critical_threshold: 95 # Start killing at this %
safe_threshold: 80 # Offer restart when below this
kill_delay_seconds: 60 # Warning before killing
stabilization_wait: 180 # Wait between kills
# Never kill these (highest priority)
priority_containers:
- plex
- mariadb
# Kill these in order during memory pressure (lowest priority first)
killable_containers:
- handbrake
- tdarrunraid:
enabled: true
host: "192.168.1.100" # Your Unraid IP
port: 443
use_ssl: true
verify_ssl: false # Set true if using valid SSL cert
polling:
system: 30 # CPU/memory poll interval
array: 300 # Array status poll interval
ups: 60 # UPS status poll interval
thresholds:
cpu_temp: 80 # Alert above this temp (C)
cpu_usage: 95 # Alert above this %
memory_usage: 90 # Alert above this %
disk_temp: 50 # Alert above this temp (C)
array_usage: 85 # Alert above this %
ups_battery: 30 # Alert below this %| Command | Description |
|---|---|
/status |
Overview of all containers |
/status <name> |
Details for specific container |
/resources |
CPU/memory usage for all containers |
/resources <name> |
Detailed stats with thresholds |
/logs <name> [n] |
Last n log lines (default 20) |
/diagnose <name> [n] |
AI analysis of logs |
/restart <name> |
Restart a container |
/stop <name> |
Stop a container |
/start <name> |
Start a container |
/pull <name> |
Pull latest image and recreate |
Tip: Partial names work - /status rad matches radarr
| Command | Description |
|---|---|
/server |
Server overview (CPU, memory, temps) |
/server detailed |
Full metrics including per-core temps |
/array |
Array status and disk health |
/disks |
Detailed disk information |
| Command | Description |
|---|---|
/mute <name> <duration> |
Mute container (e.g., /mute plex 2h) |
/unmute <name> |
Unmute a container |
/mute-server <duration> |
Mute server alerts |
/unmute-server |
Unmute server alerts |
/mute-array <duration> |
Mute array alerts |
/unmute-array |
Unmute array alerts |
/mutes |
Show all active mutes |
/ignore |
Show recent errors to create ignore patterns |
/ignores |
List all ignore patterns |
/cancel-kill |
Cancel pending memory pressure kill |
Duration formats: 30m, 2h, 1d, 1w
| Command | Description |
|---|---|
/manage |
Dashboard with quick action buttons |
/help |
Show help message |
Instead of commands, you can ask questions naturally:
- "What's wrong with plex?"
- "Why is my server slow?"
- "Is anything crashing?"
- "Show me radarr logs"
- "Restart sonarr" (asks for confirmation)
Follow-up questions work too - say "restart it" after discussing a container.
Note: Requires ANTHROPIC_API_KEY to be configured.
All alerts include quick action buttons.
π΄ CONTAINER CRASHED: radarr
Exit code: 137 (OOM killed)
Image: linuxserver/radarr:latest
Uptime: 2h 34m
[π Restart] [π Logs] [π Diagnose]
[π Mute 1h] [π Mute 24h]
β οΈ HIGH MEMORY USAGE: plex
Memory: 92% (threshold: 85%)
7.4GB / 8.0GB limit
Exceeded for: 3 minutes
CPU: 45% (normal)
[π Logs] [π Diagnose]
[π Mute 1h] [π Mute 24h]
β οΈ ERRORS IN: sonarr
Found 3 errors in the last 15 minutes
Latest: Database connection failed: timeout
[π Ignore Similar] [π Mute 1h]
[π Logs] [π Diagnose]
- Check the container is running:
docker ps | grep unraid-monitor - Check logs for errors:
docker logs unraid-monitor-bot - Verify
TELEGRAM_BOT_TOKENis correct - Verify your user ID is in
TELEGRAM_ALLOWED_USERS
This means the container can't access the Docker socket.
-
Check your Docker socket GID:
ls -ln /var/run/docker.sock
Look at the 4th column (e.g.,
281on Unraid,999on Ubuntu) -
If using docker-compose, set DOCKER_GID in
.env:echo "DOCKER_GID=999" > .env
-
Rebuild the container:
docker-compose build --no-cache docker-compose up -d
-
Last resort: Edit
docker-compose.ymland uncommentuser: root
- Verify
ANTHROPIC_API_KEYis set correctly - Check logs for API errors
- The bot works without AI - you'll get basic alerts, but
/diagnoseand natural language chat won't work
- Verify
UNRAID_API_KEYis set - Check the
unraidsection inconfig.yamlhas correcthostandport - If using self-signed certs, set
verify_ssl: false
Check logs immediately after start:
docker logs unraid-monitor-botCommon issues:
- Missing
TELEGRAM_BOT_TOKENorTELEGRAM_ALLOWED_USERS - Invalid configuration in
config.yaml - Docker socket permission issues (see above)
Restart the container after editing config:
docker restart unraid-monitor-botAll persistent data is stored in mounted volumes:
config/
βββ config.yaml # Main configuration
βββ .env # Environment variables (secrets)
data/
βββ ignored_errors.json # Ignore patterns
βββ mutes.json # Container mutes
βββ server_mutes.json # Server mutes
βββ array_mutes.json # Array mutes
- Docker
- Telegram Bot Token
- (Optional) Anthropic API key for AI features
- (Optional) Unraid API key for server monitoring
MIT