本节学习Prometheus的核心,多维数据模型
 
比如要监控容器 webapp1 的内存使用情况,最传统和经典的方法是定义一个指标 container_memory_usage_bytes_webapp1 来记录webapp1的内存使用数据。假如每分钟取一次样,那么在数据库里就会有类似的记录。
 
 
现在需求变了,我们需要知道所有 webapp 容器的内存使用情况。如果还是采用前面的方法,就不得不增加新的指标 container_memory_usage_bytes_webapp2 、container_memory_usage_bytes_webapp3 。。。
 
像Graphite这类更高级的监控方案采用了更为优雅的层次化数据模型。为了满足上面的需求,Graphite会定义指标 container.memory_usage_bytes.webapp1、container.memory_usage_bytes.webapp2、container.memory_usage_bytes.webapp3。。。然后就可以用 container.memory_usage_bytes.webapp*  获取所有webapp 的内存使用数据
 
到目前为止问题处理的很好,但客户总会提出更多的需求,现在不仅要按容器的名字统计内存使用量,还要按镜像来统计,或者对比一下某一组容器在生产环境和测试环境中内存的使用情况。
 
当然我们可以这样:只要定义更多的指标就可以满足这些需求,比如 container.memory_usage_bytes.image1.webapp1 、 container.memory_usage_bytes.webapp1.prod等
 
但是我们不清楚用户什么时候会要什么数据,所以无法提前定义好用户需要的指标。下面看看Prometheus如何处理这个问题。
 
Prometheus 只需定义一个全局的指标 container_memory_usage_bytes ,然后通过添加不同的维度数据来满足不同的业务需求。
 
比如对于前面 webapp1 的三条取样数据,转换成 Prometheus多维数据如下
 
 
后面三列 container_name  、 image 、 env 就是数据的三个维度。想象一下,如果不同的env(prod、test、dev),不同的image(webapp1.2 、 webapp1.3 )的容器,他们的内存使用数据中标注了这三个维度的信息,那么将能满足很多的业务需求,比如:
 
    1、计算 webapp2 的平均内存使用情况  avg(container_memory_usage_bytes{container_name="webapp2"})
    2、计算运行 webapp1.2 镜像的所有容器内存使用情况  sum(container_memory_usage_bytes{image="webapp1.2"})
    3、统计不同运行环境中 webapp 容器内存使用总量 sum(container_memory_usage_bytes{container_name="webapp"}) by (env)
 
这里只是列举了几个例子,不过已经能够体现Prometheus数据模型的优势了。
 
    1、通过维度对数据进行说明,附加更多的业务信息,进而满足不同业务的需求。同时维度是可以动态添加的,比如再给数据加上一个user维度,就可以按用户来统计容器的内存使用量了
 
    2、Prometheus 丰富的查询语言能够灵活、充分的挖掘数据的价值。前面示例中的  avg、sum 、by 只是查询语言中很小的一部分功能,已经为我们展现了 Prometheus 对多维数据进行分片、聚合的强大能力。
 

084、Prometheus 到底NB在哪里?(2019-05-06 周一)的更多相关文章

  1. Prometheus 到底 NB 在哪里?- 每天5分钟玩转 Docker 容器技术(84)

    本节讨论 Prometheus 的核心,多维数据模型.我们先来看一个例子. 比如要监控容器 webapp1 的内存使用情况,最传统和典型的方法是定义一个指标 container_memory_usag ...

  2. Heartbeat took longer than "00:00:01" at "09/06/2019 05:08:08 +00:00".

    .netcore在k8s+docker+linux,部署后,偶尔会报这样的警告 Warn:Microsoft.AspNetCore.Server.KestrelHeartbeat took longe ...

  3. 2019.07.06 纪中_B

    今天的题看起来都很简单,结果就爆炸了 做题时:怎么都是图论??? 结果最后好多是DP(最恐怖的是还有我没学过的状压DP) 2019.07.06[NOIP提高组]模拟 B 组 做了两题(稍微腐败了一下) ...

  4. 2019.05.26 周日--《阿里巴巴 Java 开发手册》精华摘要

    一.写在开头 Java作为一个编程界最流行的语言之一,有着很强的生命力.代码的编写规范也是不容忽视的,今天,我就把自己阅读的国内的互联网巨头阿里巴巴的<阿里巴巴 Java 开发手册>一些精 ...

  5. 【转载】Spring Boot【快速入门】2019.05.19

    原文出处:https://www.cnblogs.com/wmyskxz/p/9010832.html   Spring Boot 概述 Build Anything with Spring Boot ...

  6. 2019/05/11 JAVA虚拟机原理

    所谓虚拟机,就是一台虚拟的机器.他是一款软件,用来执行一系列虚拟计算指令,大体上虚拟机可以分为 系统虚拟机和程序虚拟机, 大名鼎鼎的Visual Box.Vmare就属于系统虚拟机,他们完全是对物理计 ...

  7. 2019/05/13 JAVA虚拟机堆内存调优

    -Xms4000m 堆内存初始值 * -Xmx4000m 堆内存最大值 * -XX:+PrintGCDetails 打印GC信息 * -XX:+UseSerialGC 使用串行GC * -XX:+Pr ...

  8. 2019/05/11 JAVA虚拟机原理堆、栈、方法区概念区别

    Java堆 堆内存用于存放由new创建的对象和数组.在堆中分配的内存,由java虚拟机自动垃圾回收器来管理.在堆中产生了一个数组或者对象后,还可以在栈中定义一个特殊的变量,这个变量的取值等于数组或者对 ...

  9. 2019/05/11 Java内存结构

    1.  类加载子系统:负责从文件系统或者网络加载Class信息,加载的信息存放在一块称之方法区的内存空间. 2.  方法区:就是存放类的信息.常量信息.常量池信息.包括字符串字面量和数字常量等. 3. ...

随机推荐

  1. Android Studio基本使用

    1.    创建Android项目 1)    Application name:应用名称,launcher界面显示的 2)    Company Domain:公司域名(sprd.com) 3)   ...

  2. Intelij IDEA创建SpringBoot项目 - 配置文件的解释

    springboot介绍 官网:spring.io Spring Boot is designed to get you up and running as quickly as possible, ...

  3. maven web项目中运行stucts2报404的解决方案

    从这篇文章看见的https://www.cnblogs.com/xxqxxq/p/5938821.html 1.将stucts.xml中所有<action>全部注释掉,重新运行 如果运行成 ...

  4. 四、smarty模板的自定义函数

    smarty模板的自定义函数(这里介绍的是常用) 分为三个种类: 1.  变量调节器 2.  函数 3.  块函数 三个种类插件的用法: 1.  变量调解器的用法, <{$var|myfun:a ...

  5. var $this = $(this)

    jQuery: What’s the Difference Between $(this), $this, and this? What about $this? $this is a little ...

  6. openssl生成秘钥对

    openssl genrsa -out pri.pem openssl rsa -in pri.pem -out pub.pem -pubout 这样就生成秘钥对了,其中pri.pem是私钥,pub. ...

  7. pycharm修改代码后第一次运行不生效解决

    问题: 用pycharm每次修改代码后第一次运行还是原来的结果,运行第二次的时候才是修改后代码的结果 解决: 每次修改代码后保存一下即可解决

  8. RL - 001- 入门

    https://www.freecodecamp.org/news/an-introduction-to-reinforcement-learning-4339519de419/ https://gi ...

  9. java:Hibernate框架4(延迟加载(lazy),抓取(fetch),一级缓存,get,load,list,iterate,clear,evict,flush,二级缓存,注解,乐观锁和悲观锁,两者的比较)

    1.延时加载和抓取: hibernate.cfg.xml: <?xml version='1.0' encoding='UTF-8'?> <!DOCTYPE hibernate-co ...

  10. python学习之模块-模块(三)

    5.6 time 模块 已经知道的常用的time方法:time.time()获取当前时间的时间戳:time.sleep(num)线程推迟指定的时间(秒)后再继续往下运行. 时间的表示方式 大致可以分为 ...