我想有一个图表,其中所有最近的ip请求我的web服务器得到显示为总请求计数。这样的事情可行吗?我可以通过 Prometheus添加查询并在之后删除它吗?
技术上,是的。您需要:
- 在服务器中暴露一些度量(可能是计数器)-例如,
requests_count
,带有标签;例如,ip
- 当你收到一个请求,
inc
的指标与标签设置为请求者的IP - 在Grafana中,图表度量,可能通过IP地址求和来处理您有几个水平缩放的服务器处理请求的情况
sum(your_prometheus_namespace_requests_count) by (ip)
- 将Grafana中图形的
Legend
设置为{{ ip }}
,以其所代表的IP地址为每行"命名">
,每一个不同的标签值都会导致普罗米修斯时间序列数据库中出现一个全新的指标;您可以认为像requests_count{ip="192.168.0.1"}=1
这样的指标在如何消耗内存方面与requests_count_ip_192_168_0_1{}=1
有些相似。当前保存在Prometheus TSDB头部中的每个度量实例需要大约3kB的大小才能存在。这意味着,如果您正在处理数百万个请求,那么仅从这一个度量指标就会用千兆字节的数据淹没普罗米修斯的内存。关于这个问题的更详细的解释存在于另一个答案中:https://stackoverflow.com/a/69167162/511258
考虑到这一点,如果你知道你希望有少量的IP地址连接(可能在内部内部网上,或者你分发给少数已知客户端的客户端),这种方法是有意义的,但是如果你计划部署到web上,这将允许人们(不知不觉地,很可能)崩溃你的监控系统。
你可能想研究一个替代方案——例如,Grafana能够从一些常见的日志聚合平台摄取数据,所以也许你可以做一些结构化(例如JSON)日志记录,保存在例如Elasticsearch中,然后从其中保存的数据创建一个图。