上帝之火
本系列述说的是开源实时监控告警解决方案Prometheus,这个词组很牛逼。每次我都能联想到带来上帝之火的埃及之神,普罗米修斯。而这个开源的logo也是火,个人挺喜欢这个logo的设计。
本系列侧重介绍Prometheus以及怎么用它和其周边的生态来搭建一套属于自己的实时监控告警平台。
本系列受众对象为初次接触Prometheus的用户,前辈勿喷,侧重于操作和实战,而且重要的概念也会精炼出提到下。系列主要分为以下几块
Prometheus以及时序数据库的基本概念
Prometheus如今在Github有3w多的star,基本上过万星的开源工具,可以觉得是社区里绝对的主流,社区也相当活跃,可以有大量的经验可以借鉴。在企业级系统中,可以放心的使用。
Prometheus是由SoundCloud开发的开源监控报案系统和时序列数据库。从字面上理解,Prometheus由两个部份组成,一个是监控报案系统开源告警系统,另一个是自带的时序数据库(TSDB)。
关于时序数据库(TSDB)这儿要说下,我们可以简单的理解为一个优化后拿来处理时间序列数据的数据库,但是数据中的字段是由时间进行索引的。相比于传统的结构化数据库主要有几个益处:
开始搭建Prometheus
在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上访问
:9090
就可以访问到管理页面
界面上几个标签说明下:
Alert:拿来配置告警规则。然后我们会用Grafana自身的告警界面配置来取代这个。
Graph:拿来运行PromQL句子的一个控制台,而且可以把运行下来的句子用用图形化进行展示,此块我们前面章节会介绍到。
Status:包含系统信息,系统状态,配置信息,目标节点的状态,服务发觉状态等元信息的查看。
Prometheus整体构架以及生态
这张图是官方的整体构架图。米白色部份是Prometheus自己的组件,红色的为第三方的中间件和应用。
简单介绍下整个Prometheus的生态构架:
Prometheus获取数据的方法只有一种,就是scrape,也叫做pull,意为拉取。Prometheus每隔一段时间会从目标(target)这儿以Http合同拉取指标(metrics)redhat linux 下载,这种目标可以是应用,也可以是代理,缓存中间件,数据库等等一些中间件。拉取下来的数据Prometheus会存到自己的TSDB数据库。自己的WebUI控制台以及Grafana可以对其数据进行时间范围内的不断查询,勾画成实时图表工凸显。Prometheus支持诸如zookeeper,consul之类的服务发觉中间件,用以对目标(target)的手动发觉。而不用一个个去配置target了。alertManager组件支持自定义告警规则,告警渠道也支持好多种
拉取数据
Prometheus主要是通过拉取的方法获取数据,说简单点,就是每隔固定时间去访问配置的target,target就是一个获取数据的url。
如今我们就来模拟一个数据源,并让prometheus去拉取。
新建一个springboot的web项目,pom依赖加上
org.springframework.boot spring-boot-starter-actuator io.micrometer micrometer-registry-prometheus
application.properties里加上
server.port=8080 anagement.endpoints.web.exposure.include=*
启动完毕后,我们就可以在页面上访问如下地址:
:8080/actuator/prometheus
得到如下数据:
关于actuator怎么监控应用指标以及自定义指标我会在以后的系列里单独剖析,这儿只要理解成我们启动了一个服务,提供了一个url能列举一些kv方式的指标就行了。
比如jvm_memory_max_bytes{area="heap",id="PSOldGen",}2.863661056E9这个指标开源告警系统,上面是key,前面为value。
其中key上又分keyname和keylabels,keyname就是``jvm_memory_max_bytes,keylabels有2个。
这个指标提供了jvm的最大显存,其中area为heap,表明这是堆显存区域,id为PSOldGen,表明这是老年代。综合上去看,这个指标就是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秒钟从:8080/actuator/prometheus这个url拉取指标,但是为每位指标添加instance这个标签。
添加完毕后,重启prometheus。步入web页面中的targets页面。假如上面步骤没问题的话,会看见:
状态为UP表明prometheue早已成功获取到了这个target的数据。
在查询页面上输入刚刚那种指标的key:
这儿每位value都是prometheus近来一次抓取的数据。你每执行一次,数据就会变。
这儿为何会有多条数据呢,是由于每位指标她们的标签不一样。完全一样的标签会被归为一种指标。
点Graph这标签可以看见在时间序列下,某个指标的变化趋势
上图展示了系统cpu指标的变化图。
最后
现在微服务兴起linux模拟,小规模的企业的微服务节点也快上百了,Prometheus生态才能用最小的代价使所有的数据实时可视化。这对于开发和运维来说,意义在于,所有的数据不再是黑盒了,起码我个人认为所有的数据才能被观测和剖析,是具有安全感的。
这个系列致力借助实战操作教你一步步搭建自己系统和业务监控盘面。前面会继续更新。下一个章节将剖析:搭建pushgateway去push数据到prometheus,以及2种不同的数据获取方法分别用于哪些样的场景。
到此这篇关于用Prometheus搭建实时监控系统过程解读之上帝之火,普罗米修斯的崛起的文章就介绍到这了,更多相关用Prometheus搭建实时监控系统内容请搜索自学编程网曾经的文章或继续浏览下边的相关文章希望你们之后多多支持自学编程网!