Até agora, se entendi corretamente, para garantir que uma instância do Prometheus possa coletar dados do endpoint /metrics, precisamos adicionar o endereço IP dessa máquina na lista de permissões, editando DISCOURSE_PROMETHEUS_TRUSTED_IP_WHITELIST_REGEX.
Existe alguma outra maneira de fazer isso? Nossa instância do Discourse está atrás do proxy DNS da Cloudflare e não consegue ver o endereço IP real dos usuários finais. Eu realmente preferiria se pudéssemos encontrar uma maneira de fazer isso com chaves de API, embora isso pareça improvável devido às restrições de como o Prometheus pode ingerir dados.
Então o Discourse está com problemas e você precisa adicionar o modelo do Cloudflare.
Acho que isso funcionaria. Você já tentou? Ah, mas não acho que seja possível fazer o Grafana colocar as chaves no cabeçalho, e é por isso que adicionei esse recurso inicialmente.
Então o Discourse está com defeito e você precisa adicionar o template do Cloudflare.
Ah, o que você quer dizer com “template do Cloudflare”?
Acho que isso funcionaria. Você tentou? Oh, mas não acho que seja possível fazer o Grafana colocar as chaves no cabeçalho, e é por isso que adicionei esse recurso inicialmente.
Sim, tentei. O Prometheus ainda não permite cabeçalhos arbitrários nas configurações do scraper. Portanto, não há como eu ingerir métricas do Discourse no Prometheus se não puder listar o IP do servidor do Prometheus na lista de permissões, o que não é possível no meu caso.
Provavelmente há outras pessoas que executam suas instâncias do Discourse atrás de proxies como o Cloudflare. Então, com essa premissa em mente, acredito que precisaremos ajustar um pouco o exporter.
A API do Discourse usa seus próprios cabeçalhos Api-Key e Api-Username em vez de algo mais ou menos padronizado, como autenticação básica HTTP (que é suportada pelo subsistema de scraper do Prometheus). Portanto, realmente não tenho como usar isso na minha configuração.
Ativei o cloudflare.template.yml. Mas, se entendi corretamente, isso foi apenas para desativar a limitação de taxa no tráfego proveniente dos endereços IP da Cloudflare.
Por enquanto, é assim que minha configuração do Prometheus se parece:
Agora, o problema que estou enfrentando é que o Discourse não consegue ver o endereço IP real de uma solicitação. Portanto, para que a abordagem de lista de permissões funcione, tentei o seguinte:
Adicionei o endereço IPv6 do meu servidor Prometheus à variável de ambiente DISCOURSE_PROMETHEUS_TRUSTED_IP_WHITELIST_REGEX no app.yml.
Codifiquei manualmente o endereço IPv6 real do fórum no arquivo /etc/hosts do servidor Prometheus. Agora, o fórum consegue ver o endereço IP do meu servidor Prometheus e permitir o acesso a ele.
Ainda tenho alguns outros problemas. Por exemplo, estou executando o Prometheus em um container. O /etc/hosts do host não é compartilhado dentro do container. Assim, ele continua resolvendo o endereço do fórum para um IP da Cloudflare e falha durante a autenticação.
Posso compartilhar o /etc/hosts do host no container Docker assim: -v /etc/hosts:/etc/hosts ao iniciar o Prometheus, mas isso resulta em um erro como:
Get "https://forum-behind-cloudflare-dns-proxy.com:443/metrics": dial tcp [<endereço-ipv6>]:443: connect: cannot assign requested address
Agora, só preciso resolver esse problema.
Edição #1: Descobri isso também. O IPv6 estava desativado dentro do container Docker. Posso corrigir isso ativando o IPv6 no container Docker ou simplesmente usando --net=host.
Você está atrás de um proxy reverso? É necessário configurar o nginx para permitir que o endereço remoto real chegue ao Discourse. Acredito que o artigo Rodando outros sites na mesma máquina que o Discourse pode te dar uma dica para resolver isso.
A instância do Discourse está, de fato, rodando atrás de um proxy reverso. O proxy reverso é fornecido pela Cloudflare e, como estamos apenas no plano Pro, não temos a opção de repassar o IP real do cliente até a instância do Discourse a partir da Cloudflare. De qualquer forma, meu problema já foi resolvido.
O painel do Grafana provavelmente deveria ser atualizado neste momento. Com o tempo, o exportador do Prometheus foi atualizado, de modo que ele não envia mais certas métricas, mas o painel do Grafana ainda está configurado para ler valores dessas métricas (agora) inexistentes.