FileBeat è il ben noto log shipper di Elasticsearch per caricare log dalle più disparate fonti. Uno dei moduli di FileBeat serve a caricare i file di log di IIS. Bisogna ricordare però che i file di log di IIS possono avere un numero variabile di campi, liberamente selezionabili, oltre a poter aggiungere dei campi custom. Per poter far digerire correttamente i vostri file di log bisogna modificare il file:
%ProgramFiles%\filebeat\module\iis\access\ingest\default.json
Questo file contiene la sezione grok:
"grok": {
"field": "message",
"patterns": [
"%{TIMESTAMP_ISO8601:iis.access.time} %{IPORHOST:destination.address} %{WORD:http.request.method} %{NOTSPACE:url.path} %{NOTSPACE:url.query} %{NUMBER:destination.port:long} %{NOTSPACE:user.name} %{IPORHOST:source.address} %{NOTSPACE:user_agent.original} %{NOTSPACE:http.request.referrer} %{NUMBER:http.response.status_code:long} %{NUMBER:iis.access.sub_status:long} %{NUMBER:iis.access.win32_status:long} %{NUMBER:temp.duration:long}"
],
"ignore_missing": true
}
Il campo patterns è un array di stringhe, ogni riga indica un paeern diverso di possibile interpretazione delle collonne del file di log verso le colonne interne di Elsticsearch. Nel caso evidenziato una riga del file di log inizia con la data e l’ora dell’evento, prosegue con l’IP del server di destinazione e così via. Per cui uno di questi pattern deve coincidere con il pattern del vostro file di log.
X-Forwarded-For
Il campo X-Forwarded-For è il campo (oppure True-Client-IP ) viene utilizzato dai vari reverse-proxy o load balancer per trasmettere l’ip originale dal quale viene la richiesta, infatti in questa situazione il campo c-ip di IIS contiene l’IP del reverse proxy. Per inserire il valore del X-Forwarded-For nel file di log bisogna:
Aprire IIS Manager Espandere il nodo server Espandere il nodo siti Cliccare sul proprio sito web Doppio click su Registrazione Cliccare su Seleziona campi... Cliaccare Aggiungi campo... in fondo nella dialog Mettere X-Forwarded-For sia in Nome campo che in Origine. lascaire Intestazione richiesta come Tipo di origine Cliccare OK nella dialog Aggiungi campo personalizzato Cliccare OK nella dialog Campi di registrazione Cliccare Applica sulla destra.
In questo modo IIS preleverà il campo dalle instestazioni delle richieste e lo scriverà nel file di log.
Ritornando al nostro pattern dell’array patterns, bisogna creare un pattern con il campo %{IPORHOST:iis.access.remote_ip}} piazzato nella posizione in cui si trova il campo X-Forwarded-For.
Modifiche su Elasticsearch
Una volta modificato il file %ProgramFiles%\filebeat\module\iis\access\ingest\default.json, bisogna aggiornare la pipeline di ingest sul server. Siccome la pipeline si chiama in modo diverso a seconda della versione di FileBeat, la cosa migliore è eseguire la richiesta (con la consolle di Kibana o con curl)
GET _ingest/pipeline
Vi verrà restituita la lista completa delle pipeline, una di queste sarà del tipo “filebeat-7.4.2-iis-error-default” dove il numero di versione può variare, a questo punto con la richiesta
PUT _ingest/pipeline/filebeat-7.4.2-iis-error-default {contenuto del file default .json}
A questo punto anche Elasticsearch sarà pronto a recepire gli eventi nel formato da voi prescelto.
P.S.
Per testare se il pattern cattura il vostro file di log, c’è il sito http://grokconstructor.appspot.com che permette di testare il tutto prima di installare il tutto.