Discourse Prometheus

:discourse2: Resumo Discourse Prometheus é o exportador oficial do Prometheus para o Discourse
:hammer_and_wrench: Link do Repositório https://github.com/discourse/discourse-prometheus
:open_book: Guia de Instalação Como instalar plugins no Discourse

O plugin Discourse Prometheus coleta métricas principais do Discourse e as expõe no caminho /metrics, para que o Prometheus possa consumi-las.

Essas métricas podem ser usadas para criar gráficos de diversos tipos de dados, como:

Tempos mediano e do 99º percentil para páginas de tópicos, categorias, top e mais recentes. Divisão do tempo de execução entre SQL/Redis e Aplicativo.

Rastreamento de visualizações de página

Rastreamento de erros

Rastreamento do espaço de objetos Ruby, incluindo taxa de alocação, heaps, etc.

Estatísticas de memória do V8 hospedado

Fila de Jobs Agendados e durações/execuções de jobs do Sidekiq.

Para ver uma lista completa das métricas disponíveis, instale o plugin e acesse NOME_DO_SITE/metrics como administrador.

Por padrão, permitimos a rota metrics para administradores e IPs privados.


O Discourse Prometheus é inteligente o suficiente para agregar dados de todos os processos unicorn bifurcados e apresentá-los como métricas coesas em um único endpoint. Nós o usamos internamente para acompanhar nossos sites.

Painel de exemplo em:


A configuração global do Discourse chamada prometheus_trusted_ip_allowlist_regex (env: DISCOURSE_PROMETHEUS_TRUSTED_IP_ALLOWLIST_REGEX) permite definir os endereços IP confiáveis do Prometheus. A configuração aceita expressões regulares para definir intervalos de IP avançados. Isso é útil quando o endereço IP do Prometheus é dinâmico.

51 curtidas
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)

Estou gerenciando o Discourse no Kubernetes, executando em múltiplos pods de app e sidekiq. Tenho algumas perguntas sobre o plugin:

  1. O plugin agrega métricas de todos os pods de app? Assumo que ele agrega métricas para processos unicorn em execução em uma única instância/pod.
  2. Estou curioso sobre o motivo de observar tempos apenas para algumas ações do controlador. Esta consulta está relacionada ao código em discourse-prometheus/lib/collector.rb at main · discourse/discourse-prometheus · GitHub.

Olá,

Onde posso encontrar a configuração prometheus_trusted_ip_allowlist_regex? :crying_cat_face:

Estou usando o Discourse v3.4.0.beta3-dev

Você precisa definir DISCOURSE_PROMETHEUS_TRUSTED_IP_ALLOWIST_REGEX em app.yml.

1 curtida

Não tenho certeza do que está acontecendo, mas esta integração não está mais funcionando. Não consegui fazer o painel no Grafana exibir nada… o /metrics retorna algo, mas qualquer coisa além disso não funciona realmente.

Muitos erros como o abaixo

Started GET "/metrics/api/v1/label/instance/values?limit=40000&start=1760980620&end=1760982480&match[]=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[]=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[]=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[]=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)

Postando novamente, pois encontrei uma solução que funcionou para mim Discourse Prometheus 404 metrics for Grafana - #2 by DevTeVe