Вопрос или проблема
Настройка
Сначала я развернул стек TIG (Telegraf, InfluxDB и Grafana) на сервере Linux, где он работал как ожидалось. Недавно я развернул его на OKD (OpenShift upstream). У меня есть несколько панелей мониторинга, каждая из которых работает, когда диапазон времени достаточно мал и данные могут загружаться ‘мгновенно’.
Проблема
Но когда я указываю диапазон времени более часа, я начинаю видеть, как POST-запросы блокируются браузером из вкладки сети инструмента разработчика. Это поведение наблюдается в нескольких браузерах (Firefox, Edge и Chrome).
POST-запросы блокируются почти сразу после отправки и не завершаются с тайм-аутом. В Firefox я вижу ошибку NS_BINDING_ABORTED. Панель мониторинга Grafana продолжает отправлять запрос без успеха (как видно на скриншоте инструмента проверки ниже).
Через минуту или две эти POST-запросы неожиданно начинают успешно обрабатываться. Я не смог понять, что вызывает эту проблему.
Я скопировал тело запроса и заголовки этих запросов в Postman и попытался отправить оттуда, что сработало безупречно, что заставило меня думать, что это может не быть проблемой Grafana или балансировщика нагрузки. Чтобы дополнительно изолировать балансировщик нагрузки, я вывел Grafana на сервис nodeport, чтобы получить к ней доступ вне балансировщика нагрузки, и получил такое же поведение.
Чтобы проверить, является ли это проблемой InfluxDB, я запустил запросы, указанные в теле запроса, прямо внутри пода InfluxDB, и получил соответствующий вывод.
Некоторые посты в интернете предполагают, что файрволы могут вызывать эти проблемы, но у меня нет установленного файрвола. Клиентский запрос идет к балансировщику нагрузки, который перенаправляет его на один из серверов OKD.
Еще один пост предполагал, что передача HTTP-трафика в HTTPS-соединение может быть причиной этого. У меня есть самоподписанные сертификаты для HTTPS-соединений, так что может ли это быть проблемой? Пока что я не нашел никаких доказательств, подтверждающих это в моей проблеме. Чтобы исключить эту проблему, я создал HTTP/небезопасный маршрут и получил такое же поведение, что заставило меня подумать, что это тоже может не быть проблемой.
Мне кажется, что это какая-то проблема настройки, которая могла бы решить проблему для браузера. Пожалуйста, дайте знать, как я могу дальше исследовать эту проблему, так как я потратил значительное время на это без успеха.
Ответ или решение
Анализ проблемы: Запросы Grafana Dashboard работают в curl/Postman, но не работают в браузере
1. Контекст и описание настройки
Ваше текущее окружение, состоящее из стека TIG (Telegraf, InfluxDB, Grafana), было успешно развернуто на Linux-сервере, но, после перехода на OpenShift (OKD), вы столкнулись с проблемами при работе с панелями управления Grafana. Наиболее заметными проблемами являются блокировка POST-запросов браузерами при указании временного диапазона более одного часа. Запросы работают нормально при использовании curl или Postman, что указывает на то, что проблема может быть связана с конфигурацией или поведением браузеров, а не с самой Grafana или сервером.
2. Диагностика проблемы
Вы привели несколько важных аргументов, которые помогают сузить круг поиска причины:
- Ошибка NS_BINDING_ABORTED в Firefox может указывать на то, что запросы блокируются браузером или тем, как они оформлены на стороне клиента.
- Неправильные настройки для HTTPS, особенно если вы используете самоподписанные сертификаты, могут вызывать проблемы с безопасностью, но вы уже проверили это, создав HTTP-маршрут.
- Производительность и зависания сети также могут быть фактором, особенно если браузеры продолжают отправлять запросы, а ответ приходит с задержкой или не приходит вовсе.
3. Возможные причины и решения
-
Проблемы с конфигурацией OpenShift:
- Убедитесь, что конфигурация вашего сервиса в OpenShift правильно настроена для работы с Grafana. Неправильные параметры, такие как тайм-ауты, могут привести к блоку длинных запросов.
-
Таймауты браузера:
- Некоторые браузеры имеют ограничения на время ожидания ответов от серверов. Попробуйте увеличить таймауты на уровне вашей реализации. Это можно сделать через настройки сервера или настройки самой Grafana.
-
Задержки сети:
- Вам следует проанализировать сетевой трафик между браузером и сервером, используя инструменты для отслеживания этих данных. Это позволит выявить проблемы с задержками или потерей пакетов, которые могут возникать в вашей сети.
-
Deferred обрабатываемые запросы:
- Время ожидания, при котором запросы не обрабатываются, может быть связано с нагрузкой на сервер или с тем, что Grafana не в состоянии возвращать данные быстро. Обратите внимание на производительность вашего сервера на OpenShift и смотрите на использование ресурсов (CPU, память).
-
Настройки прокси/балансировки нагрузки:
- Если у вас есть прокси или балансировщик нагрузки, проверьте их настройки, поскольку они могут блокировать большие запросы или неправильно обрабатывать длинные соединения.
-
Оптимизация запросов:
- Убедитесь, что запросы, отправляемые в Grafana, оптимизированы. Постарайтесь сократить объем загружаемых данных или измените параметры временного диапазона, чтобы разделить запросы на меньшие части.
-
Альтернативные браузеры и версии:
- Проверьте, существует ли такая же проблема в других браузерах или версиях. Иногда обновление браузера или использование различных версий может привести к улучшению ситуации.
4. Заключение
Тщательное наблюдение за сетевыми запросами и оптимизация параметров вашего окружения помогут выявить природу проблемы. На данный момент, основное внимание стоит уделить конфигурации OpenShift, сетевым задержкам и производительности серверов. Если ни одно из решений не поможет, возможно, стоит обратиться за поддержкой в сообщество OpenShift или Grafana для получения более специфичной помощи.