• 104138

    文章

  • 803

    评论

  • 12

    友链

  • 比来新加了换肤功能,大年夜家多来走走吧~~~~
  • 爱好这个网站的同伙可以加一下QQ群,我们一路交换技巧。

开源监控利器Prometheus初探

撸了本年阿里、腾讯和美团的面试,我有一个重要发明.......>>

媒介:           

Kubernetes作为当下最炙手可热的容器管理平台,在给应用安排运维带来便捷的同时,也给应用及性能监控带来了新的挑衅。本文给大年夜家分享一款非常炽热的开源监控对象Prometheus,让我们一路来看它是若何兼顾传统的应用监控、主机性能监控和Kubernetes监控的。

目次:

一、Prometheus简介

2、Prometheus架构图

3、Prometheus架构详解

四、Prometheus监控Kubernetes

                               一、Prometheus简介

 

甚么是Prometheus?

Prometheus是由SoundCloud应用Go说话开辟;

它是开源监控报警体系和时序列数据库(TSDB)。

它是Google BorgMon监控体系的开源版本。

2016年由Google提议Linux基金会旗下的原生云基金会(Cloud Native Computing Foundation), 将Prometheus归入其下第二大年夜开源项目。Prometheus今朝在开源社区相当活泼。

Prometheus和Heapster(Heapster是K8S的一个子项目,用于获得集群的性能数据。)比拟功能更完美、更周全。Prometheus性能也足够支撑上万台范围的集群。

Prometheus是一个开源的搜集监控对象,它专为监控时间序列数据而构建。你可以按时间长度标准或关键词对来标识时间序列数据。时间序列数据存储在本地磁盘上,以便在紧急情况下轻松拜访。

Prometheus的Alertmanager担任消息告诉,Alertmanager可以经过过程电子邮件,PagerDuty或OpsGenie发送告诉,如有须要,你也能够封闭警报告诉

Prometheus的UI元素异常出色,许可你从浏览器切换到模板说话和Grafana集成。你还可以将各类第三方数据源从Docker,StatsD和JMX中集成到Prometheus中,来自定义Prometheus。

Prometheus是一个开源的体系监控及告警对象,最后扶植在SoundCloud。从2012 Prometheus推出以来,很多公司都采取它搭建监控及告警体系。同时,项目具有异常活泼的开辟者和用户社区。

它如今是一个自力于任何公司的开源项目,为了强调这一点并明白项目标管理构造,在2016年Prometheus参加CNCF基金会成为继Kubernetes以后的第二个托管项目。

Prometheus有甚么特点?

  • 多维的数据模型(基于时间序列的k/v键值对)。

  • 灵活的查询及聚合语句(PromQL)。

  • 不依附分布式存储,节点自治。

  • 基于HTTP的pull形式收集时间序列数据。

  • 可以应用pushgateway(prometheus的可选中心件)完成push形式。

  • 可以应用静态办事发明或静态设备收集的目标机械。

  • 支撑多种图形及仪表盘。

Prometheus组件

  1. Prometheus Server 担任监控数据搜集和存储

  2. Prometheus Alert manager 担任根据告警规矩停止告警,可集成很多告警通道

  3. node-exporter 的感化就是从机械读取目标,然后裸露一个 http 办事,Prometheus 就是从这个办事中搜集监控目标。固然 Prometheus 官方还有各类各样的 exporter。

留意 :  钉钉集成 Prometheus 告警的组件:prometheus-webhook-dingtalk。

Prometheus实用处景

在选择Prometheus作为监控对象前,要明白它的实用范围,和不实用的场景。

Prometheus在记录纯数值时间序列方面表示异常好。它既实用于以办事器为中间的监控,也实用于高静态的面向办事架构的监控。

在微办事的监控上,Prometheus对多维度数据收集及查询的支撑也是特别的优势。

Prometheus更强调靠得住性,即使在毛病的情况下也能检查体系的统计信息。衡量利害,以能够损掉大批数据为价值确保全部体系的可用性。是以,它不实用于对数据精确率请求100%的体系,比如及时计费体系(触及到钱)。

                              2、Prometheus构架图

上图是Prometheus的架构图,从图中可以看出Prometheus的架构设计理念,中间化的数据收集,分析。

 

Prometheus组件

Prometheus生态体系由多个组件构成,它们中的一些是可选的。多半Prometheus组件是Go说话写的,这使得这些组件很轻易编译和安排。

1. Prometheus Server:Prometheus的核心,根据设备完成数据收集,  办事发明和数据存储 ,供给PromQL查询说话的支撑。

 

2. Push Gateway:为应对部分push场景供给的插件,监控数据先推送到pushgateway上,然后再由server端收集pull。(若server收集间隔时代,pushgateway上的数据没有变更,server将收集2次雷同数据,仅时间戳不合)。支撑临时性Job主动推送目标的中心网关。

 

3. Prometheus targets:探针(exporter)供给收集接口,或应用本身供给的支撑Prometheus数据模型的收集接口。

 

4. Service discovery:支撑根据设备file_sd监控本地设备文件的方法完成办事发明(需合营其他对象修改本地设备文件),同时支撑设备监听Kubernetes的API来静态发明办事。

 

5. Alertmanager:Prometheus告警插件,支撑发送告警到邮件,Pagerduty,HipChat等。

6、PromDash

应用Rails开辟可视化的Dashboard,用于可视化目标数据。

7、客户端SDK 

官方供给的客户端类库有go、java、scala、python、ruby,其他还有很多第三方开辟的类库,支撑nodejs、php、erlang等。

8、Exporter

Exporter是Prometheus的一类数据收集组件的总称。它担任从目标处聚集数据,并将其转化为Prometheus支撑的格局。与传统的数据收集组件不合的是,它其实不向中心办事器发送数据,而是等待中心办事器主动前来抓取。

9、alertmanager

正告管理器,用来停止报警。

10、prometheus_cli

敕令行对象。

其他帮助性对象

多种导出对象,可以支撑Prometheus存储数据转化为HAProxy、StatsD、Graphite等对象所须要的数据存储格局

 

                          3、Prometheus架构详解

rometheus架构中各个组件是若何协同任务来完成监控义务。

Prometheus server and targets

 

应用Prometheus官方或第三方供给的探针,根本可以完成对一切经常使用中心件或第三方对象的监控。

之前讲到Prometheus是中间化的数据收集分析,那这里的探针(exporter)是做甚么任务呢?

 

上图中硬件及体系监控探针node exporter经过过程getMemInfo()办法获得机械的内存信息,然后将机械总内存数据对应上目标node_memory_MemTotal。

 

Jenkins探针Jenkins Exporter经过过程拜访Jenkins的api获得到Jenkins的job数量并对应目标Jenkins_job_count_value。

 

探针的感化就是经过过程调用应用或体系接口的方法收集监控数据并对应成目标前往给prometheus server。(探针不用定要和监控的应用安排在一台机械)

 

总的来讲Prometheus数据收集流程就是,在Prometheus server中设备探针裸露的端口地址和收集的间隔时间,Prometheus按设备的时间间隔经过过程http的方法去拜访探针,这时候探针经过过程调用接口的方法获得监控数据并对应目标前往给Prometheus server停止存储。(若探针在Prometheus设备的收集间隔时间内没有完成收集数据,这部分数据就会损掉)

Prometheus alerting

Prometheus serve又是若何根据收集到的监控数据配和alertmanager完成告警呢?

 

举一个罕见的告警示例,在主机可用内存低于总内存的20%时发送告警。我们可以根据Prometheus server收集的主机性能目标设备如许一条规矩node_memory_Active/node_memory_MemTotal < 0.2,Prometheus server分析收集到的数据,当满足该条件时,发送告警信息到alertmanager,alertmanager根据本地设备处理告警信息并发送到第三方对象由相干的担任人接收。

 

Prometheus server在这里重要担任根据告警规矩分析数据并发送告警信息到alertmanager,alertmanager则是根据设备处理告警信息并发送。

 

Alertmanager又有哪些处理告警信息的方法呢?

  1. 分组:将监控目标雷同的告警停止分组。如产生停电,收到的应当是单一信息,信息中包含一切受影响宕机的机械,而不是针对每台宕机的机械都发送一条告警信息。

  2. 克制:克制是指当告警收回后,停止发送由此告警激起的其他告警的机制。如机械搜集弗成达,就不再发送因搜集成绩形成的其他告警。

  3. 沉默:根据定义的规矩过滤告警信息,婚配的告警信息不会发送。

Service discovery

Prometheus支撑多种办事发明的方法,这里重要简介架构图中提到的file_sd的方法。之条件到Prometheus server的数据收集设备都是经过过程设备文件,那办事发明该怎样做?总不克不及每主要添加收集目标还要修改设备文件偏重启办事吧。

 

这里应用file_sd_configs指定定义了收集目标的文件。Prometheus server会静态检测该设备文件的变更来更新收集目标信息。如今只需能更新这个设备文件就可以静态的修改收集目标的设备了。

 

这里采取consul+consul template的方法。在新增或增添探针(增减收集目标)时在consul更新k/v,如新增一个探针,添加以下记录Prometheus/linux/node/10.15.15.132=10.15.15.132:9100,然后设备consul template监控consul的Prometheus/linux/node/目次下k/v的变更,根据k/v的值和提早定义的discovery.ctmpl模板静态生成Prometheus server的设备文件discovery.yml。

Web UI

至此,曾经完成了数据收集和告警设备,是时辰经过过程页面展示一波成果了。

Grafana曾经对Prometheus做了很好的支撑,在Grafana中添加Prometheus数据源,然后便可以应用PromQL查询语句结合grafana强大年夜的图形化才能来设备我们的性能监控页面了。

联邦形式

中间化的数据收集存储,分析,并且还不支撑集群形式。带来的性能成绩不言而喻。Prometheus给出了一种联邦的安排方法,就是Prometheus server可以从其他的Prometheus server收集数据。

 

能够有人会问,如许最后的数据不是照样要全部聚集到Prometheus的global节点吗?

其实不是如许的,我们可以在shard节点就完成分析处理,然后global节点直接收集分析处理过的数据停止展示。

 

比如在shard节点定义目标可用内存占比job:memory_available:proportion的成果为(node_memory_MemFree + node_memory_Buffers + node_memory_Cached)/node_memory_MemTotal,如许在shard节点便可以完成聚合操作,然后global节点直接收集处理过的数据便可以了,而不消收集零碎的如node_memory_MemFree这类目标。

 

                   四、Prometheus监控Kubernetes

Kubernetes官方之前推荐了一种性能监控的处理筹划,heapster+influxdb,heapster根据定义的间隔时间从Advisor中获得的关于pod及container的性能数据并存储到时间序列数据库influxdb。

 

也能够应用grafana设备influxdb的数据源并设备dashboard来做展示。并且Kubernetes中pod的主动伸缩的功能(Horizontal Pod Autoscaling)也是基于heapster,默许支撑根据cpu的目标做静态伸缩,也能够自定义扩大应用其他目标。

 

然则Heapster没法做Kubernetes下应用的监控。如今,Heapster作为Kubernetes下的开源监控处理筹划曾经被其弃用(https://github.com/kubernetes/heapster),Prometheus成为Kubernetes官方推荐的监控处理筹划。

 

Prometheus异样经过过程Kubernetes的cAdvisor接口(/api/v1/nodes/${1}/proxy/metrics/cadvisor)获得pod和container的性能监控数据,同时可以应用Kubernetes的Kube-state-metrics插件来获得集群上Pod, DaemonSet, Deployment, Job, CronJob等各类资本对象的状况,这反响了应用这些资本的应用的状况。

 

同时经过过程Kubernetes api获得node,service,pod,endpoints,ingress等办事的信息,然后经过过程婚配注解中的值来获得收集目标。

下面提到了Prometheus可以经过过程Kubernetes的api接话柄现办事发明,并将婚配定义了annotation参数的pod,service等设备成收集目标。那如今要处理的成绩就是探针到应用安排设备成绩了。

 

这里我们应用了Kubernetes的pod安排的sidecar形式,单个应用pod安排2个容器,应用单个pod中仅共享搜集的namespace的隔离特点,探针与应用一同运转,并可以应用localhost直接拜访应用的端口,而在pod的注解中仅裸露探针的端口(prometheus.io/port: “9104”)便可。

 

Prometheus server根据设备婚配定义注解prometheus.io/scrape: “true”的pod,并将pod ip和注解中定义的端口(prometheus.io/port: “9104”)和途径(prometheus.io/path: “/metrics”)拼接成收集目标http://10.244.3.123:9104/metrics。经过过程这类方法便可以完成静态添加须要收集的应用。

 

成绩:

 

问1:Prometheus webui 和 Grafana的界面是自力分开的,照样集成在一路的?

答:是自力页面。

 

问2:自力页面的话,那用户须要登录两个界面体系?

 

答:Prometheus自带的界面比较简单,普通是用Grafana做页面展示。Prometheus的界面可以检查收集目标,目标,和做简单的页面展示。

 

问3:微教室中提到的缺点,消费资本偏大年夜。(在Prometheus2.0版本有所改良)。这个偏大年夜有量化的目标吗?

 

答:之前1.7版本的时辰应用时,一台4C8G的机械,十多个收集目标,然后用Grafana做查询展示发明CPU会占用比较高。大年夜概70%。

 

问4:Prometheus和传统zabbix有哪些优势?

 

答:zabbix在传统的监控中应用比较广泛,倒也说不上Prometheus有甚么优势。Prometheus在Kubernetes的监控应当是有很大年夜优势的。

 

链接  :

Prometheus+grafana    : http://blog.51cto.com/youerning/2050543

Kubernetes+Prometheus+Grafana安排笔记荐       : http://blog.51cto.com/kaliarch/2160569

监控篇 | Prometheus 熟悉    : https://mp.weixin.qq.com/s/tO1dzAHBc553QI3qaSXNFQ

 

监控篇 | Prometheus 装置  :https://mp.weixin.qq.com/s/m9GNwhJQjkFjhd3RnBAJ4Q

监控篇 | Prometheus 架构  : https://mp.weixin.qq.com/s/TK5nsRdohOvSOmxRGEn0ig

Grafana+Prometheus打造全方位平面监控体系  : http://blog.51cto.com/itstyle/1980064

监控篇 | prometheus架构 :https://mp.weixin.qq.com/s/xjKUbzQYnTaFItIPMSH2MA

监控篇 | prometheus装置 : https://mp.weixin.qq.com/s/jveLQQOPztgtHpsZ0e2ESA

监控篇 | 熟悉Prometheus :https://mp.weixin.qq.com/s/4qS7-iFTtmAx9-E97hW-kg

Prometheus 应用总结:我踩过得那些坑 : https://mp.weixin.qq.com/s/8AqQPZfG_plMKivpblylhg

老张监控技巧|Zabbix4.2集成Prometheus基本入门+主动发明详解 : https://mp.weixin.qq.com/s/nyRMKPC2y4p89BsHtkWBEg

弄弄 Prometheus: Alertmanager : https://mp.weixin.qq.com/s/K06OQRu5RdqpKdAUPeGTvw

经过过程 Telegraf + InfluxDB + Grafana 快速搭建监控体系的详细步调 : https://www.linuxidc.com/Linux/2019-07/159204.htm

 

 

 

 

 

 


695856371Web网页设计师②群 | 爱好本站的同伙可以收藏本站,或许参加我们大年夜家一路来交换技巧!

1条评论

Loading...
  • ln754L

    你好,请问:Prometheus可以pull拉exports类型的web项目外面的接口数据(数据库外面的)吗? 比如:/forum/test/getUserInfo接口前往给前真个营业数据,难道只能定义一些性能目标...



自定义皮肤 主体内容背景
翻开付出宝扫码付款购买视频教程
碰到成绩接洽客服QQ:419400980
注册梁钟霖小我博客