1 回答
TA贡献1871条经验 获得超8个赞
从技术上讲,是的。您将需要:
在您的服务器中公开一些指标(可能是一个计数器) - 例如,
requests_count
带有标签;说,ip
每当您收到请求时,
inc
标签设置为请求者 IP 的指标在 Grafana 中,绘制指标图表,可能通过 IP 地址对其求和,以处理您有多个水平扩展的服务器处理请求的情况
sum(your_prometheus_namespace_requests_count) by (ip)
将
Legend
Grafana 中的图表设置为在{{ ip }}
其代表的 IP 地址之后“命名”每一行
然而,一个指标的每一个不同的标签值都会导致一个全新的指标存在于 Prometheus 时间序列数据库中;您可以认为一个指标在消耗内存方面requests_count{ip="192.168.0.1"}=1
有点相似requests_count_ip_192_168_0_1{}=1
。当前保存在 Prometheus TSDB 头中的每个指标实例都需要大约 3kB 的量级才能存在。这意味着,如果您要处理数百万个请求,那么仅凭这一指标,您就会用千兆字节的数据淹没 Prometheus 的内存。关于这个问题的更详细的解释存在于这个其他答案中:https ://stackoverflow.com/a/69167162/511258
考虑到这一点,如果您确实知道您希望连接少量 IP 地址(可能在内部 Intranet 上,或者您分发给少数已知客户端的客户端),那么这种方法是有意义的,但是如果您正计划部署到网络,这将为人们提供一种非常简单的方法(在不知不觉中,很可能)使您的监控系统崩溃。
您可能想要研究替代方案——例如,Grafana 能够从一些常见的日志聚合平台获取数据,因此也许您可以进行一些结构化(例如 JSON)日志记录,将其保存在 Elasticsearch 中,然后从中创建一个图表其中保存的数据。
- 1 回答
- 0 关注
- 195 浏览
添加回答
举报