216 lines
9.4 KiB
Markdown
216 lines
9.4 KiB
Markdown
---
|
|
title: Traefik Log Dashboard
|
|
created: 2026-06-06
|
|
updated: 2026-06-06
|
|
type: app
|
|
tags: [catalogue, reverse-proxy, monitoring, logs, dashboard, traefik, observabilite]
|
|
confidence: high
|
|
contested: false
|
|
sources: [https://selfh.st/apps/?tag=Reverse+Proxy, https://github.com/hhftechnology/traefik-log-dashboard]
|
|
---
|
|
|
|
# 🚦 Traefik Log Dashboard
|
|
|
|
> **Dashboard temps réel pour analyser les logs Traefik avec géolocalisation IP, codes HTTP et métriques par service**. Stack React (Shadcn UI) + agent Go haute performance, supporte les déploiements multi-instances Traefik.
|
|
|
|
## 📋 Informations Générales
|
|
|
|
| Champ | Valeur |
|
|
| :--- | :--- |
|
|
| **Site web** | [hhf.technology](https://hhf.technology/) |
|
|
| **GitHub** | [hhftechnology/traefik-log-dashboard](https://github.com/hhftechnology/traefik-log-dashboard) |
|
|
| **License** | AGPL-3.0 |
|
|
| **Langage** | TypeScript (75.4 %), Go (20.2 %) |
|
|
| **Étoiles GitHub** | 779 ⭐ |
|
|
| **Dernière MAJ** | 2026-04-14 (v3.1.1) |
|
|
| **Catégorie** | [[cat-reverse-proxy|Reverse Proxy]], Monitoring, Observabilité |
|
|
|
|
## 📝 Description
|
|
|
|
**Traefik Log Dashboard** est un **dashboard analytique dédié à Traefik** qui parse les logs d'accès et d'erreur du reverse proxy pour fournir une visualisation temps-réel des flux : top IPs, top services, codes de réponse, géolocalisation sur **globe 3D interactif**, alertes Discord, et bien plus. C'est l'outil de référence pour quiconque veut **comprendre son trafic** sans exporter vers un ELK/Grafana/Loki lourd à maintenir.
|
|
|
|
L'architecture est en **deux composants** :
|
|
|
|
- **Agent (Go, ~15 MB)** : un service léger qui **tail les logs Traefik en JSON** (CLF/JSON supportés), parse incrémentalement avec **position tracking** (pas de reparse à chaque redémarrage) et expose une **API REST** (port 5000) consommée par le dashboard.
|
|
- **Dashboard (Vite/React, ~151 MB)** : l'UI web servie sur le port 3000, construite avec **Shadcn UI** et **Recharts** pour les graphes.
|
|
|
|
**Caractéristiques principales** :
|
|
|
|
- ✅ **Globe 3D interactif** : visualisation géographique des requêtes par pays
|
|
- ✅ **Multi-agent** : un dashboard peut centraliser les logs de **plusieurs instances Traefik** (ex: cluster multi-host, plusieurs sites)
|
|
- ✅ **Filtres avancés** : include/exclude, filtres géographiques, regex custom
|
|
- ✅ **Alertes Discord** : webhooks, résumés quotidiens, seuils configurables
|
|
- ✅ **GeoIP automatique** sans base MaxMind externe (intégré)
|
|
- ✅ **Mobile app** : iOS et Android (apps natives officielles)
|
|
- ✅ **CLI TUI** (Bubble Tea) : consulter les stats depuis un terminal SSH
|
|
- ✅ **Compatibilité Traefik v2 et v3**, intégration **Pangolin** native
|
|
- ✅ **Auth Pangolin / Basis** supportée pour sécuriser l'accès
|
|
|
|
**Public cible** : opérateurs de Traefik qui veulent **un outil clé en main** au lieu d'assembler Grafana + Loki + Promtail + GeoIP, ou d'utiliser des SaaS comme Datadog. Particulièrement pertinent pour les setups **Pangolin** (la même équipe édite Middleware Manager, Traefik Log Dashboard et d'autres outils HHF).
|
|
|
|
## 🚀 Installation
|
|
|
|
### Prérequis : activer les access logs dans Traefik
|
|
|
|
```yaml
|
|
# traefik.yml (statique)
|
|
accessLog:
|
|
filePath: "/var/log/traefik/access.log"
|
|
format: json
|
|
bufferingSize: 100
|
|
fields:
|
|
defaultMode: keep
|
|
headers:
|
|
defaultMode: drop
|
|
names:
|
|
Authorization: redact
|
|
Cookie: redact
|
|
```
|
|
|
|
> ⚠️ `format: json` est **fortement recommandé** pour le parsing par l'agent. Le format `common` est supporté mais limité.
|
|
|
|
### Option 1 : Docker Compose (recommandé)
|
|
|
|
```yaml
|
|
# docker-compose.yml
|
|
version: '3.8'
|
|
services:
|
|
traefik-agent:
|
|
image: hhftechnology/traefik-log-dashboard-agent:latest
|
|
container_name: traefik-log-dashboard-agent
|
|
restart: unless-stopped
|
|
ports:
|
|
- "5000:5000"
|
|
volumes:
|
|
- /var/log/traefik:/logs:ro # logs Traefik en read-only
|
|
- ./data/positions:/data # position tracking
|
|
environment:
|
|
- TRAEFIK_LOG_DASHBOARD_ACCESS_PATH=/logs/access.log
|
|
- TRAEFIK_LOG_DASHBOARD_ERROR_PATH=/logs/traefik.log
|
|
- TRAEFIK_LOG_DASHBOARD_AUTH_TOKEN=changeme-32-hex
|
|
- TRAEFIK_LOG_DASHBOARD_SYSTEM_MONITORING=true
|
|
- TRAEFIK_LOG_DASHBOARD_LOG_FORMAT=json
|
|
healthcheck:
|
|
test: ["CMD", "wget", "--no-verbose", "--tries=1", "--spider", "http://localhost:5000/api/logs/status"]
|
|
interval: 2m
|
|
timeout: 10s
|
|
retries: 3
|
|
networks:
|
|
- proxy
|
|
|
|
traefik-dashboard:
|
|
image: hhftechnology/traefik-log-dashboard:latest
|
|
container_name: traefik-log-dashboard
|
|
restart: unless-stopped
|
|
ports:
|
|
- "3000:3000"
|
|
volumes:
|
|
- ./data/dashboard:/app/data
|
|
- ./data/positions:/data
|
|
environment:
|
|
- AGENT_API_URL=http://traefik-agent:5000
|
|
- AGENT_API_TOKEN=changeme-32-hex # MÊME token que l'agent
|
|
- AGENT_NAME=Default Agent
|
|
- NODE_ENV=production
|
|
- PORT=3000
|
|
- NEXT_PUBLIC_MAX_LOGS_DISPLAY=500
|
|
depends_on:
|
|
traefik-agent:
|
|
condition: service_healthy
|
|
networks:
|
|
- proxy
|
|
|
|
networks:
|
|
proxy:
|
|
external: true
|
|
```
|
|
|
|
### Variante Traefik (exposer le dashboard derrière Traefik)
|
|
|
|
```yaml
|
|
# ajout au docker-compose.yml ci-dessus
|
|
traefik-dashboard:
|
|
# ... (même bloc)
|
|
labels:
|
|
- "traefik.enable=true"
|
|
- "traefik.docker.network=proxy"
|
|
- "traefik.http.routers.tld.rule=Host(`logs.example.com`)"
|
|
- "traefik.http.routers.tld.entrypoints=websecure"
|
|
- "traefik.http.routers.tld.tls.certresolver=letsencrypt"
|
|
- "traefik.http.services.tld.loadbalancer.server.port=3000"
|
|
# optionnel : auth basique
|
|
- "traefik.http.routers.tld.middlewares=auth"
|
|
- "traefik.http.middlewares.auth.basicauth.users=admin:$$apr1$$abc..."
|
|
```
|
|
|
|
> 💡 **Générer un token sécurisé** : `openssl rand -hex 32` (32 octets en hexadécimal = 64 caractères). Utiliser la **même valeur** pour `TRAEFIK_LOG_DASHBOARD_AUTH_TOKEN` (côté agent) et `AGENT_API_TOKEN` (côté dashboard).
|
|
|
|
## ⚙️ Configuration Initiale
|
|
|
|
1. **S'assurer que Traefik écrit des logs JSON** dans `/var/log/traefik/access.log`.
|
|
2. **Monter ce dossier en read-only** dans le conteneur agent (`/logs:ro`).
|
|
3. **Créer le réseau externe** `proxy` s'il n'existe pas : `docker network create proxy`.
|
|
4. **Lancer** : `docker compose up -d`.
|
|
5. **Accéder au dashboard** : `http://YOUR_HOST:3000` (ou `https://logs.example.com` si derrière Traefik).
|
|
6. **Configurer l'agent** depuis l'UI : nom, timezone, alertes Discord, filtres.
|
|
7. **Ajouter d'autres agents** (multi-instance) via le menu Settings → Agents.
|
|
|
|
## 🔄 Alternatives
|
|
|
|
### Open Source
|
|
|
|
- [[app-traefik]] — UI native de Traefik (basique, pas d'analytique)
|
|
- **Grafana + Loki + Promtail** — combo standard mais lourd
|
|
- **Apache Superset + Traefik logs** — analytics SQL sur logs
|
|
- **GoAccess** — analyseur de logs terminal/HTML léger
|
|
- **Matomo / Plausible** — orientés web analytics (pas logs reverse proxy)
|
|
|
|
### Propriétaires (ce que Traefik Log Dashboard remplace)
|
|
|
|
- **Datadog Log Management** (à partir de 0,10 $/GB ingéré)
|
|
- **New Relic Logs**
|
|
- **Splunk Cloud**
|
|
- **Sumo Logic**
|
|
- **Better Stack / Logtail**
|
|
|
|
### Comparaison rapide
|
|
|
|
| Critère | Traefik Log Dashboard | Grafana + Loki | Datadog |
|
|
| :--- | :--- | :--- | :--- |
|
|
| Complexité | ✅ Faible (2 conteneurs) | ⚠️ Moyenne | ✅ Aucune (SaaS) |
|
|
| Coût | Gratuit (self-hosted) | Gratuit | Payant (volumique) |
|
|
| Globe 3D géo | ✅ | ❌ (carte basique) | ✅ |
|
|
| Multi-agent | ✅ Natif | ✅ (Promtail) | ✅ |
|
|
| Alertes Discord | ✅ | ✅ (Alertmanager) | ✅ (multi-canal) |
|
|
| Recherche full-text | Basique | ✅ (LogQL) | ✅ |
|
|
| License | AGPL-3.0 | AGPL-3.0 (Loki) | Propriétaire |
|
|
|
|
**Verdict** : **Traefik Log Dashboard** pour une stack **légère clé en main** dédiée à Traefik. **Grafana + Loki** pour des besoins de **requêtage avancé** et un écosystème large. **Datadog** pour une solution **managée sans effort** mais payante.
|
|
|
|
## 🔐 Sécurité
|
|
|
|
- **Token partagé agent ↔ dashboard** (32+ caractères hex) : rotation possible depuis l'UI
|
|
- **Auth Pangolin / Basis** : recommandée pour l'accès à l'UI web
|
|
- **Logs en lecture seule** dans l'agent (`:ro`) : impossible d'altérer les logs depuis l'agent
|
|
- **Redaction de headers sensibles** : configurer Traefik pour `drop` les `Authorization` et `Cookie` dans les logs
|
|
- **Discord webhooks** : utiliser des webhooks privés (canal restreint), pas publics
|
|
- ⚠️ **L'agent expose une API REST non chiffrée** par défaut : à mettre derrière un réseau privé ou via HTTPS reverse proxy
|
|
- ⚠️ **AGPL-3.0** : si vous modifiez et exposez publiquement le service, vous devez publier vos modifications
|
|
|
|
## 📚 Ressources
|
|
|
|
- [Quick Start Guide officiel](https://github.com/hhftechnology/traefik-log-dashboard/blob/main/QUICK_START_GUIDE.md)
|
|
- [Helm Charts (Kubernetes)](https://github.com/hhftechnology/traefik-log-dashboard/tree/main/charts)
|
|
- [Documentation Traefik access logs](https://doc.traefik.io/traefik/observability/access-logs/)
|
|
- [Mobile app iOS / Android](https://github.com/hhftechnology/traefik-log-dashboard) (liens dans le README)
|
|
- [Forum HHF Technology](https://forum.hhf.technology/tag/traefik-log-dashboard)
|
|
|
|
## Pages Liées
|
|
|
|
- [[cat-reverse-proxy]] — Catégorie Reverse Proxy
|
|
- [[app-traefik]] — Le reverse proxy dont on analyse les logs
|
|
- [[app-middleware-manager]] — du même éditeur HHF
|
|
- [[monitoring]] — concepts d'observabilité
|
|
- [[comparatif-reverse-proxy]] — Comparaison détaillée
|
|
- [[loki-promtail]] — alternative Grafana stack
|