Как отследить медленные запросы 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 = нет медленного журнала