Hasta ahora, si entiendo correctamente, para garantizar que una instancia de Prometheus pueda extraer datos del endpoint /metrics, debemos agregar la dirección IP de esa máquina en la lista de permitidos editando DISCOURSE_PROMETHEUS_TRUSTED_IP_WHITELIST_REGEX.
¿Existe alguna otra forma de hacerlo? Nuestra instancia de Discourse está detrás del proxy DNS de Cloudflare y no puede ver la dirección IP real de los usuarios finales. Preferiría mucho si pudiéramos encontrar una manera de hacerlo con claves de API, aunque eso parece poco probable debido a las restricciones sobre cómo Prometheus puede ingerir datos.
Entonces Discourse está roto y necesitas agregar la plantilla de Cloudflare.
Creo que eso funcionaría. ¿Lo intentaste? Oh, pero no creo que puedas hacer que Grafana coloque las claves en el encabezado, por eso agregué esta función en primer lugar.
Entonces Discourse está roto y necesitas agregar la plantilla de Cloudflare.
Ah, ¿qué quieres decir con “plantilla de Cloudflare”?
Creo que eso funcionaría. ¿Lo probaste? Oh, pero no creo que puedas configurar Grafana para que inserte las claves en el encabezado, razón por la cual agregué esta función desde el principio.
Sí, lo intenté. Prometheus todavía no permite encabezados arbitrarios en las configuraciones del scraper. Por lo tanto, no hay forma de que yo ingrese las métricas de Discourse en Prometheus si no puedo poner en la lista blanca la dirección IP del servidor de Prometheus, lo cual no es posible en mi caso.
Probablemente haya otras personas que ejecuten sus instancias de Discourse detrás de proxies como Cloudflare. Así que, con esa suposición en mente, creo que tendremos que ajustar un poco el exportador.
La API de Discourse utiliza sus propios encabezados Api-Key y Api-Username en lugar de algo algo estandarizado como la autenticación básica HTTP (que es compatible con el subsistema de scraper de Prometheus). Por lo tanto, realmente no tengo forma de usar esto en mi configuración.
Habilité cloudflare.template.yml. Pero si entiendo correctamente, eso solo servía para desactivar la limitación de velocidad en el tráfico que proviene de las direcciones IP de Cloudflare.
Por ahora, esto es lo que parece mi configuración de Prometheus:
Ahora, el problema que estoy enfrentando es que Discourse no puede ver la dirección IP real de una solicitud. Por lo tanto, para que el enfoque de lista de permitidos funcione, he intentado lo siguiente:
Agregué la dirección IPv6 de mi servidor de Prometheus a la variable de entorno DISCOURSE_PROMETHEUS_TRUSTED_IP_WHITELIST_REGEX en app.yml.
Codifiqué manualmente la dirección IPv6 real del foro en /etc/hosts en el servidor de Prometheus. Ahora, el foro puede ver la dirección IP de mi servidor de Prometheus y permitirle el acceso.
Aún tengo otros problemas. Por ejemplo, estoy ejecutando Prometheus en un contenedor. /etc/hosts del host no se comparte dentro del contenedor. Por lo tanto, sigue resolviendo la dirección del foro a una dirección IP de Cloudflare y falla durante la autenticación.
Puedo compartir /etc/hosts del host en el contenedor de Docker así: -v /etc/hosts:/etc/hosts al iniciar Prometheus, pero eso resulta en un error como:
Get "https://forum-behind-cloudflare-dns-proxy.com:443/metrics": dial tcp [<ipv6-address>]:443: connect: cannot assign requested address
Ahora, solo tengo que resolver este problema.
Edición #1: También lo resolví. IPv6 estaba deshabilitado dentro del contenedor de Docker. Puedo solucionarlo habilitando IPv6 en el contenedor de Docker o simplemente usando --net=host.
La instancia de Discourse se está ejecutando efectivamente detrás de un proxy inverso. El proxy inverso es ofrecido por Cloudflare y solo tenemos el plan Pro, por lo que no tenemos la opción de transmitir la IP real del cliente hasta la instancia de Discourse desde Cloudflare. De todos modos, mi problema ya está resuelto.
El panel de Grafana probablemente debería actualizarse en este momento. Con el tiempo, el exportador de Prometheus se actualizó, por lo que ya no envía ciertas métricas, pero el panel de Grafana sigue configurado para leer los valores de esas métricas (ahora) inexistentes.