目标
通过grafana & prometheus跟踪RPM和启动时间
Situation
我们用的是
django-prometheus -> To emit metrics
fluent-bit -> Scrapes django metrics every 15s and pushes to prometheus
prometheus -> 2 shards running via prometheus operator on k8s问题
当我们比较grafana仪表板和aws目标组请求度量时,它是不匹配的。尝试了以下所有选项
Expr: sum by(service) (irate(django_http_requests_before_middlewares_total{namespace="name"}[5m]))
Expr: sum by(service) (increase(django_http_requests_before_middlewares_total{namespace="name"}[5m]))
Expr: sum by(service) (rate(django_http_requests_before_middlewares_total{namespace="name"}[5m]))django_http_requests_before_middlewares_total -> This is Counter data type.
This counter never resets because we have unique dimension
- container_id
- service_name
- namespace 问:是否有可能在grafana上创建类似aws目标群体度量的仪表板?
理想情况下,increase应该可以工作,但它需要持续的差异,这可能会导致错误的结果。
提前谢谢。
发布于 2022-07-10 07:38:11
理论上,以下查询应该在最后一分钟返回每个服务请求的确切数量:
sum(
increase(django_http_requests_before_middlewares_total[1m])
) by (service)但是实际上,Prometheus可能会为这个查询返回意想不到的结果:
[1m] )之前的最后一个原始样本与后视窗口中的第一个原始样本之间的计数器增量。increase(m[d])将返回d <= 1m的空结果。Prometheus开发人员意识到了这些问题,并将修复它们--参见这个设计博士。
同时,您可以尝试在increase()中使用VictoriaMetrics函数--这是我工作的类似Prometheus的监视解决方案。它的增加函数不存在上述问题。
一个重要的注意事项: Prometheus和VictoriaMetrics都根据图表上显示的每个点独立计算查询结果。因此,如果需要使用上面的查询显示每分钟的请求数,则需要将图上各点之间的间隔(也称为step)设置为1分钟。
发布于 2022-07-08 07:19:44
普罗米修斯没有保存足够的数据来给出精确的数值。
为了了解原因,让我们假设1分钟前Prometheus已经为度量10提取了一个http_requests值,而现在它已经被更新为40。
已经很清楚的是,通过1m抽样,您不知道在最后一分钟这30个请求是什么时候发生的。是短穗还是均匀分布?尽管如此,rate(http_requests[1m])将每秒为您提供(40-10)/60s = 0.5请求。Increase()以同样的方式工作,它是rate()*interval或0.5*60 = 30。
尽管上面的例子显示了精确的值,但是很明显,用这个数学不能达到完美的精度。除非您正在处理缓慢移动的计数器(这些计数器每隔几分钟更新一次),否则此错误通常是无关紧要的。
https://stackoverflow.com/questions/72904912
复制相似问题