Pré-requis :

Nous partirons sur le fait que l'installation est faite avec l'article précédent.

Les différentes parties :

    La mise en place va se faire à 2 niveaux :

  • Logstash
  • Apache

Logstash :

input {
  #Ouverture en entrée d'un port d'écoute utilisant le protocol syslog
  tcp {
    port => 5544
    type => syslog
  }
  udp {
    port => 5544
    type => syslog
  }
}

filter {
  # Traitement type syslog, le type étant marqué sur les données entrant par nos ports de type syslog
  if [type] == "syslog" {
    grok {
      # Si on ne veut pas garder le message non traité
      overwrite => "message"
      match => {
        # rsyslong envoi des messages de type : <Numero>Ligne Syslog avec le message
        "message" => "^(?:<%{NONNEGINT:syslog_pri}>)?%{SYSLOGBASE2} %{GREEDYDATA:message}"
        "message" => "%{SYSLOG5424PRI}%{SYSLOGBASE2} %{DATA:message}"
      }
      # on ajoute des tags perso, pratique pour filtrer dans l'interface kibana
      add_tag => [ "syslog", "grokked" ]
    }
    }
       #Gestion des logs access apache dans syslog
                grok {
      # See the following URL for a complete list of named patterns
      #       # logstash/grok ships with by default:
      #             # https://github.com/logstash/logstash/tree/master/patterns
      #                   #
      #                         # The grok filter will use the below pattern and on successful match use
      #                               # any captured values as new fields in the event.
      match => { "message" => "%{SYSLOG5424PRI}%{SYSLOGBASE2} %{COMBINEDAPACHELOG}" }
      add_tag => [ "apache", "accesslogs" ]
    }
}

output {
# on stock dans elasticsearch
  elasticsearch {
    host => "localhost"
  }
}
service logstash restart

Apache :

<LocationMatch "^/+$">
    Options -Indexes
    ErrorDocument 403 /error/noindex.html
</LocationMatch>

ProxyPass /my_elasticsearch http://127.0.0.1:9200/
ProxyPassReverse  /my_elasticsearch http://127.0.0.1:9200/

LogLevel warn
CustomLog "|/usr/bin/tee -a /var/log/httpd/access_log | /usr/bin/logger -t accesslog_MonVS -p local6.notice" combined

Note : Penser à modifier "MonVS" par le nom de votre VirtualHost, ce qui permettra dans les logs de différencier la source des logs.

service httpd graceful

Résultat dans Kibana :

La présentation de Kibana étant assez longue, j'ai fait un template pour les logs Apache que je vous fourni à l'URL suivante.

Rendez-vous sur votre interface de Kibana, dans le Home, icône dossier (en haut à droite), Advanced puis parcourir et sélectionner le fichier.
Voici le résultat :

Pensez Dans la partie "Query" (tout en haut de la page) de modifier le accesslog_MonVS avec le nom que vous avez positionné lors de la configuration d'Apache.