【Prometheus】组件介绍-工作流程-部署模式-数据类型-监控

一、Prometheus简介

Prometheus是一个开源的系统监控和报警系统,现在已经加入到CNCF基金会,成为继k8s之后第二个在CNCF托管的项目,在kubernetes容器管理系统中,通常会搭配prometheus进行监控,同时也支持多种exporter采集数据,还支持pushgateway进行数据上报,Prometheus性能足够支撑上万台规模的集群。

Prometheus配置:https://prometheus.io/docs/prometheus/latest/configuration/configuration/

Prometheus监控组件对应的exporter部署地址:
https://prometheus.io/docs/instrumenting/exporters/

Prometheus基于k8s服务发现参考:
https://github.com/prometheus/prometheus/blob/release-2.31/documentation/examples/prometheus-kubernetes.yml

二、Prometheus特点于样本

2.1、特点

  • 1.多维度数据模型
    每一个时间序列数据都由metric度量指标名称和它的标签labels键值对集合唯一确定:
    这个metric度量指标名称指定监控目标系统的测量特征(如:http_requests_total- 接收http请求的总计数)。labels开启了Prometheus的多维数据模型:对于相同的度量名称,通过不同标签列表的结合, 会形成特定的度量维度实例。(例如:所有包含度量名称为/api/tracks的http请求,打上method=POST的标签,则形成了具体的http请求)。这个查询语言在这些度量和标签列表的基础上进行过滤和聚合。改变任何度量上的任何标签值,则会形成新的时间序列图。
  • 2.灵活的查询语言(PromQL)
    可以对采集的metrics指标进行加法,乘法,连接等操作;
  • 3.可以直接在本地部署,不依赖其他分布式存储;
  • 4.通过基于HTTP的pull方式采集时序数据;
  • 5.可以通过中间网关pushgateway的方式把时间序列数据推送到prometheus server端;
  • 6.可通过服务发现或者静态配置来发现目标服务对象(targets)。
  • 7.有多种可视化图像界面,如Grafana等。
  • 8.高效的存储
    每个采样数据占3.5 bytes左右,300万的时间序列,30s间隔,保留60天,消耗磁盘大概200G。
  • 9.做高可用
  • 可以对数据做异地备份,联邦集群,部署多套prometheus,pushgateway上报数据

2.2、样本

在时间序列中的每一个点称为一个样本(sample),样本由一下三部分组成:

  • 指标(metric)
    指标名称和描述当前样本特征的labelsets

  • 时间戳(timestamp)

  • 样本值(value)

三、Prometheus组件介绍

在这里插入图片描述

  • Prometheus Server
    用于收集和存储时间序列数据。
  • Client Library
    客户端库,检测应用程序代码。当Prometheus抓取实例的HTTP端点时,客户端库会将所有跟踪的metrics指标的当前状态发送到prometheus server 端。
  • Exporters
    prometheus支持多种exporter,通过exporter可以采集metrics数据,然后发送到server算,所有向server提供监控数据的程序都可以被称为exporter。
  • Alertmanager
    从Prometheus server端接收alerts后,会进行去重、分组,并路由到对应的接收方,发出报警,常见的接收方式有:电子邮件、微信、钉钉、slack等。
  • Grafana
    监控仪表板,可视化监控数据。
  • pushgateway
    各个目标主机可上报数据到pushgateway,然后prometheus server统一从pushgateway拉取数据。

在这里插入图片描述

四、Prometheus工作流程

在这里插入图片描述

1、Prometheus server可定期从活跃的(up)目标主机上(target)拉取监控指标数据,目标主机的监控数据可通过配置静态job或者服务发现的方式被prometheus server采集到,这种方式默认的pull方式拉取指标;
也可以通过pushgateway把采集的数据上报的prometheus server中;
还可以通过一些组件自带的exporter采集相应组件的数据。

2、Prometheus server 把采集到的监控指标数据保存到本地磁盘或者数据库;
3、Prometheus 采集的监控指标数据按时间序列存储,通过配置报警规则,把触发的报警发送到alertmanager
4、Altermanager通过配置报警接收方,发送报警到邮件、微信或者钉钉等
5、Prometheus自带的web ui界面提供PromQL查询语言,可查询监控数据
6、Grafana可接入prometheus数据源,把监控数据以图形化形式展示出来

Prometheus和Zabbix对比分析
在这里插入图片描述

五、Prometheus的几种部署模式

5.1、基本高可用模式

在这里插入图片描述
基本的HA模式只能确保Promthues服务的可用性问题,但是不解决Prometheus Server之间的数据一致性问题以及持久化问题(数据丢失后无法恢复),也无法进行动态的扩展。因此这种部署方式适合监控规模不大,Promthues Server也不会频繁发生迁移的情况,并且只需要保存短周期监控数据的场景。

5.2、基本高可用+远程存储

在这里插入图片描述
在解决了Promthues服务可用性的基础上,同时确保了数据的持久化,当Promthues Server发生宕机或者数据丢失的情况下,可以快速的恢复。 同时Promthues Server可能很好的进行迁移。因此,该方案适用于用户监控规模不大,但是希望能够将监控数据持久化,同时能够确保Promthues Server的可迁移性的场景。

5.3、基本高可用+远程存储+联邦集群

在这里插入图片描述

Promthues的性能瓶颈主要在于大量的采集任务,因此用户需要利用Prometheus联邦集群的特性,将不同类型的采集任务划分到不同的Promthues子服务中,从而实现功能分区。例如一个Promthues Server负责采集基础设施相关的监控指标,另外一个Prometheus Server负责采集应用监控指标。再有上层Prometheus Server实现对数据的汇聚。

六、Prometheus的四种数据类型

6.1、Counter

Counter是计数器类型:

  • Counter用于累计值,例如记录请求次数、任务完成数、错误发生次数
  • 一直增加,不会减少
  • 重启进程后,会被重置

例如:

http_response_total{method="GET",endpoint="/api/tracks"}  100
http_response_total{method="GET",endpoint="/api/tracks"}  160

Counter数据类型可以让用户方便的了解事件产生的速率变化,在PromQL内置的相关操作函数可以提供相应的分析,比如以HTTP应用请求量来说明:
1、通过rate()函数获取HTTP请求量的增长率 rate(http_requests_total[5m])
2、查询当前系统中,访问量前10的http地址 top(10,http_requeste_total)

6.2、Gauge

Gauge是测量器类型:

  • Gauge是常规数据,例如温度变化、内存使用变化
  • 可变大、可变小
  • 重启进程后,会被重置

例如:

memory_usage_bytes{host="master-01"}   100
memory_usage_bytes{host="master-01"}   30
memory_usage_bytes{host="master-01"}   50
memory_usage_bytes{host="master-01"}   80 

对于 Gauge 类型的监控指标,通过 PromQL 内置函数 delta() 可以获取样本在一段时间内的变化情况,例如,计算 CPU 温度在两小时内的差异:
dalta(cpu_temp_celsius{host=“zeus”}[2h])

你还可以通过PromQL 内置函数 predict_linear() 基于简单线性回归的方式,对样本数据的变化趋势做出预测。例如,基于 2 小时的样本数据,来预测主机可用磁盘空间在 4 个小时之后的剩余情况:
predict_linear(node_filesystem_free{job=“node”}[2h], 4 * 3600) < 0

6.3、histogram

histogram是柱状图,在Prometheus系统的查询语言中,有三种作用:

  • 在一段时间时间内对数据进行采样(通常是请求持续时间或响应大小等),并将其计入可配置的存储桶(bucket)中,后续可通过指定区间筛选样本,也可以统计样本中总数,最后一般将数据展示为直方图。
  • 对每个采样点值累计和(sum)
  • 对采样点的次数累计和(count)

度量指标名称: [basename]_上面三类的作用度量指标名称
1、[basename]_bucket{le=“上边界”}, 这个值为小于等于上边界的所有采样点数量
2、[basename]_sum
3、[basename]_count

小结:如果定义一个度量类型为Histogram,则Prometheus会自动生成三个对应的指标

为什么需要柱状图?

在大多数情况下人们都倾向于使用某些量化指标的平均值,例如 CPU 的平均使用率、页面的平均响应时间。这种方式的问题很明显,以系统 API 调用的平均响应时间为例:如果大多数 API 请求都维持在 100ms 的响应时间范围内,而个别请求的响应时间需要 5s,那么就会导致某些 WEB 页面的响应时间落到中位数的情况,而这种现象被称为长尾问题。
为了区分是平均的慢还是长尾的慢,最简单的方式就是按照请求延迟的范围进行分组。例如,统计延迟在 0~10ms 之间的请求数有多少,而 10~20ms 之间的请求数又有多少。通过这种方式可以快速分析系统慢的原因。Histogram 和 Summary 都是为了能够解决这样问题的存在,通过 Histogram 和 Summary 类型的监控指标,我们可以快速了解监控样本的分布情况。

Histogram 类型的样本会提供三种指标(假设指标名称为 ):
样本的值分布在 bucket 中的数量,命名为 _bucket{le=“<上边界>”}。解释的更通俗易懂一点,这个值表示指标值小于等于上边界的所有样本数量。

1、http 请求响应时间 <=0.005 秒 的请求次数为0
io_namespace_http_requests_latency_seconds_histogram_bucket{path="/",method="GET",code="200",le="0.005",} 0.0
2、http 请求响应时间 <=0.01 秒 的请求次数为0
io_namespace_http_requests_latency_seconds_histogram_bucket{path="/",method="GET",code="200",le="0.01",} 0.0
 3、http 请求响应时间 <=0.025 秒 的请求次数为0
io_namespace_http_requests_latency_seconds_histogram_bucket{path="/",method="GET",code="200",le="0.025",} 0.0
所有样本值的大小总和,命名为 <basename>_sum。

6.4、summary

与histogram类型类似,用于表示一段时间内的数据采集结果(通常是请求持续时间或响应大小等),但它直接存储了分位数(通过客户端计算,然后展示出来),而不是通过区间来计算。
它也有三种作用:

  • 对于每个采样点进行统计,并形成分位图。
  • 统计班上所有同学的总成绩(sum)
  • 统计班上同学的考试总人数(count)

带有度量指标的[basename]的summary 在抓取时间序列数据有如命名。
1、观察时间的φ-quantiles (0 ≤ φ ≤ 1), 显示为[basename]{分位数=“[φ]”}
2、[basename]_sum, 是指所有观察值的总和
3、[basename]_count, 是指已观察到的事件计数值

样本值的分位数分布情况,命名为 <basename>{quantile="<φ>"}1、含义:  http 请求中有 50% 的请求响应时间是 3.052404983s
  io_namespace_http_requests_latency_seconds_summary{path="/",method="GET",code="200",quantile="0.5",} 3.052404983
2、含义: http 请求中有 90% 的请求响应时间是 8.003261666s
  io_namespace_http_requests_latency_seconds_summary{path="/",method="GET",code="200",quantile="0.9",} 8.003261666
  
所有样本值的大小总和,命名为 <basename>_sum。
1、含义:http 请求的总响应时间为 51.029495508s
  io_namespace_http_requests_latency_seconds_summary_sum{path="/",method="GET",code="200",} 51.029495508

样本总数,命名为 <basename>_count。
1、含义:当前一共发生了 12 次 http 请求
  io_namespace_http_requests_latency_seconds_summary_count{path="/",method="GET",code="200",} 12.0

Histogram 与 Summary 的异同:

它们都包含了 _sum 和 _count 指标
Histogram 需要通过 _bucket 来计算分位数,而 Summary 则直接存储了分位数的值。

prometheus_tsdb_wal_fsync_duration_seconds{quantile=“0.5”} 0.012352463
prometheus_tsdb_wal_fsync_duration_seconds{quantile=“0.9”} 0.014458005
prometheus_tsdb_wal_fsync_duration_seconds{quantile=“0.99”} 0.017316173
prometheus_tsdb_wal_fsync_duration_seconds_sum 2.888716127000002
prometheus_tsdb_wal_fsync_duration_seconds_count 216

从上面的样本中可以得知当前Promtheus Server进行wal_fsync操作的总次数为216次,耗时2.888716127000002s。其中中位数(quantile=0.5)的耗时为0.012352463,9分位数(quantile=0.9)的耗时为0.014458005s。

七、Prometheus能监控什么

  • Databases
  • Hardware related
  • Messaging systems
  • Storage
  • HTTP
  • APIs
  • Logging
  • Other monitoring systems
  • Miscellaneous
  • Software exposing Prometheus metrics

7.1、DATABASES-数据库

• Aerospike exporter
• ClickHouse exporter
• Consul exporter (official)
• Couchbase exporter
• CouchDB exporter
ElasticSearch exporter
• EventStore exporter
Memcached exporter (official)
MongoDB exporter
• MSSQL server exporter
MySQL server exporter (official)
OpenTSDB Exporter
Oracle DB Exporter
• PgBouncer exporter
PostgreSQL exporter
• ProxySQL exporter
• RavenDB exporter
Redis exporter
• RethinkDB exporter
SQL exporter
• Tarantool metric library
• Twemproxy

7.2、HARDWARE RELATED-硬件相关

• apcupsd exporter
• Collins exporter
IBM Z HMC exporter
• IoT Edison exporter
• IPMI exporter
• knxd exporter
• Netgear Cable Modem Exporter
Node/system metrics exporter (official)
• NVIDIA GPU exporter
• ProSAFE exporter
• Ubiquiti UniFi exporter

7.3、Messaging systems-消息服务

• Beanstalkd exporter
• Gearman exporter
Kafka exporter
• NATS exporter
• NSQ exporter
• Mirth Connect exporter
• MQTT blackbox exporter
RabbitMQ exporter
• RabbitMQ Management Plugin exporter

7.4、Storage-存储

Ceph exporter
• Ceph RADOSGW exporter
Gluster exporter
Hadoop HDFS FSImage exporter
• Lustre exporter
• ScaleIO exporter

7.5、http-网站服务

Apache exporter
• HAProxy exporter (official)
• Nginx metric library
Nginx VTS exporter
• Passenger exporter
Squid exporter
• Tinyproxy exporter
• Varnish exporter
• WebDriver exporter

7.6、API

AWS ECS exporter
• AWS Health exporter
• AWS SQS exporter
• Cloudflare exporter
• DigitalOcean exporter
Docker Cloud exporter
Docker Hub exporter
GitHub exporter
• InstaClustr exporter
• Mozilla Observatory exporter
• OpenWeatherMap exporter
• Pagespeed exporter
Rancher exporter
• Speedtest exporter

7.7、Logging-日志

Fluentd exporter
• Google’s mtail log data extractor
• Grok exporter

7.8、Other monitoring systems

• Akamai Cloudmonitor exporter
Alibaba Cloudmonitor exporter
• AWS CloudWatch exporter (official)
Cloud Foundry Firehose exporter
• Collectd exporter (official)
• Google Stackdriver exporter
• Graphite exporter (official)
• Heka dashboard exporter
• Heka exporter
InfluxDB exporter (official)
• JavaMelody exporter
• JMX exporter (official)
• Munin exporter
Nagios / Naemon exporter
• New Relic exporter
• NRPE exporter
• Osquery exporter
• OTC CloudEye exporter
• Pingdom exporter
• scollector exporter
• Sensu exporter
SNMP exporter (official)
• StatsD exporter (official)

7.9、Miscellaneous-其他

• ACT Fibernet Exporter
• Bamboo exporter
• BIG-IP exporter
BIND exporter
• Bitbucket exporter
Blackbox exporter (official)
• BOSH exporter
cAdvisor
• Cachet exporter
• ccache exporter
• Confluence exporter
• Dovecot exporter
• eBPF exporter
• Ethereum Client exporter
• Jenkins exporter
JIRA exporter
• Kannel exporter
• Kemp LoadBalancer exporter
• Kibana Exporter
• Meteor JS web framework exporter
• Minecraft exporter module
• PHP-FPM exporter
• PowerDNS exporter
• Presto exporter
• Process exporter
• rTorrent exporter
• SABnzbd exporter
• Script exporter
• Shield exporter
SMTP/Maildir MDA blackbox prober
• SoftEther exporter
• Transmission exporter
• Unbound exporter
Xen exporter

7.10、Software exposing Prometheus metrics-Prometheus度量指标

• App Connect Enterprise
• Ballerina
• Ceph
• Collectd
• Concourse
• CRG Roller Derby Scoreboard (direct)
• Docker Daemon
• Doorman (direct)
• Etcd (direct)
• Flink
• FreeBSD Kernel
• Grafana
• JavaMelody
• Kubernetes (direct)
• Linkerd

  • 9
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

这个手刹不太灵儿

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值