Prometheus浅析

1.Prometheus是什么?

Prometheus(下文称Prom) 是由 SoundCloud 开源监控告警解决方案,与Kubernetes同属CNCF,它已经成为炙手可热的Kubernetes生态圈中的核心监控系统,越来越多的项目(如Kubernetes和etcd等 )都加入了丰富的Prometheus原生支持,

Prom提供了通用的数据模型和便捷的数据采集、存储和查询接口,同时基于Go实现也大大降低了服务端的运维成本,可以借助一些优秀的图形化工具(如Grafana)可以实现友好的图形化和报警。

1.1单词理解
  • metric—指标(名字)
  • targes–数据源
  • alert–警报
  • exporter–负责数据汇报和信息收集的程序
  • quantile–分位数
  • bucket–块
  • Summary–概略图
  • Histogram–直方图
  • labels–标签
1.2主要特点:
  • 多维数据模型【时序由 metric(指标) 名字和 k/v 的 labels 构成】。
  • 灵活的查询语句(PromQL)。
  • 无依赖存储,支持 local 和 remote 不同模型。
  • 采用 http 协议,使用 pull 模式拉取数据,简单易懂。
  • 监控目标,可以采用服务发现或静态配置的方式。
  • 支持多种统计数据模型,图形化友好。
1.3核心组件:
  • Prometheus Server:主要用于抓取数据和存储时序数据,另外还提供API供外界查询和 Alert Rule 配置管理。
  • client libraries:用于对接 Prometheus Server, 可以查询和上报数据。
  • push gateway :允许短暂和​​批量作业将其指标暴露给普罗米修斯。由于这些类型的作业可能存在时间不足以被删除,因此他们可以将其指标推送到Pushgateway。然后,Pushgateway将这些指标暴露给普罗米修斯,主要用于业务数据汇报等。
  • 各种汇报数据的 exporters :例如汇报机器数据的 node_exporter, 汇报 MongoDB 信息的 MongoDB * exporter 等等。
  • 用于告警通知管理的 alertmanager 。
1.4基础架构图

基础架构图

1.5模块逻辑解析:
  1. Prometheus server :定期从静态配置的 Prometheus targets (数据源)或者服务发现的 targets (数据源)拉取数据。
  2. Retrieval:检索拉去到的数据分发给TSDB进行存储。
  3. HTTP server:用于接受外界的HTTP请求。
  4. TSDB:当新拉取的数据大于配置内存缓存区的时候,Prometheus会将数据持久化到磁盘(HHD/SSD)(如果使用 remote storage 将持久化到云端)。
  5. Prometheus 可以配置 rules,然后定时查询数据,当条件触发的时候,会将 alert(警告) 推送(pushalerts)到配置的 Alertmanager(警告管理器)。
  6. Alertmanager :收到警告的时候,可以根据配置,聚合,去重,降噪,最后发送警告。
  7. API client,Grafana:API client通过使用promQL查询数据,Grafana用于聚合数据将数据可视化。
  8. Web UI: Prometheus的web接口,可用于简单可视化,及语句执行或者服务状态监控。
  9. short-lived jobs:存在时间不足以被删除的短暂和​​批量作业
  10. pushgateway:shaort-lived jobs 在推出时将数据推给pushgateway,主要用于业务数据汇报等。
注意:
  • Prometheus 的数据是基于时序的 float64 的值,如果你的数据值有更多类型,无法满足。
  • Prometheus 不适合做审计计费,因为它的数据是按一定时间采集的,关注的更多是系统的运行瞬时状态以及趋势,即使有少量数据没有采集也能容忍,但是审计计费需要记录每个请求,并且数据长期存储,这个 Prometheus 无法满足,可能需要采用专门的审计系统。

2.prometheus的数据模型

Prometheus 存储的是时序数据, 即按照相同时序(相同的名字和标签),以时间维度存储连续的数据的集合。

2.1时序索引
  • 时序(time series) 是由指标名字(Metric),以及一组 key/value 标签定义的,具有相同的名字以及标签属于相同时序。

  • 时序的名字由 ASCII 字符,数字,下划线,以及冒号组成,它必须满足正则表达式

      [a-zA-Z_:][a-zA-Z0-9_:]*, 
    

其名字应该具有语义化,一般表示一个可以度量的指标,例如: http_requests_total, 可以表示 http 请求的总数。

  • 时序的标签可以使 Prometheus 的数据更加丰富,能够区分具体不同的实例,例如:

      http_requests_total{method="POST"} 可以表示所有 http 中的 POST 请求。
    
  • 标签名称由 ASCII 字符,数字,以及下划线组成, 其中 __ 开头属于 Prometheus 保留,标签的值可以是任何 Unicode 字符,支持中文。

2.2时序样本
  • 按照某个时序以时间维度采集的数据,称之为样本,其值包含:
    • 一个 float64 值
    • 一个毫秒级的 unix 时间戳
2.3格式
  • Prometheus 时序格式与 OpenTSDB 相似:

         <metric name>{<label name>=<label value>, ...}
    

其中包含时序名字以及时序的标签。

2.4时序 4 种类型

Prometheus 时序数据分为 Counter(变化的增减量), Gauge(瞬时值), Histogram(采样并统计), Summary(采样结果) 四种类型。

  • Counter

Counter 表示收集的数据是按照某个趋势(增加/减少)一直变化的,我们往往用它记录服务请求总量、错误总数等。
例如 Prometheus server 中 http_requests_total, 表示 Prometheus 处理的 http 请求总数,我们

  • 4
    点赞
  • 30
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值