Java运行时监控,第3部分: 监控应用程序生态系统的性能与可用性(2) - 编程入门网
合和合并。例如,如果一个收集器的频率是 15 秒,而聚合时间是 1 分钟的话, 4 个单个指标将会被合并成为 1 个。这里假设可以允许持久化的数据丢失粒度,所以要在低数据量的低粒度和高数据量的高粒度之间做出权衡。同时,指标的实时可视化可以通过从聚合前的常驻内存循环缓冲器呈现图形来实现,这样就只有持久化的数据被聚合了。当然,您有权选择哪些指标需要持久化。
Java运行时监控,第3部分: 监控应用程序生态系统的性能与可用性(2)(12)时间:2011-02-13 IBM Nicholas Whitehead另外一个减少储存数据量的策略是实现一个采样频率,在这个采样频率中只有每 y 行中的 x 个指标会被储存。这也会降低持久化数据的粒度,但会占用比维护聚合缓冲器更少的资源(尤其是内存)。 持久化的指标数据还可以在指标数据库中累积并清除。同样,在容忍的粒度丢失范围内,可以将数据库中几个时间段内的数据分小时、天、周、月等累计到汇总表格中;你也可以清除原始数据;仍然保留适当的有用的指标数据。 为了避免数据持久化过程的活动影响到数据收集器本身,有必要实现一个非侵入式的后台线程,它能够将离散的指标数据的收集刷新到数据储存进程。 对于多个拥有不同有效时窗的数据集,创建一个类似时间序列的报告有些困难。思考一下图形中表示时间的 x 轴,和表示特定指标的值和多个序列(直线或曲线)(代表来源于不同资源集的相同指标)的 y 轴。如果读取每一个序列的有效时间戳有很大差别的话,就一定要传输数据以保持图形表示有效。这个可以通过将数据聚合到所有绘制的序列中最不一致的时窗来实现,同样粒度也会丢失。更简单的解决方案是维护一个在所有指标值中都一致的、有效的时间戳。时间序列数据库有这个功能。常用的是 RRDTool,它跨序列中所有不同的数据值有效地实施一致的、均衡分布的时间戳。为了使有效的时间戳在关系数据库中保持一致,一个绝佳的策略就是用一个单一的、统一的调度程序对所有指标取样。例如,一个计时器可能每两分钟触发一次,结果导致在那一刻捕获了所有指标的一个单一的 “交换”,而且所有的指标都用相同的时间戳标记,然后放入队列中等待持久化。 显然,要以一种最佳的方式来解决上述的每一个问题是很难的,所以必须要考虑折衷的办法。图 22 展示了一个数据收集器在概念上的数据持久化流程: 图 22. 数据管理流程 图 22 表示概念数据收集器(像本文中呈现的 Spring 收集器)的数据流。目的是通过一些层推动单个指标跟踪度量,直到它们被持久化。具体的过程为: 数据收集器是随意配置的,为了实现带有如下属性的指标持久化: 启用持久化:True 或 false。 指标名称过滤器:一个正则表达式。匹配正则表达的指标名会被标记为持久化。 采样计数:会跳过持久化的指标收集的数量,也就是说 0 意味着全部持久化。 历史缓存大小:必须保存在缓存中的被跟踪的指标的数量。为了实现实时可视化,必须为历史缓存启用大多数指标,即使这些指标未被标记为持久化,这样它们可以呈现为实时图表。 收集器缓存就是很多的离散指标读数,该读数与收集器生成的各种指标的数量相等。缓存遵循先入先出(first in, first out,FIFO)原则,所以当历史缓存变满时,最老的指标会被清除,为最新的指标腾出空间。缓存支持注册缓存事件监听器,它们可以被告知有哪些指标被从缓存中移除,又有哪些被存入。 收集器总计是一系列由收集器生成的指标实例的两个或更多循环缓存。由于循环缓冲器中的每一个缓存实例变为活动状态,它就会为历史缓存注册新的跟踪事件并聚合每一个输入的新值,有效地合并给定时间段内的数据流。该总计包含: 该时间段的启动和终止时间(终止时间在时间段结束前是未定的)。 该时间段内的最小 |
凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢! |