Поиск по сайту:

Как устранить распространенные проблемы со стеком ELK


Введение

Это руководство представляет собой руководство по устранению неполадок стека ELK (Elasticsearch, Logstash, Kibana). Предполагается, что вы следовали руководству How To Install Elasticsearch, Logstash и Kibana (ELK Stack) в Ubuntu 14.04, но оно может быть полезно для устранения неполадок в других общих настройках ELK.

Этот учебник структурирован как ряд распространенных проблем и возможных решений этих проблем, а также шаги, которые помогут вам убедиться, что различные компоненты вашего стека ELK работают правильно. Таким образом, не стесняйтесь переходить к разделам, которые имеют отношение к проблемам, с которыми вы сталкиваетесь.

Проблема: Предупреждение Kibana об отсутствии шаблона индекса по умолчанию

При доступе к Kibana через веб-браузер вы можете увидеть страницу с этим предупреждением:

Kibana warning:
Warning No default index pattern. You must select or create one to continue. ... Unable to fetch mapping. Do you have indices matching the pattern?

Вот скриншот предупреждения:

«Невозможно получить сопоставление» означает, что Elasticsearch не содержит записей, соответствующих шаблону logstash-* по умолчанию. Как правило, это означает, что ваши журналы не сохраняются в Elasticsearch из-за проблем со связью с Logstash. в Elasticsearch и/или от поставщика журналов (например, Filebeat) в Logstash. Другими словами, ваши журналы по какой-то причине не проходят через цепочку от Filebeat до Logstash и Elasticsearch.

Чтобы устранить проблемы со связью между Logstash и Elasticsearch, просмотрите разделы устранения неполадок Filebeat.

Если вы настроили Logstash для использования шаблона индекса не по умолчанию, вы можете решить эту проблему, указав правильный шаблон индекса в текстовом поле.

Проблема: Kibana не может подключиться к Elasticsearch

При доступе к Kibana через веб-браузер вы можете столкнуться со страницей с этой ошибкой:

Kibana error:
Fatal Error Kibana: Unable to connect to Elasticsearch Error: Unable to connect to Elasticsearch Error: Bad Gateway ...

Вот скриншот ошибки:

Это означает, что Kibana не может подключиться к Elasticsearch. Возможно, Elasticsearch не запущен, или Kibana может быть настроена на поиск Elasticsearch на неверном хосте и порту.

Чтобы решить эту проблему, убедитесь, что Elasticsearch запущен, следуя разделам по устранению неполадок Elasticsearch. Затем убедитесь, что Kibana настроена для подключения к хосту и порту, на котором работает Elasticsearch.

Например, если Elasticsearch работает на localhost через порт 9200, убедитесь, что Kibana настроена соответствующим образом.

Откройте файл конфигурации Kibana:

  1. sudo vi /opt/kibana/config/kibana.yml

Затем убедитесь, что elasticsearch_url установлен правильно.

/opt/kibana/config/kibana.yml excerpt:
# The Elasticsearch instance to use for all your queries. elasticsearch_url: "http://localhost:9200"

Сохранить и выйти.

Теперь перезапустите службу Kibana, чтобы применить изменения:

  1. sudo service kibana restart

После перезапуска Kibana откройте Kibana в веб-браузере и убедитесь, что ошибка устранена.

Проблема: Кибана недоступна

Компонент Nginx стека ELK служит обратным прокси-сервером для Kibana. Если Nginx не запущен или настроен неправильно, вы не сможете получить доступ к интерфейсу Kibana. Однако, поскольку остальные компоненты ELK не полагаются на Nginx, они вполне могут работать нормально.

Причина: Nginx не работает

Если Nginx не запущен и вы пытаетесь получить доступ к стеку ELK в веб-браузере, вы можете увидеть ошибку, подобную этой:

Nginx Error:
This webpage is not available ERR_CONNECTION_REFUSED

Обычно это указывает на то, что Nginx не запущен.

Вы можете проверить статус службы Nginx с помощью этой команды:

  1. sudo service nginx status

Если он сообщает, что служба не запущена или не распознана, устраните проблему, следуя инструкциям в разделе «Установка Nginx» руководства по стеку ELK. Если он сообщает, что служба запущена, вам необходимо перенастроить Nginx, следуя тем же инструкциям.

Причина: Nginx работает, но не может подключиться к Kibana

Если Kibana недоступна и вы получаете сообщение об ошибке 502 Bad Gateway, Nginx работает, но не может подключиться к Kibana.

Первый шаг к решению этой проблемы — проверить, работает ли Kibana с помощью этой команды:

  1. sudo service kibana status

Если Kibana не запущена или не распознана, следуйте инструкциям раздела «Установка Kibana» руководства по стеку ELK.

Если это не решит проблему, возможно, у вас проблема с конфигурацией Nginx. Вам следует просмотреть часть конфигурации раздела «Установка Nginx» руководства по стеку ELK. Вы можете проверить журналы ошибок Nginx на наличие подсказок:

  1. sudo tail /var/log/nginx/error.log

Это должно точно сказать вам, почему Nginx не может подключиться к Kibana.

Причина: Невозможно аутентифицировать пользователя

Если у вас включена базовая аутентификация и у вас возникли проблемы с прохождением этапа аутентификации, вам следует просмотреть журналы ошибок Nginx, чтобы определить специфику проблемы.

Чтобы просмотреть последние ошибки Nginx, используйте эту команду:

  1. sudo tail /var/log/nginx/error.log

Если вы видите ошибку пользователь не найден, пользователь не существует в файле htpasswd. На этот тип ошибки указывает следующая запись в журнале:

Nginx error logs (user was not found):
2015/10/26 12:11:57 [error] 3933#0: *242 user "NonExistentUser" was not found in "/etc/nginx/htpasswd.users", client: 108.60.145.130, server: example.com, request: "GET / HTTP/1.1", host: "45.55.252.231"

Если вы видите ошибку несоответствие пароля, пользователь существует, но вы указали неверный пароль. На этот тип ошибки указывает следующая запись в журнале:

Nginx error logs (user password mismatch):
2015/10/26 12:12:56 [error] 3933#0: *242 user "kibanaadmin": password mismatch, client: 108.60.145.130, server: example.com, request: "GET / HTTP/1.1", host: "45.55.252.231"

Решение этих двух ошибок заключается в том, чтобы либо указать правильную информацию для входа, либо изменить существующий файл htpasswd, указав учетные записи пользователей, которые, как вы ожидаете, существуют. Например, чтобы создать или перезаписать пользователя с именем kibanaadmin в файле htpasswd.users, используйте следующую команду:

  1. sudo htpasswd /etc/nginx/htpasswd.users kibanaadmin

Затем введите желаемый пароль и подтвердите его.

Если вы видите ошибку Нет такого файла или каталога, файл htpasswd, указанный в конфигурации Nginx, не существует. На этот тип ошибки указывает следующая запись в журнале:

Nginx error logs (htpasswd file does not exist):
2015/10/26 12:17:38 [error] 3933#0: *266 open() "/etc/nginx/htpasswd.users" failed (2: No such file or directory), client: 108.60.145.130, server: example.com, request: "GET / HTTP/1.1", host: "45.55.252.231"

Здесь вы должны создать новый файл /etc/nginx/htpasswd.users и добавить в него пользователя (kibanaadmin в этом примере) с помощью этой команды:

sudo htpasswd -c /etc/nginx/htpasswd.users kibanaadmin

Введите новый пароль и подтвердите его.

Теперь попробуйте пройти аутентификацию в качестве пользователя, которого вы только что создали.

Logstash: как проверить, работает ли он

Если Logstash не запущен, вы не сможете получать и анализировать журналы от поставщиков журналов, таких как Filebeat, и сохранять обработанные журналы в Elasticsearch. В этом разделе показано, как проверить, нормально ли работает Logstash.

Убедитесь, что служба работает

Самое основное, что нужно проверить, — это статус состояния Logstash:

  1. sudo service logstash status

Если Logstash запущен, вы увидите такой вывод:

Logstash status (OK):
logstash is running

В противном случае, если служба не запущена, вы увидите это сообщение:

Logstash status (Bad):
logstash is not running

Если Logstash не запущен, попробуйте запустить его с помощью этой команды:

  1. sudo service logstash start

Затем снова проверьте его статус через несколько секунд. Logstash — это Java-приложение, и оно будет сообщать о том, что оно «работает» в течение нескольких секунд после каждой попытки запуска, поэтому важно подождать несколько секунд, прежде чем проверять статус «не работает». Если он сообщает, что «не работает», он, вероятно, неправильно настроен. Следующие два раздела посвящены устранению распространенных проблем с Logstash.

Проблема: Logstash не работает

Если Logstash не работает, есть несколько возможных причин. В этом разделе будут рассмотрены различные распространенные случаи, когда Logstash не запускается, и предложены возможные решения.

Причина. Конфигурация содержит синтаксическую ошибку.

Если в файлах конфигурации Logstash есть ошибки, расположенные в каталоге /etc/logstash/conf.d, служба не сможет запуститься должным образом. Лучше всего проверить журналы Logstash, чтобы понять, почему он не работает.

Откройте два терминальных сеанса на своем сервере, чтобы вы могли просматривать журналы Logstash при попытке запустить службу.

В первой терминальной сессии посмотрим логи:

  1. tail -f /var/log/logstash/logstash.log

Это отобразит последние несколько записей журнала, а также любые будущие записи журнала.

Во второй терминальной сессии попробуйте запустить службу Logstash:

  1. sudo service logstash start

Вернитесь к первому сеансу терминала, чтобы просмотреть журналы, которые генерируются при запуске Logstash.

Если вы видите записи журнала, содержащие сообщения об ошибках, попробуйте прочитать сообщения, чтобы выяснить, что происходит не так. Вот пример журналов ошибок, которые вы можете увидеть, если в конфигурации Logstash есть синтаксическая ошибка (несоответствие фигурных скобок):

Logstash logs (Syntax error):
... {:timestamp=>"2015-10-28T11:51:09.205000-0400", :message=>"Error: Expected one of #, => at line 12, column 6 (byte 209) after input {\n lumberjack {\n port => 5043\n type => \"logs\"\n ssl_certificate => \"/etc/pki/tls/certs/logstash-forwarder.crt\"\n ssl_key => \"/etc/pki/tls/private/logstash-forwarder.key\"\n \n}\n\n\nfilter {\n if "} {:timestamp=>"2015-10-28T11:51:09.228000-0400", :message=>"You may be interested in the '--configtest' flag which you can\nuse to validate logstash's configuration before you choose\nto restart a running system."}

Последнее сообщение о том, что нам может быть интересно проверить конфигурацию, указывает на то, что конфигурация содержит синтаксическую ошибку. Предыдущее сообщение предоставляет более конкретное сообщение об ошибке, в данном случае о том, что в разделе конфигурации input отсутствует закрывающая фигурная скобка. Чтобы решить эту проблему, отредактируйте проблемную часть конфигурации Logstash:

  1. sudo vi /etc/logstash/conf.d/01-lumberjack-input.conf

Найдите строку с неправильной записью и исправьте ее, затем сохраните и выйдите.

Теперь на втором терминале запустите службу Logstash:

  1. sudo service logstash start

Если проблема решена, новых записей в журнале быть не должно (Logstash не регистрирует успешный запуск). Через несколько секунд проверьте состояние службы Logstash:

  1. sudo service logstash status

Если он работает, вы решили проблему.

У вас может быть другая проблема с конфигурацией, чем в нашем примере. Мы рассмотрим несколько других распространенных проблем с конфигурацией Logstash. Как всегда, если вы можете понять, что означает ошибка, попробуйте исправить ее самостоятельно.

Причина: файлы SSL не существуют

Другой распространенной причиной того, что Logstash не запускается, является проблема с SSL-сертификатом и файлами ключей. Например, если они не существуют там, где они указаны в вашей конфигурации Logstash, в ваших журналах будет отображаться такая ошибка:

Logstash logs (SSL key file does not exist):
{:timestamp=>"2017-12-01T16:51:31.656000+0000", :message=>"Invalid setting for beats input plugin:\n\n input {\n beats {\n # This setting must be a path\n # File does not exist or cannot be opened /etc/pki/tls/certs/logstash-forwarder.crt\n ssl_certificate => \"/etc/pki/tls/certs/logstash-forwarder.crt\"\n ...\n }\n }", :level=>:error} {:timestamp=>"2017-12-01T16:51:31.671000+0000", :message=>"Invalid setting for beats input plugin:\n\n input {\n beats {\n # This setting must be a path\n # File does not exist or cannot be opened /etc/pki/tls/private/logstash-forwarder.key\n ssl_key => \"/etc/pki/tls/private/logstash-forwarder.key\"\n ...\n }\n }", :level=>:error} {:timestamp=>"2017-12-01T16:51:31.685000+0000", :message=>"Error: Something is wrong with your configuration.", :level=>:error}

Чтобы решить эту конкретную проблему, вам нужно убедиться, что у вас есть файл ключа SSL (сгенерируйте его, если вы забыли), и что он находится в правильном месте (/etc/pki/tls/private/logstash -forwarder.key в примере). Если у вас уже есть файл ключа, обязательно переместите его в нужное место и убедитесь, что конфигурация Logstash указывает на него.

Теперь запустите службу Logstash:

  1. sudo service logstash start

Если проблема решена, новых записей в журнале быть не должно. Через несколько секунд проверьте состояние службы Logstash:

  1. sudo service logstash status

Если он работает, вы решили проблему.

Проблема: Logstash работает, но не сохраняет журналы в Elasticsearch

Если Logstash работает, но не сохраняет журналы в Elasticsearch, это связано с тем, что он не может получить доступ к Elasticsearch. Как правило, это результат того, что Elasticsearch не запущен. В этом случае журналы Logstash будут отображать сообщения об ошибках, подобные этому:

Logstash logs (Elasticsearch isn't running):
{:timestamp=>"2017-12-01T16:53:29.571000+0000", :message=>"Connection refused (Connection refused)", :class=>"Manticore::SocketException", :backtrace=>[ruby-backtrace-info-here], :level=>:error}

В этом случае убедитесь, что Elasticsearch запущен, следуя инструкциям по устранению неполадок Elasticsearch.

Вы также можете увидеть такие ошибки:

Logstash logs (Logstash is configured to send its output to the wrong host):
{:timestamp=>"2017-12-01T16:56:26.274000+0000", :message=>"Attempted to send a bulk request to Elasticsearch configured at '[\"http://localhost:9200/\"]', but Elasticsearch appears to be unreachable or down!", :error_message=>"Connection refused (Connection refused)", :class=>"Manticore::SocketException", :client_config=>{:hosts=>["http://localhost:9200/"], :ssl=>nil, :transport_options=>{:socket_timeout=>0, :request_timeout=>0, :proxy=>nil, :ssl=>{}}, :transport_class=>Elasticsearch::Transport::Transport::HTTP::Manticore, :logger=>nil, :tracer=>nil, :reload_connections=>false, :retry_on_failure=>false, :reload_on_failure=>false, :randomize_hosts=>false}, :level=>:error} {:timestamp=>"2017-12-01T16:57:49.090000+0000", :message=>"SIGTERM received. Shutting down the pipeline.", :level=>:warn}

Это указывает на то, что раздел output вашей конфигурации Logstash может указывать на неправильный хост. Чтобы решить эту проблему, убедитесь, что Elasticsearch запущен, и проверьте конфигурацию Logstash:

  1. sudo vi /etc/logstash/conf.d/30-elasticsearch-output.conf

Убедитесь, что строка hosts => [localhost:9200] указывает на хост, на котором работает Elasticsearch.

Logstash output configuration excerpt
output { elasticsearch { hosts => ["localhost:9200"] sniffing => true . . .

Сохранить и выйти. В этом примере предполагается, что Elasticsearch работает на localhost.

Перезапустите службу Logstash.

  1. sudo service logstash restart

Затем проверьте журналы Logstash на наличие ошибок.

Filebeat: как проверить, работает ли он

Filebeat работает на ваших клиентских машинах и отправляет журналы на ваш сервер ELK. Если Filebeat не запущен, вы не сможете отправлять различные журналы в Logstash. В результате журналы не будут храниться в Elasticsearch и не будут отображаться в Kibana. В этом разделе показано, как проверить, нормально ли работает Filebeat.

Убедитесь, что журналы успешно отправлены

Самый простой способ узнать, правильно ли Filebeat отправляет журналы в Logstash, — проверить наличие ошибок Filebeat в журнале системного журнала.

  1. sudo tail /var/log/syslog | grep filebeat

Если все настроено правильно, вы должны увидеть некоторые записи в журнале при остановке или запуске процесса Filebeat, но больше ничего.

Если вы не видите никаких записей в журнале, вам следует убедиться, что Filebeat запущен.

Убедитесь, что служба работает

Самое основное, что нужно проверить, — это статус Filebeat:

  1. sudo service filebeat status

Если Filebeat запущен, вы увидите такой вывод:

Output
* filebeat is running

В противном случае, если служба не запущена, вы увидите это сообщение:

Output
* filebeat is not running

Если Filebeat не запущен, попробуйте запустить его с помощью этой команды:

  1. sudo service filebeat start

Затем снова проверьте статус. Если это не решит проблему, следующие разделы помогут вам устранить проблемы с Filebeat. Мы рассмотрим распространенные проблемы с Filebeat и способы их решения.

Проблема: Filebeat не запущен

Если Filebeat не запущен на вашем клиентском компьютере, есть несколько возможных причин. В этом разделе будут рассмотрены различные распространенные случаи, когда Filebeat не запускается, и предложены возможные решения.

Причина. Конфигурация содержит синтаксическую ошибку.

Если Filebeat содержит ошибки в файле конфигурации, расположенном по адресу /etc/filebeat/filebeat.yml, служба не сможет нормально запуститься. Он немедленно завершится с ошибками, подобными следующим:

Output
Loading config file error: YAML config parsing failed on /etc/filebeat/filebeat.yml: yaml: line 13: could not find expected ':'. Exiting.

В данном случае в конфигурационном файле опечатка. Чтобы решить эту проблему, отредактируйте проблемную часть конфигурации Filebeat. Руководство см. в подразделе «Настройка Filebeat» раздела «Настройка Filebeat (добавление клиентских серверов))» руководства по стеку ELK.

После редактирования конфигурации Filebeat попробуйте снова запустить службу:

  1. sudo service filebeat start

Если вы не видите сообщения об ошибке, проблема решена.

Причина: SSL-сертификат отсутствует или недействителен

Для связи между Filebeat и Logstash требуется сертификат SSL для аутентификации и шифрования. Если Filebeat не запускается должным образом, проверьте системный журнал на наличие ошибок, подобных следующим:

Output
Error Initialising publisher: open /etc/pki/tls/certs/logstash-forwarder.crt: no such file or directory

Это указывает на то, что файл logstash-forwarder.crt находится не в соответствующем месте. Чтобы решить эту проблему, скопируйте сертификат SSL с сервера ELK на свой клиентский компьютер, следуя соответствующим подразделам раздела «Настройка Filebeat (добавление клиентских серверов)» руководства по стеку ELK.

Поместив соответствующий файл сертификата SSL в нужное место, попробуйте снова запустить Filebeat.

Если сертификат SSL недействителен, журналы должны выглядеть следующим образом:

syslog (Certificate is invalid):
transport.go:125: SSL client failed to connect with: x509: certificate signed by unknown authority (possibly because of "crypto/rsa: verification error" while trying to verify candidate authority certificate "elk.example.com")

Обратите внимание, что сообщение об ошибке указывает на то, что сертификат существует, но недействителен. В этом случае вам необходимо выполнить настройку Filebeat (Добавить клиентские серверы)).

Убедившись, что сертификат действителен и находится в нужном месте, вам нужно будет перезапустить Logstash (на сервере ELK), чтобы заставить его использовать новый ключ SSL:

  1. sudo service logstash restart

Затем запустите Filebeat (на клиентской машине):

  1. sudo service filebeat start

Проверьте журналы еще раз, чтобы убедиться, что проблема решена.

Проблема: Filebeat не может подключиться к Logstash

Если Logstash (на сервере ELK) недоступен для Filebeat (ваш клиентский сервер), вы увидите такие записи в журнале ошибок:

syslog (Connection refused):
transport.go:125: SSL client failed to connect with: dial tcp 203.0.113.4:5044: getsockopt: connection refused

Общие причины, по которым Logstash недоступен, включают следующее:

  • Logstash не запущен (на сервере ELK)
  • Брандмауэры на обоих серверах блокируют соединение через порт 5043
  • В Filebeat не указан правильный IP-адрес, имя хоста или порт

Чтобы решить эту проблему, сначала убедитесь, что Logstash работает на сервере ELK, следуя разделам по устранению неполадок Logstash в этом руководстве. Во-вторых, убедитесь, что брандмауэр не блокирует сетевой трафик. В-третьих, убедитесь, что Filebeat настроен с правильным IP-адресом (или именем хоста) и портом сервера ELK.

Конфигурацию Filebeat можно отредактировать с помощью этой команды:

  1. sudo vi /etc/filebeat/filebeat.yml

Убедившись, что информация о соединении с Logstash верна, попробуйте перезапустить Filebeat:

sudo service filebeat restart

Еще раз проверьте журналы Filebeat, чтобы убедиться, что проблема решена.

Общие рекомендации по Filebeat см. в подразделе «Настройка Filebeat» руководства «Настройка Filebeat (добавление клиентских серверов)» руководства по стеку ELK.

Elasticsearch: как проверить, работает ли он

Если Elasticsearch не запущен, ни один из ваших ELK-стеков не будет работать. Logstash не сможет добавлять новые журналы в Elasticsearch, а Kibana не сможет извлекать журналы из Elasticsearch для составления отчетов. В этом разделе показано, как проверить, нормально ли работает Elasticsearch.

Убедитесь, что служба работает

Самое основное, что нужно проверить, — это статус службы Elasticsearch:

  1. sudo service elasticsearch status

Если Elasticsearch запущен, вы увидите такой вывод:

Elasticsearch status (OK):
* elasticsearch is running

В противном случае, если служба не запущена, вы увидите это сообщение:

Elasticsearch status (Bad):
* elasticsearch is not running

В этом случае вам следует следовать следующим нескольким разделам, посвященным устранению неполадок Elasticsearch.

Убедитесь, что он отвечает на HTTP-запросы

По умолчанию Elasticsearch отвечает на HTTP-запросы через порт 9200 (это можно настроить в файле конфигурации, указав новое значение http.port). Мы можем использовать curl для отправки запросов и получения полезной информации из Elasticsearch.

Отправьте HTTP-запрос GET с помощью curl с помощью этой команды (при условии, что ваш Elasticsearch доступен по адресу localhost):

  1. curl localhost:9200

Если Elasticsearch запущен, вы должны увидеть примерно такой ответ:

Output
{ "name" : "Hildegarde", "cluster_name" : "elasticsearch", "cluster_uuid" : "E8q9kr-0RxycYhSLNx8xeA", "version" : { "number" : "2.4.6", "build_hash" : "5376dca9f70f3abef96a77f4bb22720ace8240fd", "build_timestamp" : "2017-07-18T12:17:44Z", "build_snapshot" : false, "lucene_version" : "5.5.4" }, "tagline" : "You Know, for Search" }

Вы также можете проверить работоспособность вашего кластера Elasticsearch с помощью этой команды:

curl localhost:9200/_cluster/health?pretty

Ваш вывод должен выглядеть примерно так:

Output
{ "cluster_name" : "elasticsearch", "status" : "yellow", "timed_out" : false, "number_of_nodes" : 1, "number_of_data_nodes" : 1, "active_primary_shards" : 6, "active_shards" : 6, "relocating_shards" : 0, "initializing_shards" : 0, "unassigned_shards" : 6, "delayed_unassigned_shards" : 0, "number_of_pending_tasks" : 0, "number_of_in_flight_fetch" : 0, "task_max_waiting_in_queue_millis" : 0, "active_shards_percent_as_number" : 50.0 }

Обратите внимание: если ваш кластер Elasticsearch состоит из одного узла, ваш кластер, вероятно, будет иметь статус желтый. Это нормально для кластера с одним узлом; вы можете перейти на зеленый статус, добавив хотя бы еще один узел в свой кластер Elasticsearch.

Проблема: Elasticsearch не запущен

Если Elasticsearch не запущен, существует множество возможных причин. В этом разделе будут рассмотрены различные распространенные случаи, когда Elasticsearch не запускается, и предложены возможные решения.

Причина: он так и не был запущен

Если Elasticsearch не запущен, возможно, он вообще не был запущен; Elasticsearch не запускается автоматически после установки. Решение этой проблемы состоит в том, чтобы вручную запустить его в первый раз:

  1. sudo service elasticsearch start

Это должно сообщить, что Elasticsearch запускается. Подождите около 10 секунд, затем снова проверьте статус Elasticsearch.

Причина: служба Elasticsearch не была включена, и сервер перезагрузился.

Если Elasticsearch работал нормально, но больше не работает, возможно, он не включен должным образом. По умолчанию служба Elasticsearch не запускается при загрузке, вы должны явно включить автоматический запуск Elasticsearch при загрузке:

  1. sudo update-rc.d elasticsearch defaults 95 10

Elasticsearch теперь должен автоматически запускаться при загрузке. Проверьте, работает ли он, перезагрузив сервер.

Причина: Elasticsearch настроен неправильно

Если в файле конфигурации Elasticsearch, расположенном по адресу /etc/elasticsearch/elasticsearch.yml, есть ошибки, служба не сможет нормально запуститься. Лучше всего проверить журналы ошибок Elasticsearch, чтобы понять, почему он не работает.

Откройте два терминальных сеанса на своем сервере, чтобы вы могли просматривать журналы Elasticsearch при попытке запустить службу.

В первой терминальной сессии посмотрим логи:

  1. tail -f /var/log/elasticsearch/elasticsearch.log

Это отобразит последние несколько записей журнала, а также любые будущие записи журнала.

Во второй терминальной сессии попробуйте запустить службу Elasticsearch:

  1. sudo service elasticsearch start

Вернитесь к первому сеансу терминала, чтобы просмотреть журналы, которые создаются при запуске Elasticsearch.

Если вы видите записи журнала, указывающие на ошибки или исключения (например, ERROR, Exception или error), попробуйте найти строку, которая указывает, что вызвало Ошибка. Вот пример журналов ошибок, которые вы увидите, если для network.host Elasticsearch задано имя хоста или IP-адрес, которые не могут быть разрешены:

Elasticsearch logs (Bad):
... [2015-10-27 15:24:43,495][INFO ][node ] [Shadrac] starting ... [2015-10-27 15:24:43,626][ERROR][bootstrap ] [Shadrac] Exception org.elasticsearch.transport.BindTransportException: Failed to resolve host [null] at org.elasticsearch.transport.netty.NettyTransport.bindServerBootstrap(NettyTransport.java:402) at org.elasticsearch.transport.netty.NettyTransport.doStart(NettyTransport.java:283) at org.elasticsearch.common.component.AbstractLifecycleComponent.start(AbstractLifecycleComponent.java:85) at org.elasticsearch.transport.TransportService.doStart(TransportService.java:153) at org.elasticsearch.common.component.AbstractLifecycleComponent.start(AbstractLifecycleComponent.java:85) at org.elasticsearch.node.internal.InternalNode.start(InternalNode.java:257) at org.elasticsearch.bootstrap.Bootstrap.start(Bootstrap.java:160) at org.elasticsearch.bootstrap.Bootstrap.main(Bootstrap.java:248) at org.elasticsearch.bootstrap.Elasticsearch.main(Elasticsearch.java:32) Caused by: java.net.UnknownHostException: incorrect_hostname: unknown error ...

Обратите внимание, что в последней строке примеров журналов указано, что произошла ошибка UnknownHostException: incorrect_hostname. Этот конкретный пример показывает, что для network.host задано значение incorrect_hostname, которое ни к чему не приводит. В настройке Elasticsearch с одним узлом это должно быть установлено как localhost или 127.0.0.1.

Чтобы решить эту проблему, отредактируйте файл конфигурации Elasticsearch:

  1. sudo vi /etc/elasticsearch/elasticsearch.yml

Найдите строку с неверной записью и исправьте ее. В случае с примером мы должны найти строку, в которой указано network.host: некорректное_имя_хоста, и изменить ее так, чтобы она выглядела следующим образом:

...
network.host: localhost
...

Сохранить и выйти.

Теперь на втором терминале запустите службу Elasticsearch:

  1. sudo service elasticsearch start

Если проблема была решена, вы должны увидеть журналы без ошибок, указывающие на то, что Elasticsearch запущен. Это может выглядеть примерно так:

Elasticsearch logs (Good):
... [2015-10-27 15:29:21,980][INFO ][node ] [Garrison Kane] initializing ... [2015-10-27 15:29:22,084][INFO ][plugins ] [Garrison Kane] loaded [], sites [] [2015-10-27 15:29:22,124][INFO ][env ] [Garrison Kane] using [1] data paths, mounts [[/ (/dev/vda1)]], net usable_space [52.1gb], net total_space [58.9gb], types [ext4] [2015-10-27 15:29:24,532][INFO ][node ] [Garrison Kane] initialized [2015-10-27 15:29:24,533][INFO ][node ] [Garrison Kane] starting ... [2015-10-27 15:29:24,646][INFO ][transport ] [Garrison Kane] bound_address {inet[/127.0.0.1:9300]}, publish_address {inet[localhost/127.0.0.1:9300]} [2015-10-27 15:29:24,682][INFO ][discovery ] [Garrison Kane] elasticsearch/WJvkRFnbQ5mLTgOatk0afQ [2015-10-27 15:29:28,460][INFO ][cluster.service ] [Garrison Kane] new_master [Garrison Kane][WJvkRFnbQ5mLTgOatk0afQ][elk-run][inet[localhost/127.0.0.1:9300]], reason: zen-disco-join (elected_as_master) [2015-10-27 15:29:28,561][INFO ][http ] [Garrison Kane] bound_address {inet[/127.0.0.1:9200]}, publish_address {inet[localhost/127.0.0.1:9200]} [2015-10-27 15:29:28,562][INFO ][node ] [Garrison Kane] started ...

Теперь, если вы проверите статус Elasticsearch, вы должны увидеть, что он работает нормально.

У вас может быть другая проблема с конфигурацией, чем в нашем примере. Если вы можете понять, что означает ошибка, попробуйте исправить ее самостоятельно. Если это не помогло, попробуйте поискать в Интернете отдельные строки ошибок, не содержащие информацию, относящуюся к вашему серверу (например, IP-адрес или автоматически сгенерированное имя узла Elasticsearch).

Заключение

Надеемся, что это руководство по устранению неполадок помогло вам решить любые проблемы, с которыми вы столкнулись при настройке стека ELK. Если у вас есть какие-либо вопросы или предложения, оставьте их в комментариях ниже!