本系列讲述的是开源实时监控告警解决方案Prometheus
,这个单词很牛逼。每次我都能联想到带来上帝之火的希腊之神,普罗米修斯。而这个开源的logo也是火,我的挺喜欢这个logo的设计。java
本系列着重介绍Prometheus
以及如何用它和其周边的生态来搭建一套属于本身的实时监控告警平台。linux
本系列受众对象为初次接触Prometheus
的用户,大神勿喷,偏重于操做和实战,可是重要的概念也会精炼出说起下。系列主要分为如下几块web
Prometheus
各个概念介绍和搭建,如何抓取数据(本次分享内容)Prometheus
,推送和拉取分别用于什么样的场景Prometheus
数据的结构以及查询语言PromQL
的使用Prometheus
集成,如何启用服务发现,若是自定义业务指标Prometheus
如何和Grafana
可视化套件进行集成和设置告警Prometheus
如今在Github
有3w多的star,基本上过万星的开源工具,能够认为是社区里绝对的主流,社区也至关活跃,能够有大量的经验能够借鉴。在企业级系统中,能够放心的使用。spring
Prometheus
是由 SoundCloud
开发的开源监控报警系统和时序列数据库。从字面上理解,Prometheus
由两个部分组成,一个是监控报警系统,另外一个是自带的时序数据库(TSDB)。shell
关于时序数据库(TSDB)这里要说下,咱们能够简单的理解为一个优化后用来处理时间序列数据的数据库,而且数据中的数组是由时间进行索引的。相比于传统的结构化数据库主要有几个好处:数据库
https://prometheus.io/
在Prometheue
官网Download标签页进行下载,这里以linux
版本为例:数组
下载好以后,解压,运行缓存
nohup /data/prometheus/prometheus --web.listen-address=0.0.0.0:9090 --config.file=/data/prometheus/prometheus.yml --web.enable-lifecycle --storage.tsdb.path=/data/prometheus/data --storage.tsdb.retention.time=15d &
这样,就简单的搭建起来Prometheus
服务端了。这时候,咱们能够在web上访问安全
http://127.0.0.1:9090
就能够访问到管理页面springboot
界面上几个标签说明下:
Alert
:用来配置告警规则。以后咱们会用Grafana
自身的告警界面配置来代替这个。
Graph
:用来运行PromQL语句的一个控制台,而且能够把运行出来的语句用用图形化进行展现,此块咱们后面章节会介绍到。
Status
:包含系统信息,系统状态,配置信息,目标节点的状态,服务发现状态等元信息的查看。
这张图是官方的总体架构图。米黄色部分是Prometheus
本身的组件,绿色的为第三方的中间件和应用。
简单介绍下整个Prometheus
的生态架构:
Prometheus
获取数据的方式只有一种,就是scrape
,也称做pull
,意为拉取。Prometheus
每隔一段时间会从目标(target
)这里以Http
协议拉取指标(metrics
),这些目标能够是应用,也能够是代理,缓存中间件,数据库等等一些中间件。Prometheus
会存到本身的TSDB数据库。本身的WebUI控制台以及Grafana
能够对其数据进行时间范围内的不断查询,绘制成实时图表工展示。Prometheus
支持例如zookeeper
,consul
之类的服务发现中间件,用以对目标(target
)的自动发现。而不用一个个去配置target
了。alertManager
组件支持自定义告警规则,告警渠道也支持不少种Prometheus
主要是经过拉取的方式获取数据,说简单点,就是每隔固定时间去访问配置的target
,target
就是一个获取数据的url。
如今咱们就来模拟一个数据源,并让prometheus
去拉取。
新建一个springboot
的web项目,pom依赖加上
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-actuator</artifactId> </dependency> <dependency> <groupId>io.micrometer</groupId> <artifactId>micrometer-registry-prometheus</artifactId> </dependency>
application.properties
里加上
server.port=8080 anagement.endpoints.web.exposure.include=*
启动完毕后,咱们就能够在页面上访问以下地址:
http://127.0.0.1:8080/actuator/prometheus
获得以下数据:
关于actuator
如何监控应用指标以及自定义指标我会在以后的系列里单独分析,这里只要理解成咱们启动了一个服务,提供了一个url能列出一些kv形式的指标就好了。
例如jvm_memory_max_bytes{area="heap",id="PS Old Gen",} 2.863661056E9
这个指标,前面是key,后面为value。
其中key上又分key name
和key labels,
key name就是
`jvm_memory_max_bytes,
key labels`有2个。
这个指标提供了jvm的最大内存,其中area
为heap
,代表这是堆内存区域,id
为PS Old Gen
,代表这是老年代。综合起来看,这个指标就是jvm中老年代的最大值。数值类型是byte,换算下来大概是286M左右。
咱们有指标的数据源后,再在prometheus
的根目录下编辑prometheus.yml
文件,添加以下配置:
- job_name: 'test' scrape_interval: 5s metrics_path: '/actuator/prometheus' static_configs: - targets: ['localhost:8080'] labels: instance: demo
这个配置表示:prometheue
每隔5秒钟从http://localhost:8080/actuator/prometheus
这个url拉取指标,而且为每一个指标添加instance
这个标签。
添加完毕后,重启prometheus
。进入web页面中的targets
页面。若是前面步骤没问题的话,会看到:
状态为UP
代表prometheue
已经成功获取到了这个target
的数据。
在查询页面上输入刚才那个指标的key:
这里每一个value都是prometheus
最近一次抓取的数据。你每执行一次,数据都会变。
这里为何会有多条数据呢,是由于每一个指标他们的标签不同。彻底同样的标签会被归为一种指标。
点Graph
这标签能够看到在时间序列下,某个指标的变化趋势
上图展现了系统cpu指标的变化图。
现在微服务盛行,小规模的企业的微服务节点也快上百了,Prometheus
生态可以用最小的代价使全部的数据实时可视化。这对于开发和运维来讲,意义在于,全部的数据再也不是黑盒了,至少我我的以为全部的数据可以被观测和分析,是具备安全感的。
这个系列旨在利用实战操做教你一步步搭建本身系统和业务监控大盘。后面会继续更新。下一个章节将分析:搭建pushgateway
去push数据到prometheus
,以及2种不一样的数据获取方式分别用于什么样的场景。
欢迎微信公众号关注 「元人部落」
关注后回复 "资料" 免费获取50G的技术资料,包含一整套企业级微服务课程以及一套秒杀课程