Bonjour à tous et bonne année !
Je suis dans une entreprise de développement logiciels et nous avons environ 70 serveurs CentOS.
Je souhaite mettre en place ElasticStack pour faciliter la consultation des logs de tous les serveurs qui nous intéressent.
J'ai donc installé FileBeat, ElasticSearch et Kibana.
J'ai aussi créé des modules FileBeat pour lire les logs que nous créons avec nos logiciels.
Sur Kibana, j'arrive à lire mes logs, donc jusqu'à là tout va bien.
Sauf que maintenant je souhaite mettre en place une vue homogène de tous mes logs sur Kibana.
Par exemple, dans app/discover, je souhaite que tous mes logs soient présentés de cette façon :
| Time | agent.hostname | log.file.path | loglevel | process.pid | message |
Ce n'est qu'un exemple car ce n'est pas là mon problème.
Mon problème est que sur cet affichage, j'ai bien les colonnes @timestamp, agent.host.name et log.file.path complétées, mais loglevel et process.pid sont vide. De plus, ma colonne message contient TOUTE la ligne du log en question alors que je ne souhaite que la fin de la ligne du log.
| Time | agent.hostname | log.file.path | loglevel | process.pid | message |
|----------------------------|----------------|----------------------------|----------|-------------|--------------------------------------------------|
| Jan 6, 2021 @ 10:32:22.208 | mon_serveur | /var/log/asterisk/messages | - | - | [Jan 6 10:32:21] VERBOSE[21975] logger.c: Found |
Et un exemple de résultat que j'aimerai obtenir est celui-ci :
| Time | agent.hostname | log.file.path | loglevel | process.pid | message |
|----------------------------|----------------|----------------------------|----------|-------------|----------------------------------------------------------------------------------------------------------------|
| Jan 6, 2021 @ 10:32:22.208 | mon_serveur | /var/log/asterisk/messages | VERBOSE | 21975 | logger.c: Found |
| Jan 6, 2021 @ 22:03:08.318 | second_serveur | /var/log/apache2/error.log | debug | 9 | mod_authz_core.c(820): [client 172.17.0.1:50752] AH01626: authorization result of Require all granted: granted |
Voici ma pipeline pour Asterisk par exemple :
{
"description": "Pipeline for parsing Asterisk logs",
"processors": [{
"grok":{
"field":"message",
"patterns":[
"\\[%{MONTH:asterisk.month} %{MONTHNUM:asterisk.day} %{TIME:asterisk.time}\\] %{LOGLEVEL:loglevel}\\[%{INT:process.pid}\\]%{GREEDYDATA:asterisk.file}\\:%{GREEDYDATA:asterisk.log.message}"
]
}
}],
"on_failure" : [{
"set" : {
"field" : "error.message",
"value" : "{{ _ingest.on_failure_message }}"
}
}]
}
J'ai pas mal cherché dans la doc officielle, mais elle n'est pas assez claire pour moi et ça commence à m'embrouiller plus qu'autre chose. Est-ce qu'il m'est nécessaire d'avoir LogStash pour faire cette transformation ?
Merci d'avance pour votre aide.