Finora, se ho capito bene, per garantire che un’istanza di Prometheus possa raccogliere dati dall’endpoint /metrics, dobbiamo aggiungere l’indirizzo IP di quella macchina alla lista consentita modificando DISCOURSE_PROMETHEUS_TRUSTED_IP_WHITELIST_REGEX.
Esiste un altro modo per farlo? La nostra istanza Discourse è dietro il proxy DNS di Cloudflare e non vede l’indirizzo IP reale degli utenti finali. Preferirei molto se potessimo trovare un modo per farlo con le chiavi API, anche se sembra improbabile a causa delle restrizioni su come Prometheus può ingerire i dati.
In tal caso, Discourse non funziona correttamente e devi aggiungere il template di Cloudflare.
Penso che funzionerebbe. L’hai già provato? Ah, ma non credo che Grafana possa inserire le chiavi nell’intestazione, ed è per questo che ho aggiunto questa funzione in primo luogo.
Allora Discourse è rotto e devi aggiungere il template di Cloudflare.
Ah, cosa intendi per “template di Cloudflare”?
Penso che funzionerebbe. L’hai provato? Oh, ma non credo che tu possa configurare Grafana per inserire le chiavi nell’intestazione, ed è proprio per questo che ho aggiunto questa funzionalità in primo luogo.
Sì, l’ho fatto. Prometheus non permette ancora intestazioni arbitrarie nelle configurazioni dello scraper. Quindi, non c’è modo per me di importare le metriche di Discourse in Prometheus se non posso mettere in whitelist l’indirizzo IP del server Prometheus, il che nel mio caso non è possibile.
Probabilmente ci sono altre persone che eseguono le proprie istanze di Discourse dietro proxy come Cloudflare. Quindi, con questa assunzione in mente, credo che dovremo apportare qualche modifica all’exporter.
L’API di Discourse utilizza le proprie intestazioni Api-Key e Api-Username invece di qualcosa di abbastanza standardizzato come l’autenticazione HTTP di base (che è supportata dal sottosistema scraper di Prometheus). Quindi, non ho davvero modo di utilizzarla nel mio setup.
Abilitato cloudflare.template.yml. Ma se ho capito correttamente, questo serve solo a disabilitare il rate limiting per il traffico proveniente dagli indirizzi IP di Cloudflare.
Per ora, questa è la configurazione del mio Prometheus:
Ora, il problema che sto affrontando è che Discourse non riesce a vedere l’indirizzo IP reale della richiesta. Quindi, per far funzionare l’approccio basato sulla whitelist, ho provato quanto segue:
Ho aggiunto l’indirizzo IPv6 del mio server Prometheus alla variabile d’ambiente DISCOURSE_PROMETHEUS_TRUSTED_IP_WHITELIST_REGEX in app.yml.
Ho hardcodato l’indirizzo IPv6 reale del forum nel file /etc/hosts sul server Prometheus. Ora, il forum può vedere l’indirizzo IP del mio server Prometheus e consentirne l’accesso.
Rimangono però altri problemi. Ad esempio, sto eseguendo Prometheus in un contenitore. Il file /etc/hosts dell’host non viene condiviso all’interno del contenitore. Di conseguenza, continua a risolvere l’indirizzo del forum su un IP di Cloudflare e fallisce durante l’autenticazione.
Potrei condividere /etc/hosts dall’host nel contenitore Docker, ad esempio con -v /etc/hosts:/etc/hosts all’avvio di Prometheus, ma questo provoca un errore come:
Get "https://forum-behind-cloudflare-dns-proxy.com:443/metrics": dial tcp [<ipv6-address>]:443: connect: cannot assign requested address
Ora devo solo risolvere questo problema.
Modifica #1: Ho risolto anche questo. IPv6 era disabilitato all’interno del contenitore Docker. Posso correggere il problema abilitando IPv6 nel contenitore o semplicemente usando --net=host.
Sei dietro a un reverse proxy? Devi configurare nginx per permettere alla richiesta remota reale di raggiungere Discourse. Penso che Eseguire altri siti sullo stesso server di Discourse possa darti un suggerimento su come risolvere il problema.
L’istanza di Discourse è effettivamente in esecuzione dietro un reverse proxy. Il reverse proxy è fornito da Cloudflare e noi siamo solo sul piano Pro, senza l’opzione per inoltrare l’IP reale del client all’istanza di Discourse da Cloudflare. Comunque, il mio problema è già stato risolto.
La dashboard di Grafana dovrebbe probabilmente essere aggiornata in questo momento. Nel tempo, l’exporter di Prometheus è stato aggiornato e non invia più determinate metriche, ma la dashboard di Grafana è ancora configurata per leggere i valori di quelle (ora) metriche inesistenti.