Compréhension et utilisation logstash, Kibana

Mon problème c'est bien ça j'ai beau mettre un index mais kibana dit qu il ne le trouve pas.

Que donne:

curl localhost:9200/_cat/indices?v

Voilà ce que me retourne la commande
yellow open .kibana YfsaDDDrSlaroRRn4ed10g 1 1 1 0 4.2kb 4.2kb

Salut,
Si la commande retourne uniquement cette ligne cela veut dire qu'il n'y a auncun index présent (sauf celui que Kibana a créé) sur le seveur elastic search
Comment as tu créé ton index?
Dans Kibana, dans l'onglet "dev tools", si tu tapes l'exemple de la doc (https://www.elastic.co/guide/en/elasticsearch/reference/current/indices-create-index.html) :

PUT test 
{
"settings" : {
    "number_of_shards" : 1
},
"mappings" : {
    "type1" : {
        "properties" : {
            "field1" : { "type" : "text" }
        }
    }
}
}

Normalement si tu tapes test dans l'index pattern tu le retrouveras!
(tu devras décocher "Index contains time-based events ")

Puis pour supprimer l'index il te suffit de faire

DELETE test
1 Like

Merci de ton aide donc ça fonctionne voici ce que j'obtiens:
health status index uuid pri rep docs.count docs.deleted store.size pri.store.size
yellow open .kibana YfsaDDDrSlaroRRn4ed10g 1 1 2 0 8.7kb 8.7kb
yellow open test 39UvObx8TF6qSllk9UsFJg 1 1 0 0 159b 159b

Donc l'index test que je viens de créer permet de rediriger mes log vers cet index?

Je ne suis pas sur d'avoir bien compris ta question.
Si tu demandes comment rediriger tes logs dans cet index (à partir de logstash), dans ce cas là tu devrais avoir quelque chose comme ça dans ton fichier de conf logstash :

output {
    elasticsearch {
        hosts => [ "localhost:9200" ]
        index => "test"
    }
}
1 Like

Effectivement j'ai bien ça mais quand je met mon index dans kibana, il ne me trouve pas.

Qu'est ce que tu entends par "mettre ton index dans kibana" ?
Je ne suis pas certain de ce que tu cherches à faire pour être honnête donc c'est dur de savoir comment t'aider!

Justement je cherche à comprendre le fonctionnement (comme préciser dans le titre de mon post) entre kibana et logstash car j'ai du mal à tout saisir.

La chose de base à comprendre:

  • Logstash ou *beat: outils de collecte de données qui envoient vers elasticsearch les données collectées
  • Elasticsearch: outil qui indexe les données que tu lui envoies soit "à la main" soit via un outil de collecte
  • Kibana: outil de visualisation qui se connecte à Elasticsearch et permet de visualiser les données qui y ont été indexées.

Donc @Heinmci te propose d'envoyer des données vers elasticsearch pour y être indexées dans un index test:

Je t'ai expliqué comment connecter Kibana à un index existant:

Est-ce plus clair ?

Oui j'avais compris tout ça , ton explication m'a éclaircie sur certains point. Merci
Donc si je met logstash-* il utilise tous les index dans elasticsearch sans lui préciser les index exact?
Sinon pour logstash le fichier de conf doit être structuré avec une entrée (input) et une sortie vers elasticsearch (output)?

Si dans Kibana tu mets logstash-* dans l'index pattern, ça va prendre en compte tous tes indexes qui matchent avec cette regex (comme logstash-2017.05.20 ou logstash-2017.05.21)
Et oui, pour le fichier de conf tu dois avoir un input, par exemple :

input{
    file{
        path => "C:/logtest/*.log"
        start_position => beginning
    }
}

Cela va prendre tous les fichiers .log de mon dossier logtest
Et oui, un output comme vu au dessus. La plupart du temps tu auras aussi un filter entre les deux pour personnaliser les données que tu veux envoyer à elastic search

Il est aussi important de noter que si les fichiers (.log dans ce cas) sont déjà présents avant que tu lances logstash, il ne va pas les parser, il va juste parser tout ce qui est "nouveau", donc tu peux juste rajouter un ligne à un fichier existant, ou alors tu rajoutes les fichiers dans le dossier une fois que logstash est déjà lancé!

2 Likes

Ok merci je vais essayer tout ça et je vous fais un petit retour.
Ton start_position c'est pour quoi faire?

D'après la doc ;

start_position:
Value can be any of: beginning, end
Default value is "end"
Choose where Logstash starts initially reading files: at the beginning or at the end. The default behavior treats files like live streams and thus starts at the end. If you have old data you want to import, set this to beginning.

This option only modifies "first contact" situations where a file is new and not seen before, i.e. files that don’t have a current position recorded in a sincedb file read by Logstash. If a file has already been seen before, this option has no effect and the position recorded in the sincedb file will be used.

Je t'avoue que ça n'est pas très clair pour moi mais je crois que ça sert juste à indiquer la position par défaut de lecture de fichier par logstash

Oui. Ça sert à retraiter le fichier depuis le début à chaque redémarrage.

Petit retour comme prévu donc j'arrive à configurer un index par contre j'ai l'impression que logstash ne parvient pas à envoyer les logs vers elasticsearch voici ce que j'obtiens.
yellow open centos jx9maXKpQ---I0N77JxP0A 5 1 0 0 795b 795b

Mon fichier de conf dans logstash:
input{
file{
path => "/var/log/*.log"
}
}

output {
elasticsearch {
hosts => [ "localhost:9200" ]
index => "centos"
}
}

Est ce que logstash te met un message d'erreur ou pas?
Est ce que tu as bien modifié un fichier dans /var/log après que logstash soit lancé?
Ta config me parait bonne en tout cas

J'ai ça:
juin 02 09:04:50 localhost.localdomain systemd[1]: logstash.service holdoff time over, scheduling restart.
juin 02 09:04:50 localhost.localdomain systemd[1]: Started logstash.
juin 02 09:04:50 localhost.localdomain systemd[1]: Starting logstash...
juin 02 09:05:00 localhost.localdomain logstash[8364]: Sending Logstash's logs to /var/log/logstash which is now configured via log4j2.properties

Par contre je n'ai rien modifié dans /var/log

(En supposant que tu as lancé Kibana / Logstash / Elasticsearch)
Est ce que tu peux te placer dans /var/log puis taper :

 touch test.log | echo "test" > test.log

Puis tu peux aller sur kibana dans dev tools et faire

GET centos/_search
1 Like

Voila le resultat dans dev tools:
{
"took": 0,
"timed_out": false,
"_shards": {
"total": 5,
"successful": 5,
"failed": 0
},
"hits": {
"total": 0,
"max_score": null,
"hits": []
}
}

Et
[root@localhost log]# curl localhost:9200/_cat/indices?v
health status index uuid pri rep docs.count docs.deleted store.size pri.store.size
yellow open .kibana -NkIeZsjQ0an146bPVNO8Q 1 1 2 0 5kb 5kb
yellow open centos jx9maXKpQ---I0N77JxP0A 5 1 0 0 795b 795b