Monitoring avec ELK – Windows et NXlog!

On a vu comment dans un précédent article comment mettre en place la pile ELK pour recevoir nos logs.

Maintenant, on va tenter de voir comment y balancer les événements produits par des machines sous windows.

Je me suis inspiré des articles suivants :

http://lesaventuresdeyannigdanslemondeit.blogspot.fr/2014/02/couplage-nxlog-et-stack-elasticsearch.html
http://www.ragingcomputer.com/2014/02/sending-windows-event-logs-to-logstash-elasticsearch-kibana-with-nxlog
https://gist.github.com/mrlesmithjr/cf212836b9ce162373ed

Au boulot!

On commence par ajouter un nouvel input à logstash toutes les confs de logstash se gèrent dans /etc/logstash/conf.d/ :

input {
  tcp {
    port => 3515
    type => "nxlog"
    codec => line {
        charset => "CP1252"
    }
  }
}

On créé maintenant un nouveau filtre pour mettre en forme les logs :

filter {
  if [type] == "nxlog" {
    json {
      source => "message"
    }
    mutate {
      rename => [ "Message", "message" ]
    }
  }
}

On redémarre logstash puis on vérifie que l’input nxlog est bien actif avec un petit netstat :

service logstash restart
netstat -an | grep 3535

On va maintenant installer nxlog, qui va nous permettre d’envoyer les logs windows vers logstash disponible à cette adresse : http://nxlog-ce.sourceforge.net/download

Ensuite on définit le fichier de conf de nxlog (dans le repértoire d’installation de nxlog) :

define ROOT C:\Program Files (x86)\nxlog

Moduledir %ROOT%\modules
CacheDir %ROOT%\data
Pidfile %ROOT%\data\nxlog.pid
SpoolDir %ROOT%\data
LogFile %ROOT%\data\nxlog.log

<Input eventlog>
    Module      im_msvistalog
    Query       <QueryList>\
                    <Query Id="0">\
                        <Select Path="Application">*</Select>\
                        <Select Path="System">*</Select>\
                        <Select Path="Security">*</Select>\
                    </Query>\
                </QueryList>
</Input>

<Extension json>
    Module      xm_json
</Extension>

<Output logstash>
    Module      om_tcp
    Port        3515
    Host        @IPSRVLOGSTASH
    Exec        $EventReceivedTime = integer($EventReceivedTime) / 1000000; \ to_json();
</Output>


<Route local_to_logstash>
    Path        eventlog => logstash
</Route>

Ensuite on redémarre le service nxlog, et on devrait commencer à voir nos logs apparaître au travers Kibana.

J’ai un peu galéré sur le format d’encodage de caractère (conf de logstash), en UTF-8 cela semblait fonctionner mais j’avais plein de messages d’erreur dans les logs de logstash. Putain d’accents…!

La je suis en format CP1252, je n’ai plus d’erreur mais des caractères à la con sur pratiquement chaque lignes de log…

logs

Ça serait tellement simple avec un parc de serveur en anglais, il va falloir que je passe plus de temps dessus afin de faire les choses propres. Reste également à voir comment filtrer les différents journaux que l’on souhait filtrer, je referais un article quand je maîtriserais un peu plus le truc.

A la prochaine!

 

 Desaille.fr | Le réseau aura raison de vous

5 commentaires

  1. Bonjour,
    Après avoir suivi ce tutoriel j’ai un problème de parse visiblement : Certains logs voient quasi tous leur champs indexés dans « message » :
    {
    « _index »: « logstash-2016.01.22 »,
    « _type »: « nxlog »,
    « _id »: « AVJqi946jfvu2ewA9CQZ »,
    « _score »: null,
    « _source »: {
    « message »: « {\\\ »EventTime\\\ »:\\\ »2016-01-22 14:26:01\\\ »,\\\ »Hostname\\\ »:\\\ »SV-xxx-xxx-xxx.xxx.net\\\ »,\\\ »Keywords\\\ »:-9223372036854775808,\\\ »EventType\\\ »:\\\ »WARNING\\\ »,\\\ »SeverityValue\\\ »:3,\\\ »Severity\\\ »:\\\ »WARNING\\\ »,\\\ »EventID\\\ »:332,\\\ »SourceName\\\ »:\\\ »Microsoft-Windows-TaskScheduler\\\ »,\\\ »ProviderGuid\\\ »:\\\ »{DE7B24EA-73C8-4A09-985D-5BDADCFA9017}\\\ »,\\\ »Version\\\ »:0,\\\ »Task\\\ »:332,\\\ »OpcodeValue\\\ »:0,\\\ »RecordNumber\\\ »:1972615,\\\ »ProcessID\\\ »:948,\\\ »ThreadID\\\ »:2256,\\\ »Channel\\\ »:\\\ »Microsoft-Windows-TaskScheduler/Operational\\\ »,\\\ »Domain\\\ »:\\\ »AUTORITE NT\\\ »,\\\ »AccountName\\\ »:\\\ »Syst\\xE8me\\\ »,\\\ »UserID\\\ »:\\\ »Syst\\xE8me\\\ »,\\\ »AccountType\\\ »:\\\ »User\\\ »,\\\ »Message\\\ »:\\\ »Le Planificateur de tâches n’a pas lancé la tâche « \\\\\\\\User_Feed_Synchronization-{BB59B48A-CAB4-4FE8-8610-2A1A8CF229C4} » car l’utilisateur « xxx\\\\\\\\xx_xxxxxx » n’était plus connecté lorsque les conditions de lancement ont été remplies. Action de l’utilisateur : vérifier que l’utilisateur est connecté ou modifier la définition de la tâche pour autoriser le lancement lorsque l’utilisateur est déconnecté.\\\ »,\\\ »Category\\\ »:\\\ »Condition de lancement non remplie, utilisateur non connecté\\\ »,\\\ »Opcode\\\ »:\\\ »Informations\\\ »,\\\ »TaskName\\\ »:\\\ »\\\\\\\\User_Feed_Synchronization-{BB59B48A-CAB4-4FE8-8610-2A1A8CF229C4}\\\ »,\\\ »UserName\\\ »:\\\ »xxx\\\\\\\\xx_xxxxxx\\\ »,\\\ »EventReceivedTime\\\ »:1453487162,\\\ »SourceModuleName\\\ »:\\\ »eventlog\\\ »,\\\ »SourceModuleType\\\ »:\\\ »im_msvistalog\\\ »}\\r »,
    « tags »: [
    « _jsonparsefailure »
    ],
    « @version »: « 1 »,
    « @timestamp »: « 2016-01-22T18:14:56.735Z »,
    « host »: « xx.xx.xx.xx »,
    « port »: 57803,
    « type »: « nxlog »
    },
    « fields »: {
    « @timestamp »: [
    1453486496735
    ]
    },
    « sort »: [
    1453486496735
    ]
    }

    Quelqu’un aurait une idée de l’origine du problème et comment le solver ?
    Merci d’avance

  2. Bonjour;
    Merci pour votre travail,
    j’ai une petite question concernant la configuration de logstach
    dans le fichier logstash.conf j’ai ce qui suit:
    input {
    tcp {
    port => 5545
    type => « nxlog »
    codec => line {
    charset => « CP1252 »
    }
    }
    }
    NB: petite précision: Logstach, Kibana et elstcisearch sont tous installer sur un serveur Windows.

    et voici le contenu de mon fichier nxlog.cof (installer sur le meme serveur)
    #define ROOT C:\Program Files\nxlog
    define ROOT C:\Program Files (x86)\nxlog
    Moduledir %ROOT%\modules
    CacheDir %ROOT%\data
    Pidfile %ROOT%\data\nxlog.pid
    SpoolDir %ROOT%\data
    LogFile %ROOT%\data\nxlog.log

    # Module im_msvistalog
    # For windows 2003 and earlier use the following:
    Module im_mseventlog

    Module xm_json

    Module om_tcp
    Port 5544
    Host 127.0.0.1
    Exec to_json();

    Path in => logstash

    Ma question:
    Pour envoyer les log des autres serveurs windows et linux, Est ce que dans le fichier de config de logsrach je doit ajouter de nouvelles section avec un autre port d’ecoute.

    et dans le fichier nxlog.conf , est ce que je foit utiliser le meme port a savoir 5545 ou il faut un autre.
    si vous pouvez me communiquer des exemples de fichier de configurations
    Merci.

  3. Bonjour,

    j’ai installé ce jour l’outil de rsyslog pour les machines Windows, la version standard est très complète et simple à paramétrer via une interface graphique. J’ai aussi galéré avec les accents des logs Windows mais dans le fichier de configuration de Logstash je lui ai précisé le CODEC UTF-8 pour l’input SYSLOG et du coup je n’ai plus de problèmes de caractères exotiques 😉

    voici le lien si cela vous intéresse : http://www.rsyslog.com/windows-agent/windows-agent-download/

    1. Je vais regarder ça, merci du retour! J’ai moi aussi changé de méthode, j’utilise logstash en direct. J’ai un article dans les cartons qu’il faut que je finisse détaillant l’utilisation sur windows avec l’input eventlog. Je le fait tourner en test depuis une dizaine de jours sur quelques serveurs. J’essaie de publier ça vite.

      Bye

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée.