遥想 2015 年 8 月 17 日,Cloud Insight 还在梳理功能原型,畅想 Cloud Insight 存在的意义:为什么阿里云用户需要使用 Cloud Insight 来加强管理

而今,我们就已经实现了这样的功能:

使用标签来实现数据的聚合和分组。

相信使用过 OpenTSDB 或者 InfluxDB 的人都知道标签的存在:Tag。这也是为什么越来越多 Zabbix 或者 Nagios 用户迁移至 OpentsDB 来自建运维监控系统的原因。

如果所示,Zabbix 只提供单台 Host 的 Disk 使用量。如果 3 台主机,都同属于一个组 Mi-Kafka,想要知道这个组的总体 Disk 使用量,是无法得知的。

从而,就算线上系统发生了故障,要在短期内知道,到底是哪个模块的哪个部分出了哪样的问题,所需要的经验和时长都是很大的。

而 OpenTSDB 和 StatsD 的出现改变了现状。

运维 2.0 时代

在非常早期的时候,淘宝团队就引入了 OpenTSDB 来辅助他们的运维监控。详情见:OpenTSDB监控系统的研究和介绍

随后的几年,云计算和 SaaS 的兴起,国外也出现了多种采用 StatsD 和 OpenTSDB 的开源工具搭建的 SaaS 服务:Boundary、CopperEgg、Datadog 等等。

他们都不约而同地采用了同一种产品逻辑,也是 Cloud Insight 的产品逻辑,也是时间序列数据库的逻辑:

  • 任何的性能指标,都作为时间序列数据被采集、被处理;
  • 任何的 Host 等归属于性能指标的属性,都作为指标的标签信息。

而在产品逻辑上,则表现为:

Cloud Insight 通过 3 个步骤达到操作系统、数据库、中间件,以及未来通过 Developer API 对接进来的所有 Metric 进行处理:

  1. Cloud Insight Agent 采集并处理 Metric;
  2. 在平台服务仪表盘和自定义仪表盘中,提供 Metric 聚合、分组、统计运算、基本数学运算等操作;
  3. 针对操作的结果,提供曲线图、柱状图等多样化的展现形式。

数据聚合和分组

在 Beta v 0.2.1 中,我们实现了数据的聚合和分组。沿袭了 OpenTSDB 的查询方式:用一种类 SQL 的方式来查询指标。

具体操作可以访问 Cloud Insight 文档中心 • Metric 查询

接下来我们会介绍 Cloud Insight 已经实现的 Metric 的查询,以及其中的数据聚合和分组。

语法

Aggregation: MetricName {FromTag} by {TagKey}

在介绍语法前,我们先通过一组样本来解释 Metric 查询的语法。

Series MetricName TagValue: Host TagValue: Owner
A system.cpu.idle ChengMoMacAir chengmo
B system.cpu.idle UbuntuChengMo chengmo
C system.cpu.idle WZL-CentOS wangzhili
Series 00:00 01:00 02:00 03:00 04:00 05:00
A 0.3 0.5 0.1 0.2 0.8 0.1
B 0.8 0.3 0.7 0.8 0.9 0.3
C 0.6 0.2 0.4 0.6 0.1 0.1

AggregationFromTag

  • Aggregation:聚合算子。指 Metric 查询范围 FromTag 所查询到的多条 series 通过 avg、max、min、sum 哪种方式聚合。
  • FromTag:查询范围。指 Metric 所需聚合的 series 的查询条件。

如:

max: system.cpu.idle {host:ChengMoMacAir, host:UbuntuChengMO}

所得的结果是:

Series 00:00 01:00 02:00 03:00 04:00 05:00
A 0.3 0.5 0.1 0.2 0.8 0.1
B 0.8 0.3 0.7 0.8 0.9 0.3
Output 0.8 0.5 0.7 0.8 0.9 0.3

同样,上述查询也可以简化成:

max: system.cpu.idle {owner:chengmo}

这就是标签管理在 Cloud Insight 的重要性啦。

by 其实就是 group_by

Cloud Insight 还支持类似 SQL 的 group_by 查询语法。这个在查看:

  • 多个磁盘分区的容量
  • Docker 中不同 Container 的性能消耗

都是非常有用的。还是以上诉例子举例,如果我们想要看每个 host 的 CPU 空闲率:

avg: system.cpu.idle {} by {host}

此时,第一个 {FromTag} 缺省代表从所有 Metrics 中查询数据。如图所示,得到以下图表:

在实际的测试环境中,由于我们有 6 台测试主机,所以会得到如下的曲线。并且,当鼠标悬停至曲线时,下方的悬停窗口会分别显示 6 台主机的 system.cpu.idle

灵活查询

聚合和分组并存

除开单纯的聚合和分组,Cloud Insight 还支持聚合和分组的复合查询。如:

avg: system.cpu.idle {} by {owner}
Series MetricName TagValue: Host TagValue: Owner
A system.cpu.idle ChengMoMacAir chengmo
B system.cpu.idle UbuntuChengMo chengmo
C system.cpu.idle WZL-CentOS wangzhili

此时,虽然有 3 个 host,但是分组是以 owner 来进行分组。所以,A 与 B 会聚合为一条曲线,而 C 和 A&B 的关系是分组的关系。

Series 00:00 01:00 02:00 03:00 04:00 05:00
A 0.3 0.5 0.1 0.2 0.8 0.1
B 0.8 0.3 0.7 0.8 0.9 0.3
C 0.6 0.2 0.4 0.6 0.1 0.1
Output A&B 0.55 0.4 0.4 0.5 0.85 0.2
Output C 0.6 0.2 0.4 0.6 0.1 0.1

多条件查询

FromTag 可以承接多个条件,如上文提到的:

max: system.cpu.idle {host:ChengMoMacAir, host:UbuntuChengMO}

查询到是两个 Host 的聚合结果。那么,如果是以下查询呢:

max: system.cpu.idle {host:ChengMoMacAir, owner:wangzhili}

此时,查询到结果为 NULL。因为,Metric 查询遵循以下原则:

  • 同一 Tag Key,Metric 查询求并集;
  • 不同 Tag Key,Metric 查询求交集。

也就是说,上述查询分别代表:

  • 我想查询 hostChengMoMacAirhost:UbuntuChengMO 的聚合结果
  • 我想查询 hostChengMoMacAirownerwangzhili 的聚合结果

自然,根据表格,我们发现这样的 Host 是不存在的,故而结果为 NULL

我们之所以这么设计,是因为此类思考更符合人的思维习惯:

  • 当人们选择多个 host 时,自然而然想到的是这些 host 的求和结果,即:同一 Tag Key 求并集;
  • 当人们选择某个 host,又再次选择另一个 Tag 时,想到的是在这个 host 下满足这些 tag 的结果,即:不同 Tag Key 求交集。

参数查询

Cloud Insight 还添加了参数来提取出 {FromTag},可以让用户不用每次都修改 {FromTag} 来查看 Metric;而只需在参数下拉框中选择 {FromTag} 来动态查询 Metric。

数据聚合 & 分组:新一代系统监控的核心功能的更多相关文章

  1. StatsD!次世代系统监控的核心

    在互联网业务蒸蒸日上的今时今日,系统架构日渐复杂,随着软件产品和工程团队的变革,许多开源的监控工具应运而生,其中有一些相当出名,比如 Zabbix.Nagios 还有 StatsD.也有一些问题被大家 ...

  2. 零售CRM系统开发的核心功能

    在零售行业中,客户关系管理系统是一个包含销售,市场营销和客户服务流程的中央枢纽.它为企业所有者提供了一种可以结合所有与销售有关的问题并管理销售流程的有效工具.零售CRM可以留住客户,提供个性化的一流客 ...

  3. 建设DevOps统一运维监控平台,全面的系统监控 Zabbix VS Nagios VS Open-Falcon OR Prometheus

    前言 随着Devops.云计算.微服务.容器等理念的逐步落地和大力发展,机器越来越多,应用越来越多,服务越来越微,应用运行基础环境越来多样化,容器.虚拟机.物理机不一而足.面对动辄几百上千个虚拟机.容 ...

  4. python 数据聚合与分组

    前面讲完了字符处理,但对数据进行整体性的聚合运算以及分组操作也是数据分析的重要内容. 通过数据的聚合与分组,我们能更容易的发现隐藏在数据中的规律. 数据分组 数据的分组核心思想是:拆分-组织-合并 首 ...

  5. Python数据聚合和分组运算(1)-GroupBy Mechanics

    前言 Python的pandas包提供的数据聚合与分组运算功能很强大,也很灵活.<Python for Data Analysis>这本书第9章详细的介绍了这方面的用法,但是有些细节不常用 ...

  6. SpringCloud之监控数据聚合Turbine

    前言 SpringCloud 是微服务中的翘楚,最佳的落地方案. 使用 SpringCloud 的 Hystrix Dashboard 组件可以监控单个应用服务的调用情况,但如果是集群环境,可能就 不 ...

  7. 《利用python进行数据分析》读书笔记--第九章 数据聚合与分组运算(一)

    http://www.cnblogs.com/batteryhp/p/5046450.html 对数据进行分组并对各组应用一个函数,是数据分析的重要环节.数据准备好之后,通常的任务就是计算分组统计或生 ...

  8. 利用python进行数据分析之数据聚合和分组运算

    对数据集进行分组并对各分组应用函数是数据分析中的重要环节. group by技术 pandas对象中的数据会根据你所提供的一个或多个键被拆分为多组,拆分操作是在对象的特定轴上执行的,然后将一个函数应用 ...

  9. Python 数据分析(二 本实验将学习利用 Python 数据聚合与分组运算,时间序列,金融与经济数据应用等相关知识

    Python 数据分析(二) 本实验将学习利用 Python 数据聚合与分组运算,时间序列,金融与经济数据应用等相关知识 第1节 groupby 技术 第2节 数据聚合 第3节 分组级运算和转换 第4 ...

随机推荐

  1. 在多个linux服务器上执行一个命令

    把服务器的ip地址写到list.txt中 192.168.37.3 192.168.37.4 192.168.37.6 然后运行 for i in `cat list.txt`;do ssh user ...

  2. 使用C#通过调用minitab的COM库自动化生成报表

    本文介绍通过C#调用minitab com组建自动化生成报表的方法. 首先需要在minitab中通过手动配置的方式生成报表来得到该报表的命令行,过程如下 选择菜单“编辑器”->“启用命令”启用命 ...

  3. MLlearning(1)——kNN算法

    这篇文章讲kNN(k近邻,k-Nearest Neighbour).这是一种lazy-learning,实现方便,很常用的分类方法.约定n为样本集中的样本数,m为样本的维度,则这个算法的训练复杂度为0 ...

  4. spring定时器 @component

    1.@controller 控制器(注入服务) 2.@service 服务(注入dao) 3.@repository dao(实现dao访问) 4.@component (把普通pojo实例化到spr ...

  5. android浪漫樱花凋零动态壁纸应用源码

    android浪漫樱花凋零动态壁纸应用源码,是从那个安卓教程网拿过来的,本项目是一套基于安卓的樱花动态壁纸项目源码,安装以后桌面没有图标,但是可以在修改壁纸-动态壁纸中找到.我的分辨率是480×854 ...

  6. Axure RP 各个版本中文版 汉化包 破解版 下载地址及注册码

    导读:Axure RP Pro是一个产品经理必备的交互原型设计工具,能够高效率制作产品原型,快速绘制线框图.流程图.网站架构图.示意图.HTML模版等.Axure RP已被一些大公司采用.Axure ...

  7. Git快速上手 : Tortoise工具使用

    利用工具快速上手Git 别跟我说什么用命令操作Git,多高大上呀,请不要在这里跟我装逼,就如同,有个小妞在床上眉眼诱惑地,你却TM还要先看个片儿来热热身.... TortoiseGit  名字看着眼熟 ...

  8. 【转】DataGridView显示行号

    ref:http://blog.csdn.net/xieyufei/article/details/9769631 方法一: 网上最常见的做法是用DataGridView的RowPostPaint事件 ...

  9. H5 适配 动画animation js touch

    图片预加载jquery插件 jquery.imgpreload var load_img = [];load_img.push('http://m.pubuzhixing.com/Images/vot ...

  10. Android核心组件 Service

    Service: 服务 Service 是Activity系统的核心组件之一. 因此需要继承和注册 Service 是内有界面的, 适合在后台长期的执行任务. (如放歌, 检测版本跟新, 下载, 上传 ...