Aller au contenu principal

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 :

  1. Global : Accès depuis le menu principal pour explorer tous les logs
  2. 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 :

  1. Filtres pré-appliqués : Pods du service automatiquement sélectionnés
  2. Nom du service visible : Header indique le contexte
  3. Retour au service : Bouton pour revenir à la page du service
  4. Tous les filtres disponibles : Possibilité d'ajuster ou combiner

API programmatique (à venir)

Roadmap

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 :

  1. Filtres trop restrictifs → Décochez des filtres
  2. Période trop courte → Élargissez la période
  3. 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 :

  1. Logs centralisés surchargés → Trop de requêtes simultanées, pensez à une instance dédiée sur vos ressources.
  2. Réseau lent → Problème de connectivité
  3. 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èreLogs Explorerkubectl logs
InterfaceWeb graphiqueCLI
FiltrageMulti-critères dynamiqueBasique (grep)
Historique30 joursLimité au pod actuel
Multi-servicesOui (combinaison)Non (un pod à la fois)
VisualisationHistogramme, couleursTexte brut
PartageURL avec étatCopier-coller texte

Quand utiliser Logs Explorer :

  • Debugging rapide de services
  • Investigation d'incidents
  • Monitoring temps réel