参考网址
感谢大佬分享
总结
二者之间,可以互相集成,也可以相互独立。
- 集成
Prometheus负责【收集】和【存储】监控数据,而Grafana则负责将这些数据以直观、美观的方式展示出来。
- 独立
尽管Prometheus和Grafana之间有着紧密的集成关系,但它们也可以独立使用。
Prometheus作为一个独立的监控系统,可以不依赖于任何特定的可视化工具;
而Grafana也支持多种数据源,不仅限于Prometheus。
Prometheus 和 grafama 之间是什么关系
1. 数据源与数据提供
- Prometheus:作为一个开源的监控系统,Prometheus使用Go语言编写,由SoundCloud公司在2012年开发并公开发布。它特别适合于监控云原生应用程序和服务,如Kubernetes,同时也能够监控传统的基础设施。Prometheus通过采集大量监控数据并存储到时间序列数据库中,提供强大的数据模型、灵活的查询语言(PromQL)以及不依赖分布式存储的单节点可扩展性。
- Grafana:作为一个跨平台的开源分析和监控解决方案,Grafana支持多种数据源,包括Prometheus。Grafana以其丰富的图表类型、灵活的仪表板功能和用户友好的界面而闻名,它允许用户创建美观的数据可视化,这些可视化可以公开分享或嵌入到其他应用程序中。
2. 集成关系
- 数据源集成:Grafana可以配置为从Prometheus读取时间序列数据,这是两者集成的基础。通过Grafana,用户可以轻松地访问和展示Prometheus收集的数据。
- 指标查询:在Grafana中,用户可以通过其查询编辑器执行PromQL查询,从而利用Prometheus的数据选择和计算能力。这使得用户能够根据需要查询和展示特定的监控指标。
- 仪表板展示:Grafana的强大仪表板功能可以用来展示Prometheus收集的指标数据,提供直观的图表和实时数据。用户可以根据需要定制仪表板,将不同的图表组合在一起,以便于同时查看多个数据指标。
- 告警功能:Prometheus提供的告警规则可以通过Grafana进行展示和管理,使得告警信息更加直观。用户可以在Grafana中设置告警规则,当数据满足特定条件时,Grafana可以发送通知给指定的联系人。
3. 相互依赖与优势
- 相辅相成:Prometheus和Grafana之间的集成关系使得它们能够相辅相成,共同提供强大的监控和数据可视化解决方案。Prometheus负责收集和存储监控数据,而Grafana则负责将这些数据以直观、美观的方式展示出来。
- 提升用户体验:通过Grafana的用户友好界面,非技术用户也能够轻松地查看和理解Prometheus收集的数据,从而提高了监控系统的整体用户体验。
4. 独立性
- 尽管Prometheus和Grafana之间有着紧密的集成关系,但它们也可以独立使用。Prometheus作为一个独立的监控系统,可以不依赖于任何特定的可视化工具;而Grafana也支持多种数据源,不仅限于Prometheus。
5. 总结
综上所述,普罗米修斯(Prometheus)和Grafana之间的关系主要体现在监控和数据可视化领域中的紧密集成与合作,它们共同为用户提供了强大的监控和数据可视化解决方案。
二者之间是密切相关且常配合使用的两种工具,它们之间的关系主要体现在以下几点:
Prometheus 是一个强大的监控系统和时间序列数据库,用于收集和存储各种指标数据。
而 Grafana 是一个数据可视化工具。
Prometheus 负责采集、存储监控数据,当需要将这些数据以直观、美观的图表形式展现出来时,Grafana 就发挥作用了。
Grafana 可以连接到 Prometheus 数据库,将 Prometheus 中存储的指标数据进行可视化展示,帮助用户更好地理解和分析监控信息,以便进行监控、故障排查、性能分析等。
总的来说,它们相互配合,共同构成一个完整的监控可视化解决方案。
简介
Prometheus,是一个开源的完整监控解决方案.
Prometheus 是古希腊神话里泰坦族的一名神明,名字的意思是“先见之明”.
下面是其官网封面图引导语:From metrics to insight,从指标到洞察力,通过指标去洞察你的系统,为我们的系统提供指标收集和监控的开源解决方案。
也就是说,Prometheus 是一个数据监控的解决方案,让我们能随时掌握系统运行的状态,快速定位问题和排除故障。

内置函数
Prometheus 内置了很多函数,这里主要记录下常用的几个函数的使用:
1/rate()函数
rate 函数可以用来求指标的平均变化速率。
rate函数=时间区间前后两个点的差 / 时间范围
一般 rate 函数可以用来求某个时间区间内的请求速率,也就是我们常说的 QPS。(每秒查询数)


2/irate()函数
但是 rate 函数只是算出来了某个时间区间内的平均速率,没办法反映突发变化。
假设在一分钟的时间区间里,前 50 秒的请求量都是 0 到 10 左右,但是最后 10 秒的请求量暴增到 100 以上,这时候算出来的值可能无法很好的反映这个峰值变化。
这个问题可以通过 irate 函数解决,irate 函数求出来的就是瞬时变化率。


3/increase()
increase(v range-vector)函数获取区间向量中的第一个和最后一个样本并返回其增长量,它会在单调性发生变化时(如由于采样目标重启引起的计数器复位)自动中断。
由于这个值被外推到指定的整个时间范围,所以即使样本值都是整数,你仍然可能会得到一个非整数值,如果除以一定时间就可以获取该时间内的平均增长率。
例如,以下表达式返回区间向量中每个时间序列过去 5 分钟内 HTTP 请求数的增长数:
increase(http_requests_total{job="apiserver"}[5m])
该函数配合counter数据类型使用,它的返回值类型只能是计数器类型。
# 2/rate()函数
rate(),是速率函数,prometheus提供最重要的函数,只要碰上 counter 数据类型,直接套上 rate([m]) / increase([m])
rate() 是取一段时间内增量的平均每秒的增量数。比如rate[1m],1m(1分钟)就是这里说的一段时间内。
然后再把这些增量,平均算在每秒的时间内。
rate()函数专门配合 counter类型数据使用的函数
它的功能是按照设置一个时间段,取counter这个时间段中的平均每秒的增量。
例如:rate(node_network_receive_bytes[1m]) (用于监控主机上所有网卡每分钟的流量)
比如累积量从 440011229804456 --> 440011229805456,1分钟内增加了 1000bytes (假设)
比如累积量从 440011229805456 --> 440011229810456,5分钟之内增加了 5000 bytes(假设)
加入 rate(. [1m]) 之后,会把 1000bytes / 60秒 =~ 16bytes
就是这样计算出在一分钟内的增量,平均每秒增加 16bytes

同理 rate([5m]) ,会把 5000bytes / 300秒 =~ 16bytes
也会同样计算出5分钟内,平均每秒增加 16bytes

rate(1m) 这样的取值方法 比起 rate(5m),因为它取得时间短,所以任何某一瞬间得突起或者降低会在成图得时候体现的更加细致、敏感。
而 rate(5m) 会把整个5分钟内得都一起平均了,当发生瞬间凸起得时候,会显得图平缓了一些 ( 因为取得时间段长 把波峰波谷 都给平均肖平了)
在工作当中,具体取 rate(1m) 还是 rate(5m) 决定于对监控数据得敏感程度来进行选择。
3/increase({}[time]) 增量函数
在prometheus中,用来针对Counter这种持续增长的统计类型,截取其中一段时间的增量。
配合时间使用。
increase() 是取一段时间增长的总量。
increase(v range-vector) 函数获取区间向量中的第一个和最后一个样本并返回其增长量,它会在单调性发生变化时(如由于采样目标重启引起的计数器复位)自动中断。
例如,以下表达式返回时间区间范围内,http_requests_total指标在过去5分钟内HTTP请求数的增长数:
increase(http_requests_total{job="apiserver"}[5m])
4/sum() 叠加函数
比如某个服务部署在多台服务器上
如果我们不用sum,那么就会有多条线来表示,有几台服务器,就会有几条线,这样不是很直观。
用sum()函数,我们可以一目了然的知道,一共的数量是多少。
5/by()拆分函数
by()这个函数可以把 sum 合并到一起的数值,按照指定的方式进行拆分。() 内 填写它指定的方式
在当前案例,需要按照集群节点进行拆分。所以采用 instance=“机器名”,by(instance)。
6/topk()函数
定义:取前几位的最高值。格式:topk(number,key)
7/count() 函数
定义:把数值符合条件的,输出数目进行加和**
例:找出当前(或者历史)TCP 等待数大于200的 机器数量
`count(count_netstat_wait_connections > 200)`