上帝之火
本系列讲述的是开源实时监控告警解决方案 Prometheus , 这个单词很牛逼. 每次我都能联想到带来上帝之火的希腊之神, 普罗米修斯. 而这个开源的 logo 也是火, 个人挺喜欢这个 logo 的设计.
本系列着重介绍 Prometheus 以及如何用它和其周边的生态来搭建一套属于自己的实时监控告警平台.
本系列受众对象为初次接触 Prometheus 的用户, 大神勿喷, 偏重于操作和实战, 但是重要的概念也会精炼出提及下. 系列主要分为以下几块
Prometheus 各个概念介绍和搭建, 如何抓取数据(本次分享内容)
如何推送数据至 Prometheus , 推送和拉取分别用于什么样的场景
Prometheus 数据的结构以及查询语言 PromQL 的使用
Java 应用如何和 Prometheus 集成, 如何启用服务发现, 如果自定义业务指标
Prometheus 如何和 Grafana 可视化套件进行集成和设置告警
教你如何手写一个集成了监控 Dubbo 各个指标的 java 套件
实际案例分享, 如何做各个业务端和系统端的监控大盘
Prometheus 以及时序数据库的基本概念
Prometheus 现在在 GitHub 有 3w 多的 star, 基本上过万星的开源工具, 可以认为是社区里绝对的主流, 社区也相当活跃, 可以有大量的经验可以借鉴. 在企业级系统中, 可以放心的使用.
Prometheus 是由 SoundCloud 开发的开源监控报警系统和时序列数据库. 从字面上理解, Prometheus 由两个部分组成, 一个是监控报警系统, 另一个是自带的时序数据库(TSDB) .
关于 时序数据库(TSDB) 这里要说下, 我们可以简单的理解为一个优化后用来处理时间序列数据的数据库, 并且数据中的数组是由 时间 进行索引的. 相比于传统的结构化数据库主要有几个好处:
时间序列数据专注于海量数据的快速摄取 . 时序数据库视数据的每一次变化为一条新的数据, 从而可以去衡量变化: 分析过去的变化, 监测现在的变化, 以及预测未来将如何变化, 传统结构化数据在数据量小的时候能做到, 在数据量大的时候就需要花费大量的成本.
高精度数据保存时间较短, 中等或更低精度的摘要数据保留时间较长 . 对于实时监控来说, 不一定需要每一个精准的数据, 而是固定时间段时间数据的摘要. 这对于结构化数据库来说就意味着要进行筛选, 在保证大量的写入同时还要进行帅选, 这是一个超出结构化数据库设计来处理的工作量.
数据库本身必须连续计算来自高精度数据的摘要以进行长期存储 . 这些计算既包括一些简单的聚合, 同时也有一些复杂计算. 传统数据库无法承受那么大量的计算. 因为必须去实时统计这些聚合和复杂运算.
开始搭建 Prometheus
https://prometheus.io/
在 Prometheue 官网 Download 标签页进行下载, 这里以 Linux 版本为例:
下载好之后, 解压, 运行
nohup /data/prometheus/prometheus --web.listen-address=0.0.0.0:9090 --config.file=/data/prometheus/prometheus.YAML --Web.enable-lifecycle --storage.tsdb.path=/data/prometheus/data --storage.tsdb.retention.time=15d &
这样, 就简单的搭建起来 Prometheus 服务端了. 这时候, 我们可以在 Web 上访问
http://127.0.0.1/ :9090
就可以访问到管理页面
界面上几个标签说明下:
Alert : 用来配置告警规则. 之后我们会用 Grafana 自身的告警界面配置来代替这个.
Graph : 用来运行 PromQL 语句的一个控制台, 并且可以把运行出来的语句用用图形化进行展示, 此块我们后面章节会介绍到.
Status : 包含系统信息, 系统状态, 配置信息, 目标节点的状态, 服务发现状态等元信息的查看.
Prometheus 整体架构以及生态
这张图是官方的整体架构图. 米黄色部分是 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.YAML 文件, 添加如下配置:
- - 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 的技术资料, 包括整套企业级微服务课程和秒杀课程
来源: http://www.tuicool.com/articles/3Urueu6