Discourse Prometheus

:discourse2: Краткое описание Discourse Prometheus — это официальный Prometheus экспортер для Discourse
:hammer_and_wrench: Ссылка на репозиторий https://github.com/discourse/discourse-prometheus
:open_book: Руководство по установке Как устанавливать плагины в Discourse

Плагин Discourse Prometheus собирает ключевые метрики из Discourse и предоставляет их по пути /metrics, чтобы Prometheus мог их потреблять.

Эти метрики можно использовать для визуализации самых разных данных, таких как:

Медианное время и время 99-го перцентиля для страниц тем / категорий / топовых и последних. Разделение времени выполнения между SQL/Redis и приложением.

Отслеживание просмотров страниц

Отслеживание ошибок

Отслеживание пространства объектов Ruby, включая частоту выделения памяти, кучи и так далее.

Статистика памяти хостинга V8

Очередь запланированных заданий и длительность/выполнение заданий Sidekiq.

Чтобы увидеть полный список доступных метрик, установите плагин и перейдите по адресу ИМЯ_САЙТА/metrics как администратор.

По умолчанию маршрут metrics разрешен администраторам и частным IP-адресам.


Discourse Prometheus достаточно умён, чтобы агрегировать данные для всех форкованных процессов unicorn и представлять их как единые метрики на одном концепоинте. Мы используем его внутренне для отслеживания наших сайтов.

Пример панели мониторинга на:


Глобальная настройка Discourse prometheus_trusted_ip_allowlist_regex (env: DISCOURSE_PROMETHEUS_TRUSTED_IP_ALLOWLIST_REGEX) позволяет задавать доверенные IP-адреса Prometheus. Настройка принимает регулярное выражение для задания расширенных диапазонов IP-адресов. Это полезно в случае, когда IP-адрес Prometheus является динамическим.

51 лайк
Install Prometheus plugin + Prometheus on your server
Add more metrics to Discourse Prometheus
Prometheus exporter problem with SecureRandom (multisite?)
Webhook for Discourse Uptime Monitoring?
Best configurations for speeding up standalone discourse
Huge increase in Redis use after changing hosts
Prometheus scrape job cannot reach the metrics
Prometheus pluging Cross-Origin Request
How to avoid upstream timeouts?
Staging instance on same Production instance Docker Server?
A lot of CPU cores or fast cores?
Memory creep in last couple of updates
What's the correct REGEX for the allowlist in app.yml?
Tracking discourse usage by hour?
Discourse disk space limits per user?
Admin Reporting & Analysis: Incremental Changes
Out of memory errors with custom plugin
Postgres connection error on 'bundle exec rails c'
Getting extreme load warning while server resources are not being used
Real-time updating of topics freezes under high activity
Docker image update: Redis 6 and 25% smaller image size
Real-time updating of topics freezes under high activity
Real-time updating of topics freezes under high activity
What happens next?
High load due to peak anonymous sessions, increase unicorn workers?
Opinions on AWS vs DO Page Speed / Performance
Can I ignore some user agents?
Extreme Load Error After Upgrading to 3.3.0.beta3-dev Yesterday (on Prem)
Multiple Discourse Instances with WordPress, Ghost and subfolder support
Display community health stats on lemon (lemon = RPi + Pimoroni Unicorn Hat HD)

Сейчас я управляю Discourse на Kubernetes, который работает на нескольких подах приложений и Sidekiq. У меня есть несколько вопросов по поводу плагина:

  1. Агрегирует ли плагин метрики со всех подов приложений? Я предполагаю, что он агрегирует метрики для процессов Unicorn, работающих на одном экземпляре/пode.
  2. Меня интересует причина того, что временные показатели наблюдаются только для некоторых действий контроллера. Этот вопрос связан с кодом по адресу discourse-prometheus/lib/collector.rb at main · discourse/discourse-prometheus · GitHub.

Здравствуйте,

Где можно найти настройку prometheus_trusted_ip_allowlist_regex? :crying_cat_face:

Я использую Discourse v3.4.0.beta3-dev

Вам необходимо установить DISCOURSE_PROMETHEUS_TRUSTED_IP_ALLOWIST_REGEX в файле app.yml.

1 лайк

Не совсем понятно, что происходит, но эта интеграция больше не работает. Я не мог заставить панель управления в Grafana что-либо отображать… /metrics что-то возвращает, но всё, что идёт дальше, по сути, не работает.Множество ошибок, подобных той, что ниже:

Started GET "/metrics/api/v1/label/instance/values?limit=40000&start=1760980620&end=1760982480&match%5B%5D=discourse_page_views" for 16.63.57.20 at 2025-10-20 17:47:07 +0000
Started GET "/metrics/api/v1/label/job/values?limit=40000&start=1760980620&end=1760982480&match%5B%5D=discourse_page_views%7B%7D" for 16.63.57.20 at 2025-10-20 17:47:07 +0000
  Rendered layout layouts/no_ember.html.erb (Duration: 21.1ms | GC: 0.0ms)
  Rendered layout layouts/no_ember.html.erb (Duration: 26.0ms | GC: 0.0ms)
Started POST "/metrics/api/v1/query_range" for 16.63.57.20 at 2025-10-20 17:47:07 +0000
Started POST "/metrics/api/v1/query_range" for 16.63.57.20 at 2025-10-20 17:47:07 +0000
Started POST "/metrics/api/v1/query_range" for 16.63.57.20 at 2025-10-20 17:47:07 +0000
Started POST "/metrics/api/v1/query_range" for 16.63.57.20 at 2025-10-20 17:47:07 +0000
Started POST "/metrics/api/v1/query_range" for 16.63.57.20 at 2025-10-20 17:47:07 +0000
  Rendered layout layouts/no_ember.html.erb (Duration: 19.8ms | GC: 0.0ms)
  Rendered layout layouts/no_ember.html.erb (Duration: 28.2ms | GC: 0.0ms)
  Rendered layout layouts/no_ember.html.erb (Duration: 34.6ms | GC: 0.0ms)
  Rendered layout layouts/no_ember.html.erb (Duration: 44.4ms | GC: 0.0ms)
  Rendered layout layouts/no_ember.html.erb (Duration: 41.7ms | GC: 0.0ms)
Started POST "/metrics/api/v1/query_range" for 16.63.57.20 at 2025-10-20 17:47:07 +0000
Started POST "/metrics/api/v1/query_range" for 16.63.57.20 at 2025-10-20 17:47:08 +0000
Started POST "/metrics/api/v1/query_range" for 16.63.57.20 at 2025-10-20 17:47:08 +0000
Started POST "/metrics/api/v1/query_range" for 16.63.57.20 at 2025-10-20 17:47:08 +0000
  Rendered layout layouts/no_ember.html.erb (Duration: 23.6ms | GC: 0.0ms)
  Rendered layout layouts/no_ember.html.erb (Duration: 24.9ms | GC: 0.0ms)
  Rendered layout layouts/no_ember.html.erb (Duration: 19.9ms | GC: 0.0ms)
  Rendered layout layouts/no_ember.html.erb (Duration: 21.6ms | GC: 0.0ms)
Started GET "/metrics/api/v1/label/job/values?limit=40000&start=1760980620&end=1760982480&match%5B%5D=discourse_page_views%7B%7D" for 16.63.57.20 at 2025-10-20 17:47:37 +0000
Started GET "/metrics/api/v1/label/instance/values?limit=40000&start=1760980620&end=1760982480&match%5B%5D=discourse_page_views" for 16.63.57.20 at 2025-10-20 17:47:37 +0000
  Rendered layout layouts/no_ember.html.erb (Duration: 19.5ms | GC: 0.0ms)
  Rendered layout layouts/no_ember.html.erb (Duration: 20.9ms | GC: 0.0ms)
Started POST "/metrics/api/v1/query_range" for 16.63.57.20 at 2025-10-20 17:47:37 +0000
Started POST "/metrics/api/v1/query_range" for 16.63.57.20 at 2025-10-20 17:47:37 +0000
Started POST "/metrics/api/v1/query_range" for 16.63.57.20 at 2025-10-20 17:47:37 +0000
Started POST "/metrics/api/v1/query_range" for 16.63.57.20 at 2025-10-20 17:47:37 +0000
Started POST "/metrics/api/v1/query_range" for 16.63.57.20 at 2025-10-20 17:47:37 +0000
  Rendered layout layouts/no_ember.html.erb (Duration: 22.4ms | GC: 0.0ms)
  Rendered layout layouts/no_ember.html.erb (Duration: 22.0ms | GC: 0.0ms)
  Rendered layout layouts/no_ember.html.erb (Duration: 40.0ms | GC: 0.0ms)
  Rendered layout layouts/no_ember.html.erb (Duration: 37.0ms | GC: 0.0ms)
  Rendered layout layouts/no_ember.html.erb (Duration: 24.8ms | GC: 1.6ms)

Пересылаю это, так как я нашел решение, которое сработало для меня Discourse Prometheus 404 metrics for Grafana - #2 by DevTeVe