移动测试开发 Prometheus 监控系统初探与实践

优采云 发布时间: 2020-08-11 16:01

  我们在日常测试工作中,除了在产品开发过程中须要进行测试保证质量,在产品上线后,对产品各个指标的实时监控也是保证产品质量的重要环节。最近在项目中督查并使用了开源监控系统框架Prometheus,本文将主要介绍一下Prometheus监控系统的基础知识,并且将在本地布署并运行一个Prometheus Server实例,通过Node Exporter采集当前主机的系统资源使用情况, 并通过Grafana创建一个简单的可视化仪表盘来可视化监控数据。

  Prometheus才能做哪些?

  Prometheus 是一套开源的系统监控报案框架。它启发于 Google 的 borgmon 监控系统,由工作在 SoundCloud 的 google 前职工在 2012 年创建,作为社区开源项目进行开发,并于 2015 年即将发布。2016 年,Prometheus 正式加入 Cloud Native Computing Foundation,成为受欢迎度仅次于 Kubernetes 的项目。

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

  强大的多维度数据模型:

  1.时间序列数据通过 metric 名和键名对来分辨。

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

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

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

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

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

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

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

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

  ⑤ 可以采用 push gateway 的方法把时间序列数据推送至 Prometheus server 端。

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

  ⑦ 有多种可视化图形界面。

  ⑧ 易于伸缩。

  Prometheus的基本概念

  1.Prometheus 组成及构架

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

  ① Prometheus Server: 用于搜集和储存时间序列数据。

  ② Client Library: 客户端库,为须要监控的服务生成相应的 metrics 并曝露给 Prometheus server。当 Prometheus server 来 pull 时,直接返回实时状态的 metrics。

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

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

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

  下图是Prometheus官网上给出的构架图:

  

  2.数据模型

  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"}。

  3.四种 Metric 类型

  Prometheus 客户端库主要提供四种主要的 metric 类型:

  Counter

  ① 一种累加的 metric,典型的应用如:请求的个数,结束的任务数,出现的错误数等等。

  例如,查询http_requests_total{method="get", job="Prometheus", handler="query"} 返回 8,10 秒后,再次查询,则返回 14。

  Gauge

  ① 一种常规的 metric,典型的应用如:温度,运行的goroutines的个数。

  ② 可以任意加减。

  例如:go_goroutines{instance="172.17.0.2", job="Prometheus"} 返回值 147,10 秒后返回 124。

  Histogram

  ① 可以理解为柱状图,典型的应用如:请求持续时间,响应大小。

  ② 可以对观察结果取样,分组及统计。

  例如,查询http_request_duration_microseconds_sum{job="Prometheus", handler="query"} 时,返回结果如下:

  

  Summary

  ① 类似于 Histogram, 典型的应用如:请求持续时间,响应大小。

  ② 提供观测值的 count 和 sum 功能。

  ③ 提供百分位的功能,即可以按比率界定跟踪结果。

  4.instance 和 jobs

  instance: 一个单独 scrape 的目标,一般对应于一个进程。

  jobs: 一组同种类型的 instances(主要用于保证可扩展性和可靠性)

  安装布署Prometheus实践

  介绍完Prometheus的基本概念后,我们来实际安装布署一个Prometheusserver并对当前主机进行监控实践。

  安装Prometheus

  Prometheus基于Golang编撰,编译后的软件包,不依赖于任何的第三方依赖。用户只须要下载对应平台的二进制包,解压而且添加基本的配置即可正常启动Prometheus Server。

  对于非Docker用户,可以从找到最新版本的 Sevrer软件包,对于Docker用户,直接使用Prometheus的镜像即可启动Prometheus Server。

  启动完成后,可以通过:9090Prometheus的UI界面:访问

  

  使用Node Exporter采集主机数据和可视化

  安装Node Exporter

  在Prometheus的构架设计中,Prometheus Server并不直接服务监控特定的目标,其主要任务负责数据的搜集,存储而且对外提供数据查询支持。因此为了就能就能监控到个别东西,如主机的CPU使用率,我们须要使用到Exporter。Prometheus周期性的从Exporter曝露的HTTP服务地址(通常是/metrics)拉取监控样本数据。

  从里面的描述中可以看出Exporter可以是一个相对开放的概念,其可以是一个独立运行的程序独立于监控目标以外,也可以是直接外置在监控目标中。只要才能向Prometheus提供标准格式的监控样本数据即可。

  这里为了才能采集到主机的运行指标如CPU, 内存,磁盘等信息。我们可以使用Node Exporter。

  Node Exporter同样采用Golang编撰,并且不存在任何的第三方依赖,只须要下载,解压即可运行。可以从获取最新的 exporter版本的二进制包。

  curl -OL

  tar -xzf node_exporter-0.15.2.darwin-amd64.tar.gz

  运行node exporter:

  cd node_exporter-0.15.2.darwin-amd64

  cp node_exporter-0.15.2.darwin-amd64/node_exporter /usr/local/bin/node_exporter

  启动成功后,可以看见以下输出:

  INFO[0000] Listening on :9100

  source="node_exporter.go:76"

  访问:9100/可以看见以下页面:

  

  访问:9100/metricsnode,可以看见当前 exporter获取到的当前主机的所有监控数据,如下所示:

  

  从Node Exporter搜集监控数据

  为了才能使Prometheus Server才能从当前node exporter获取到监控数据,这里须要更改Prometheus配置文件。编辑prometheus.yml并在scrape_configs节点下添加以下内容:

  

  重新启动Prometheus Server

  访问:9090Prometheus,进入到 Server。如果输入“up”并且点击执行按键之后,可以看见如下结果:

  

  监控数据可视化

  Prometheus UI提供了快速验证PromQL以及临时可视化支持的能力,而在大多数场景下引入监控系统一般还须要建立可以常年使用的监控数据可视化面板(Dashboard)。这时用户可以考虑使用第三方的可视化工具如Grafana,Grafana是一个开源的可视化平台,并且提供了对Prometheus的完整支持。

  我们通过docker安装并启动grafana:

  docker run -d -p 3000:3000 grafana/grafana

  访问:3000Grafana的界面中,默认情况下使用帐户admin/admin进行登陆。在Grafana首页中显示默认的使用向导,包括:安装、添加数据源、创建Dashboard、邀请成员、以及安装应用和插件就可以步入到

  等主要流程:

  

  这里将添加Prometheus作为默认的数据源,如下图所示,指定数据源类型为Prometheus而且设置Prometheus的访问地址即可,在配置正确的情况下点击“Add”按钮,会提示联接成功的信息:

  

  在完成数据源的添加以后就可以在Grafana中创建我们可视化Dashboard了。Grafana提供了对PromQL的完整支持,如下所示,通过Grafana添加Dashboard而且为该Dashboard添加一个类型为“Graph”的面板。并在该面板的“Metrics”选项下通过PromQL查询须要可视化的数据:

  

  小结

  通过前面的介绍,我们初步了解了Prometheus监控系统的基本概念和使用方式,可以为读者在选择监控解决方案时,提供一定的参考。同时我们介绍了Prometheus的生态以及核心能力,在本地使用Prometheus和NodeExporter搭建了一个主机监控的环境,并且对数据进行了聚合以及可视化,相信读者通过本文才能对Prometheus有一个直观的认识。后续可以对Prometheus的PromQL查询句子进行深入探求,将监控指标与实际业务进行关联,甚至可以通过预测模型的提取,能够帮助用户将传统的面向结果转变为面向预测的方法。从而更有效的为业务和系统的正常运行保驾护航。

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线