J'ai donc une plate-forme Web qui imprime un fichier JSON par demande contenant des données de journal sur cette demande. Je peux configurer plusieurs règles sur quand doit-il enregistrer des trucs, seulement à certains niveaux, etc ...
Maintenant, je joue avec la pile Logstash + Elasticsearch + Kibana3, et j'aimerais trouver un moyen de voir ces journaux dans Kibana. Ma question est, existe-t-il un moyen de faire en sorte que Logstash importe ce type de fichiers, ou devrais-je écrire un plug-in d'entrée personnalisé pour cela? J'ai cherché et pour ce que j'ai vu, les plugins sont écrits en Ruby, un langage avec lequel je n'ai pas d'expérience.
Logstash est juste un outil pour convertir différents types de fichiers syslog en JSON et les charger dans elasticsearch (ou graphite, ou ...).
Comme vos fichiers sont déjà en JSON, vous n'avez pas besoin de logstash. Vous pouvez les télécharger directement dans elasticsearch en utilisant curl.
Voir Importer/Indexer un fichier JSON dans Elasticsearch
Cependant, pour bien fonctionner avec Kibana, vos fichiers JSON doivent être au minimum.
Plat - Kibana ne bloque pas les structures JSON imbriquées. Vous avez besoin d'un hachage simple de paires clé/valeur.
Avoir un horodatage identifiable.
Ce que je suggérerais, c'est de regarder les sorties du journal des fichiers JSON et de voir si vous pouvez masser vos fichiers JSON pour correspondre à cette structure. Vous pouvez le faire dans n'importe quelle langue que vous aimez qui prend en charge JSON. Le programme jq
est très pratique pour filtrer json d'un format à un autre.
Format Logstash - https://Gist.github.com/jordansissel/2996677
Logstash est un très bon outil pour traiter les fichiers dynamiques.
Voici comment importer votre fichier json dans elasticsearch à l'aide de logstash:
fichier de configuration:
input
{
file
{
path => ["/path/to/json/file"]
start_position => "beginning"
sincedb_path => "/dev/null"
exclude => "*.gz"
}
}
filter
{
mutate
{
replace => [ "message", "%{message}" ]
gsub => [ 'message','\n','']
}
if [message] =~ /^{.*}$/
{
json { source => message }
}
}
output
{
elasticsearch {
protocol => "http"
codec => json
Host => "localhost"
index => "json"
embedded => true
}
stdout { codec => rubydebug }
}
exemple de fichier json:
{"foo":"bar", "bar": "foo"}
{"hello":"world", "goodnight": "moon"}
Notez que le json doit être sur une seule ligne. si vous souhaitez analyser un fichier json multiligne, remplacez les champs appropriés dans votre fichier de configuration:
input
{
file
{
codec => multiline
{
pattern => '^\{'
negate => true
what => previous
}
path => ["/opt/mount/ELK/json/*.json"]
start_position => "beginning"
sincedb_path => "/dev/null"
exclude => "*.gz"
}
}
filter
{
mutate
{
replace => [ "message", "%{message}}" ]
gsub => [ 'message','\n','']
}
if [message] =~ /^{.*}$/
{
json { source => message }
}
}
Logstash peut importer différents formats et sources car il fournit de nombreux plugins. Il existe également d'autres outils de collecte et de transfert de journaux qui peuvent envoyer des journaux à logstash tels que nxlog , rsyslog, syslog-ng, flume, kafka, fluentd, etc. D'après ce que j'ai entendu la plupart des gens utilisent nxlog sur Windows (bien que cela fonctionne aussi bien sur Linux) en combinaison avec la pile ELK en raison de sa faible empreinte sur les ressources. (Avertissement: je suis affilié au projet)