--- title: "Traefik Log Dashboard (v2 – Agent Architecture)" --- This is a community guide and is not officially supported. For issues or advanced configuration, please visit the [official repository](https://github.com/hhftechnology/traefik-log-dashboard). If you’re already using the **Pangolin stack with Traefik as your reverse proxy**, you already have robust routing in place. However, raw logs can be hard to interpret — making it difficult to visualize request patterns, latency, and geographic origins. The **new Traefik Log Dashboard (v2)** introduces a **lightweight agent-based architecture** with **multi-instance scalability, enhanced GeoIP analytics, and a modern Next.js frontend** for real-time insights into your Traefik traffic. --- ## Highlights (New in v2) * **Agent-based architecture**: The Go-powered agent parses logs, exposes metrics, and supports multiple Traefik instances. * **Multi-agent support**: Monitor multiple Traefik setups (e.g., production, staging) from one dashboard. * **Next.js 14 frontend**: Real-time charts, filters, and system stats in a responsive UI. * **Enhanced GeoIP**: Supports both **City** and **Country** MaxMind databases. * **System monitoring**: Built-in CPU, memory, and disk tracking. * **Bearer token authentication**: Secure access between dashboard and agents. * **Backward compatible** with existing Traefik log setups. --- ## Prerequisites * Docker + Docker Compose * Traefik v2.x or v3.x (logs in JSON format) * A working **Pangolin stack** * (Optional) MaxMind GeoLite2 databases (City + Country) --- ## Step 1: Configure Traefik Logs Ensure Traefik is outputting **JSON logs** and **access logs** are written to a file. Update your `./config/traefik/traefik_config.yml`: ```yaml log: level: INFO filePath: "/var/log/traefik/traefik.log" format: json accessLog: filePath: "/var/log/traefik/access.log" format: json fields: defaultMode: keep headers: defaultMode: keep ```` > Tip: JSON format is required for accurate parsing by the new agent. --- ## Step 2: Add Dashboard and Agent Services Extend your existing `docker-compose.yml` with the new services. ```yaml # Traefik Log Dashboard Agent traefik-agent: image: hhftechnology/traefik-log-dashboard-agent:latest restart: unless-stopped ports: - "5000:5000" volumes: - ./data/positions:/data - ./config/traefik/logs:/logs:ro - ./config/maxmind:/geoip:ro environment: # Log Paths - TRAEFIK_LOG_DASHBOARD_ACCESS_PATH=/logs/access.log - TRAEFIK_LOG_DASHBOARD_ERROR_PATH=/logs/traefik.log # Authentication - TRAEFIK_LOG_DASHBOARD_AUTH_TOKEN=YOUR_API_TOKEN # System Monitoring - TRAEFIK_LOG_DASHBOARD_SYSTEM_MONITORING=true # GeoIP Configuration - TRAEFIK_LOG_DASHBOARD_GEOIP_ENABLED=true - TRAEFIK_LOG_DASHBOARD_GEOIP_CITY_DB=/geoip/GeoLite2-City.mmdb - TRAEFIK_LOG_DASHBOARD_GEOIP_COUNTRY_DB=/geoip/GeoLite2-Country.mmdb # Log Format - TRAEFIK_LOG_DASHBOARD_LOG_FORMAT=json # Server Port - PORT=5000 healthcheck: test: ["CMD", "wget", "--no-verbose", "--tries=1", "--spider", "http://localhost:5000/api/logs/status"] interval: 30s timeout: 10s retries: 3 start_period: 10s # Traefik Log Dashboard - Web UI traefik-dashboard: image: hhftechnology/traefik-log-dashboard:latest container_name: traefik-log-dashboard restart: unless-stopped ports: - "3000:3000" environment: # Agent Configuration - AGENT_API_URL=http://traefik-agent:5000 - AGENT_API_TOKEN=YOUR_API_TOKEN - NODE_ENV=production - PORT=3000 depends_on: traefik-agent: condition: service_healthy healthcheck: test: ["CMD", "wget", "--no-verbose", "--tries=1", "--spider", "http://localhost:3000"] interval: 30s timeout: 10s retries: 3 start_period: 30s ``` Please replace the YOUR_API_TOKEN with a secure token of your choice. > Note: The new agent replaces both `log-dashboard-backend` and `log-dashboard-frontend` from the previous guide. --- ## Step 3: Setup MaxMind GeoIP (City + Country) GeoIP is optional but highly recommended for geographic analytics and maps. ### 1. Create a free MaxMind account [GeoLite2 Signup](https://www.maxmind.com/en/geolite2/signup) Generate a license key and export it for Docker use: ```bash export MAXMIND_LICENSE_KEY=your_license_key_here mkdir -p ./config/maxmind ``` ### 2. Add the GeoIP Database Updater Append this to your `docker-compose.yml`: ```yaml # Optional: MaxMind GeoIP Database Updater maxmind-updater: image: alpine:latest restart: "no" volumes: - ./config/maxmind:/data environment: - MAXMIND_LICENSE_KEY=${MAXMIND_LICENSE_KEY:-your-license-key-here} command: > sh -c " apk add --no-cache wget tar && cd /data && if [ ! -f GeoLite2-City.mmdb ] || [ \"$(find . -name 'GeoLite2-City.mmdb' -mtime +7)\" ]; then echo 'Updating GeoLite2-City database...' wget -O GeoLite2-City.tar.gz 'https://download.maxmind.com/app/geoip_download?edition_id=GeoLite2-City&license_key=${MAXMIND_LICENSE_KEY}&suffix=tar.gz' && tar --wildcards -xzf GeoLite2-City.tar.gz --strip-components=1 '*/GeoLite2-City.mmdb' && rm -f GeoLite2-City.tar.gz fi && if [ ! -f GeoLite2-Country.mmdb ] || [ \"$(find . -name 'GeoLite2-Country.mmdb' -mtime +7)\" ]; then echo 'Updating GeoLite2-Country database...' wget -O GeoLite2-Country.tar.gz 'https://download.maxmind.com/app/geoip_download?edition_id=GeoLite2-Country&license_key=${MAXMIND_LICENSE_KEY}&suffix=tar.gz' && tar --wildcards -xzf GeoLite2-Country.tar.gz --strip-components=1 '*/GeoLite2-Country.mmdb' && rm -f GeoLite2-Country.tar.gz fi && echo 'GeoIP databases updated successfully.' " ``` --- ## Step 4: Launch the Stack ```bash docker compose up -d docker compose ps ``` --- ## Step 5: Access the Dashboard * **Web UI** → [http://localhost:3000](http://localhost:3000) * Default data source: `traefik-agent:5000` You should see real-time traffic metrics, GeoIP maps, error tracking, and system performance indicators. --- ## Key Features **Real-time analytics** for request rates, response times, and errors **GeoIP maps** with both City and Country-level resolution **System health** (CPU, memory, disk) **Multi-agent support** (monitor multiple Traefik instances) **Secure API authentication** via token **Responsive modern UI** --- ## Advanced: Multi-Agent Setup You can deploy multiple `traefik-agent` instances across environments and connect them all to a single dashboard. Example: ```yaml traefik-agent-prod: image: hhftechnology/traefik-log-dashboard-agent:latest ports: ["5000:5000"] environment: - TRAEFIK_LOG_DASHBOARD_AUTH_TOKEN=prod_token - TRAEFIK_LOG_DASHBOARD_ACCESS_PATH=/logs/access.log - TRAEFIK_LOG_DASHBOARD_GEOIP_ENABLED=true volumes: - /var/log/traefik/prod:/logs:ro - ./config/maxmind:/geoip:ro - ./data/positions-prod:/data traefik-agent-staging: image: hhftechnology/traefik-log-dashboard-agent:latest ports: ["5001:5000"] environment: - TRAEFIK_LOG_DASHBOARD_AUTH_TOKEN=staging_token - TRAEFIK_LOG_DASHBOARD_ACCESS_PATH=/logs/access.log volumes: - /var/log/traefik/staging:/logs:ro - ./config/maxmind:/geoip:ro traefik-dashboard: image: hhftechnology/traefik-log-dashboard:latest ports: ["3000:3000"] environment: - NODE_ENV=production ``` Then, in the **Dashboard → Settings → Agents**, add each agent URL and token. --- ## Performance Tuning | Setting | Description | Recommended | | ----------------------------------------- | -------------------------------- | ------------- | | `TRAEFIK_LOG_DASHBOARD_SYSTEM_MONITORING` | Enables system stats | `true` | | `TRAEFIK_LOG_DASHBOARD_LOG_FORMAT` | Log parsing format | `json` | --- ## Troubleshooting | Issue | Cause | Fix | | --------------------- | ------------------------ | ------------------------------------------------------------------- | | Dashboard not loading | Container not healthy | `docker compose ps` → check `health` | | No logs appearing | Wrong log path or format | Ensure `access.log` is JSON and volume mounted | | GeoIP missing | Missing databases | Run `maxmind-updater` or mount both `.mmdb` files | | Auth errors | Token mismatch | Verify `AGENT_API_TOKEN` matches `TRAEFIK_LOG_DASHBOARD_AUTH_TOKEN` | | Slow UI | Large logs | Use JSON logs + incremental read; prune logs periodically | --- ## Summary - Replaces the old `log-dashboard-backend` + `log-dashboard-frontend` with the new **agent-based architecture** - Supports **multiple Traefik instances** - Adds **GeoLite2 Country + City databases** - Integrates **real-time analytics + system monitoring** - Uses **MaxMind license key** for GeoIP updates - More stable with less memory --- **Project Repository** → [https://github.com/hhftechnology/traefik-log-dashboard](https://github.com/hhftechnology/traefik-log-dashboard) ```