Привет всем! Бывало такое, что у вас не загружается доска Grafana и показывает пустую панель со значком предупреждения вверху ⚠️? А минуту назад все работало. Или бывало что часть панелей загрузилась, а часть показывают предупреждение?
Чаще всего хочется просто перезагрузить доску. Но если это проблема производительности хранилища метрик, то перезагрузка просто повторяет ситуацию множесвенной отправки запросов. И хотелось бы перезагрузить только сбойные панели
💡 В контекстном меню каждой панели можно найти пункт Inspect / Query, где будет кнопка Refresh, для перезагрузки только текущей панели. Это можно делать несколько раз, пока панель не загрузится успешно
А кеширующий прокси-сервер между Grafana и хранилищем метрик позволяет решить проблему для более общего случая, в котором и обновление страницы дозагружает только сбойные панели
Большинство хранилищ метрик и логов доступны по HTTP и подключаются к Grafana по HTTP. Поэтому можно выставить вместо цепочки:
⏺ Grafana => Хранилище
Цепочку:
⏺ Grafana => Nginx => Хранилище
Так для InfluxDB использовал Nginx вот с такой конфигурацией:
⏺ https://gist.github.com/polarnik/cb6f22751e8d1590342198609243c529
Тут ключевые настройки были такие
Кеш на 20 минут в секции http { ... } :
⏺ proxy_cache_path /data/nginx/cache keys_zone=mycache:20m max_size=1g inactive=60m;
Указание этого кеша в http { server { location /query { ... } } } :
⏺ proxy_cache mycache;
⏺ proxy_cache_key "$host-$request_method-$request_uri";
⏺ proxy_cache_min_uses 1;
⏺ proxy_cache_methods GET;
⏺ proxy_ignore_headers Cache-Control;
игнорирование настроек кеширования от самого хранилища метрик тут обязательно, хранилище метрик будет говорить, что кешировать ответ не надо. Но если выбрать статический интервал времени:
⏺ 00:00:00 ... 12:00:00
но не динамический:
⏺ now-12h ... now
то кеширование будет успешно работать, потому что request_uri не изменится
Если хранилище метрик подключено к Grafana через POST-метод, то тогда в настройках кеширования можно указать:
⏺ proxy_cache_key "$host-$request_method-$request_uri-$request_body";
⏺ client_body_in_single_buffer on;
⏺ client_body_buffer_size 64k;
⏺ proxy_cache_methods GET POST;
Так как Nginx не будет выполнять авторизацию доступа к данным из кеша, то надо будет настроить Firewall так чтобы только IP-адрес Grafana Server имел доступ до Nginx Proxy. В этом случае авторизацию выполняет Grafana, и пользователи имеющие доступ до хранилища метрик там будут иметь доступ и кешу