点击上方蓝色“程序猿DD”,选择“设为星标”

回复“资源”获取独家整理的学习资料!

来源 | 公众号「yangyidba」

一 简介

Prometheus 是一套开源的监控系统。设计思路来自于Google的borgmon 监控系统(由工作在 SoundCloud的Google 前员工在2012年创建)。

  1. 提供多维数据模型和灵活的查询方式,通过将监控指标关联多个tag,来将监控数据进行任意维度的组合。

  2. 提供PromSQL可以利用多维数据完成复杂的查询。

  3. 在不依赖分布式存储的情况下,支持单个服务器节点可以本地存储。通过Prometheus自带的时序数据库支持每秒千万级别的数据存储。

  4. 制定了数据标准,以基于HTTP的pull方式采集时间序列数据,只要满足Prometheus监控数据格式的监控数据都可以被Prometheus采集,汇总。

  5. 通过PushGateway组件 支持以push方式推送时间序列数据。

  6. 支持静态配置和通过服务发现的机制发现监控对象,自动完成数据采集。目前已经支持Kubernets,etcd,Consul 等多种服务发现,减少运维人员手动配置操作。

  7. 多种图形模式及仪表盘支持(grafana)

  8. 易于维护,可以通过二进制文件直接启动,并且提供了容器化部署镜像。

  9. 支持数据分区采样和联邦集群部署,支持大规模集群监控。

二 架构

一图胜千言 (图片来自官方的架构图)

我们从上面的架构图可以看出 Prometheus 的主要模块包含:Server, Exporters, Pushgateway, PromQL, Alertmanager, WebUI 等。我们逐一认识一下各个模块的功能作用。

2.1 模块

Retrieval是负责定时去暴露的目标页面上去抓取采样指标数据。

Storage 是负责将采样数据写入指定的时序数据库存储。

PromQL 是Prometheus提供的查询语言模块。可以和一些webui比如grfana集成。

Jobs / Exporters:Prometheus 可以从 Jobs 或 Exporters 中拉取监控数据。Exporter 以 Web API 的形式对外暴露数据采集接口。

Prometheus Server:Prometheus 还可以从其他的 Prometheus Server 中拉取数据。

Pushgateway:对于一些以临时性 Job 运行的组件,Prometheus 可能还没有来得及从中 pull 监控数据的情况下,这些 Job 已经结束了,Job 运行时可以在运行时将监控数据推送到 Pushgateway 中,Prometheus 从 Pushgateway 中拉取数据,防止监控数据丢失。

Service discovery:是指 Prometheus 可以动态的发现一些服务,拉取数据进行监控,如从DNS,Kubernetes,Consul 中发现, file_sd 是静态配置的文件。

AlertManager:是一个独立于 Prometheus 的外部组件,用于监控系统的告警,通过配置文件可以配置一些告警规则,Prometheus 会把告警推送到 AlertManager。

2.2 Prometheus的工作原理逻辑:

  1. Prometheus server 定期从静态配置或者服务发现的 targets 拉取要监控的目标数据metrics。

  2. Prometheus server 在本地存储收集到的 metrics,并运行已定义好的 alert.rules,记录新的时间序列或者向 Alertmanager 推送警报。

  3. Alertmanager 收到警告的时候,可以根据配置,聚合,去重,降噪,最后发送警告。

  4. 可以使用 API, Prometheus Console 或者 Grafana 查询和聚合数据。

三 Prometheus的数据模型和类型

3.1 数据模型

Prometheus 存储的所有数据都是时间序列数据(Time Serie Data,简称时序数据)。时序数据是具有时间戳的数据流,该数据流属于某个度量指标(Metric)和该度量指标下的多个标签(Label)。

度量指标(Metric):描述了被监控的某个测量特征。度量指标名称由ASCII字母、数字、下划线和冒号组成,须匹配正则表达式 [a-zA-Z_:][a-zA-Z0-9_:]*

标签(Tag):对于同一个度量指标,不同标签值组合会形成特定维度的时序。标签支持Prometheus的多维数据模型。Prometheus 的查询语言可以通过度量指标和标签对时序数据进行过滤和聚合。标签名称可以包含 ASCII 字母、数字和下划线,须匹配正则表达式 [a-zA-Z_][a-zA-Z0-9_]*,带有 _ 下划线的标签名称保留为内部使用。标签值可以包含任意 Unicode 字符,包括中文。

采样值(Sample):时序数据其实就是一系列的采样值。每个采样值包括:一个64位的浮点数据和一个精确到毫秒的时间戳。

时间序列的存储似乎可以设计成key-value存储的方式

进一步拆分,我们通过PomeSQL查询看到的是类似如下

name是特定的label标签,代表了metric name。

3.2 Metric 的类型

Prometheus 主要提供四种主要的 metric 类型:Counter: 一种累加的 metric,它是一个只能递增的数值。典型的应用如:请求的个数,结束的任务数,出现的错误数等等。重启进程后,会被重置为0,比如MySQL的启动时间。

Gauge:一个既可以增加,又可以减少的度量指标。计量器主要用于测量类似于温度、内存使用量这样的瞬时数据。

Histogram:Histogram 由 <basename>_bucket{le="<upperinclusivebound>"}<basename>_bucket{le="+Inf"}, <basename>_sum<basename>_count 组成,主要用于表示一段时间范围内对数据进行采样(通常是请求持续时间或响应大小),并能够对其指定区间以及总数进行统计,通常它采集的数据展示为直方图。例如 Prometheus server 中 prometheus_local_storage_series_chunks_persisted, 表示 Prometheus 中每个时序需要存储的 chunks 数量,我们可以用它计算待持久化的数据的分位数。

Summary:Summary 和 Histogram 类似,由 <basename>{quantile="<φ>"}<basename>_sum<basename>_count 组成,主要用于表示一段时间内数据采样结果(通常是请求持续时间或响应大小),它直接存储了 quantile 数据,而不是根据统计区间计算出来的。例如 Prometheus server 中 prometheus_target_interval_length_seconds

3.3 作业和实例

Prometheus 中,将任意一个独立的数据源(target)称之为实例(instance)。包含相同类型的实例的集合称之为作业(job)。如下是一个从mysql_no_product.yml获取监控对象,每隔1min拉取一次的job 。

- - job_name: 'qa-mysql'scrape_timeout: 20sscrape_interval: 1mfile_sd_configs:- files:- mysql_no_product.ymlrefresh_interval: 1mrelabel_configs:- source_labels: ['mysql_host']target_label: __param_mysql_host- source_labels: ['mysql_port']target_label: __param_mysql_port- source_labels: ['__address__']target_label: __address__

四 报警

Alertmanager 主要用于接收 Prometheus 发送的告警信息,它支持丰富的告警通知渠道,而且很容易做到告警信息进行去重,降噪,分组,策略路由,是一款前卫的告警通知系统。Alertmanager 可以比较吸引人的特性:

报警分组:将报警分组,当报警大量出现的时候,只会发一条消息告诉你数据库挂了的情况出现了 100 次,而不是用 100 条推送轰炸你;

报警抑制:显然,当数据库出问题的时候,其它的应用可肯定会出问题,这时候你可能不会需要其它的不相干的报警短信,这个功能将真正有用的信息及时通知你;

报警静默:一些不重要的报警,可以完全忽略,因此也就没有必要通知;

五 可视化

Grafana 是一个跨平台的开源的度量分析和可视化工具,可以通过将采集的数据查询然后可视化的展示。比Prometheus 自带的web ui提供更多好看的界面和功能 。

本文通过OpenWrite的Markdown转换工具发布

关注我,回复“加群”加入各种主题讨论群

  • 代码生成器:IDEA 强大的 Live Templates

  • Spring Boot 2.1之后如何在启动日志中打印请求路径列表

  • NASA立扫把挑战”?牛顿的棺材板都按不住啦!

  • 如何干掉恶心的 SQL 注入?

  • Spring Boot 2.x 中使用国产数据库连接池Druid

朕已阅 

开源监控系统 Prometheus 入门相关推荐

  1. 开源监控系统Prometheus介绍

    前言 Prometheus是CNCF的一个开源项目,Google BorgMon监控系统的开源版本,是一个系统和服务的监控系统.周期性采集metrics指标,匹配规则和展示结果,以及触发某些条件的告警 ...

  2. 开源监控系统Prometheus——Alertmanager报警模块

    概要 Alertmanager与Prometheus是相互分离的两个部分.Prometheus服务器根据报警规则将警报发送给Alertmanager,然后Alertmanager将silencing. ...

  3. 小米开源监控系统OpenFalcon应对高并发7种手段

    2019独角兽企业重金招聘Python工程师标准>>> 小米开源监控系统OpenFalcon应对高并发7种手段 原创 2016-04-01 秦晓辉 高可用架构 编者按:本文是秦晓辉在 ...

  4. Open-Falcon 小米开源监控系统Dashboard使用操作与告警通知

    前言 上一章节我们已经完成了Open-Falcon的单机部署,这一章节主要介绍Open-Falcon的用户注册.功能使用和监控客户端配置. Open-Falcon 部署参考:CentOS-7 单机部署 ...

  5. 小米的开源监控系统open-falcon架构设计,看完明白如何设计一个好的系统

    小米的开源监控系统open-falcon架构设计,看完明白如何设计一个好的系统 小米的http://book.open-falcon.org/zh/intro/ 早期,一直在用zabbix,不过随着业 ...

  6. java 开源监控_推荐一款强大的国产开源监控系统!

    项目简介 集监控点监控.日志监控.数据可视化以及监控告警为一体的国产开源监控系统,直接部署即可使用. 监控数据类型丰富,提供多种富有表现力的图表,满足对数据可视化的需要,目前支持折线图.饼图.地理位置 ...

  7. 实战!最受欢迎的企业级开源监控系统 Zabbix + Prometheus !

    我们都知道监控系统的重要意义,但往往在监控系统的选择上犹豫不决.尤其Zabbix和Prometheus的使用者,认为自己使用的监控系统更好用,但无疑,脱离实际情况讨论哪一个更好都是没有任何意义的. 很 ...

  8. 主流开源监控系统汇总

    监控做为自动化运维的重要组成部分,承担着反馈的作用. 以往,在缺少告警机制的情况下,企业无法第一时间洞悉到系统发生故障,只能通过用户的反馈来获取,系统运维人员往往也只是充当了一个"救火&qu ...

  9. 监控系统 Prometheus 和 Zabbix 对比

    新公司要上监控,面试提到了 Prometheus 是公司需要的监控解决方案,我当然是选择跟风了. 之前主要做的是 Zabbix,既然公司需要 Prometheus,那没办法,只能好好对比一番,了解下, ...

最新文章

  1. char(nchar)与varchar(nvarchar)的区别以及选择
  2. 无法加载mcrypt扩展,请检查您的php配置的解决办法
  3. php实现支付宝支付接口,PHP实现个人支付宝支付开发(二)
  4. python求函数曲率_【Python】车道线拟合曲线的曲率半径计算公式及代码
  5. 部分常用算法分析总结
  6. 尽管普通的sql语句代码可以实现数据插入的操作,但是更好的代码应该是参数的方式:...
  7. HDU3939(毕达哥拉斯三元组的解)
  8. 斐波那契数列快速算法详解
  9. 计算机网络第四章总结
  10. 【计算机组成与设计】3.4计算机CPU除法运算
  11. J-Trace入门系列1:感动人心的功能与更感动人心的售价
  12. 【个人学习文章收集】
  13. 计算机网络中rtd,一文了解Modern Standby与RTD3
  14. background,background-size背景图片和盒子模型
  15. 单链表创建以及头插、尾插
  16. 【水质预测】基于matlab模糊神经网络水质预测【含Matlab源码 1923期】
  17. 青龙面板之今日油条(更新)
  18. Android和服务端通过Socket收发文字图片的实现
  19. 康佳android 9tv,安卓4.4抢先体验:康佳易TV最大规模系统升级
  20. WGS84、GCJ-02、BD-09、图吧坐标简介及坐标转换实现(java版)

热门文章

  1. cve-2019-7609 Kibana远程代码执行漏洞攻击方法和漏洞原理分析
  2. 内网渗透测试:NTLM Relay攻击分析
  3. tomcat 启动报栈溢出 解决方法
  4. 区块链 重放攻击 简介
  5. searchsploit工具(exploit-db.com)使用实例 (linux 内核漏洞提权) exploitdb
  6. Centos上安装EPEL
  7. Linux的环境变量
  8. Pidgin下使用Gtalk问题
  9. LeakDiag 微软一款检测memory leak的工具
  10. 使用lsof恢复进程打开的误删除文件