Compréhension et utilisation logstash, Kibana


#1

Bonjour,
Je suis novice dans elastic stack et je suis en formation d'administrateur systèmes et réseaux. Et pendant ma formation je dois faire une présentation d'elastic stack. J'ai réussi à installer les 3 logiciels (ELK) mais je suis bloqué quand Kibana me demande de mettre l'INDEX PATTERN. Je ne comprend pas à quoi ça correspond? Comment le configurer dans logstash? Connaissez-vous des tuto qui pourrai m'aider? Surtout que j'apprécie elastic stack et j'aimerai le mettre en prod plus tard dans mon entreprise.
Merci de votre aide.


(David Pilato) #2

En fait Kibana te demande sur quel(s) index tu veux travailler.

Kibana doit en effet découvrir quels sont les champs qu'il peut utiliser.

Pour cela tu configures un index pattern. Tu donnes soit le nom exact de ton index: my_index ou tu peux utiliser des wildcards: logstash-* par exemple.


#3

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


(David Pilato) #4

Que donne:

curl localhost:9200/_cat/indices?v

#5

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


(Heinmci) #6

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

#7

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?


(Heinmci) #8

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"
    }
}

#9

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


(Heinmci) #10

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!


#11

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.


(David Pilato) #12

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 ?


#13

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)?


(Heinmci) #14

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é!


#15

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


(Heinmci) #16

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


(David Pilato) #17

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


#18

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"
}
}


(Heinmci) #19

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


#20

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