一步步教你用Prometheus搭建实时监控系统系列(一)——上帝之火,普罗米修斯的崛起
上帝之火
本系列讲述的是开源实时监控告警解决方案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
在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上访问
就可以访问到管理页面
界面上几个标签说明下:
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=*
启动完毕后,我们就可以在页面上访问如下地址:
得到如下数据:
关于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的技术资料,包含一整套企业级微服务课程以及一套秒杀课程
一步步教你用Prometheus搭建实时监控系统系列(一)——上帝之火,普罗米修斯的崛起的更多相关文章
- 一步步教你用Prometheus搭建实时监控系统系列(二)——详细分析拉取和推送两种不同模式
前言 本系列着重介绍Prometheus以及如何用它和其周边的生态来搭建一套属于自己的实时监控告警平台. 本系列受众对象为初次接触Prometheus的用户,大神勿喷,偏重于操作和实战,但是重要的概念 ...
- 普罗米修斯Prometheus监控安装
普罗米修斯Prometheus监控安装 架构: 服务端:192.168.0.204 客户端:192.168.0.206 环境准备:所有节点安装go 语言环境 rz go1.12.linux-amd64 ...
- 监控神器-普罗米修斯Prometheus的安装
搬砖党的福音:普罗米修斯-监控神器 功能: 在业务层用作埋点系统 Prometheus支持多种语言(Go,java,python,ruby官方提供客户端,其他语言有第三方开源客户端).我们可以通过客户 ...
- 普罗米修斯!Ubuntu下prometheus监控软件安装使用
*Prometheus* 是一个开源的服务监控系统和时间序列数据库 官方网站:prometheus.io 一.安装prometheus cd /usr/local/ #进入安装目录 wg ...
- Prometheus普罗米修斯快速入门
欢迎来到普罗米修斯! Prometheus是一个监控平台,通过从监控目标的抓取HTTP端点上获取指标. 本指南将展示如何使用和安装Promethues,配置和监视第一个资源.还将下载并安装导出器Exp ...
- Prometheus监控学习笔记之Prometheus普罗米修斯监控入门
0x00 概述 视频讲解通过链接网易云课堂·IT技术快速入门学院进入,更多关于Prometheus的文章. Prometheus是最近几年开始流行的一个新兴监控告警工具,特别是kubernetes的流 ...
- Prometheus 普罗米修斯监控
周末在家无聊 看新闻 看到关于监控的东西 拿来玩玩 试一下 感觉还蛮有意思 特此记录一下 这里只介绍客户端的配置 1:首先在POM中添加依赖 <dependency> <groupI ...
- Telegraf+InfluxDB+Grafana快速搭建实时监控系统 监控postgresql
Telegraf+InfluxDB+Grafana快速搭建实时监控系统 监控postgresql
- Prometheus+Grafana企业监控系统
Prometheus+Grafana企业监控系统 作者 刘畅 实验配置: 主机名称 Ip地址 controlnode 172.16.1.70/24 slavenode1 172.16.1.71/24 ...
随机推荐
- Python3-cx_Oracle模块-数据库操作之Oracle
模块安装 1.安装cx_Oracle模块之前必须要安装Oracle客户端,否则无法使用 2.系统上需要装有对应版本的c++编译套件(Linux下:g++ Windows下:VC++) 参考文档 htt ...
- HTML5实现DTMF(电话拨号按键信号)解码、编码,代码简单易于移植
目录 一.前言 1.1 HTML5实现DTMF的一些动机 1.2 一些有效场景 (1) 10086 (2) 软电话 (3) 小玩具 二.DTMF频率按键对照表 三.DTMF信号解码 得到按键值 3.1 ...
- 3dTiles 数据规范详解[2] Tileset与Tile
转载请声明出处:全网@秋意正寒 https://www.cnblogs.com/onsummer/p/13128682.html 一.一个简单的3dTiles数据示例 上图是一份 3dTiles数据集 ...
- 懂了!VMware/KVM/Docker原来是这么回事儿
云计算时代,计算资源如同小马哥当年所言,已经成为了互联网上的水和电. 虚拟主机.web服务器.数据库.对象存储等等各种服务我们都可以通过各种各样的云平台来完成. 而在云计算欣欣向荣的背后,有一个重要的 ...
- 让IE下载跟迅雷一样快?
网络上搜的没试过... 修改IE支持多线程即可: HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Internet Settin ...
- 每日一题 - 剑指 Offer 53 - I. 在排序数组中查找数字 I
题目信息 时间: 2019-07-04 题目链接:Leetcode tag:二分查找 哈希表 难易程度:简单 题目描述: 统计一个数字在排序数组中出现的次数. 示例1: 输入: nums = [5,7 ...
- ShuffleNetV1/V2简述 | 轻量级网络
ShuffleNet系列是轻量级网络中很重要的一个系列,ShuffleNetV1提出了channel shuffle操作,使得网络可以尽情地使用分组卷积来加速,而ShuffleNetV2则推倒V1的大 ...
- 免费馅饼——移动dp
免费馅饼 题目描述 SERKOI最新推出了一种叫做"免费馅饼"的游戏: 游戏在一个舞台上进行.舞台的宽度为 \(W\) 格,天幕的高度为 \(H\) 格,游戏者占一格. 开始时游戏 ...
- 最近用unity写三消游戏,mark一个准备用的unity插件,用来控制运动。
http://www.pixelplacement.com/itween/index.php itween 听说还不错!
- 常用js代码片段(一)
1.如果数组所有元素都满足函数条件,则返回true.调用时,如果省略第二个参数,则默认传递布尔值. const all= (arr, fn=Boolean) => arr.every(fn); ...