Как отследить медленные запросы Elasticsearch?

Мне нужен совет о том, как диагностировать медленные запросы Elasticseach.

Настроить

  • 1 узел кластера в ElasticCloud (1 первичный осколок, 0 реплик). примечание: ElasticCloud = нет замедления. (да, я знаю, у меня должно быть больше узлов... но это просто DEV)
  • Взаимодействие с кластером через мое Azure .NET Web App с использованием библиотеки NEST

Поведение

  • Большинство откликов для моего веб-сервера составляют 50-80мс
  • Все времена запроса в ES (например, взяли) < 5 мс.
  • Сетевая задержка между моим веб-сервером и ElasticCloud составляет около 15 мс

Проблема - Иногда время отклика колеблется между 100-200 мс, но все равно 1 мс. Я был в состоянии повторить это поведение на локальном (с помощью док-станции ElasticSearch).

Вот отрывок из Fiddler, который я захватил, это вызов Elasticsearch из моего приложения:

ClientConnected:            17:28:44.325 
ClientBeginRequest:    17:34:34.953 
GotRequestHeaders:    17:34:34.953 
ClientDoneRequest:    17:34:34.953 
Determine Gateway:    0ms 
DNS Lookup:         0ms 
TCP/IP Connect:            0ms 
HTTPS Handshake:    0ms 
ServerConnected:       17:34:27.538 
FiddlerBeginRequest:    17:34:34.953 
ServerGotRequest:    17:34:34.953 
ServerBeginResponse:    17:34:35.171 
GotResponseHeaders:  17:34:35.171 
ServerDoneResponse:    17:34:35.172 
ClientBeginResponse:  17:34:35.172 
ClientDoneResponse:    17:34:35.178

Итак, выше сказано, что для обработки запроса кластеру Elasticsearch потребовалось 218 мс. Однако это занимает 1 мс.

Как я могу отследить этот медленный запрос? Понятно, что это не скорость запроса (поскольку он занимает мало), поэтому это должно быть что-то в кластере.

Любой совет?

РЕДАКТИРОВАТЬ

Вот некоторые данные из Kibana, во время 15-минутного нагрузочного теста, который я сделал:

Итак... на основании моего анализа noob-ish ничего не выглядит плохо там.

  • Задержка поиска / задержка быстрая (< 5 мс)
  • JVM куча кажется нормально
  • Процессор нормально
  • Нет чрезмерного GC

Но вот что я вижу из своего инструмента нагрузочного тестирования:

Вот статистика из моего инструмента мониторинга перфорации. Вы можете ясно видеть шипы и медленные выбросы:

Не уверен, куда еще идти отсюда? Есть ли какая-то другая метрика, которую я должен искать?

1 ответ

Просто чтобы было понятно, что не входит в took (скопировано из Elastic Discuss):

  • сериализация запроса в JSON на клиенте
  • отправка запроса по сети
  • десериализация запроса из JSON на сервере
  • сериализация ответа в JSON на сервере
  • отправив ответ по сети
  • десериализация ответа от JSON на клиенте

Так как took настолько низок, что, вероятно, нет ничего плохого в самом запросе или ответе. Также все статистические данные, которые вы опубликовали в Elasticsearch, выглядят великолепно. Мне интересно, может ли это быть сеть или что-то в сериализации?

PS: я не думаю, что это правда, вам просто нужно включить его через API, а не через файл конфигурации. Но так как ваш took так низко, что вы не найдете здесь ничего уместного.

примечание: ElasticCloud = нет медленного журнала

Другие вопросы по тегам