Prometheus 简介
Prometheus是SoundCloud公司开源的监控系统,同时也是继Kubernetes之后,第二个加入CNCF的项目,目前是监控领域比较成熟的一站式方案。Prometheus与其他监控方案的不同之处在于它是定时地从监控目标(Exporters)暴露的API中拉取指标,然后将这些数据保存到时序数据库中,如果是监控目标是动态的,可以借助服务发现的机制动态地添加这些监控目标,另外它还会暴露执行PromQL(用来操纵时序数据的语言)的API,其他组件,例如Prometheus Web,Grafana可以通过这个API查询对应的时序数据。虽然 Exporters 在采集端做了预聚合,这样损失了精确度,但大大减少数据量以及提升查询速度。
本文将重点介绍Prometheus指标类型,加深读者对Prometheus的认识和理解。
Prometheus 适用场景
Prometheus在记录纯数字时间序列方面表现非常好。它既适用于面向服务器等硬件指标的监控,也适用于高动态的面向服务架构的监控。对于现在流行的微服务,Prometheus的多维度数据收集和数据筛选查询语言也是非常的强大。
Prometheus 不适用场景
如果需要对统计数据需要100%的精确,它并不适用,例如:它不适用于实时计费系统,此时更需要专业的时序数据库产品来替代。
Prometheus 部署
采用容器方式部署非常简单,仅仅需要一条命令即可。该部署方式为实验性方式不要在生产环境使用这种方式。
docker run \
-p 9090:9090 \
prom/prometheus
PromQL 查询原则
在介绍指标类型前,先了解下PromQL的查询原则:
- 任意 PromQL 返回的结果都不是原始数据,即使查询一个具体的 Metric(如 go_goroutines),结果也不是原始数据
- 任意 Metrics 经过 Function 计算后会丢失 __name__ Label
- 子序列间具备完全相同的 Label/Value 键值对(可以有不同的 __name__)才能进行代数运算
特别强调一点,PromQL 在计算时使用的等距 interval 时间点,每个 interval 时间点的结果都是利用附近的采样点经过某种形式的估算或近似得到的,所以在 Prom 中提诸如“1:28:07 AM 发生了 113 次某种事件”是不准确的,PromQL 所有计算结果都存在误差。
Prometheus 指标类型
Counter
Counter可以简单理解为计数器,是个比较简单但又常用的类型。适用于生成请求次数、错误次数等指标。
比如prometheus暴露的http请求次数指标如下(打开/metrics
查看)
# HELP prometheus_http_requests_total Counter of HTTP reques