本节学习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. 微信小程序_(组件)canvas画布

    canvas画布效果 官方文档:传送门 Page({ canvasIdErrorCallback: function (e) { console.error(e.detail.errMsg) }, o ...

  2. 深入理解Vuex 模块化(module)

    todo https://www.jb51.net/article/124618.htm

  3. MySQ彻底删除与安装配置

    彻底删除 1.查看 MySQL 安装了哪些东西 rpm -qa |grep -i mysql 2.卸载 -.el7.x86_64 -.el7.x86_64 .noarch -.el7.x86_64 - ...

  4. 使用EXSI创建虚拟机

    使用exsi创建虚拟主机之前需要确定好使用什么系统来创建虚拟主机,而本地电脑上的镜像服务器是无法直接使用的,我们需要先将镜像上传到服务器的存储器上,然后才能在提供给虚拟服务器使用,如何替换呢,参考下方 ...

  5. Java-线程等待、唤醒与中断

    一.sleep() 与 wait() 两者都会让当前线程进入等待状态.唤醒后都需要等待 CPU 资源,不一定会立即执行.若在等待期间被调用此线程的的 interrupt() 方法,将会产生 Inter ...

  6. 怎样用 Bash 编程:语法和工具

    让我们通过本系列文章来学习基本的 Bash 编程语法和工具,以及如何使用变量和控制运算符,这是三篇中的第一篇. Shell 是操作系统的命令解释器,其中 Bash 是我最喜欢的.每当用户或者系统管理员 ...

  7. opensatck误删除service项目

    由于在清除资源时,未考虑到租户service,将其一并删除,于是有了下面的填坑之旅 1,需要找到删除的services-id,查看keytone的log, grep -r "DELETE&q ...

  8. FileChannel原理

    官方对Channel的解释 (一个用于输入/输出操作的连接.通道表示对实体的开放连接,如硬件设备.文件.网络套接字或能够执行一个或多个不同的输入/输出操作的程序组件,例如读取或写入.) Thankin ...

  9. React-Native中props用法详解

    props就是属性,是为了描述一个组件的特征而存在的.它是父组件传递给子组件的. 使用props 通过上一个页面传递 新建一个 PropsTest.js 文件 1 2 3 4 5 exprot def ...

  10. sublime3配置php开发环境

    Sublime3 3143 1.用包管理器安装SublimeLinter ctrl+shift+p Package Control: install package SublimeLinter 注意: ...