Logstash с Elasticsearch
Я пытаюсь подключить Logstash к Elasticsearch, но не могу заставить его работать.
Вот мой logstash conf:
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"
}
}
И я только изменил эти данные в моем 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"]
С этими конфигурациями я не мог подключить Logstash к ES. Может кто-нибудь, пожалуйста, предложите, где я ошибаюсь?
Ответы
Ответ 1
Во-первых, я предлагаю сопоставить ваши атрибуты типа.
На вашем входе у вас есть 2 разных типа, а в вашем выводе есть тип, который не существует ни на одном из ваших входов.
Для тестирования измените свой вывод на:
output {
stdout { }
elasticsearch{
type => "stdin-type"
embedded => false
host => "192.168.0.23"
port => "9300"
cluster => "logstash-cluster"
node_name => "logstash"
}
}
Затем, вы создали индекс в своем ES-экземпляре?
Из руководств, которые я использовал, и моего собственного опыта (у других может быть другой способ, который работает), я всегда использовал индекс, чтобы, когда я что-то вставлял в ES, я могу использовать ES API и быстро проверить, данные вошли или нет.
Еще одно предложение - просто запустить ваш форвардер и индексист Logstash с флагами отладки, чтобы увидеть, что происходит за кулисами.
Можете ли вы подключиться к вашему экземпляру ES на 127.0.0.1? Кроме того, попробуйте поэкспериментировать с портом и хостом. Будучи довольно новым пользователем системы Logstash, я обнаружил, что мое понимание с самого начала противоречило реальности установки. Иногда IP-адрес хоста не так, как вы думаете, а также порт. Если вы хотите проверить свою сеть и определить порты прослушивания и IP-адреса, то вы можете разобраться с этим, в противном случае сделать несколько разумных проб и ошибок.
Я очень рекомендую этот руководство в качестве всеобъемлющей отправной точки. Обе точки, о которых я упоминал, непосредственно затронуты в руководстве. Хотя руководство имеет несколько более сложную отправную точку, идеи и концепции являются исчерпывающими.
Ответ 2
Я не мог подключить Logstash к ES
Это случилось со мной, когда мои версии logstash и elasticsearch не синхронизировались
из документов:
ВЕРСИЯ ПРИМЕЧАНИЕ. В вашем кластере Elasticsearch должен быть запущен Elasticsearch 1.1.1. Если вы используете любую другую версию Elasticsearch, вы должны установить protocol => http
в этом плагине.
Настройка protocol => http
явно, как указано выше, исправила это для меня.
Ответ 3
Как сказал Адам, дело в настройке протокола, поэтому только для тестирования я сделал:
logstash -e 'input { stdin { } } output { elasticsearch { host => localhost protocol => "http" port => "9200" } }'
И это, похоже, работает на OSX. Проблема здесь.
Ответ 4
Далее тестируется
elasticsearch: 5.4.0
и
logstash: 5.4.0
(Я использую контейнер докера в OpenStack)
Для поиска Elasticsearch:
/usr/share/elasticsearch/config/elasticsearch.yml
должен выглядеть следующим образом:
cluster.name: "docker-cluster"
network.host: 0.0.0.0
discovery.zen.minimum_master_nodes: 1
Никаких изменений в других файлах /usr/share/elasticsearch/config/
не требуется
Запуск Elasticsearch с использованием простой команды -
sudo docker run --name elasticsearch -p 9200:9200 docker.elastic.co/elasticsearch/elasticsearch:5.4.0
Для Logstash:
/usr/share/logstash/config/logstash.yml
должен выглядеть следующим образом:
http.host: "0.0.0.0"
path.config: /usr/share/logstash/pipeline
# http://111.*.*.11:9200 is the IP & Port of Elasticsearch server
xpack.monitoring.elasticsearch.url: http://111.*.*.11:9200
# "elastic" is the user name of Elasticsearch account
xpack.monitoring.elasticsearch.username: elastic
# "changeme" is the password of Elasticsearch "elastic" user
xpack.monitoring.elasticsearch.password: changeme
Никаких изменений в других файлах /usr/share/logstash/config/
не требуется
/usr/share/logstash/pipeline/logstash.conf
должен выглядеть следующим образом:
input {
file {
path => "/usr/share/logstash/test_i.log"
}
}
output {
elasticsearch {
# http://111.*.*.11:9200 is the IP & Port of Elasticsearch server
hosts => ["http://111.*.*.11:9200"]
# "elastic" is the user name of Elasticsearch account
user => "elastic"
# "changeme" is the password of Elasticsearch "elastic" user
password => "changeme"
}
}
Запустите Logstash с помощью простой команды -
sudo docker run --name logstash --expose 25826 -p 25826:25826 docker.elastic.co/logstash/logstash:5.4.0 --debug
ПРИМЕЧАНИЕ. Не нужно выполнять какую-либо конфигурацию перед запуском контейнеров Docker. Сначала запустите контейнер, используя простые команды, как указано выше. Затем перейдите в соответствующий каталог, внесите необходимые изменения, сохраните его, выйдите из контейнера и перезапустите контейнер, изменения будут отражены.
Ответ 5
У меня было такое же сообщение об ошибке, и мне потребовалось некоторое время, чтобы обнаружить в журнале TRACE процесс поиска elasticsearch, который использовался для использования logstash в ip-адресе, был неправильным.
У меня было несколько IP-адресов, а logstash использовал неправильный. После этого все прошло хорошо.
Ответ 6
Во-первых, вам не нужно создавать индекс в ES.
Потому что вам дон`т нужно создать "индекс" в elasticsearch, когда логстаст назначит индекс, индекс будет создан автоматически.
Кстати, если вы не установили значение индекса, оно будет установлено как значение по умолчанию как "logstash -% {+ YYYY.MM.dd}"
![введите описание изображения здесь]()
(вы можете проверить это в справочный справочник logstash) ~
Во-вторых, вы можете не сохранить свой "эластичный тип" того же типа, что и ваш "тип ввода", вы также можете написать свой вывод следующим образом:
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"
}
}
С document_type "вы можете сохранить свои журналы в любом типе, который вы хотите ~
Наконец, если вы не хотите назначать "document_type", он будет установлен одинаковым с вашим "типом ввода"
Или даже вы забудете назначить тип во всем "файле конфигурации", тип будет установлен как значение по умолчанию как logs ~
ОК, наслаждайся ~
Ответ 7
У меня есть два node кластера elastisearch и только один для logstatsh.
Эта конфигурация работает для меня:
Node 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"]
корень @elk1:
#/etc/logstash/conf.d/30-lumberjack-output.conf
output {
elasticsearch { host => localhost protocol => "http" port => "9200" }
stdout { codec => rubydebug }
}
Node 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"]