最近一直在折腾时序类型的数据库,经过一段时间项目应用,觉得十分不错。而Prometheus又是刚刚推出不久的开源方案,中文资料较少,所以打算写一系列应用的实践过程分享一下。

Prometheus 是什么?

Prometheus是一套开源的监控&报警&时间序列数据库的组合,起始是由SoundCloud公司开发的。随着发展,越来越多公司和组织接受采用Prometheus,社会也十分活跃,他们便将它独立成开源项目,并且有公司来运作。google SRE的书内也曾提到跟他们BorgMon监控系统相似的实现是Prometheus。现在最常见的Kubernetes容器管理系统中,通常会搭配Prometheus进行监控。

Prometheus 的优点

  • 非常少的外部依赖,安装使用超简单

  • 已经有非常多的系统集成 例如:docker HAProxy Nginx JMX等等

  • 服务自动化发现

  • 直接集成到代码

  • 设计思想是按照分布式、微服务架构来实现的

Prometheus 的特性

  • 自定义多维度的数据模型

  • 非常高效的存储 平均一个采样数据占 ~3.5 bytes左右,320万的时间序列,每30秒采样,保持60天,消耗磁盘大概228G。

  • 强大的查询语句

  • 轻松实现数据可视化

等等

相对于Graphite这种产品,还是有不少优点的。最让我觉得不错的是非常优秀的写性能和读取性能,它数据结构实现和OpenTSDB是有相似之处,有兴趣可以看看这个文档。解密OpenTSDB的表存储优

Prometheus 的系统架构

它的服务过程是这样的 Prometheus daemon 负责定时去目标上抓取 metrics(指标) 数据,每个抓取目标需要暴露一个http服务的接口给它定时抓取。
Prometheus支持通过配置文件、文本文件、zookeeper、Consul、DNS SRV lookup等方式指定抓取目标。
Alertmanager 是独立于Prometheus的一个组件,可以支持Prometheus的查询语句,提供十分灵活的报警方式。
Prometheus支持很多方式的图表可视化,例如十分精美的Grafana,自带的Promdash,以及自身提供的模版引擎等等,还提供HTTP API的查询方式,自定义所需要的输出。
PushGateway这个组件是支持Client主动推送 metrics 到PushGateway,而Prometheus只是定时去Gateway上抓取数据。

如果有使用过statsd的用户,则会觉得这十分相似,只是statsd是直接发送给服务器端,而Prometheus主要还是靠进程主动去抓取。

Prometheus 的数据模型

Prometheus 从根本上所有的存储都是按时间序列去实现的,相同的 metrics(指标名称) 和 label(一个或多个标签) 组成一条时间序列,不同的label表示不同的时间序列。为了支持一些查询,有时还会临时产生一些时间序列存储。

metrics name & label 指标名称和标签

每条时间序列是由唯一的 指标名称 和 一组 标签 (key=value)的形式组成。
指标名称 一般是给监测对像起一名字,例如 http_requests_total 这样,它有一些命名规则,可以包字母数字_之类的的。
通常是以应用名称开头_监测对像_数值类型_单位这样。
例如:

  1. push_total

  2. userlogin_mysql_duration_seconds

  3. app_memory_usage_bytes

标签 就是对一条时间序列不同维度的识别了,例如 一个http请求用的是POST还是GET,它的endpoint是什么,这时候就要用标签去标记了。
最终形成的标识便是这样了

http_requests_total{method="POST",endpoint="/api/tracks"}

记住,针对http_requests_total这个metrics name 无论是增加标签还是删除标签都会形成一条新的时间序列。
查询语句就可以跟据上面标签的组合来查询聚合结果了。
如果以传统数据库的理解来看这条语句,则可以考虑 http_requests_total是表名,标签是字段,而timestamp是主键,还有一个float64字段是值了。(Prometheus里面所有值都是按float64存储)

Prometheus 的四种数据类型

Counter

  • Counter 用于累计值,例如 记录 请求次数、任务完成数、错误发生次数。

  • 一直增加,不会减少。

  • 重启进程后,会被重置。

例如:http_response_total{method="GET",endpoint="/api/tracks"} 100
10秒后抓取 http_response_total{method="GET",endpoint="/api/tracks"} 100

Gauge

  • Gauge 常规数值,例如 温度变化、内存使用变化。

  • 可变大,可变小。

  • 重启进程后,会被重置

例如: memory_usage_bytes{host="master-01"} 100 < 抓取值
memory_usage_bytes{host="master-01"} 30
memory_usage_bytes{host="master-01"} 50
memory_usage_bytes{host="master-01"} 80 < 抓取值

Histogram

  • Histogram 可以理解为柱状图的意思,常用于跟踪事件发生的规模,例如:请求耗时、响应大小。它特别之处是可以对记录的内容进行分组,提供 count 和 sum 全部值的功能。

    例如:{小于10=5次,小于20=1次,小于30=2次},count=7次,sum=7次的求和值

Summary

  • Summary和Histogram十分相似,常用于跟踪事件发生的规模,例如:请求耗时、响应大小。同样提供 count 和 sum 全部值的功能。

  • 例如:count=7次,sum=7次的值求值

  • 它提供一个quantiles的功能,可以按%比划分跟踪的结果。例如:quantile取值0.95,表示取采样值里面的95%数据。

原文地址: http://www.cnblogs.com/vovlie/p/Prometheus_CONCEPTS.html


.NET社区新闻,深度好文,微信中搜索dotNET跨平台或扫描二维码关注

Prometheus 系统监控方案相关推荐

  1. Grafana+Prometheus系统监控之webhook

    概述 Webhook是一个API概念,并且变得越来越流行.我们能用事件描述的事物越多,webhook的作用范围也就越大.Webhook作为一个轻量的事件处理应用,正变得越来越有用. 准确的说webho ...

  2. Grafana+Prometheus系统监控之MySql

    架构 grafana和prometheus之前安装配置过,见:Grafana+Prometheus打造全方位立体监控系统 MySql安装 MySql的地位和重要性就不言而喻了,作为开源产品深受广大中小 ...

  3. Nagios:企业级系统监控方案

    在大多数情况下Cacti + RRDtool已经实现对系统各种参数的监测.但很多企业可能不满足于仅仅监测系统基本参数的需求,而是需要监测除基本参数之外的各种应用程序的运行状况.很显然在这种情况下对于一 ...

  4. Grafana+Prometheus系统监控MySQL

    Grafana+Prometheus 不单单是可以监控MySQL,还可以监控服务器,MongoDB等等 首先看架构图 NO. 组件 作用 1 mysql_exporter MySQL监控数据采集组件 ...

  5. 运维-系统监控方案:基于Grafana的TDengine零依赖监控解决方案

    作为基础组件,TDengine本身的平稳运行至关重要,所以在实际应用过程中,我们也需要监控它的各项运行指标. TDengine启动后,会自动创建一个监测数据库log ,并自动将服务器的CPU.内存.硬 ...

  6. 基于TIG的云原生系统监控方案

  7. 阿里云容器Kubernetes监控(七) - Prometheus监控方案部署

    前言 Prometheus是一款面向云原生应用程序的开源监控工具,作为第一个从CNCF毕业的监控工具而言,开发者对于Prometheus寄予了巨大的希望.在Kubernetes社区中,很多人认为Pro ...

  8. 建设DevOps统一运维监控平台,全面的系统监控你做好了吗?

    本文转自微信号EAWorld.扫描下方二维码,关注成功后,回复"普元方法+",将会获得热门课堂免费学习机会! 前言 随着Devops.云计算.微服务.容器等理念的逐步落地和大力发展 ...

  9. 【开发技术】2万字详细介绍Docker 和 web项目的部署监控,docker部署,拉取kafana,prometheus镜像监控

    SpringBoot 内容管理 Linux Redis Connnect 设置服务器redis开机自启动 修改Redis配置文件 关闭防火墙 关闭selinux 连接Redis Docker Dock ...

最新文章

  1. [k8s] 第五章 Pod详解
  2. C#中实现计时器功能(定时任务和计时多长时间后执行某方法)
  3. 220v变12v初级线圈匝数_12V升220V升压变压器线圈绕法计算
  4. 虚拟机linux中怎样打开qt,虚拟机中在Centos 4.7中安装qt-x11-opensource-4.4.3
  5. 桂林理工计算机与科学技术,桂林理工大学信息科学与工程学院
  6. Linux文件夹打包发送到本地
  7. 问题以及发现问题和解决问题
  8. 蓝桥杯 BASIC-16 基础练习 分解质因数
  9. python画热力图
  10. BULK INSERT, 实战手记:让百万级数据瞬间导入SQL Server
  11. 五大流程成就网络运维管理的基础
  12. matlab画森林图,R语言meta分析(4)网状Meta 分析
  13. Linux驱动之串口驱动配置
  14. 【win10安装】磁盘MBR分区表
  15. 中国内蒙古医企在“吴哥国际医院”开展“千人一对一国际医疗捐助”
  16. 单片机毕设选题 - stm32心率脉搏血压体征监测手表(嵌入式 物联网)
  17. java2048朝代版代码_2048朝代版完整版
  18. C++ 侯捷系列视频汇总
  19. Balanced MSE 使用指南
  20. python基础(一)字符串变形

热门文章

  1. WPF 实现调用本机摄像头~
  2. Ant Design Blazor 发布 0.9.0,共100+人贡献!
  3. 一文说通Dotnet操作MongoDB GridFS
  4. 如何在 ASP.Net Core 中使用 Serilog
  5. 浅谈.NET技术公司的实习生培养
  6. IdentityServer4系列 | 快速搭建简易项目
  7. 将终结点图添加到你的ASP.NET Core应用程序中
  8. 一文说通Dotnet Core的后台任务
  9. 使用PInvoke互操作,让C#和C++愉快的交互优势互补
  10. Blazor WebAssembly 3.2.0 正式起飞,blazor 适合你吗?