文档章节

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

CloudMAN
 CloudMAN
发布于 2017/10/23 07:48
字数 893
阅读 2.2K
收藏 14

本节讨论 Prometheus 的核心,多维数据模型。我们先来看一个例子。

比如要监控容器 webapp1 的内存使用情况,最传统和典型的方法是定义一个指标 container_memory_usage_bytes_webapp1 来记录 webapp1 的内存使用数据。假如每1分钟取一次样,那么在数据库里就会有类似下面的记录。

好,现在需求发生了点变化,我们需要知道所有 webapp 容器的内存使用情况。如果还是采用前面的方法,就不得不增加新的指标 container_memory_usage_bytes_webapp2container_memory_usage_bytes_webapp3

像 Graphite 这类更高级的监控方案采用了更为优雅的层次化数据模型。为了满足上面的需求,Graphite 会定义指标 container.memory_usage_bytes.webapp1container.memory_usage_bytes.webapp2container.memory_usage_bytes.webapp3

然后就可以用 container.memory_usage_bytes.webapp* 获取所有的 webapp 的内存使用数据。

此外,Graphite 还支持 sum() 等函数对指标进行计算和处理,比如 sum(container.memory_usage_bytes.webapp*) 可以得到所有 webapp 容器占用的总内存量。

目前为止问题处理得都很好。但客户总是会提出更多的需求:现在不仅要按容器名字统计内存使用量,还要按镜像来统计;或者想对比一下某一组容器在生产环境和测试环境中对内存使用的不同情况。

当然你可以说:只要定义更多的指标就能满足这些需求。比如 container.memory_usage_bytes.image1.webapp1container.memory_usage_bytes.webapp1.prod等。

但问题在于我们没办法提前预知客户要用这些数据回答怎样的问题,所以我们没办法提前定义好所有的指标。

下面来看看 Prometheus 的解决方案。

Prometheus 只需要定义一个全局的指标 container_memory_usage_bytes,然后通过添加不同的维度数据来满足不同的业务需求。

比如对于前面 webapp1 的三条取样数据,转换成 Prometheus 多维数据将变成:

后面三列 container_nameimageenv 就是数据的三个维度。想象一下,如果不同 env(prod、test、dev),不同 image(mycom/webapp:1.2、mycom/webapp:1.3)的容器,它们的内存使用数据中标注了这三个维度信息,那么将能满足很多业务需求,比如:

  1. 计算 webapp2 的平均内存使用情况:avg(container_memory_usage_bytes{container_name=“webapp2”})

  2. 计算运行 mycom/webapp:1.3 镜像的所有容器内存使用总量:sum(container_memory_usage_bytes{image=“mycom/webapp:1.3”})

  3. 统计不同运行环境中 webapp 容器内存使用总量:sum(container_memory_usage_bytes{container_name=~“webapp”}) by (env)

这里只列了几个例子,不过已经能够说明 Prometheus 数据模型的优势了:

  1. 通过维度对数据进行说明,附加更多的业务信息,进而满足不同业务的需求。同时维度是可以动态添加的,比如再给数据加上一个 user 维度,就可以按用户来统计容器内存使用量了。

  2. Prometheus 丰富的查询语言能够灵活、充分地挖掘数据的价值。前面示例中的 avg、sum、by 只是查询语言中很小的一部分功能,已经为我们展现了 Prometheus 对多维数据进行分片、聚合的强大能力。

现在我们已经知道 Prometheus 的强大之处了,再 NB 的东西也得落地,下一节就开始实践。

书籍:
1.《每天5分钟玩转Docker容器技术》
https://item.jd.com/16936307278.html

2.《每天5分钟玩转OpenStack》
https://item.jd.com/12086376.html

© 著作权归作者所有

CloudMAN
粉丝 539
博文 360
码字总数 221704
作品 0
海淀
私信 提问
加载中

评论(2)

wellyao
wellyao
时序数据都这么存的
爱歆儿妹妹
爱歆儿妹妹
嗯嗯
Prometheus 到底 NB 在哪里?- 每天5分钟玩转 Docker 容器技术(84)

本节讨论 Prometheus 的核心,多维数据模型。我们先来看一个例子。 比如要监控容器 的内存使用情况,最传统和典型的方法是定义一个指标 来记录 的内存使用数据。假如每1分钟取一次样,那么在...

CloudMan6
2017/10/23
0
0
Prometheus Operator - 每天5分钟玩转 Docker 容器技术(177)

前面我们介绍了 Kubernetes 的两种监控方案 Weave Scope 和 Heapster,它们主要的监控对象是 Node 和 Pod。这些数据对 Kubernetes 运维人员是必须的,但还不够。我们通常还希望监控集群本身的...

cloudman6
2018/06/05
0
0
一张表搞懂各种 Docker 监控方案 - 每天5分钟玩转 Docker 容器技术(86)

前面我们已经介绍了ps/top/stats、Sysdig、Weave Scope、cAdvisor 和 Prometheus 多种容器监控工具和方案,是时候做一个比较了。下面将从五个方面来对比它们之间的优劣。 部署容易度 ps/top...

CloudMan6
2017/10/27
0
0
数据收集利器 cAdvisor - 每天5分钟玩转 Docker 容器技术(82)

cAdvisor 是 google 开发的容器监控工具,我们来看看 cAdvisor 有什么能耐。 在 host 中运行 cAdvisor 容器。 docker run --volume=/:/rootfs:ro --volume=/var/run:/var/run:rw --volume=/s......

CloudMan6
2017/10/18
0
0
一张表搞懂各种 Docker 监控方案 - 每天5分钟玩转 Docker 容器技术(86)

前面我们已经介绍了ps/top/stats、Sysdig、Weave Scope、cAdvisor 和 Prometheus 多种容器监控工具和方案,是时候做一个比较了。下面将从五个方面来对比它们之间的优劣。 部署容易度 ps/top...

CloudMAN
2017/10/27
124
0

没有更多内容

加载失败,请刷新页面

加载更多

如何仅克隆Git存储库的子目录? - How do I clone a subdirectory only of a Git repository?

问题: I have my Git repository which, at the root, has two sub directories: 我有我的Git存储库,它的根目录有两个子目录: /finisht/static When this was in SVN , /finisht was ch......

技术盛宴
13分钟前
17
0
【 开发指南 】智能家居技能

本文作者:DuerOs 目录 一、教学视频 二、整体架构 三、开发步骤&资料整理 四、常见问题解答 五、智能家居文档 树状提纲 ————————————————————————————————...

百度开发者中心
2019/03/29
55
0
008. 并发容器类 Map

1. JDK 源码学习方法 1. 演绎推导法 示例:因果推理。 因为 JAVA 中只提供了 BIO 和 NIO 两种方式,所以一切框架中,涉及到网络处理的,都可以用这两个知识点去探究原理。 2. 归纳总结法 示例...

紫穹
今天
98
0
如何使用sed替换换行符(\\ n)? - How can I replace a newline (\n) using sed?

问题: How can I replace a newline (" \\n ") with a space (" 如何将换行符(“ \\n ”)替换为空格(“ ") using the sed command? “)使用sed命令? I unsuccessfully tried: 我尝试失......

javail
今天
115
0
OSChina 周一乱弹 —— 原来这叫分别焦虑

Osc乱弹歌单(2020)请戳(这里) 【今日歌曲】 @薛定谔的兄弟 :分享洛神有语创建的歌单「我喜欢的音乐」: 《A Careful Tearing》- Levi Patel 手机党少年们想听歌,请使劲儿戳(这里) 清明...

小小编辑
今天
203
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部