2017-05-18 2 views
0

Je suis un débutant ici. Mon propre problème est de configurer FileBeat et Logstash pour ajouter des fichiers XML dans Elasticsearch sur CentOS 7. J'ai déjà installé la dernière version de filebeat, logstash, elasticsearch et Kibana, avec le plug-in "elasticsearch-head" en standalone pour voir à l'intérieur de elasticsearch. Et pour tester mon installation, je l'ai ajouter avec succès simple fichier journal du système CentOS (/ var/log/messages), et de voir à l'intérieur ElasticSearch-tête (index 6 et 26 tessons) plug-in: This is a viex of my elasticsearch-head plug-inComment configurer FileBeat et Logstash pour ajouter des fichiers XML dans Elasticsearch?

Et maintenant, l'étape suivante consiste à ajouter un journal à partir du fichier XML. Après avoir lu la documentation, j'ai configuré filebeat et logstash. Tous les services sont en cours d'exécution, et j'essaie la commande "touch /mes/AddOf.xml" pour essayer d'activer un événement filebeat, et transférer le journal à logstash (AddOf.xml est mon fichier journal).

Ma structure de données XML est comme ceci pour un événement de journal:

<log4j:event logger="ServiceLogger" timestamp="1494973209812" level="INFO" thread="QueueWorker_1_38a0fec5-7c7f-46f5-a87a-9134fff1b493"> 
    <log4j:message>Traitement du fichier \\ifs-app-01\Interfaces_MES\AddOf\ITF_MES_01_01_d2bef200-3a85-11e7-1ab5-9a50967946c3.xml</log4j:message> 
    <log4j:properties> 
     <log4j:data name="log4net:HostName" value="MES-01" /> 
     <log4j:data name="log4jmachinename" value="MES-01" /> 
     <log4j:data name="log4net:Identity" value="" /> 
     <log4j:data name="log4net:UserName" value="SOFRADIR\svc_mes_sf" /> 
     <log4j:data name="LogName" value="UpdateOperationOf" /> 
     <log4j:data name="log4japp" value="MES_SynchroService.exe" /> 
    </log4j:properties> 
    <log4j:locationInfo class="MES_SynchroService.Core.FileManager" method="TraiteFichier" file="C:\src\MES_PROD\MES_SynchroService\Core\FileManager.cs" line="47" /> 
</log4j:event> 

Ma configuration filebeat comme celui-ci (/etc/filebeat/filebeat.yml):

filebeat.prospectors: 

# Each - is a prospector. Most options can be set at the prospector level, so 
# you can use different prospectors for various configurations. 
# Below are the prospector specific configurations. 
- input_type: log 

    # Paths that should be crawled and fetched. Glob based paths. 
    paths: 
    - /mes/*.xml 

    document_type: message 

    ### Multiline options 

    # Mutiline can be used for log messages spanning multiple lines. This is common 
    # for Java Stack Traces or C-Line Continuation 

    # The regexp Pattern that has to be matched. The example pattern matches all lines starting with [ 
    multiline.pattern: ^<log4j:event 

    # Defines if the pattern set under pattern should be negated or not. Default is false. 
    multiline.negate: true 

    # Match can be set to "after" or "before". It is used to define if lines should be append to a pattern 
    # that was (not) matched before or after or as long as a pattern is not matched based on negate. 
    # Note: After is the equivalent to previous and before is the equivalent to to next in Logstash 
    multiline.match: after 

#================================ Outputs ===================================== 

# Configure what outputs to use when sending the data collected by the beat. 
# Multiple outputs may be used. 

#----------------------------- Logstash output -------------------------------- 
output.logstash: 
    # The Logstash hosts 
    hosts: ["localhost:5044"] 

    # Optional SSL. By default is off. 
    # List of root certificates for HTTPS server verifications 
    ssl.certificate_authorities: ["/etc/pki/tls/certs/logstash-forwarder.crt"] 

    # Certificate for SSL client authentication 
    #ssl.certificate: "/etc/pki/client/cert.pem" 

    # Client Certificate Key 
    #ssl.key: "/etc/pki/client/cert.key" 

Ma configuration d'entrée de logstash (/etc/logstash/conf.d/01-beats-input.conf):

input { 
beats { 
port => 5044 
ssl => true 
ssl_certificate => "/etc/pki/tls/certs/logstash-forwarder.crt" 
ssl_key => "/etc/pki/tls/private/logstash-forwarder.key" 
} 
} 

Mon filtre logstash configuratio n (/etc/logstash/conf.d/01-beats-filter.conf):

filter 
{ 
    xml 
    { 
     source => "message" 
     xpath => 
     [ 
      "/log4j:event/log4j:message/text()", "messageMES" 
     ] 
     store_xml => true 
     target => "doc" 
    } 
} 

Ma configuration de sortie logstash (de /etc/logstash/conf.d/01-beats-output.conf):

output { 
elasticsearch { 
hosts => ["localhost:9200"] 
sniffing => true 
manage_template => false 
index => "mes_log" 
document_type => "%{[@metadata][type]}" 
} 
} 

Mais lorsque je tente la commande « toucher /mes/AddOf.xml », ou ajouter manuellement un journal des événements dans AddOf.xml, je ne vois pas un nouvel index avec journal des événements de fichier XML dans ElasticSearch .

J'ai vu la documentation pour le plugin XML pour logstash (here), mais je ne sais pas si j'ai besoin d'installer quelque chose? Ou peut-être que je ne fais pas la bonne chose pour que filebeat envoie les logs à logstash? Je suis très impliqué et motivé pour apprendre la pile ELK. Merci d'avance pour votre expertise et votre aide. Je vous serais reconnaissant ! :)

+0

Avez-vous vérifié le journal de chaque système au cours de votre processus? Si vous ne voyez rien sur ES, c'est peut-être juste un problème pour relier logstash à ES. Avez-vous besoin d'une authentification? Essayez de vérifier les paramètres 'user',' password', 'ssl' et' cacert', au cas où vous en auriez besoin (dans votre dernier extrait). Vous pouvez vérifier si vos données viennent à logstash en imprimant les résultats directement au shell: si elles apparaissent, le problème est avec le lien. juste utiliser comme sortie 'output {stdout {codec => rubydebug}}' –

+0

Salut. Je n'ai pas le certificat SSL finalement je n'en ai pas besoin. Je n'utilise pas d'utilisateur ou de mot de passe pour ES. C'était un problème de filtre avec l'espace de noms xml. Mais ce n'est pas totalement résolu (voir les messages sous celui-ci). – benjamin38600

Répondre

0

Dans votre configuration filebeat, l'expression rationnelle pour multiline.pattern devrait probablement être dans les guillemets simples:

multiline.pattern: '^<log4j:event' 
+0

Réservoirs d'aide, c'est vrai pour les guillemets simples! Mais je suis toujours au même point. Une idée de test pour savoir si le problème vient de filebeat ou de logstash? – benjamin38600

+0

Vous pouvez exécuter à la fois filebeat et logstash en mode débogage. ./filebeat -c filebeat.yml -e -d "*" et bin/logstash -f chemin/vers/logstash.conf --log.login debug. – berrytchaks

+0

Réservoirs, avec commande de débogage de logstash J'ai trouvé une erreur de filtre avec l'espace de noms xml (log4j). Maintenant, le filtre fonctionne avec: 'remove_namespaces => true' et le chemin xpath '/ event/message/text() ", mais les balises de sortie montrent une erreur d'analyse:' _xmlparsefailure 'Je suis sûr que cette erreur silencieuse provient de l'espace de noms , mais en analysant le travail, dans mon champ "xpath_message" je reçois le message: qu'est-ce que vous en pensez, c'est étrange, le problème est ici et ça marche: https://github.com/logstash-plugins/logstash-filter-xml/issues/10, mais le tag d'erreur reste. – benjamin38600