我希望有一个图表,其中所有最近请求我的Web服务器的IP都显示为总请求计数.这样做可行吗?我可以添加一个查询并在via普罗米修斯之后删除它吗?

推荐答案

Technically,是的.您需要:

  1. 在您的服务器中公开一些指标(可能是一个计数器),比如requests_count,带有标签;比如ip
  2. 每当您收到请求时,请将标签设置为请求者IP的指标设置为inc
  3. 在Grafana中,绘制度量值,很可能通过IP地址求和来处理多个水平zoom 的服务器处理请求的情况sum(your_prometheus_namespace_requests_count) by (ip)
  4. 将Grafana中图形的Legend设置为{{ ip }},以在其表示的IP地址后"命名"每一行

However,度量值的每一个不同标签值都会导致普罗米修斯时间序列数据库中存在一个全新的度量值;您可以将requests_count{ip="192.168.0.1"}=1这样的度量在消耗内存的方式上与requests_count_ip_192_168_0_1{}=1类似.普罗米修斯TSDB头部当前持有的每个度量实例取something on the order of 3kB to exist.这意味着,如果你正在处理数百万个请求,仅从这一个指标,你就将用千兆字节的数据淹没普罗米修斯的内存.关于这个问题,另一个答案有更详细的解释:https://stackoverflow.com/a/69167162/511258

With that in mind,如果您知道需要连接少量IP地址(可能在内部intranet上,或分发给少数已知客户端的客户端上),那么这种方法是有意义的,但如果您计划部署到web上,这将允许人们(很可能在不知不觉中)以一种非常简单的方式 destruct 您的监控系统.

您可能需要研究另一种方法——例如,Grafana能够从一些常见的日志(log)聚合平台中摄取数据,因此您可能可以进行一些 struct 化(例如JSON)日志(log)记录,在Elasticsearch中保存,然后从其中保存的数据创建一个图.

Go相关问答推荐

读取JSON数据并在网页上显示

AWS S3 SelectObjectContent在AWS SDK v2 for Go中不返回结果

如何使用我的 struct 化日志(log)记录格式使人panic ?

使用一元或服务器流将切片从GRPC服务器返回到客户端

如何防止程序B存档/删除围棋中程序A当前打开的文件?

Golang String

exec的可执行决议.命令+路径

如何使redis池的等待超时

无效操作:v > max(类型参数 T 与 > 不可比较)

Opensearch 错误 ping 弹性服务器:由未知权威签署的 x509 证书

将 struct 转换为 CSV 字符串

golang yaml 马歇尔网址

创建新对象后如何返回嵌套实体?

Golang 构建多平台问题

Golang invopop jsonschema 使用 if/then/else

Go模板中的浮点除法

如何在 Gorm 中获得特定日期的最大值?

如何获得Ent中数字列的总和

如何发送带有登录数据的 GET 请求并将 cookie 数据保存到 txt 文件?

如何动态解析 Go Fiber 中的请求正文?