Подтвердить что ты не робот

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. Может кто-нибудь, пожалуйста, предложите, где я ошибаюсь?

4b9b3361

Ответ 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"]