Qualcuno ha già provato questo dietro cloudflare senza esporre le metriche a tutto il pubblico?
Il problema è che l’IP originale di prometheus non si trova nella solita posizione nelle intestazioni HTTP quando si trova dietro cloudflare (o praticamente qualsiasi proxy).
C’è un modo per renderlo accessibile solo tramite http o aggiungere un (sotto)dominio aggiuntivo a discourse per creare un certificato SSL?
Renderlo accessibile tramite IP o un sottodominio aggiuntivo che potrebbe essere impostato in modalità trasparente in Cloudflare sarebbero due opzioni. L’altra sarebbe probabilmente modificare il plugin per controllare un’intestazione http diversa. Penso che dovrebbe essere X-Forwarded-For o CF-Connecting-IP. Sono il tipo di persona che è in grado di farlo. Quest’ultima sarebbe probabilmente la soluzione più intelligente.
Qualsiasi aiuto è apprezzato.
EDIT: Mi sono appena reso conto che cloudflare stesso utilizza molto bene l’IP corretto dietro cloudflare. O è il plugin che fa qualcosa di diverso da cloudflare stesso o…
È esattamente quello che non voglio fare. Preferirei non avere molte cose aggiuntive in esecuzione sul server di produzione, che è già molto carico di traffico del forum. Inoltre, se dovessi fare un reverse proxy, probabilmente non avrei bisogno di eseguire grafana e prometheus localmente, poiché potrei facilmente fare un reverse proxy di /metrics in uscita su IP e non HTTPS, ma tutto ciò suona come una soluzione di ripiego. Pensavo ci fosse un modo migliore.
Non sono molte cose. Ha un sovraccarico piuttosto basso.
Oh, aspetta. Ma se hai configurato le cose in modo che l’IP remoto corretto raggiunga Discourse, allora puoi semplicemente impostare l’IP remoto ovunque tu stia eseguendo Prometheus e funzionerà. Questo è quello che ho fatto con alcuni siti che ho monitorato. Sono abbastanza sicuro che sia il motivo per cui è stato aggiunto DISCOURSE_PROMETHEUS_TRUSTED_IP_ALLOWLIST_REGEX.
Stai usando il template Cloudflare? (Il modo consigliato per fare le cose è usare una vera CDN e lasciare che Discourse decida quali cose mettere in proxy, ma non vuoi farlo nemmeno tu.)
Sto usando una macchina di test che non è proxata da Cloudflare. Ho configurato lì l’esportatore Prometheus insieme a DISCOURSE_PROMETHEUS_TRUSTED_IP_ALLOWLIST_REGEX impostato sul mio server di monitoraggio e le cose funzionano bene.
Sulla macchina di produzione la stessa cosa non funziona.
Sì, sto usando il template di Cloudflare
templates:
- "templates/postgres.template.yml"
- "templates/redis.template.yml"
- "templates/web.template.yml"
- "templates/web.ratelimited.template.yml"
## Uncomment these two lines if you wish to add Lets Encrypt (https)
- "templates/web.ssl.template.yml"
- "templates/web.letsencrypt.ssl.template.yml"
- "templates/cloudflare.template.yml"
e gli indirizzi IP negli amministratori degli utenti sembrano corretti.
Sono molto soddisfatto di come funziona Cloudflare finora e mi ha già aiutato molto con la protezione DDOS, quindi preferirei non passare a una soluzione CDN diversa, almeno non vedo un motivo.
Per quanto riguarda l’esportatore Prometheus, non sono sicuro del perché, ma non sembra fare il controllo dell’IP nello stesso modo in cui Discourse lo fa generalmente. Non sono abbastanza esperto di Ruby per convalidare questa ipotesi nel codice, ma sono molto curioso al riguardo.
Se la tua community è una di quelle che attira attacchi DDOS, allora Cloudflare è un’ottima soluzione.
Oh, viene eseguito sulla sua porta, quindi bypassa NGINX, che è ciò che quel template modifica, ecco perché è diverso. Quindi, se vuoi che abbia https, avresti bisogno di un nginx esterno per farlo, penso. Oppure accedi direttamente tramite http e fidati che la restrizione a livello IP sia sufficiente (e fidati delle reti intermedie).
Non sono sicuro se stiamo parlando della stessa cosa. Stavo parlando del plugin exporter (di cui questo thread tratta) e non di prometheus. L’exporter non sembra gestire il controllo IP nello stesso modo in cui lo fa discourse stesso - o altrimenti il problema non dovrebbe esistere, giusto?
Per ora ci sono riuscito. Vedendo la dashboard di esempio di @sam, mi chiedo come potrei inserire i dati di redis e postgres. Probabilmente con due esportatori separati. Mi chiedo solo come potrei connettere postgres e redis all’interno di Discourse