热门关键字:
jquery > jquery教程 > html5 > Prometheus 入门

Prometheus 入门

245
作者:管理员
发布时间:2020/3/24 11:00:30
评论数:0
转载请自觉注明原文:http://www.jq-school.com/Show.aspx?id=1097

  Prometheus入门

  简介

  Prometheus是一套开源的系统监控报警框架。它启发于Google的borgmon监控系统,由工作在SoundCloud的google前员工在2012年创建,作为社区开源项目进行开发,并于2015年正式发布。

  特点

  作为新一代的监控框架,Prometheus具有以下特点:

  强大的多维度数据模型:

  时间序列数据通过metric名和键值对来区分。

  所有的metrics都可以设置任意的多维标签。

  数据模型更随意,不需要刻意设置为以点分隔的字符串。

  可以对数据模型进行聚合,切割和切片操作。

  支持双精度浮点类型,标签可以设为全unicode。

  灵活而强大的查询语句(PromQL):在同一个查询语句,可以对多个metrics进行乘法、加法、连接、取分数位等操作。

  易于管理:Prometheusserver是一个单独的二进制文件,可直接在本地工作,不依赖于分布式存储。

  高效:平均每个采样点仅占3.5bytes,且一个Prometheusserver可以处理数百万的metrics。

  使用pull模式采集时间序列数据,这样不仅有利于本机测试而且可以避免有问题的服务器推送坏的metrics。

  可以采用pushgateway的方式把时间序列数据推送至Prometheusserver端。

  可以通过服务发现或者静态配置去获取监控的targets。

  有多种可视化图形界面。

  易于伸缩。

  组成及架构

  Prometheus生态圈中包含了多个组件,其中许多组件是可选的:

  PrometheusServer:用于收集和存储时间序列数据。

  ClientLibrary:客户端库,为需要监控的服务生成相应的metrics并暴露给Prometheusserver。当Prometheusserver来pull时,直接返回实时状态的metrics。

  PushGateway:主要用于短期的jobs。由于这类jobs存在时间较短,可能在Prometheus来pull之前就消失了。为此,这次jobs可以直接向Prometheusserver端推送它们的metrics。这种方式主要用于服务层面的metrics,对于机器层面的metrices,需要使用nodeexporter。

  Exporters:用于暴露已有的第三方服务的metrics给Prometheus。

  Alertmanager:从Prometheusserver端接收到alerts后,会进行去除重复数据,分组,并路由到对收的接受方式,发出报警。常见的接收方式有:电子邮件,pagerduty,OpsGenie,webhook等。

  一些其他的工具。

  下图为Prometheus官方文档中的架构图:

  从上图可以看出,Prometheus的主要模块包括:Prometheusserver,exporters,Pushgateway,PromQL,Alertmanager以及图形界面。

  其大概的工作流程是:

  Prometheusserver定期从配置好的jobs或者exporters中拉metrics,或者接收来自Pushgateway发过来的metrics,或者从其他的Prometheusserver中拉metrics。

  Prometheusserver在本地存储收集到的metrics,并运行已定义好的alert.rules,记录新的时间序列或者向Alertmanager推送警报。

  Alertmanager根据配置文件,对接收到的警报进行处理,发出告警。

  在图形界面中,可视化采集数据。

  相关概念

  下面将对Prometheus中的数据模型(时间序列),metric类型,instance和jobs等概念进行介绍。

  数据模型

  Prometheus中存储的数据为时间序列,是由metric的名字和一系列的标签(键值对)唯一标识的,不同的标签则代表不同的时间序列。

  metric名字:该名字应该具有语义,一般用于表示metric的功能,例如:http_requests_total,表示http请求的总数。其中,metric名字由ASCII字符,数字,下划线,以及冒号组成,且必须满足正则表达式[a-zA-Z_:][a-zA-Z0-9_:]*。

  标签:使同一个时间序列有了不同维度的识别。例如http_requests_total{method="Get"}表示所有http请求中的Get请求。当method="post"时,则为新的一个metric。标签中的键由ASCII字符,数字,以及下划线组成,且必须满足正则表达式[a-zA-Z_:][a-zA-Z0-9_:]*。

  样本:实际的时间序列,每个序列包括一个float64的值和一个毫秒级的时间戳。

  格式:{=,…},例如:http_requests_total{method="POST",endpoint="/api/tracks"}。

  Metrics种类

  Prometheus客户端库提供了四种核心Metrics类型。

  Counter(计数器)

  说明:Counter是一个累积度量,它表示一个单调递增的Metrics,其值只能在重启时递增或重置为零

  场景:可以使用Counter来表示http的请求数、已完成的任务数或错误数、下单数。

  Gauge(测量仪)

  说明:当前值的一次快照(snapshot)测量,可增可减。

  场景:磁盘使用率,当前同时在线用户数。

  Histogram(直方图)

  说明:通过区间统计样本分布。

  场景:请求延迟时间的统计。例如统计0~200ms、200ms~400ms、400ms~800ms区间的请求数有多。

  Summary(汇总)

  说明:根据样本统计出百分位。

  场景:请求延迟时间的统计。例如统计95%的请求延迟<xxxms,99%的请求延迟<xxxms

  instance和jobs

  在Prometheus术语中,你可以scrape(刮擦)的端点称为实例,通常对应于单个进程。一组同种类型的instances(主要用于保证可扩展性和可靠性),例如:具有四个复制instances(实例)的API服务器job作业:





如果您觉得本文的内容对您的学习有所帮助:支付鼓励



关键字:html
友荐云推荐