遥想 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 的查询,以及其中的数据聚合和分组。

语法

  1. 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 的查询条件。

如:

  1. 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

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

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

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

by 其实就是 group_by

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

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

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

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

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

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

灵活查询

聚合和分组并存

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

  1. 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 可以承接多个条件,如上文提到的:

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

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

  1. 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. asp.net sql无限极分类实例程序

    数据库结构  代码如下 复制代码 create table category(    id                  int,                    clsno         ...

  2. Android Timer用法

    Android考虑到线程安全问题,不允许在线程中执行UI线程,在Android中,有一个类:android.os.Handler,这个可以实现各处线程间的消息传递.先看段代码,这个实例化了一个Hand ...

  3. insert---插入记录

    insert into table_name (column1,column2,.......) values(value1,value2,......); 例: insert into userin ...

  4. 实例介绍Cocos2d-x物理引擎:HelloPhysicsWorld

    我们通过一个实例介绍一下,在Cocos2d-x 3.x中使用物理引擎的开发过程,熟悉这些API的使用.这个实例的运行后的场景,当场景启动后,玩家可以触摸点击屏幕,每次触摸时候,就会在触摸点生成一个新的 ...

  5. Caching和Purgeable Memory (译)

    Caching和Purgeable Memory对于开发者来说是一个至关重要的资源,尤其是当我们需要处理那些需要超大内存以及计算时间的对象或者是当计算机向磁盘写入数据时导致应用程序陷入停滞时特别有用处 ...

  6. C# list使用方法

    C# list使用方法 集合是OOP中的一个重要概念,C#中对集合的全面支持更是该语言的精华之一. 为什么要用泛型集合? 在C# 2.0之前,主要可以通过两种方式实现集合: a.使用ArrayList ...

  7. C# WinForm TextBox添加水印效果

    1.新建项目添加WatermarkTextBox类: using System; using System.Collections.Generic; using System.Text; using ...

  8. 基于AngularJS/Ionic框架开发的性能优化

    AngularJS作为强大的前端MVVM框架,虽然已经做了很多的性能优化,但是我们开发过程中的不当使用还是会对性能产生巨大影响. 下面提出几点优化的方法: 1. 使用单次绑定符号{{::value}} ...

  9. Php 数据类型

    数据类型 JS中二大类 基本数据类型 number string boolean undefined null 复合数据类型 array object function php数据类型分为三大类 标量 ...

  10. @Autowired与@Resource用法

    官方文档中有这样一段话. If you intend to express annotation-driven injection by name, do not primarily use @Aut ...