На данный момент, если я правильно понимаю, чтобы обеспечить возможность экземпляру Prometheus собирать данные с конечной точки /metrics, нам необходимо добавить IP-адрес этой машины в белый список, отредактировав DISCOURSE_PROMETHEUS_TRUSTED_IP_WHITELIST_REGEX.
Есть ли какой-то другой способ сделать это? Наш экземпляр Discourse находится за прокси DNS Cloudflare и не видит реальные IP-адреса конечных пользователей. Я бы очень предпочел, если бы мы могли найти способ сделать это с помощью ключей API. Хотя это кажется маловероятным из-за ограничений на то, как Prometheus может получать данные.
Тогда Discourse работает некорректно, и вам нужно добавить шаблон для Cloudflare.
Я думаю, что это сработает. Вы пробовали? О, но я не думаю, что Grafana сможет добавлять ключи в заголовок, именно поэтому я изначально добавил эту функцию.
Значит, Discourse не работает, и вам нужно добавить шаблон Cloudflare.\n\nАх, что вы имеете в виду под «шаблоном Cloudflare»?\n\n\n> Я думаю, что это сработает. Вы пробовали? О, но я не думаю, что Grafana сможет добавлять ключи в заголовки, именно поэтому я изначально добавил эту функцию.\n\nДа, я пробовал. Prometheus по-прежнему не позволяет использовать произвольные заголовки в конфигурациях скраперов. Так что у меня нет способа получать метрики Discourse в Prometheus, если я не могу добавить IP-адрес сервера Prometheus в белый список, что в моём случае невозможно.\n\nВероятно, есть и другие люди, которые запускают свои экземпляры Discourse за прокси, такими как Cloudflare. Исходя из этого предположения, я считаю, что нам придётся немного доработать экспортер.\n\nAPI Discourse использует собственные заголовки Api-Key и Api-Username вместо чего-то относительно стандартизированного, например, базовой аутентификации HTTP (которая поддерживается подсистемой скраперов Prometheus). Поэтому у меня действительно нет возможности использовать это в моей настройке.
Включил cloudflare.template.yml. Но, если я правильно понимаю, это было сделано только для отключения ограничения частоты запросов для трафика, поступающего с IP-адресов Cloudflare.
На данный момент моя конфигурация Prometheus выглядит так:
Теперь проблема, с которой я столкнулся, заключается в том, что Discourse не видит реальный IP-адрес запроса. Поэтому для работы подхода со списком разрешённых адресов я попробовал следующее:
Добавил IPv6-адрес моего сервера Prometheus в переменную окружения DISCOURSE_PROMETHEUS_TRUSTED_IP_WHITELIST_REGEX в файле app.yml.
Прописал реальный IPv6-адрес форума в файле /etc/hosts на сервере Prometheus. Теперь форум видит IP-адрес моего сервера Prometheus и разрешает ему доступ.
Однако у меня всё ещё есть другие проблемы. Например, я запускаю Prometheus в контейнере. Файл /etc/hosts хоста не доступен внутри контейнера. Поэтому он продолжает разрешать адрес форума до IP-адреса Cloudflare, и аутентификация не удаётся.
Я мог бы подключить файл /etc/hosts хоста к Docker-контейнеру, указав -v /etc/hosts:/etc/hosts при запуске Prometheus, но это приводит к ошибке:
Get "https://forum-behind-cloudflare-dns-proxy.com:443/metrics": dial tcp [<ipv6-address>]:443: connect: cannot assign requested address
Теперь мне нужно решить эту проблему.
Редактирование #1: Разобрался и с этим. IPv6 был отключён внутри Docker-контейнера. Я могу исправить это, включив IPv6 в контейнере Docker или просто используя --net=host.
Вы находитесь за обратным прокси-сервером? Вам необходимо настроить nginx, чтобы реальный удаленный IP-адрес мог достигать Discourse. Я думаю, что статья Запуск других веб-сайтов на том же компьютере, что и Discourse может дать вам подсказку, как это решить.
Действительно, экземпляр Discourse работает за обратным прокси-сервером. Обратный прокси предоставляется Cloudflare, и у нас есть только тариф Pro, поэтому у нас нет возможности передавать реальный IP-адрес клиента до экземпляра Discourse от Cloudflare. В любом случае, моя проблема уже решена.
Дашборд Grafana, вероятно, нужно обновить на данном этапе. Со временем экспортер Prometheus был обновлен, и он больше не отправляет определенные метрики, но дашборд Grafana по-прежнему настроен на чтение значений этих (теперь несуществующих) метрик.