Настройка Discourse для отображения IP-адреса сервера Prometheus

Всем привет!

На данный момент, если я правильно понимаю, чтобы обеспечить возможность экземпляру 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). Поэтому у меня действительно нет возможности использовать это в моей настройке.

Вам нужно поискать. Но вы можете найти его внутри директории шаблонов и добавить в ваш app.yml.

Спасибо!

Включил cloudflare.template.yml. :slight_smile: Но, если я правильно понимаю, это было сделано только для отключения ограничения частоты запросов для трафика, поступающего с IP-адресов Cloudflare.

На данный момент моя конфигурация Prometheus выглядит так:

scrape_configs:
        - job_name: forum
          scrape_interval: 5s
          scheme: https
          static_configs:
                  - targets:
                          - forum-behind-cloudflare-dns-proxy.com

Теперь проблема, с которой я столкнулся, заключается в том, что Discourse не видит реальный IP-адрес запроса. Поэтому для работы подхода со списком разрешённых адресов я попробовал следующее:

  1. Добавил IPv6-адрес моего сервера Prometheus в переменную окружения DISCOURSE_PROMETHEUS_TRUSTED_IP_WHITELIST_REGEX в файле app.yml.

  2. Прописал реальный IPv6-адрес форума в файле /etc/hosts на сервере Prometheus. Теперь форум видит IP-адрес моего сервера Prometheus и разрешает ему доступ. :slight_smile:

Однако у меня всё ещё есть другие проблемы. Например, я запускаю 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. В любом случае, моя проблема уже решена. :slight_smile:

Дашборд Grafana, вероятно, нужно обновить на данном этапе. Со временем экспортер Prometheus был обновлен, и он больше не отправляет определенные метрики, но дашборд Grafana по-прежнему настроен на чтение значений этих (теперь несуществующих) метрик.