Skip to content

Latest commit

 

History

1 Commit

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

LogAnalyzer

🔍 LogAnalyzer est un outil en ligne de commande (CLI) développé en Go pour analyser des fichiers de logs provenant de diverses sources (serveurs, applications). Il permet de centraliser l'analyse de multiples logs en parallèle et d'en extraire des informations clés, tout en gérant les erreurs potentielles de manière robuste.

🚀 Fonctionnalités

  • Analyse parallèle : Traitement concurrent de multiples fichiers de logs via des goroutines
  • Gestion d'erreurs robuste : Erreurs personnalisées avec errors.Is et errors.As
  • Interface CLI intuitive : Commandes et drapeaux avec Cobra
  • Export JSON : Génération de rapports au format JSON
  • Filtrage des résultats : Filtrage par statut (OK/FAILED)
  • Horodatage automatique : Ajout automatique de la date aux fichiers de sortie
  • Création automatique de répertoires : Création des dossiers de sortie si nécessaires
  • Gestion des configurations : Ajout manuel de nouvelles configurations

🏗️ Architecture

Le projet suit une architecture modulaire organisée en packages logiques :

loganalyzer/
├── cmd/                    # Commandes CLI
│   ├── root.go            # Commande racine
│   ├── analyze.go         # Commande d'analyse
│   └── add-log.go         # Commande d'ajout de log
├── internal/              # Packages internes
│   ├── config/            # Gestion des configurations JSON
│   ├── analyzer/          # Logique d'analyse et erreurs personnalisées
│   └── reporter/          # Export des rapports JSON
└── main.go               # Point d'entrée

📦 Installation

Construction

git clone <votre-repo>
cd loganalyzer
go build -o loganalyzer .

🛠️ Utilisation

Commande analyze

Analyse les fichiers de logs spécifiés dans un fichier de configuration JSON.

# Analyse basique
./loganalyzer analyze -c config.json

# Analyse avec export JSON
./loganalyzer analyze -c config.json -o report.json

# Analyse avec filtrage par statut
./loganalyzer analyze -c config.json --status FAILED

Drapeaux disponibles

  • -c, --config : Chemin vers le fichier de configuration JSON (requis)
  • -o, --output : Chemin vers le fichier de sortie JSON (optionnel)
  • --status : Filtrer par statut (OK ou FAILED)

Commande add-log

Ajoute une nouvelle configuration de log au fichier de configuration existant.

./loganalyzer add-log --id web-server-3 --path /var/log/nginx/error.log --type nginx-error --file config.json

Drapeaux disponibles

  • --id : Identifiant unique pour le log (requis)
  • --path : Chemin vers le fichier de log (requis)
  • --type : Type de log (requis)
  • --file : Chemin vers le fichier config.json (requis)

📝 Format des fichiers

Fichier de configuration (config.json)

[
  {
    "id": "web-server-1",
    "path": "/var/log/nginx/access.log",
    "type": "nginx-access"
  },
  {
    "id": "app-backend-2",
    "path": "/var/log/my_app/errors.log",
    "type": "custom-app"
  }
]

Rapport de sortie (report.json)

[
  {
    "log_id": "web-server-1",
    "file_path": "/var/log/nginx/access.log",
    "status": "OK",
    "message": "Analyse terminée avec succès.",
    "error_details": ""
  },
  {
    "log_id": "invalid-path",
    "file_path": "/non/existent/log.log",
    "status": "FAILED",
    "message": "Fichier introuvable.",
    "error_details": "file not found or inaccessible: /non/existent/log.log"
  }
]

🎯 Fonctionnalités avancées

Horodatage automatique

Les fichiers de sortie JSON sont automatiquement nommés avec la date du jour au format AAMMJJ_filename.json :

  • report.json devient 250527_report.json (pour le 27 mai 2025)

Création automatique de répertoires

Si le chemin de sortie inclut des répertoires qui n'existent pas, ils sont créés automatiquement :

./loganalyzer analyze -c config.json -o rapports/2025/analyse.json
# Crée automatiquement les dossiers rapports/2025/

Gestion des erreurs personnalisées

L'application utilise deux types d'erreurs personnalisées :

  1. FileNotFoundError : Fichier introuvable ou inaccessible
  2. ParsingError : Erreur lors de l'analyse du log (disponible pour gestion d'erreurs réelles)

🧪 Tests et exemples

Configuration de test

# Utiliser la configuration de test incluse
./loganalyzer analyze -c config.json

# Tester avec export
./loganalyzer analyze -c config.json -o test-report.json

# Tester le filtrage
./loganalyzer analyze -c config.json --status FAILED

Ajout de configuration

# Ajouter une nouvelle configuration
./loganalyzer add-log --id test-log --path test-logs/new.log --type test --file config.json

🎨 Simulation et concurrence

L'analyseur simule un traitement réaliste :

  • Temps d'analyse aléatoire : 50-200ms par fichier
  • Traitement parallèle : Une goroutine par fichier de log
  • Synchronisation : Utilisation de sync.WaitGroup et channels

🏆 Fonctionnalités bonus implémentées

  • Gestion des dossiers d'exportation : Création automatique des répertoires
  • Horodatage des exports JSON : Nommage automatique avec date
  • Commande add-log : Ajout manuel de configurations
  • Filtrage des résultats : Filtrage par statut

📋 Aide et documentation

# Aide générale
./loganalyzer --help

# Aide pour une commande spécifique
./loganalyzer analyze --help
./loganalyzer add-log --help

🐛 Gestion d'erreurs

L'application gère les erreurs suivantes :

  • Fichiers de configuration introuvables ou malformés
  • Fichiers de logs inaccessibles
  • Erreurs d'écriture de rapports
  • Conflits d'identifiants lors de l'ajout de configurations

📊 Exemple de sortie

Analyse de 3 fichier(s) de log...
=== RÉSULTATS D'ANALYSE ===
ID: nginx-access
Chemin: test-logs/access.log
Statut: OK
Message: Analyse terminée avec succès.
---
ID: app-errors
Chemin: test-logs/app.log
Statut: OK
Message: Analyse terminée avec succès.
---
ID: invalid-file
Chemin: test-logs/nonexistent.log
Statut: FAILED
Message: Fichier introuvable.
Détails d'erreur: file not found or inaccessible: test-logs/nonexistent.log
---

=== RÉSUMÉ ===
Total: 3
Succès: 2
Échecs: 1
Rapport exporté vers: 250527_report.json

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Used by

Contributors

Languages