您可以捐助,支持我们的公益事业。

1元 10元 50元





认证码:  验证码,看不清楚?请点击刷新验证码 必填



  求知 文章 文库 Lib 视频 iPerson 课程 认证 咨询 工具 讲座 Model Center   Code  
会员   
   
 
     
   
 订阅
  捐助
从零搭建Prometheus监控报警系统
 
作者: 雪山飞猪
   次浏览      
 2019-10-31
 
编辑推荐:
本文介绍了从零开始搭建Prometheus实现自动监控报警,自动抓取接口+自动报警+优雅的图表展示,希望对您的学习有所帮助
本文来自于博客,由火龙果软件琪琪编辑、推荐。

什么是Prometheus?

Prometheus是由SoundCloud开发的开源监控报警系统和时序列数据库(TSDB)。Prometheus使用Go语言开发,是Google BorgMon监控系统的开源版本。

2016年由Google发起Linux基金会旗下的原生云基金会(Cloud Native Computing Foundation), 将Prometheus纳入其下第二大开源项目。

Prometheus目前在开源社区相当活跃。

Prometheus和Heapster(Heapster是K8S的一个子项目,用于获取集群的性能数据。)相比功能更完善、更全面。Prometheus性能也足够支撑上万台规模的集群。

Prometheus的特点

多维度数据模型。

灵活的查询语言。

不依赖分布式存储,单个服务器节点是自主的。

通过基于HTTP的pull方式采集时序数据。

可以通过中间网关进行时序列数据推送。

通过服务发现或者静态配置来发现目标服务对象。

支持多种多样的图表和界面展示,比如Grafana等。

基本原理

Prometheus的基本原理是通过HTTP协议周期性抓取被监控组件的状态,任意组件只要提供对应的HTTP接口就可以接入监控。不需要任何SDK或者其他的集成过程。这样做非常适合做虚拟化环境监控系统,比如VM、Docker、Kubernetes等。输出被监控组件信息的HTTP接口被叫做exporter 。目前互联网公司常用的组件大部分都有exporter可以直接使用,比如Varnish、Haproxy、Nginx、MySQL、Linux系统信息(包括磁盘、内存、CPU、网络等等)。

服务过程

Prometheus Daemon负责定时去目标上抓取metrics(指标)数据,每个抓取目标需要暴露一个http服务的接口给它定时抓取。Prometheus支持通过配置文件、文本文件、Zookeeper、Consul、DNS SRV Lookup等方式指定抓取目标。Prometheus采用PULL的方式进行监控,即服务器可以直接通过目标PULL数据或者间接地通过中间网关来Push数据。

Prometheus在本地存储抓取的所有数据,并通过一定规则进行清理和整理数据,并把得到的结果存储到新的时间序列中。

Prometheus通过PromQL和其他API可视化地展示收集的数据。Prometheus支持很多方式的图表可视化,例如Grafana、自带的Promdash以及自身提供的模版引擎等等。Prometheus还提供HTTP API的查询方式,自定义所需要的输出。

PushGateway支持Client主动推送metrics到PushGateway,而Prometheus只是定时去Gateway上抓取数据。

Alertmanager是独立于Prometheus的一个组件,可以支持Prometheus的查询语句,提供十分灵活的报警方式。

三大套件

Server 主要负责数据采集和存储,提供PromQL查询语言的支持。

Alertmanager 警告管理器,用来进行报警。

Push Gateway 支持临时性Job主动推送指标的中间网关。

本飞猪教程内容简介

1.演示安装Prometheus Server

2.演示通过golang和node-exporter提供metrics接口

3.演示pushgateway的使用

4.演示grafana的使用

5.演示alertmanager的使用

安装准备

这里我的服务器IP是10.211.55.25,登入,建立相应文件夹

下面开始三大套件的学习

一.安装Prometheus Server

通过docker方式

首先创建一个配置文件/home/chenqionghe/test/prometheus/prometheus.yml

挂载之前需要改变文件权限为777,要不会引起修改宿主机上的文件内容不同步的问题

运行

启动时加上--web.enable-lifecycle启用远程热加载配置文件

调用指令是curl -X POST http://localhost:9090/-/reload

访问http://10.211.55.25:9090

我们会看到如下l界面

访问http://10.211.55.25:9090/metrics

我们配置了9090端口,默认prometheus会抓取自己的/metrics接口

在Graph选项已经可以看到监控的数据

二.安装客户端提供metrics接口

1.通过golang客户端提供metrics

2.通过node exporter提供metrics

然后把这两些接口再次配置到prometheus.yml, 重新载入配置curl -X POST http://localhost:9090/-/reload

可以看到接口都生效了

prometheus还提供了各种exporter工具,感兴趣小伙伴可以去研究一下

三.安装pushgateway

pushgateway是为了允许临时作业和批处理作业向普罗米修斯公开他们的指标。 由于这类作业的存在时间可能不够长, 无法抓取到, 因此它们可以将指标推送到推网关中。 Prometheus采集数据是用的pull也就是拉模型,这从我们刚才设置的5秒参数就能看出来。但是有些数据并不适合采用这样的方式,对这样的数据可以使用Push Gateway服务。 它就相当于一个缓存,当数据采集完成之后,就上传到这里,由Prometheus稍后再pull过来。 我们来试一下,首先启动Push Gateway

访问http://10.211.55.25:9091 可以看到pushgateway已经运行起来了

接下来我们就可以往pushgateway推送数据了,prometheus提供了多种语言的sdk,最简单的方式就是通过shell

然后我们再将pushgateway配置到prometheus.yml里边,重载配置

看到已经可以搜索出刚刚推送的指标了

四.安装Grafana展示

Grafana是用于可视化大型测量数据的开源程序,它提供了强大和优雅的方式去创建、共享、浏览数据。

Dashboard中显示了你不同metric数据源中的数据。

Grafana最常用于因特网基础设施和应用分析,但在其他领域也有用到,比如:工业传感器、家庭自动化、过程控制等等。

Grafana支持热插拔控制面板和可扩展的数据源,目前已经支持Graphite、InfluxDB、OpenTSDB、Elasticsearch、Prometheus等。

我们使用docker安装

默认登录账户和密码都是admin,进入后界面如下

我们添加一个数据源

把Prometheus的地址填上

导入prometheus的模板

打开左上角选择已经导入的模板会看到已经有各种图

我们来添加一个自己的图表

指定自己想看的指标和关键字,右上角保存

看到如下数据

到这里我们就已经实现了数据的自动收集和展示,下面来说下prometheus如何自动报警

五.安装AlterManager

Pormetheus的警告由独立的两部分组成。

Prometheus服务中的警告规则发送警告到Alertmanager。

然后这个Alertmanager管理这些警告。包括silencing, inhibition, aggregation,以及通过一些方法发送通知,例如:email,PagerDuty和HipChat。

建立警告和通知的主要步骤:

创建和配置Alertmanager

启动Prometheus服务时,通过-alertmanager.url标志配置Alermanager地址,以便Prometheus服务能和Alertmanager建立连接。

创建和配置Alertmanager

创建配置文件alertmanager.yml

这里配置成了web.hook的方式,当server通知alertmanager会自动调用webhook http://10.211.55.2:8888/open/test

下面运行altermanager

访问http://10.211.55.25:9093

接下来修改Server端配置报警规则和altermanager地址

修改规则/home/chenqionghe/promethues/server/rules.yml

这条规则的意思是,硬拉超过150公斤,持续一分钟,就报警通知

然后再修改prometheus添加altermanager配置

重载prometheus配置,规则就已经生效

接下来我们观察grafana中数据的变化

然后我们点击prometheus的Alert模块,会看到已经由绿->黄-红,触发了报警

然后我们再来看看提供的webhook接口,这里的接口我是用的golang写的,接到数据后将body内容报警到钉钉

钉钉收到报警内容如下

 
   
次浏览       
相关文章

DevOps转型融入到企业文化
DevOps 能力模型、演进及案例剖析
基于 DevOps 理念的私有 PaaS 平台实践
微软开发团队的DevOps实践启示
相关文档

DevOps驱动应用运维变革与创新
运维管理规划
如何实现企业应用部署自动化
运维自动化实践之路
相关课程

自动化运维工具(基于DevOps)
互联网运维与DevOps
MySQL性能优化及运维培训
IT系统运维管理