____ _
/ ___| ___ _ __| |_ __ _ _ __ _ __
\___ \ / _ \ '_ \ __/ _` | '__| '__|
___) | __/ | | | || (_| | | | |
|____/ \___|_| |_|\__\__,_|_| |_|
Your Plex Server's Guardian 🛡️
Like Radarr for movies and Sonarr for TV shows, Sentarr stands watch over your Plex Media Server, alerting you to issues before they impact your users.
Features • Quick Start • Screenshots • Documentation • Support
Real-time monitoring with active streams, system resources, and alert timeline
Live Plex server information with library counts and active streams
Real-time Plex log monitoring with filtering and search
Real-time Plex host resource monitoring
- Real-time Log Analysis - Tails Plex logs and detects issues instantly
- Plex API Integration - Direct connection to your Plex server for enhanced monitoring
- Active Stream Tracking - Monitor who's watching what in real-time
- Smart Pattern Detection - Identifies specific error types:
- Stream/Playback errors
- Database errors
- Network connectivity issues
- Authentication problems
- Scanner/Metadata issues
- Disk I/O errors
- Transcoding failures
- Modern React UI - Built with TypeScript, Vite, and Material-UI
- Real-time Updates - Live data refresh every 5 seconds
- Mobile Responsive - Works perfectly on phones and tablets
- Dark Theme - Easy on the eyes for 24/7 monitoring
- Interactive Charts - Visualize error trends and system health
- Email (SMTP) - Traditional email notifications
- Discord - Webhook integration with rich embeds
- Slack - Team notifications with customizable formatting
- Custom Webhooks - Home Assistant, ntfy, Gotify, or any webhook-compatible service
- Smart Throttling - Configurable cooldown to prevent alert spam
- Threshold-based - Only alert when error count exceeds your threshold
- Single Container - Everything in one Docker container (like other *arr apps)
- Minimal Resources - Uses ~256-512MB RAM, <5% CPU
- Works with Portainer - One-click deployment
- Auto-restart - Resilient and self-healing
- No Database - Simple configuration via environment variables
- Create
docker-compose.yml:
version: '3.8'
services:
sentarr:
image: joshdev8/sentarr:latest
container_name: sentarr
restart: unless-stopped
ports:
- "6500:6500"
volumes:
# Update this path to your Plex logs
- /opt/plex/config/Library/Application Support/Plex Media Server/Logs:/logs:ro
environment:
# Plex API (Recommended)
- PLEX_API_ENABLED=true
- PLEX_URL=http://plex:32400
- PLEX_TOKEN=your-plex-token-here
# Log Monitoring
- PLEX_LOG_PATH=/logs
- MONITOR_ERRORS=true
- ERROR_THRESHOLD=5
# Discord Notifications
- DISCORD_ENABLED=true
- DISCORD_WEBHOOK_URL=https://discord.com/api/webhooks/YOUR_URL
networks:
- plex # Connect to your Plex network
networks:
plex:
external: true- Start Sentarr:
docker-compose up -d- Access Dashboard:
http://localhost:6500
docker run -d \
--name=sentarr \
--restart=unless-stopped \
-p 6500:6500 \
-v /path/to/plex/logs:/logs:ro \
-e PLEX_API_ENABLED=true \
-e PLEX_URL=http://plex:32400 \
-e PLEX_TOKEN=your-token \
-e DISCORD_ENABLED=true \
-e DISCORD_WEBHOOK_URL=https://... \
joshdev8/sentarr:latest- Stacks → Add Stack
- Paste docker-compose.yml
- Deploy
- Done!
| Variable | Description | Example |
|---|---|---|
PLEX_LOG_PATH |
Path to Plex logs | /logs |
PLEX_URL |
Your Plex server URL | http://plex:32400 |
PLEX_TOKEN |
Plex API token | Get from here |
| Variable | Default | Description |
|---|---|---|
ERROR_THRESHOLD |
5 |
Errors before alerting |
TIME_WINDOW_MINUTES |
5 |
Time window to count errors |
ALERT_COOLDOWN_MINUTES |
15 |
Cooldown between alerts |
MONITOR_WARNINGS |
true |
Monitor warning-level logs |
Discord
- DISCORD_ENABLED=true
- DISCORD_WEBHOOK_URL=https://discord.com/api/webhooks/YOUR_WEBHOOK_URLCreate webhook: Server Settings → Integrations → Webhooks
Email (SMTP)
- EMAIL_ENABLED=true
- SMTP_SERVER=smtp.gmail.com
- SMTP_PORT=587
- SMTP_USER=your-email@gmail.com
- SMTP_PASSWORD=your-app-password
- EMAIL_TO=admin@yourdomain.comSlack
- SLACK_ENABLED=true
- SLACK_WEBHOOK_URL=https://hooks.slack.com/services/YOUR_WEBHOOK_URLHome Assistant
- WEBHOOK_ENABLED=true
- CUSTOM_WEBHOOK_URL=http://homeassistant.local:8123/api/webhook/plex_alertSee PLEX_API_SETUP.md for Home Assistant automation examples.
- Plex API Setup - How to get your Plex token and configure API
- Docker Compose Examples - Various deployment scenarios
- Vite Migration Guide - Modern React setup details
┌─────────────────────────────────────────┐
│ Sentarr Container │
│ │
│ ┌──────────┐ ┌──────────┐ ┌────────┐│
│ │ Nginx │ │ Flask │ │Monitor ││
│ │ :6500 │→ │ API │→ │Service ││
│ │ │ │ :5000 │ │ ││
│ └──────────┘ └──────────┘ └────────┘│
│ ↓ ↓ ↓ │
│ React Dashboard API Log Parser │
└─────────────────────────────────────────┘
↓ ↓
Plex API Plex Logs
Single container includes:
- React/TypeScript frontend (Vite)
- Flask REST API
- Python log monitoring service
- Nginx web server
- Supervisor process manager
Monitor your personal Plex server and get alerted when:
- Streams fail to start
- Transcoding errors occur
- Database issues arise
- Scanner fails to process new media
Keep tabs on multiple users streaming:
- See who's watching what in real-time
- Track transcoding load
- Monitor bandwidth usage
- Get notified of playback issues
Proactive support for your users:
- Fix issues before users complain
- Monitor server health 24/7
- Track library scanning problems
- Detect authentication issues early
| Feature | Sentarr | Tautulli |
|---|---|---|
| Real-time Log Monitoring | ✅ | ❌ |
| Plex API Integration | ✅ | ✅ |
| Detects Backend Errors | ✅ | |
| Modern React UI | ✅ | ❌ |
| Database Required | ❌ | ✅ |
| Resource Usage | ~256MB | ~512MB+ |
| Alert Throttling | ✅ | |
| Single Container | ✅ | ✅ |
TL;DR: Sentarr catches errors Tautulli misses by monitoring logs directly, not just API events.
Contributions are welcome! Here's how:
- Fork the repository
- Create a feature branch:
git checkout -b feature/amazing-feature - Commit your changes:
git commit -m 'Add amazing feature' - Push to the branch:
git push origin feature/amazing-feature - Open a Pull Request
# Clone repo
git clone https://github.com/joshdev8/sentarr.git
cd sentarr
# Backend development
cd api
pip install flask flask-cors requests plexapi
python server.py
# Frontend development
cd frontend
npm install
npm run dev- Single Container - Like other *arr apps
- Minimal Resources - 256-512MB RAM, <5% CPU
- Fast - Vite-powered frontend builds in seconds
- Secure - No deprecated dependencies, actively maintained
- TypeScript - Fully typed frontend for reliability
Docker Plex:
docker inspect plex | grep -A 5 MountsCommon paths:
- Docker:
/opt/plex/config/Library/Application Support/Plex Media Server/Logs - Unraid:
/mnt/user/appdata/plex/Library/Application Support/Plex Media Server/Logs - Synology:
/volume1/docker/plex/Library/Application Support/Plex Media Server/Logs
Quick method:
- Open Plex Web App
- Play any media
- Click ⋯ → "Get Info" → "View XML"
- Look for
X-Plex-Tokenin the URL
Full guide: PLEX_API_SETUP.md
# Find your Plex network
docker network ls | grep plex
# Add to docker-compose.yml
networks:
plex:
external: trueDashboard won't load
# Check container is running
docker ps | grep sentarr
# Check logs
docker logs sentarr
# Restart
docker restart sentarrCan't connect to Plex API
- Verify token is correct
- Check Plex URL (usually
http://plex:32400) - Ensure containers are on same network
- Test:
docker exec sentarr curl http://plex:32400/identity
No alerts appearing
- Check log path is correct:
docker exec sentarr ls /logs - Verify at least one notification channel is enabled
- Check error threshold settings
- Look at Settings page in dashboard
This project is licensed under the MIT License - see the LICENSE file for details.
- Inspired by the amazing *arr ecosystem (Radarr, Sonarr, etc.)
- Built with React, Material-UI, and Flask
- Special thanks to the Plex community
- GitHub: github.com/joshdev8/sentarr
- Docker Hub: hub.docker.com/r/joshdev8/sentarr
- Issues: github.com/joshdev8/sentarr/issues
- Discussions: github.com/joshdev8/sentarr/discussions
Made with ❤️ for the Plex community
If you find this useful, please ⭐ star the repo!