NSX Advanced Load Balancer 会根据多个参数跟踪和维护衡量指标数据。在某些情况下,组织可能需要使用其应用程序或环境特有的其他数据。为满足此需求,我们提供了用户定义的衡量指标。
三个新的 DataScript 函数将与 NSX Advanced Load Balancer 衡量指标子系统交互,以使组织能够创建、处理和访问其自定义的衡量指标。REST API 调用可用于将自定义数据合并到客户的监控系统中。
用户定义的衡量指标:
是一个整数,且不能为负数。
由 DataScript 创建并随后对其进行处理,该 DataScript 在其上放置了虚拟服务的 SE 中运行。
由控制器收集和汇总。控制器可以检测到这些衡量指标值中的异常。
随时间存储,以便应用各种衡量指标系统功能,例如求平均值、跟踪最小/最大值和求和。
能够通过衡量指标 API 进行查询。
任何给定的用户定义衡量指标的范围限定为通过 DataScript 创建该衡量指标的虚拟服务。由于一个 DataScript 可由多个虚拟服务使用,因此控制器必须将不同虚拟服务中名称相同的衡量指标区分开。对用户定义的衡量指标的解释完全由用户决定。其值基于在引用了该衡量指标的 DataScript 中检测到的条件。
当衡量指标超过用户定义的某个阈值时,可以在 DataScript 中触发任意数量的操作,也可以不触发任何操作。
用户使用 DataScript 定义的衡量指标
使用
avi.vs.log()
DataScript 函数只报告衡量指标的值。使用
avi.vs.rate_limit( type, string_to_limit, [defer_action=False] )
DataScript 函数限制虚拟服务的速率。
在大多数情况下,衡量指标数据是通过调用 REST API(而不是通过 DataScript)提取的。
用户定义的衡量指标类型
NSX Advanced Load Balancer 支持两种类型的用户定义衡量指标:
avi.vs.analytics.METRICTYPE_COUNTER
:可以增加或清除此类型的衡量指标。avi.vs.analytics.METRICTYPE_GAUGE
:可以增加、减少、清除或设置此类型的衡量指标。
用于用户定义的衡量指标的 DataScript 函数
处理上述衡量指标的 DataScript 函数包括:
avi.vs.analytics.counter(metric_name, [operation], [value])
:增加或清除指定的计数器衡量指标。avi.vs.analytics.gauge(metric_name, [operation], [value])
:增加、减少、设置或清除指定的计量器衡量指标。avi.vs.analytics.get_metric(metric_name, metric_type)
:返回衡量指标的值,无论是计数器还是计量器类型。在继续操作之前,函数首先检查是否定义了 metric_name,然后将 metric_type 的值与之前存储的类型进行比较。如果未定义 metric_name,或者类型不正确,该函数会在日志中报告错误,并且将取消导致此函数调用的请求/响应。
用户定义的衡量指标生命周期
如果超过两个小时不使用,用户定义的衡量指标总是会过期并自动销毁。每次读取或更新计数器或计量器时,都会刷新其使用期限。过期时将自动收集用户定义的衡量指标的垃圾数据。
访问用户定义的衡量指标
NSX Advanced Load Balancer 控制器 通过 REST API 调用提供对这些衡量指标的访问权限。
在如下调用中:
api/analytics/metrics/virtualservice/<vs_uuid>?metric_id=user_metrics.sum_counter&obj_id=<obj_id>&step=300&limit=1
obj_id 是计数器的 ID,或者为“*”以标识所有活动的计数器衡量指标。
avi.vs.analytics.METRICTYPE_COUNTER 的查询汇总值
user_metrics.sum_counter:在给定时间段内报告的计数器衡量指标值总和。
例如:可使用以下 API 代码获取 counter_id 等于 Foo
的汇总用户衡量指标的最近 5 分钟采样:
api/analytics/metrics/virtualservice/<vs_uuid>?metric_id=user.sum_counter&obj_id=Foo&step=300&limit=1
user_metrics.avg_counter
:给定时间段内计数器衡量指标的每秒平均值。
例如:可使用以下 API 调用请求计数器衡量指标 Foo
的平均每秒速率的最近 5 分钟采样:
api/analytics/metrics/virtualservice/<vs_uuid>?metric_id=user.avg_counter&obj_id=Foo&step=300&limit=1
user_metrics.max_counter
和user_metrics.min_counter
:给定时间段内计数器衡量指标Foo
每秒报告的最大/最小值。
例如:可使用以下 API 调用请求每秒最大和最小值:
api/analytics/metrics/virtualservice/<vs_uuid>?metric_id=user.max_counter&obj_id=Foo&step=300&limit=1
api/analytics/metrics/virtualservice/<vs_uuid>?metric_id=user.min_counter&obj_id=Foo&step=300&limit=1
avi.vs.analytics.METRICTYPE_GAUGE 的查询汇总值
user_metrics.avg_gauge
:给定时间段内报告的计量器类型的平均原始计数器值。
例如:通过 API 获取计数器 foo
/api/analytics/metrics/virtualservice/?metric_id=user_metrics.avg_gauge&limit=1&step=300&obj_id=foo
user_metrics,max_gauge
:给定时间段内报告的计量器类型的最大原始计数器值。
例如:通过以下 API 获取计数器“foo”。
/api/analytics/metrics/virtualservice/?metric_id=user_metrics.max_gauge&limit=1&step=300&obj_id=foo
user_metrics.min_gauge
:给定时间段内报告的计量器类型的最小原始计数器值。
例如:通过 API 获取计数器 foo
。
/api/analytics/metrics/virtualservice/?metric_id=user_metrics.min_gauge&limit=1&step=300&obj_id=foo