ElasticSearch исчезает/сбой - не удается найти файлы журналов или любую другую информацию

Я запускаю ElasticSearch на своих серверах EC2. У меня возникли проблемы с пониманием регистрации/отладки ElasticSearch.

Иногда сервис исчезает, после того как он работает отлично в течение нескольких дней (я ожидаю, что он сбой). Например:

# curl -XGET http://localhost:9200/
curl: (7) couldn't connect to host

Per эта страница ElasticSearch, я ожидал, что мои журналы будут доступны в /var/log/elasticsearch... однако...

# ls /var/data/elasticsearch
ls: /var/data/elasticsearch: No such file or directory

Я никоим образом не изменил файл /config/logging.yml. ElasticSearch работает от имени root, поэтому проблем с разрешениями не должно быть.

Что мне не хватает?


В ответ на imotov я нашел файлы журнала в /root/elasticsearch/elasticsearch-0.20.5/logs... но, как он и предсказывал, они были очень бесполезны.

Я проверил версию Java:

java version "1.6.0_14"
Java(TM) SE Runtime Environment (build 1.6.0_14-b08)
Java HotSpot(TM) 64-Bit Server VM (build 14.0-b16, mixed mode)

Похоже, что это очень старая версия, и я работаю над ее обновлением.

Я также посмотрел на график памяти

enter image description here

Мы можем видеть, что был странный шип только перед тем, как ES умер. Здесь я пытаюсь найти источник. Единственный другой процесс должен быть node; они ограничены 4 ГБ и 1,2 ГБ соответственно (после того, как ES умер и только node осталось, ОЗУ упала до 1,2 ГБ, как вы можете видеть). Таким образом, либо ElasticSearch превысил 4Gb, либо что-то еще вызвало всплеск памяти...

FWIW, я использую экземпляры m1.large(оперативная память 8 ГБ).

Ответ 1

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

curl -s "localhost:9200/_nodes/_local/settings?pretty=true" | fgrep path.logs

Но если внезапно исчезнет поиск elastics, скорее всего вы ничего не найдете в этих журналах. Если вы используете более старую версию java (год или более), вполне возможно, что ваш java-процесс рушится. Когда это происходит, JVM обычно оставляет файлы с именем hs_err_pidXXXX.log на вашем жестком диске (обычно в /tmp/ на Linux. Посмотрите, можете ли вы найти их и попробовать обновить Java до последней версии.

Вторая возможная причина внезапного исчезновения elasticsearch - oom-killer. Это процесс, который запускает и убивает самый большой процесс (elasticsearch в вашем случае), когда в системе заканчивается память. Проверьте syslog и kern.log в то время, когда elasticsearch в последний раз исчез. Если вы видите такие сообщения, как этот

Out of memory: Kill process 1234 (java) score 567 or sacrifice child

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

Ответ 2

У меня были такие же проблемы:

  • Обновленный JAVA не помог
  • Перемещение с openJDK на оракул ничего не изменило
  • Потребление памяти наконец-то ОК
  • Нет сообщений об ошибках в любом месте, только случайно сбой JVM

Моим решением было удалить sigar lib:

cd    
sudo mv /usr/share/elasticsearch/lib/sigar .
sudo service elasticsearch restart

Так как все идет гладко, единственное влияние: я потерял контроль над процессором. ElasticSearch 1.5.1 работает на VPS с Ubuntu 14.04 (OpenVZ).

ОБНОВЛЕНИЕ 1: Мне все еще нужно удалить sigar lib с помощью elasticsearch 1.5.2

ОБНОВЛЕНИЕ 2: чтобы выяснить, добавьте эти параметры при запуске elasticsearch:

-XX:. HeapDumpPath =/java_pid.hprof

Путь к каталогу или имени файла для кучи кучи. Управляемость.

-XX: -HeapDumpOnOutOfMemoryError

Куча дампа для файла при вызове java.lang.OutOfMemoryError.

Помогает для отладки