J'essaie de connecter Logstash à Elasticsearch mais je n'arrive pas à le faire fonctionner.
Voici ma conf logstash:
input {
stdin {
type => "stdin-type"
}
file {
type => "syslog-ng"
# Wildcards work, here :)
path => [ "/var/log/*.log", "/var/log/messages", "/var/log/syslog" ]
}
}
output {
stdout { }
elasticsearch{
type => "all"
embedded => false
Host => "192.168.0.23"
port => "9300"
cluster => "logstash-cluster"
node_name => "logstash"
}
}
Et j'ai seulement changé ces détails dans mon elasticsearch.yml
cluster.name: logstash-cluster
node.name: "logstash"
node.master: false
network.bind_Host: 192.168.0.23
network.publish_Host: 192.168.0.23
discovery.zen.ping.multicast.enabled: false
discovery.zen.ping.unicast.hosts: ["localhost"]
Avec ces configurations, je ne pouvais pas connecter Logstash à ES. Quelqu'un peut-il s'il vous plaît suggérer où je me trompe?
Tout d'abord, je suggère de faire correspondre vos attributs "type" vers le haut. Dans votre entrée, vous avez 2 types différents, et dans votre sortie, vous avez un type qui n'existe dans aucune de vos entrées.
Pour les tests, changez votre sortie en:
output {
stdout { }
elasticsearch{
type => "stdin-type"
embedded => false
Host => "192.168.0.23"
port => "9300"
cluster => "logstash-cluster"
node_name => "logstash"
}
}
Avez-vous ensuite créé un index sur votre instance ES?
D'après les guides que j'ai utilisés et ma propre expérience (d'autres peuvent avoir une autre façon de fonctionner), j'ai toujours utilisé un index pour que lorsque je pousse quelque chose dans ES, je puisse utiliser l'API ES et vérifier rapidement si les données ont entré ou non.
Une autre suggestion serait d'exécuter simplement votre transitaire et indexeur Logstash avec des indicateurs de débogage pour voir ce qui se passe dans les coulisses.
Pouvez-vous vous connecter à votre instance ES sur 127.0.0.1? Essayez également d'expérimenter le port et l'hôte. En tant qu'utilisateur plutôt nouveau du système Logstash, j'ai trouvé que ma compréhension au départ allait à l'encontre de la réalité de la configuration. Parfois, l'adresse IP de l'hôte n'est pas ce que vous pensez que c'est, ainsi que le port. Si vous êtes prêt à vérifier votre réseau et à identifier les ports d'écoute et les adresses IP, vous pouvez trier cela, sinon faites quelques essais et erreurs intelligents.
Je recommande fortement ceci guide comme point de départ complet. Les deux points que j'ai mentionnés sont (en) directement abordés dans le guide. Bien que le guide ait un point de départ légèrement plus complexe, les idées et les concepts sont approfondis.
Je n'ai pas pu connecter Logstash à ES
Cela m'est arrivé lorsque mes les versions logstash et elasticsearch n'étaient plus synchronisées
à partir des documents:
NOTE DE VERSION: Votre cluster Elasticsearch doit exécuter Elasticsearch 1.1.1. Si vous utilisez une autre version d'Elasticsearch, vous devez définir
protocol => http
dans ce plugin.
Réglage protocol => http
explicitement comme indiqué ci-dessus l'a corrigé pour moi.
Comme Adam l'a dit, la chose était le réglage du protocole, donc seulement pour les tests, j'ai fait:
logstash -e 'input { stdin { } } output { elasticsearch { Host => localhost protocol => "http" port => "9200" } }'
Et cela semble fonctionner sur OSX. Problème ici .
Ce qui suit est testé sur
elasticsearch: 5.4.0
et
logstash: 5.4.0
(J'ai utilisé le conteneur Docker sur OpenStack)
Pour Elasticsearch:
/usr/share/elasticsearch/config/elasticsearch.yml
devrait ressembler à ceci -
cluster.name: "docker-cluster"
network.Host: 0.0.0.0
discovery.zen.minimum_master_nodes: 1
Aucun changement dans les autres fichiers de /usr/share/elasticsearch/config/
est requis
Exécutez Elasticsearch à l'aide d'une commande simple -
Sudo docker run --name elasticsearch -p 9200:9200 docker.elastic.co/elasticsearch/elasticsearch:5.4.0
Pour Logstash:
/usr/share/logstash/config/logstash.yml
devrait ressembler à ceci -
http.Host: "0.0.0.0"
path.config: /usr/share/logstash/pipeline
# http://111.*.*.11:9200 is the IP & Port of Elasticsearch's server
xpack.monitoring.elasticsearch.url: http://111.*.*.11:9200
# "elastic" is the user name of Elasticsearch's account
xpack.monitoring.elasticsearch.username: elastic
# "changeme" is the password of Elasticsearch's "elastic" user
xpack.monitoring.elasticsearch.password: changeme
Aucun changement dans les autres fichiers de /usr/share/logstash/config/
est requis
/usr/share/logstash/pipeline/logstash.conf
devrait ressembler à ceci -
input {
file {
path => "/usr/share/logstash/test_i.log"
}
}
output {
elasticsearch {
# http://111.*.*.11:9200 is the IP & Port of Elasticsearch's server
hosts => ["http://111.*.*.11:9200"]
# "elastic" is the user name of Elasticsearch's account
user => "elastic"
# "changeme" is the password of Elasticsearch's "elastic" user
password => "changeme"
}
}
Exécutez Logstash en utilisant une commande simple -
Sudo docker run --name logstash --expose 25826 -p 25826:25826 docker.elastic.co/logstash/logstash:5.4.0 --debug
REMARQUE: vous ne devez effectuer aucune configuration avant d'exécuter les conteneurs Docker. Dans un premier temps, exécutez le conteneur à l'aide de commandes simples comme mentionné ci-dessus. Ensuite, allez dans le répertoire correspondant, apportez les modifications requises, enregistrez-le, quittez le conteneur et redémarrez le conteneur, les modifications seront reflétées.
Tout d'abord, vous n'avez pas besoin de créer un index dans ES.
Parce que, vous n'avez pas besoin de créer un "index" dans elasticsearch; lorsque le logstash affecte l'index, l'index sera créé automatiquement.
Par ailleurs, si vous n'avez pas défini la valeur d'index, elle sera définie comme valeur par défaut comme "logstash -% {+ YYYY.MM.dd}"
(vous pouvez vérifier cela dans guide officiel de logstash ) ~
Deuxièmement, vous pouvez ne pas garder votre "type élastique" le même type que votre "type d'entrée"; vous pouvez également écrire votre sortie comme ceci:
output {
stdout { }
elasticsearch{
embedded => false
Host => "192.168.0.23"
port => "9300"
index => "a_new_index"
cluster => "logstash-cluster"
node_name => "logstash"
document_type =>"my-own-type"
}
}
Avec le " type_document ", vous pouvez enregistrer vos journaux dans le type de votre choix ~
Enfin, si vous ne souhaitez pas attribuer le "type_document", il sera défini de la même manière avec votre "type d'entrée"
Ou même vous oubliez d'attribuer le type dans "tout le fichier de configuration"; le type sera défini comme valeur par défaut comme logs ~
OK, profitez-en ~
J'ai eu le même message d'erreur, et il m'a fallu un certain temps pour découvrir dans le journal TRACE du processus de découverte d'Elasticsearch que le journal d'adresses IP utilisé était incorrect.
J'ai eu plusieurs adresses IP et logstash a utilisé la mauvaise. Après cela, tout s'est bien passé.
J'ai un cluster à deux nœuds d'elasticsearch, et un seul pour logstash.
Cette config fonctionne pour moi:
Noeud elk1:
#/etc/elasticsearch/elasticsearch.yml
script.disable_dynamic: true
cluster.name: elk-fibra
node.name: "elk1"
node.master: true
node.data: true
discovery.zen.ping.multicast.enabled: false
discovery.zen.ping.unicast.hosts: ["elk1.lab.fibra"]
root @ elk1:
#/etc/logstash/conf.d/30-lumberjack-output.conf
output {
elasticsearch { Host => localhost protocol => "http" port => "9200" }
stdout { codec => rubydebug }
}
Noeud elk2:
#/etc/elasticsearch/elasticsearch.yml
script.disable_dynamic: true
cluster.name: elk-fibra
node.name: "elk2"
node.master: false
node.data: true
discovery.zen.ping.multicast.enabled: false
discovery.zen.ping.unicast.hosts: ["elk1.lab.fibra"]