# ===================================
# Fichier : logstash.conf
# Description : Configuration complète de Logstash
# Auteur : DevOps Project
# Date : 30 janvier 2026
# ===================================

# ——— SECTION INPUT ———
# Définit les sources des logs
input {
  # Entrée via Beats (Filebeat, Metricbeat, etc.) – recommandé
  beats {
    port => 5044
    # host => "0.0.0.0" # Écoute sur toutes les interfaces
  }

  # Exemple : lecture de fichiers logs locaux
  # file {
  #   path => ["/var/log/*.log", "/app/logs/*.log"]
  #   start_position => "beginning"
  #   sincedb_path => "/dev/null" # Pour relire les fichiers à chaque démarrage (développement)
  # }

  # Exemple : réception de logs Syslog via UDP/TCP
  # syslog {
  #   port => 514
  #   type => "syslog"
  # }
}

# ——— SECTION FILTER ———
# Traitement, parsing et enrichissement des logs
filter {
  # Exemple : filtrer uniquement les logs de type "nginx"
  # if [type] == "nginx" {
  #   grok {
  #     match => { "message" => "%{COMBINEDAPACHELOG}" }
  #   }
  #   date {
  #     match => [ "timestamp", "dd/MMM/yyyy:HH:mm:ss Z" ]
  #   }
  # }

  # Exemple : parser des logs JSON
  # json {
  #   source => "message"
  # }

  # Ajout de champs métadonnées
  mutate {
    add_field => {
      "environment" => "production"
      "project" => "DevOpsProject"
    }
    # Supprimer des champs inutiles
    # remove_field => ["agent", "input_type"]
  }

  # Gestion des erreurs de parsing
  # if "_grokparsefailure" in [tags] {
  #   drop {}
  # }
}

# ——— SECTION OUTPUT ———
# Envoi des logs vers une destination
output {
  # Sortie vers Elasticsearch
  elasticsearch {
    hosts => ["http://elasticsearch:9200"]
    index => "logs-%{+YYYY.MM.dd}"
    # user => "elastic"
    # password => "changeme"
  }

  # Sortie vers la console (utile pour le debug)
  stdout {
    codec => rubydebug
  }

  # Exemple : sortie vers un fichier
  # file {
  #   path => "/logs/parsed-%{+YYYY-MM-dd}.log"
  #   codec => json
  # }
}

# ——— CONSEILS ———
# - Placez ce fichier dans : ./pipeline/logstash.conf
# - Montez le dossier dans le conteneur Docker
# - Assurez-vous qu’Elasticsearch est prêt avant Logstash
# - Utilisez `depends_on` avec condition de santé dans docker-compose.yml   