Logs Explorer - Explorateur de logs centralisé
Le Logs Explorer est un outil puissant pour explorer, filtrer et analyser les logs de tous vos services Ziosting en temps réel. Il offre une interface intuitive avec filtrage dynamique, histogrammes visuels et streaming en direct.
Accès au Logs Explorer
URL : /logs-explorer
Deux modes d'accès :
- Global : Accès depuis le menu principal pour explorer tous les logs
- Contextuel : Intégré dans chaque page de service avec filtres pré-appliqués
Architecture et fonctionnement
Interface du Logs Explorer
Zones principales
L'interface se compose de trois zones :
┌─────────────────────────────────────────────────────────────┐
│ BARRE DE RECHERCHE │
│ [Search...] [Time Range] [Refresh] [Options] │
├──────────────┬──────────────────────────────────────────────┤
│ │ │
│ FILTRES │ HISTOGRAMME │
│ (Sidebar) │ (Volume de logs dans le temps) │
│ │ │
│ Services ├──────────────────────────────────────────────┤
│ Clusters │ │
│ Namespaces │ LOGS │
│ Pods │ (Liste des lignes) │
│ Levels │ │
│ │ │
└──────────────┴──────────────────────────────────────────────┘
Barre de recherche
Recherche full-text
- Recherche dans le contenu des logs
- Mise en surbrillance des résultats
- Support des expressions régulières
- Recherche sensible à la casse (toggle disponible)
Sélecteur de période
- Dernière minute (1m)
- 5 dernières minutes (5m)
- 15 dernières minutes (15m)
- Dernière heure (1h)
- 6 dernières heures (6h)
- 24 dernières heures (24h)
- Personnalisé : Sélection de dates/heures précises
Boutons d'action
- Refresh : Rafraîchir manuellement les logs
- Live : Activer/désactiver le streaming temps réel
- Copy Link : Copier l'URL avec tous les filtres actifs
- Export : Télécharger les logs filtrés (à venir)
Système de filtrage
Filtres disponibles
Le Logs Explorer propose cinq catégories de filtres avec checkboxes multiples :
1. Services
Liste de tous vos services managés.
Exemples :
- mysql-prod-01
- redis-cache-api
- kafka-events
- postgres-db-main
Sélection multiple : Cochez plusieurs services pour voir leurs logs combinés.
2. Clusters
Liste des clusters Kubernetes hébergeant vos services.
Exemples :
- prod-cluster-paris
- dev-cluster-amsterdam
- staging-cluster-frankfurt
Utilité : Filtrer par datacenter ou environnement.
3. Namespaces
Namespaces Kubernetes de vos services.
Exemples :
- production
- staging
- development
- monitoring
Organisation : Les namespaces correspondent généralement aux environnements ou projets.
4. Pods
Pods Kubernetes exécutant vos services.
Format : service-name-deployment-id-pod-id
Exemples :
- mysql-prod-pxc-0
- redis-cache-id-abc123
- kafka-events-kafka-0
Détection de type :
- Pod : Pod individuel
- Deployment : Tous les pods d'un déploiement
- StatefulSet : Pods numérotés (0, 1, 2, etc.)
Sélection multiple : Utile pour comparer les logs de plusieurs réplicas.
5. Levels (Niveaux de log)
Niveau de sévérité des logs.
Niveaux disponibles :
- 🔴 Error : Erreurs nécessitant attention
- 🟡 Warn : Avertissements
- 🟢 Info : Messages informatifs
- 🔵 Debug : Informations de débogage
- ⚪ Unknown : Niveau non détecté
Sélection multiple : Combinez Error + Warn pour voir uniquement les problèmes.
Logique de filtrage dynamique
Le Logs Explorer utilise une logique de filtrage sophistiquée :
Fonctionnement
1. Utilisateur coche/décoche un filtre
↓
2. Système récupère l'histogramme avec les nouveaux filtres
↓
3. Système récupère les logs avec les nouveaux filtres
↓
4. Valeurs des AUTRES filtres se mettent à jour dynamiquement
↓
5. Le filtre modifié PRÉSERVE ses valeurs
↓
6. Si décochage → revient à l'état non filtré (gardé en mémoire)
Exemple concret
État initial : Aucun filtre
Services: [mysql-prod, redis-cache, kafka-events] (tous disponibles)
Levels: [error, warn, info, debug] (tous disponibles)
Action 1 : Cocher "error" dans Levels
Services: [mysql-prod, redis-cache] (kafka-events disparaît : pas d'erreurs)
Levels: [error] (sélectionné) + [warn, info, debug] (disponibles)
→ Les logs affichés : seulement les erreurs de mysql-prod et redis-cache
Action 2 : Cocher "mysql-prod" dans Services (en plus)
Services: [mysql-prod] (sélectionné) + [redis-cache] (disponible)
Levels: [error, warn, info, debug] (tous redevenus disponibles pour mysql-prod)
→ Les logs affichés : seulement les erreurs de mysql-prod
Action 3 : Décocher "error" dans Levels
Services: [mysql-prod] (toujours sélectionné)
Levels: [error, warn, info, debug] (tous disponibles, aucun sélectionné)
→ Revient à l'état non filtré par level : tous les logs de mysql-prod
Préservation de contexte
Principe : Le filtre en cours de modification garde ses valeurs, les autres s'adaptent.
Cas d'usage :
- Vous explorez les erreurs Kafka → Filtre Level:error
- Vous voulez voir un pod spécifique → Cochez le pod
- Le filtre Level:error reste actif
- Vous voyez uniquement les erreurs de ce pod
Optimisation mémoire :
- Les états non filtrés sont conservés en cache
- Pas de re-fetch si vous décochez un filtre (retour instantané)
- Cache invalidé après 5 minutes d'inactivité
Filtres contextuels (mode service)
Lorsque le Logs Explorer est ouvert depuis une page de service, des filtres par défaut sont automatiquement appliqués :
MySQL Legacy
{pod=~"my-service-pxc-.*"}
PostgreSQL Legacy
{pod=~"postgres-my-service-.*"}
Elasticsearch Legacy
{pod=~"my-service-es-.*"}
KeyDB/Redis
{pod=~"my-service-id-.*"}
Kafka
{pod=~"my-service-kafka-.*"}
Pinot
{pod=~"my-service-.*"}
PaaS
{pod=~"my-service-id-.*"}
Cluster
{cluster="my-service"}
Ces filtres sont modifiables : vous pouvez les ajuster ou les retirer.
Histogramme de logs
Visualisation du volume
L'histogramme affiche le volume de logs dans le temps, coloré par niveau de sévérité :
Volume
▲
│ ┌─┐
│ ┌─┐│█│ ┌─┐
│ │█││█│ │█│┌─┐
│ │█││█│┌┐│█││█│
│┌┐│█││█││││█││█│
└──────────────────> Temps
🔴 Error 🟡 Warn 🟢 Info 🔵 Debug
Interprétation :
- Pics rouges : Burst d'erreurs → Investigation nécessaire
- Volume constant vert : Activité normale (logs Info)
- Absence de logs : Service inactif ou filtre trop restrictif
Interaction avec l'histogramme
Brushing (sélection temporelle)
- Cliquez-glissez sur l'histogramme pour zoomer sur une période
- Les logs affichés se limitent à cette période
- Cliquez hors de la sélection pour réinitialiser
Survol (hover)
- Survolez une barre pour voir le détail du volume
- Décomposition par niveau de sévérité
- Timestamp précis
Requête de l'histogramme
L'histogramme utilise la fonction LogQL count_over_time() :
# Compte les logs par bucket de temps
sum by (level) (
count_over_time(
{cluster="my-cluster"} | level="error" [1m]
)
)
Paramètres dynamiques :
- Bucket size : Adapté à la période (1m pour 1h, 5m pour 24h, etc.)
- Agrégation : Par niveau de sévérité
- Filtres : Mêmes filtres que les logs affichés
Zero-out des niveaux non sélectionnés
Lorsque vous désélectionnez un niveau (ex: décocher "Debug"), l'histogramme met à zéro ce niveau :
Avantage : Visualisation claire uniquement des niveaux pertinents, sans distraction.
Affichage des logs
Format des lignes
Chaque ligne de log affiche :
[Timestamp] [Level] [Source] Message
[2025-11-11 14:32:15] ERROR pod:mysql-prod-pxc-0 Connection timeout to 10.0.1.5:3306
Composants :
- Timestamp : Date et heure précise (fuseau local)
- Level : Badge coloré (Error, Warn, Info, Debug)
- Source : Pod, container ou service d'origine
- Message : Contenu du log
Mise en surbrillance
Recherche active : Les termes recherchés sont surlignés en jaune.
Niveaux critiques :
- Error : Fond rouge clair
- Warn : Fond jaune clair
Pagination et performance
Chargement progressif
- Par défaut : 100 lignes chargées
- Scroll infini : Chargement automatique de 100 lignes supplémentaires en scrollant
Limite de performance
- Maximum recommandé : 1000 lignes affichées simultanément
- Au-delà : Risque de ralentissement navigateur
- Solution : Affinez vos filtres ou réduisez la période
Copie et export
Copier une ligne
- Cliquez sur une ligne pour la sélectionner
- Ctrl+C (Cmd+C sur Mac) pour copier
- Format : Texte brut avec timestamp
Export de logs (à venir)
- Bouton "Export" pour télécharger les logs filtrés
- Formats disponibles : TXT, JSON, CSV
Streaming temps réel
Activation du mode Live
Cliquez sur le bouton Live (icône de lecture) pour activer le streaming en temps réel.
Comportement :
- Récupération de nouveaux logs toutes les 2 secondes
- Auto-scroll vers le bas à chaque nouveau log
- Indicateur "Live" actif (badge vert)
Désactivation :
- Cliquez à nouveau sur Live pour mettre en pause
- Scrollez manuellement vers le haut (pause automatique)
Cas d'usage
Déploiement en cours
- Activez Live pour suivre les logs de déploiement en temps réel
- Détectez immédiatement les erreurs
Debugging d'application
- Reproduisez un problème pendant que Live est actif
- Voyez les logs apparaître en direct
Monitoring de production
- Surveillez les erreurs en temps réel
- Réagissez rapidement aux incidents
Partage et collaboration
URLs avec état
L'état complet du Logs Explorer est encodé dans l'URL :
Exemple d'URL :
/logs-explorer?services=mysql-prod,redis-cache&levels=error,warn&search=timeout&range=1h
Paramètres inclus :
- Services sélectionnés
- Clusters sélectionnés
- Namespaces sélectionnés
- Pods sélectionnés
- Levels sélectionnés
- Recherche textuelle
- Période temporelle
Copier le lien
Cliquez sur Copy Link pour copier l'URL complète avec tous les filtres actifs.
Cas d'usage :
- Partage d'incident : Envoyez le lien à un collègue pour qu'il voie exactement les mêmes logs
- Documentation : Incluez le lien dans un ticket ou post-mortem
- Bookmarks : Sauvegardez des vues fréquentes en favoris navigateur
Intégrations
Mode contextuel (depuis page de service)
Lorsqu'un service ouvre le Logs Explorer :
- Filtres pré-appliqués : Pods du service automatiquement sélectionnés
- Nom du service visible : Header indique le contexte
- Retour au service : Bouton pour revenir à la page du service
- Tous les filtres disponibles : Possibilité d'ajuster ou combiner
API programmatique (à venir)
Une API permettra d'intégrer le Logs Explorer dans vos propres outils :
- Embedding dans dashboards custom
- Requêtes programmatiques depuis scripts
- Export automatisé de logs
Bonnes pratiques
Filtrage efficace
Commencez large, affinez progressivement
1. Sélectionnez la période (ex: dernière heure)
2. Filtrez par service concerné
3. Ajoutez Level:error pour isoler les problèmes
4. Recherchez des termes spécifiques si besoin
Utilisez les combinaisons de filtres
- Services + Levels : Voir les erreurs de services spécifiques
- Clusters + Namespaces : Isoler un environnement
- Pods + Levels : Débugger un replica particulier
Investigation d'incident
Workflow recommandé :
1. Health Monitor détecte un service unhealthy
↓
2. Ouvrir le Logs Explorer (global ou depuis le service)
↓
3. Filtrer Level:error pour voir les erreurs récentes
↓
4. Identifier le pattern d'erreur commun
↓
5. Rechercher ce pattern pour voir toutes les occurrences
↓
6. Consulter l'histogramme : erreur ponctuelle ou récurrente ?
↓
7. Si récurrent : Consulter les métriques (CPU, mémoire)
↓
8. Action corrective basée sur le diagnostic
Performance
Réduisez la période si lenteur
- 1h au lieu de 24h pour des résultats plus rapides
- Loki est optimisé pour les requêtes courtes
Évitez les regex trop larges
pod=~".*": Très lent (tous les pods)pod=~"mysql-prod-.*": Rapide (scope restreint)
Limitez le nombre de services simultanés
- 1-3 services : Optimal
-
10 services : Peut ralentir
Collaboration
Partagez des liens, pas des screenshots
- Les liens préservent le contexte complet
- Permettent d'explorer davantage
- Restent valides même si les logs tournent
Documentez vos requêtes utiles
- Créez des bookmarks pour les vues fréquentes
- Documentez les patterns d'erreurs connus
Dépannage
Aucun log ne s'affiche
Causes possibles :
- Filtres trop restrictifs → Décochez des filtres
- Période trop courte → Élargissez la période
- Service ne génère pas de logs → Vérifiez que le service tourne
Solutions :
- Cliquez sur "Réinitialiser les filtres"
- Essayez une période de 24h
- Vérifiez l'état du service dans la page Services
Logs en retard (latence)
Causes possibles :
- Logs centralisés surchargés → Trop de requêtes simultanées, pensez à une instance dédiée sur vos ressources.
- Réseau lent → Problème de connectivité
- Volume de logs énorme → Filtrez davantage
Solutions :
- Réduisez la période temporelle
- Affinez les filtres pour réduire le volume
- Attendez quelques secondes et rafraîchissez
Histogramme vide
Causes :
- Période sélectionnée sans logs
- Tous les levels décochés
- Filtres incompatibles (ex: service inexistant dans cluster sélectionné)
Solutions :
- Cochez au moins un level
- Réinitialisez les filtres
- Vérifiez la cohérence des filtres
Comparaison avec d'autres outils
Logs Explorer vs kubectl logs
| Critère | Logs Explorer | kubectl logs |
|---|---|---|
| Interface | Web graphique | CLI |
| Filtrage | Multi-critères dynamique | Basique (grep) |
| Historique | 30 jours | Limité au pod actuel |
| Multi-services | Oui (combinaison) | Non (un pod à la fois) |
| Visualisation | Histogramme, couleurs | Texte brut |
| Partage | URL avec état | Copier-coller texte |
Quand utiliser Logs Explorer :
- Debugging rapide de services
- Investigation d'incidents
- Monitoring temps réel