龙华专业做网站公司,百度大数据分析,杨凯做网站,营销策划方案公司最近一直在折腾时序类型的数据库#xff0c;经过一段时间项目应用#xff0c;觉得十分不错。而Prometheus又是刚刚推出不久的开源方案#xff0c;中文资料较少#xff0c;所以打算写一系列应用的实践过程分享一下。 Prometheus 是什么#xff1f; Prometheus是一套开源的监… 最近一直在折腾时序类型的数据库经过一段时间项目应用觉得十分不错。而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 指标名称和标签 每条时间序列是由唯一的 指标名称 和 一组 标签 keyvalue的形式组成。指标名称 一般是给监测对像起一名字例如 http_requests_total 这样它有一些命名规则可以包字母数字_之类的的。通常是以应用名称开头_监测对像_数值类型_单位这样。例如 push_totaluserlogin_mysql_duration_secondsapp_memory_usage_bytes 标签 就是对一条时间序列不同维度的识别了例如 一个http请求用的是POST还是GET它的endpoint是什么这时候就要用标签去标记了。最终形成的标识便是这样了 http_requests_total{methodPOST,endpoint/api/tracks} 记住针对http_requests_total这个metrics name 无论是增加标签还是删除标签都会形成一条新的时间序列。查询语句就可以跟据上面标签的组合来查询聚合结果了。如果以传统数据库的理解来看这条语句则可以考虑 http_requests_total是表名标签是字段而timestamp是主键还有一个float64字段是值了。Prometheus里面所有值都是按float64存储 Prometheus 的四种数据类型 Counter Counter 用于累计值例如 记录 请求次数、任务完成数、错误发生次数。一直增加不会减少。重启进程后会被重置。 例如http_response_total{methodGET,endpoint/api/tracks} 10010秒后抓取 http_response_total{methodGET,endpoint/api/tracks} 100 Gauge Gauge 常规数值例如 温度变化、内存使用变化。可变大可变小。重启进程后会被重置 例如 memory_usage_bytes{hostmaster-01} 100 抓取值memory_usage_bytes{hostmaster-01} 30memory_usage_bytes{hostmaster-01} 50memory_usage_bytes{hostmaster-01} 80 抓取值 Histogram Histogram 可以理解为柱状图的意思常用于跟踪事件发生的规模例如请求耗时、响应大小。它特别之处是可以对记录的内容进行分组提供 count 和 sum 全部值的功能。 例如{小于105次小于201次小于302次}count7次sum7次的求和值 Summary Summary和Histogram十分相似常用于跟踪事件发生的规模例如请求耗时、响应大小。同样提供 count 和 sum 全部值的功能。例如count7次sum7次的值求值它提供一个quantiles的功能可以按%比划分跟踪的结果。例如quantile取值0.95表示取采样值里面的95%数据。 原文地址 http://www.cnblogs.com/vovlie/p/Prometheus_CONCEPTS.html .NET社区新闻深度好文微信中搜索dotNET跨平台或扫描二维码关注