helmi
(Helmi)
2022 年3 月 29 日 08:02
1
是否有人尝试过在 Cloudflare 后面使用此功能,而无需将指标公开给公众?
问题是,当在 Cloudflare(或任何代理)后面时,Prometheus 的原始 IP 不在 HTTP 标头中的通常位置。
是否有任何方法可以通过 http 仅访问此功能,或者向 Discourse 添加额外的(子)域来创建 SSL 证书?
通过 IP 或可以设置为 Cloudflare 透明模式的附加子域访问它将是两个选项。另一个可能是修改插件以检查不同的 http 标头。我认为应该是 X-Forwarded-For 或 CF-Connecting-IP。我就是那种能做到这一点的人。后者可能是最明智的解决方案。
任何帮助都将不胜感激。
编辑:我刚刚意识到 Cloudflare 本身在 Cloudflare 后面非常有效地使用了正确的 IP。要么是插件执行的操作与 Cloudflare 本身不同,要么……
pfaffman
(Jay Pfaffman)
2022 年3 月 29 日 13:26
2
我认为您需要在与 Discourse 相同的服务器上运行 Prometheus,或许还有 Grafana,并通过反向代理提供服务。
1 个赞
helmi
(Helmi)
2022 年3 月 29 日 13:38
3
那正是我不想做的。我宁愿不在生产服务器上做太多额外的事情,因为生产服务器已经因为论坛流量而负载很重了。另外,如果我需要设置反向代理,我可能就不需要在本地运行 Grafana 和 Prometheus 了,因为我可以轻松地将 /metrics 代理到 IP 地址并且不使用 HTTPS——但这听起来都有些笨拙。我以为会有更好的方法。
1 个赞
pfaffman
(Jay Pfaffman)
2022 年3 月 29 日 13:43
4
这东西不多。开销很小。
哦,等等。但是,如果你设置好了,让正确的远程 IP 到达 Discourse,那么你就可以将远程 IP 设置为你运行 prometheus 的任何地方,它就能工作。我用我监控过的一些网站就是这么做的。我很确定这就是为什么添加了 DISCOURSE_PROMETHEUS_TRUSTED_IP_ALLOWLIST_REGEX。
你使用的是 cloudflare 模板吗?(推荐的做法是使用真正的 CDN,让 Discourse 自己决定代理哪些东西,但你也不想这样做。)
1 个赞
helmi
(Helmi)
2022 年3 月 29 日 13:50
5
这正是我遇到的问题。
我正在使用一台没有被 Cloudflare 代理的测试机。我在那里设置了 prometheus exporter,并将 DISCOURSE_PROMETHEUS_TRUSTED_IP_ALLOWLIST_REGEX 设置为我的监控服务器,一切都运行良好。
但在生产机上却不行。
是的,我正在使用 cloudflare 模板
templates:
- "templates/postgres.template.yml"
- "templates/redis.template.yml"
- "templates/web.template.yml"
- "templates/web.ratelimited.template.yml"
## 如果你想添加 Lets Encrypt (https),请取消注释这两行
- "templates/web.ssl.template.yml"
- "templates/web.letsencrypt.ssl.template.yml"
- "templates/cloudflare.template.yml"
并且用户管理员中的 IP 地址看起来是正确的。
到目前为止,我对 Cloudflare 的工作方式非常满意,它已经在 DDOS 防护方面提供了很大帮助,所以我宁愿不切换到其他 CDN 解决方案——至少我看不出有任何理由。
关于 prometheus exporter,我不确定为什么,但它似乎不像 Discourse 通常那样进行 IP 检查。我对 ruby 不够精通,无法在代码中验证这个假设,但我对此非常好奇。
pfaffman
(Jay Pfaffman)
2022 年3 月 29 日 13:59
6
helmi:
它已经在 DDOS 防护方面提供了很大帮助
如果您的社区容易遭受 DDOS 攻击,那么 Cloudflare 是一个很好的解决方案。
哦,它运行在自己的端口上,所以它绕过了 NGINX,而那正是那个模板所改变的,所以这就是为什么它不同。因此,如果您想让它支持 https,您需要一个外部 nginx 来实现这一点,我想。或者直接通过 http 访问它,并相信 IP 级别的限制足够好(并信任中间网络)。
helmi
(Helmi)
2022 年3 月 29 日 14:01
7
不确定我们是否在谈论同一件事。我指的是导出器插件(这个帖子就是关于它的),而不是 Prometheus。导出器似乎不像 Discourse 本身那样处理 IP 检查——否则问题就不应该存在,对吧?
1 个赞
pfaffman
(Jay Pfaffman)
2022 年3 月 29 日 14:23
8
是的。我读得太快了。我不知道为什么它不会获得与 Discourse 相同的 IP 地址。
helmi
(Helmi)
2022 年3 月 30 日 18:56
9
我现在已经搞定了。看到 @sam 的示例仪表板,我想知道如何获取 Redis 和 PostgreSQL 的数据。很可能需要两个独立的导出器。只是想知道如何在 Discourse 中连接到 PostgreSQL 和 Redis