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 指标名称和标签

每条时间序列是由唯一的 指标名称 和 一组 标签 (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跨平台或扫描二维码关注

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/327368.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

怎样批量获取文件名,批量提取文件名 文件名读取windows 批处理文件

https://jingyan.baidu.com/article/cdddd41cb0776f53cb00e1e4.html https://jingyan.baidu.com/article/cdddd41cb0776f53cb00e1e4.html 如图&#xff0c;这个文件夹中有一些名字比较奇特的文件&#xff0c;接着我们就开始获取这些文件的文件名。 如图&#xff0c;文件在一…

大三那年在某宝8块钱买的.NET视频决定了我的职业生涯

前言 谨以此文献给那些还在大学中迷茫的莘莘学子们&#xff01; 韩愈在《师说》中提出了作为师者应该做的三件事&#xff1a;传道、授业、解惑。 1.传道&#xff1a;培养学生的道德观 2.授业&#xff1a;传授学生专业技能 3.解惑&#xff1a;解答学生内心的迷茫迷惑 曾几何时&a…

为什么说Java中只有值传递(另一种角度)

转载自 为什么说Java中只有值传递 对于初学者来说&#xff0c;要想把这个问题回答正确&#xff0c;是比较难的。在第二天整理答案的时候&#xff0c;我发现我竟然无法通过简单的语言把这个事情描述的很容易理解&#xff0c;遗憾的是&#xff0c;我也没有在网上找到哪篇文章可以…

解决: -bash: docker-compose: command not found、linux 安装 docker-compose

https://blog.csdn.net/jiangyu1013/article/details/84570872 https://blog.csdn.net/guoshaoliang789/article/details/96878731 解决&#xff1a; -bash: docker-compose: command not found、linux 安装 docker-compose 微风--轻许-- 2018-11-27 18:06:01 26470 收藏 8 …

.NET Task揭秘(一)

Task为.NET提供了基于任务的异步模式&#xff0c;它不是线程&#xff0c;它运行在线程池的线程上。本着开源的精神&#xff0c; 本文以解读基于.NET4.5 Task源码的方式来揭秘Task的实现原理。 Task的创建 Task的创建方式主要有2种&#xff1a;Task.Run 和Task.Factory.StartNew…

Linux(笔记)

开启端口时&#xff0c;宝塔面板和阿里云都要开启 简介 我们为什么要学习Linux linux诞生了这么多年&#xff0c;以前还喊着如何能取代windows系统&#xff0c;现在这个口号已经小多了&#xff0c;任何事物发展都有其局限性都有其天花板。就如同在国内再搞一个社交软件取代腾讯…

自增主键与UUID的优缺点

https://blog.csdn.net/rocling/article/details/83116950 自增主键与UUID的优缺点 rocling 2018-10-17 20:15:02 8062 收藏 8 分类专栏&#xff1a; sql java 文章标签&#xff1a; sql 版权 自增主键 自增ID是在设计表时将id字段的值设置为自增的形式&#xff0c;这样当…

Git 在团队中的最佳实践--如何正确使用Git Flow

我们已经从SVN 切换到Git很多年了&#xff0c;现在几乎所有的项目都在使用Github管理, 本篇文章讲一下为什么使用Git, 以及如何在团队中正确使用。 Git的优点 Git的优点很多&#xff0c;但是这里只列出我认为非常突出的几点。 由于是分布式&#xff0c;所有本地库包含了远程库的…

拿到阿里巴巴的实习生Offer就是这么简单

转载自 拿到阿里巴巴的实习生Offer就是这么简单 一、个人简介及面试流程简介 本人本科就读于一个非985非211的一本高校&#xff0c;研究生就读于某985高校&#xff0c;目前研究方向为云计算与大数据。实习内推部门为菜鸟网络&#xff0c;所投的岗位为后台开发Java(包含大数据…

[译] RESTful API 设计最佳实践

https://juejin.im/entry/6844903503953920007 [译] RESTful API 设计最佳实践 阅读 8779 收藏 0 2017-10-16 原文链接&#xff1a; segmentfault.com 原文&#xff1a;RESTful API Design. Best Practices in a Nutshell. 作者&#xff1a;Philipp Hauer 项目资源的URL应该…

Git(笔记)

版本控制 版本控制&#xff08;Revision control&#xff09;是一种在开发的过程中用于管理我们对文件、目录或工程等内容的修改历史&#xff0c;方便查看更改历史记录&#xff0c;备份以便恢复以前的版本的软件工程技术。 实现跨区域多人协同开发追踪和记载一个或者多个文件…

做到我这样,你也能拿到京东Offer

转载自 做到我这样&#xff0c;你也能拿到京东Offer 最近&#xff0c;春招已经基本接近尾声了&#xff0c;我找了几位拿到名企Offer的粉丝&#xff0c;请他们总结了面试经验&#xff0c;近期会分批的推送给大家。希望给那些正在准备秋招的同学提供些帮助。这是一篇7000字的长文…

迁移传统.net 应用到.net core [视频]

.net core是.NET技术的未来&#xff0c;这一点正在被越来越多的公司认识到&#xff0c;但是如何将传统的.NET应用迁移到.NET Core是一个迫切需要解决的问题。 对于传统.NET应用来说&#xff0c;使用和不使用.NET Core可能并不能直接给企业带来好处&#xff0c;相反使用中遇到了…

POI

Poi&#xff08;适合小数据量&#xff09; Apache POI 官网&#xff1a;https://poi.apache.org/ POI是Apache软件基金会的&#xff0c;POI为“Poor Obfuscation Implementation”的首字母缩写&#xff0c;意为“简洁版的模糊实现”。 所以POI的主要功能是可以用Java操作Micr…

因 Redis Key 命令不规范,导致熬了一个通宵才把Key删完了!

https://mp.weixin.qq.com/s/7FL0nUTk6aFmAb2J__5Mtw 因 Redis Key 命令不规范&#xff0c;导致熬了一个通宵才把Key删完了&#xff01; 点击关注 &#x1f449; Java面试那些事儿 9月3日 # 前言 由于有一条业务线不理想&#xff0c;高层决定下架业务。对于我们技术团队而言&a…

使用 CefSharp 在 C# App 中嵌入 Chrome 浏览器

介绍 以前曾试过在app中整合一个可靠又快速的web浏览器吗&#xff1f; 在本文中&#xff0c;你会学到如何轻松地将奇妙的CefSharp网页浏览器组件&#xff08;基于Chromium&#xff09;集成到你的C# app中。 然后&#xff0c;你可以使用此web浏览器&#xff1a; 给用户提供一个集…

从入门到熟悉 HTTPS 的 9 个问题

转载自 从入门到熟悉 HTTPS 的 9 个问题 Q1: 什么是 HTTPS&#xff1f; BS: HTTPS 是安全的 HTTP HTTP 协议中的内容都是明文传输&#xff0c;HTTPS 的目的是将这些内容加密&#xff0c;确保信息传输安全。最后一个字母 S 指的是 SSL/TLS 协议&#xff0c;它位于 HTTP 协议…

Jexus针对Asp.net core应用程序的六大不可替代的优势

Jexus 是一款运行于 Linux 平台&#xff0c;以支持 ASP.NET、PHP 为特色的集高安全性和高性能为一体的 WEB 服务器和反向代理服务器。 1&#xff0c;配置简便&#xff1a;在Jexus上&#xff0c;Asp.net core只是Jexus上的一个“站点”&#xff0c;因此&#xff0c;只需在Jexus…

安装docker遇到的坑 Could not resolve host: download.docker.com;

我写的 1.编辑网卡 vim /etc/sysconfig/network-scripts/ifcfg-ens33 2.增加这三行 DNS18.8.8.8 DNS2114.114.114.114 PEERDNSno 3.最后重启网络service network restart 即可。不行就重启虚拟机 4.设置稳定的源yum-config-manager \ --add-repo \ https://download…

EasyExcel(笔记)

常用场景 1、将用户信息导出为excel表格&#xff08;导出数据…&#xff09; 2、将Excel表中的信息录入到网站数据库&#xff08;习题上传…&#xff09; 开发中经常会设计到excel的处理&#xff0c;如导出Excel&#xff0c;导入Excel到数据库中&#xff01; 操作Excel目前比…