概述
我想分享两部分内容:
- 互联网上用到的指标收集展现工具,参考借鉴
- 互联网监控平台设计时的结构层,范围层,表现层的有益参考
指标收集展示工具
思维导图
这套工具分为三部分:
- 探针采集工具,每个探针都安装在各个客户端,定时采集数据.网上常用的有用Statsd和collected采集数据。
- 时间序列数据库,有OpenTSDB,InfluxDB,采集后的数据传输到时间序列数据库
- 展现端,有Grafanna和Highcharts。
三个环节是连环相扣的,先有探针采集工具采集数据,而后时间序列数据库存储数据,最后展现端展现各个指标图。
核心概念
- Metric(监控项,指标): 指标是表示一个向监控平台发送的按时间排序的数据点集合,您可以按时间序列来检索关于这些数据点的统计数据。指标作为监控的变量,指标数据代表该变量随时间变化的值。例如,云服务器的 CPU 利用率是一个指标,云数据库的空间占用率则是另一个指标。
指标数据可以来自任何产品、应用程序或业务。例如,指标可以是云服务器的CPU利用率或是用户业务的进程延时。指标通过名称、命名空间以及一个或多个维度进行唯一定义。每个数据点都有一个时间戳和一个度量单位(可选)。对云监控存储的指标数据发起请求时,返回的数据流通过命名空间、指标名称和维度进行识别。 - 命名空间: 命名空间是指标的容器。不同命名空间中的指标彼此独立,因此来自不同应用程序的指标不会被错误地聚合到一起。
- 维度: 维度是对监控对象进行唯一标识的 Key/Value 对,指标在确定维度值后才有意义。维度有助于设计统计数据聚合结构。例:机器IP、进程名proc_name,两个维度值确定后,即可确定一个监控对象:监控对象A(IP=1.1.1.1&proc_name=test)。您需要在将云产品指标数据放入监控平台时指定相应维度(系统预设的指标均已预设了相应的维度),在检索时使用没有定义的维度会出现错误。
- 时间戳: 在监控平台中每个指标数据点必须有一个时间标记,表示此原始数据采集的时间。在请求中使用的时间戳必须为 dateTime 对象,并包含完整的日期及小时、分钟和秒,例如:2000-01-31 23:59:59
- 单位 单位是指标原始数据的度量单位,应用程序根据数据单位得到有用的语法信息。例如,CVM的外网出方向带宽指标的单位是Mbps,因为网络带宽常以兆比特每秒(Mbps)来衡量当前网络速度。下方列表提供了一些常见单位:
秒(时间单位)
Byte(字节,常表示数据大小。 1 Byte=8 bit )
bit(比特,数据的最小单位。)
%(百分比)
次(计数单位)
Bps(每秒字节数)
bps(每秒比特数) - 时间段: 时间段是监控统计数据的间隔时间长度,每个时间戳数据代表在指定时间段内对收集的所有数据进行聚合的结果。尽管时间段以秒表示,但是时间段的最小粒度为一分钟。因此,您指定的时间段值应为 60 的倍数。例如,要指定六分钟的时间段,应该使用值 360。
指标主要分三种
- 应用监控指标如:可用性、异常、吞吐量、响应时间、当前等待笔数、资源占用率、请求量、日志大小、性能、队列深度、线程数、服务调用次数、访问量、服务可用性等。
- 业务监控指标如大额流水、流水区域、流水明细、请求笔数、响应时间、响应笔数等。
- 系统监控指标如:CPU负载、内存负载、磁盘负载、网络IO、磁盘IO、tcp连接数、进程数等。
从采集方式来说通常可以分为接口采集、客户端agent采集、通过网络协议主动抓取(http、snmp等)
常用的系统监控指标
逐项介绍
statsd
StatsD 就是一个简单的网络守护进程,基于 Node.js 平台,通过 UDP 或者 TCP 方式侦听各种统计信息,包括计数器和定时器,并发送聚合信息到后端服务,如 Graphite。
它基于两大功能:计数和计时。普遍及支持多种语言——有基于 Ruby,Python, Java, erlang, Node, Scala, Go, haskell 等几乎所有语言的客户端。
说重点,statsd主要用于应用程序的指标监控,它致力于收集从你代码中发送出去的本地性能指标。基于个性化需求,可以通过 Statsd 收集任何想要的数据
StatsD的更详细内容
collectd
collectd也是一个简单的守护进程,用来收集系统性能数据和提供各种存储方式来存储不同值的机制,通过插件,更灵活的收集指标**
collectd官网
collectd收集的系统指标
influxDB
InfluxDB 是一个开源分布式时序、事件和指标数据库。使用 Go 语言编写,无需外部依赖。其设计目标是实现分布式和水平伸缩扩展。
它有三大特性:
- Time Series (时间序列):你可以使用与时间有关的相关函数(如最大,最小,求和等)
- Metrics(度量):你可以实时对大量数据进行计算
- Eevents(事件):它支持任意的事件数据
infludDB的下载:
wget https://dl.influxdata.com/influxdb/releases/influxdb_1.2.0_amd64.deb
sudo dpkg -i influxdb_1.2.0_amd64.deb
influxDB的更多内容
做的比较详细的帮助手册
Grafana
Grafana是纯 Javascript 开发的前端工具,用于访问 InfluxDB,自定义报表、显示图表等。
- grafana是用于可视化大型测量数据的开源程序,他提供了强大和优雅的方式去创建、共享、浏览数据。dashboard中显示了你不同metric数据源中的数据。
- grafana最常用于因特网基础设施和应用分析,但在其他领域也有机会用到,比如:工业传感器、家庭自动化、过程控制等等。
- grafana有热插拔控制面板和可扩展的数据源,目前已经支持Graphite、InfluxDB、OpenTSDB、Elasticsearch。
Grafana图例
Grafana官网
Grafana安装详细例子
还需要研究的
- 怎么在Grafana上二次开发,汉化等
- 是否适应我们的业务需求
Highcharts
Highcharts 是一个用纯JavaScript编写的一个图表库。
Highcharts 能够很简单便捷的在web网站或是web应用程序添加有交互性的图表
目前阿里的监控平台GoldenEyes前端图标展现是用Highcharts。
目前Highcharts用于商业用途要收费
HIghcharts支持监控平台的各种图例。
HighCharts 特性
- 兼容性 - 支持所有主流浏览器和移动平台(android、iOS等)。
- 多设备 - 支持多种设备,如手持设备 iPhone/iPad、平板等。
- 免费使用 - 开源免费。
- 轻量 - highcharts.js 内核库大小只有 35KB 左右。
- 配置简单 - 使用 json 格式配置
- 动态 - 可以在图表生成后修改。
- 多维 - 支持多维图表
- 配置提示工具 - 鼠标移动到图表的某一点上有提示信息。
- 时间轴 - 可以精确到毫秒。
- 导出 - 表格可导出为 PDF/ PNG/ JPG / SVG 格式
- 输出 - 网页输出图表。
- 可变焦 - 选中图表部分放大,近距离观察图表;
- 外部数据 - 从服务器载入动态数据。
- 文字旋转 - 支持在任意方向的标签旋转。
HighCharts官网
监控常用图标展现
图表展现:支持折线图、面积图、热力图、饼图、表格。
a. 折线图:按时间序列展示监控数据。可以添加多个监控项。
b. 面积图:按时间序列显示监控数据,可以添加多个监控项。
c. 热力图:显示监控项的实时数据。用于展示多个实例指定监控项的实时监控数据分布与对比。例如展示多个实例CPU使用率的水位分布情况。只能添加一个监控项。
d. 饼图:显示监控项的实时数据。常用于数据的对比。可以添加多个监控项。
e. 表格:实时显示监控项数据值由大到小的排序。例如ECS分组中所有机器CPU使用率从大到小的排序。只能添加一个监控项。
详情参考阿里云帮助文档
互联网平台参考设计
平台导航参考
监控导航目前有两种方式:
1.一个大平台,做成多个小应用(app),用户登录后,先选择应用后进入:
- 分成二级三级导航,用户进入后,有个首页概览,后登录各二级页面做详细操作
OneApm的结构层思维导图
平台
平台列表则会列出已经监控的平台。
点击后可以看平台详细,平台操作系统及平台服务的详细指标
仪表盘
仪表盘是支持增删改,支持客户定制,支持客户收藏和分享
仪表盘是 Cloudinsight 查看性能指标,以及平台负载情况,和平台服务的运行情况的主要形式。
仪表盘的设计思路是:
仪表盘针对采集到的性能指标,进行处理后,提供可视化方式进行展现。仪表盘按照操作类型可分为:
自定义仪表盘
平台服务仪表盘
自定义数据仪表盘
Metric查询:
支持图表分享也是一个亮点
直接分享可以查看的URL,您可以拷贝并通过邮件发送给需要查看数据的其他人
iframe的版本,您可以将其粘贴至自己的代码中,嵌入到自己的系统中
通过手机扫描二维码,通过手机分享给其他人
其他平台有益参考
腾讯云
腾讯云做的产品和我们类似,特别是监控平台,容器服务,弹性伸缩,大数据与AI方面都可以做很多参考。
腾讯云帮助文档
阿里云
阿里云也一样
阿里云帮助文档
阿里云监控平台的DashBoard设计:
展示多个实例的监控数据走势
例如您的一个应用部署在多台ECS实例上,可以将部署了相同应用的多台ECS实例监控信息添加在同一张监控图表中,查看相关多台机器的监控数据变化趋势。 例如在一张图表中同时展示ECS多个实例各自的CPU使用率的时间序走势。
展示多个监控项的数据对比
例如在一张图表中展示ECS同一个实例的CPU使用率、内存使用率、磁盘使用率等多个指标。
展示机器的资源消耗排序
例如您有20台机器,通过表格展示可以查看20台机器的CPU使用率从大到小的排序。快速了解资源消耗情况,更合理的使用资源,减少不必要的花费。
展示多个实例的监控数据实时分布
例如通过热力图,展示一组ECS实例的CPU使用率分布情况,知晓每台机器的CPU使用率和其他机器相比,处于什么水平。点击色块,可以查看该机器一段时间内的监控数据走势。
展示多个实例某一监控项的聚合数据
例如在一张图表中查看ECS多个实例的CPU使用率的平均聚合值,从而了解整体的CPU使用率水位,判断是否各个实例资源使用不均。
全景盯屏展示
Dashboard支持全屏展示和自动刷新,可以将您的各类产品指标添加到监控大盘后在运维大屏上全屏展示。
监控大盘参数说明
选择时间范围:点击监控大盘页面上方的时间选择按钮,可以快速选择大盘中图表展示的监控数据时间范围。时间选择的作用范围是会是监控大盘的全部图表。
自动刷新:开启“自动刷新”按钮后,当您选择查询“1小时”、“3小时”、“6小时”的查询时间跨度时,可开启自动刷新功能,每分钟刷新一次。
监控项的单位展示在图表名称的括号内。
鼠标跟随显示所有图表相同时间的监控值。
百度云
百度云也可以参考,特别是智慧引擎,AI,大数据分析这块
百度云帮助文档
小米开源的监控平台
小米开源的监控平台,做的很不错。
open-falcon的目标是做最开放、最好用的互联网企业级监控产品。
小米,京东,美团,赶集都是基于这个平台深度定制。
目前我还没时间深入研究。
小米open-falcon