prometheus 发送恢复 值_开源监控利器Prometheus初探

7154f81c23458ff41320d8f3dcdb5fba.png

转载本文需注明出处:微信公众号EAWorld,违者必究。

前言

Kubernetes作为当下最炙手可热的容器管理平台,在给应用部署运维带来便捷的同时,也给应用及性能监控带来了新的挑战。本文给大家分享一款十分火热的开源监控工具Prometheus,让我们一起来看它是如何兼顾传统的应用监控、主机性能监控和Kubernetes监控的。

目录:

一、Prometheus简介

二、Prometheus架构图

三、Prometheus架构详解

四、Prometheus监控Kubernetes

一、Prometheus简介

什么是Prometheus?

Prometheus是一个开源的系统监控及告警工具,最初建设在SoundCloud。从2012 Prometheus推出以来,许多公司都采用它搭建监控及告警系统。同时,项目拥有非常活跃的开发者和用户社区。

它现在是一个独立于任何公司的开源项目,为了强调这一点并明确项目的管理结构,在2016年Prometheus加入CNCF基金会成为继Kubernetes之后的第二个托管项目。

Prometheus有什么特点?

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

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

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

  • 基于HTTP的pull模式采集时间序列数据。

  • 可以使用pushgateway(prometheus的可选中间件)实现push模式。

  • 可以使用动态服务发现或静态配置采集的目标机器。

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

Prometheus适用场景。

在选择Prometheus作为监控工具前,要明确它的适用范围,以及不适用的场景。

Prometheus在记录纯数值时间序列方面表现非常好。它既适用于以服务器为中心的监控,也适用于高动态的面向服务架构的监控。

在微服务的监控上,Prometheus对多维度数据采集及查询的支持也是特殊的优势。

Prometheus更强调可靠性,即使在故障的情况下也能查看系统的统计信息。权衡利弊,以可能丢失少量数据为代价确保整个系统的可用性。因此,它不适用于对数据准确率要求100%的系统,比如实时计费系统(涉及到钱)。

二、Prometheus构架图

47670c4027178a2017522c3053cd70ba.png

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

1. Prometheus Server:Prometheus的核心,根据配置完成数据采集,  服务发现以及数据存储。

2. Pushgateway:为应对部分push场景提供的插件,监控数据先推送到pushgateway上,然后再由server端采集pull。(若server采集间隔期间,pushgateway上的数据没有变化,server将采集2次相同数据,仅时间戳不同)

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

4. Service discovery:支持根据配置file_sd监控本地配置文件的方式实现服务发现(需配合其他工具修改本地配置文件),同时支持配置监听Kubernetes的API来动态发现服务。

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

三、Prometheus架构详解

接下来,让我们一起了解rometheus架构中各个组件是如何协同工作来完成监控任务。

  • Prometheus server and targets

f658272fed0ba1add00d08c16fbe975d.png

利用Prometheus官方或第三方提供的探针,基本可以完成对所有常用中间件或第三方工具的监控。

602ee70d6c61a1e88b80684b68e43b2a.png

之前讲到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

2d47f7c9d97cd3b3b854a76ddfbea9b8.png

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

举一个常见的告警示例,在主机可用内存低于总内存的20%时发送告警。我们可以根据Prometheus server采集的主机性能指标配置这样一条规则node_memory_Active/node_memory_MemTotal

Prometheus server在这里主要负责根据告警规则分析数据并发送告警信息到alertmanager,alertmanager则是根据配置处理告警信息并发送。

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

  1. 分组:将监控目标相同的告警进行分组。如发生停电,收到的应该是单一信息,信息中包含所有受影响宕机的机器,而不是针对每台宕机的机器都发送一条告警信息。

  2. 抑制:抑制是指当告警发出后,停止发送由此告警引发的其他告警的机制。如机器网络不可达,就不再发送因网络问题造成的其他告警。

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

  • Service discovery

c57b9b480020f8dd072f4988a7927d24.png

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

7707eeef37fb82400c9a27b79df35d3c.png

至此,已经完成了数据采集和告警配置,是时候通过页面展示一波成果了。

Grafana已经对Prometheus做了很好的支撑,在Grafana中添加Prometheus数据源,然后就可以使用PromQL查询语句结合grafana强大的图形化能力来配置我们的性能监控页面了。

  • 联邦模式

b05f6678cc2e6b1e2bccb0278057a1b1.png

中心化的数据采集存储,分析,而且还不支持集群模式。带来的性能问题显而易见。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

87ce133eebf2e87180f8a7048850a828.png

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等服务的信息,然后通过匹配注解中的值来获取采集目标。

841fdf592b1f22fa707c1c636ea413b5.png

上面提到了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的监控应该是有很大优势的。

e0c51817e206fa021b6a8b927db3610c.png关于作者:张子康,普元研发工程师,曾参与万达DevOps平台等项目。对云计算相关技术有浓厚的兴趣,熟悉IaaS,k8s,docker等技术,在DevOps项目中主要负责集成环境的搭建以及部署功能的底层实现。

ab103ff674ef2957d232634436a4c057.png关于EAWorld:微服务,DevOps,数据治理,移动架构原创  技术分享

课程预告! 7月24日(下周二)下午14:30 普元测试开发工程师卢亚婷为大家分享《BDD下的自动化测试框架》,回复此公众号“YG+微信号”马上入群!

ae5f022d5be43eb873abbda9bb01b27d.png

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 可以使用Prometheus的Windows Exporter来监控Windows批处理脚本,该Exporter会收集服务器上的性能指标,并将其发送Prometheus服务器,以便Prometheus可以对其进行监控。 ### 回答2: Prometheus是一种开源监控解决方案,Windows_exporter是Prometheus的一个工具,用于监控Windows操作系统的指标。要使用Windows_exporter监控批处理脚本,可以按照以下步骤进行操作: 1. 下载和安装Windows_exporter:访问Windows_exporter的GitHub页面,下载最新的可执行文件。 2. 配置Windows_exporter:在Windows_exporter的安装目录下,创建一个配置文件(如windows_exporter.yml),并配置要监控的批处理脚本的相关信息,例如脚本的路径等。 3. 启动Windows_exporter:使用管理员权限打开命令提示符,并导航到Windows_exporter的安装目录,执行以下命令启动Windows_exporter: ``` windows_exporter.exe --collector.batchfile.path="Path\to\script.bat" --config.windows_exporter.yml ``` 其中,--collector.batchfile.path参数指定要监控的批处理脚本的路径,--config.windows_exporter.yml参数指定配置文件的路径。 4. 配置Prometheus:在Prometheus的配置文件(prometheus.yml)中添加一个新的job,用于抓取Windows_exporter提供的指标。示例如下: ```yaml - job_name: 'windows' static_configs: - targets: ['localhost:9182'] ``` 其中,'localhost:9182'是Windows_exporter默认的监听地址,可根据实际情况进行修改。 5. 重启Prometheus:保存并关闭Prometheus的配置文件,重启Prometheus服务,使其能够加载新的配置。 6. 查看监控指标:访问Prometheus的Web界面,可以通过查询PromQL语句来查看和分析批处理脚本的监控指标。例如,查询批处理脚本执行次数的指标可以使用以下PromQL语句: ``` script_batchfile_total{job="windows"} ``` 通过这些步骤,您可以使用Windows_exporter监控批处理脚本,并通过Prometheus来收集和分析这些监控指标。 ### 回答3: Prometheus是一个开源监控系统,可以用于监控各种应用、服务和服务器。Windows_exporter是Prometheus的一个插件,可以用于监控Windows系统的各种指标。 要使用windows_exporter监控批处理脚本,首先需要在Windows系统上安装和配置Prometheus和windows_exporter。可以到Prometheus官方网站上下载最新版本的Prometheus,并按照文档中的步骤进行安装和配置。 安装好Prometheus后,需要下载并安装windows_exporter。在windows_exporter的GitHub页面上可以找到最新的发布版本。下载后,将windows_exporter解压到一个合适的目录。 接下来,需要创建一个用于监控批处理脚本的配置文件。在Prometheus的配置文件(prometheus.yml)中添加以下内容: ```yaml scrape_configs: - job_name: 'my_batch_scripts' static_configs: - targets: ['localhost:9182'] ``` 其中,job_name可以自定义,targets是windows_exporter的默认监听端口。 保存并关闭配置文件后,需要启动Prometheus和windows_exporter。在命令行中导航到Prometheus的安装目录,执行以下命令启动Prometheus: ``` prometheus.exe --config.file=prometheus.yml ``` 再打开一个新的命令行窗口,导航到windows_exporter的安装目录,执行以下命令启动windows_exporter: ``` windows_exporter.exe ``` 启动后,Prometheus将开始收集和存储windows_exporter提供的所有指标。可以通过Prometheus的Web界面(默认为localhost:9090)查看和查询这些指标。 接下来,可以根据批处理脚本的需要,编写相关的指标规则和警报规则。通过Prometheus的查询语言和警报规则语言,可以实现对批处理脚本的监控和告警。 总结来说,要使用windows_exporter监控批处理脚本,需要安装和配置Prometheus和windows_exporter,创建一个用于批处理脚本的配置文件,启动Prometheus和windows_exporter,并进行指标和警报规则的配置。通过Prometheus的Web界面进行监控和查询。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值