NSX Advanced Load Balancer 会根据多个参数跟踪和维护衡量指标数据。在某些情况下,组织可能需要使用其应用程序或环境特有的其他数据。为满足此需求,我们提供了用户定义的衡量指标。

三个新的 DataScript 函数将与 NSX Advanced Load Balancer 衡量指标子系统交互,以使组织能够创建、处理和访问其自定义的衡量指标。REST API 调用可用于将自定义数据合并到客户的监控系统中。



用户定义的衡量指标:

  • 是一个整数,且不能为负数。

  • 由 DataScript 创建并随后对其进行处理,该 DataScript 在其上放置了虚拟服务的 SE 中运行。

  • 由控制器收集和汇总。控制器可以检测到这些衡量指标值中的异常。

  • 随时间存储,以便应用各种衡量指标系统功能,例如求平均值、跟踪最小/最大值和求和。

  • 能够通过衡量指标 API 进行查询。

任何给定的用户定义衡量指标的范围限定为通过 DataScript 创建该衡量指标的虚拟服务。由于一个 DataScript 可由多个虚拟服务使用,因此控制器必须将不同虚拟服务中名称相同的衡量指标区分开。对用户定义的衡量指标的解释完全由用户决定。其值基于在引用了该衡量指标的 DataScript 中检测到的条件。

当衡量指标超过用户定义的某个阈值时,可以在 DataScript 中触发任意数量的操作,也可以不触发任何操作。

用户使用 DataScript 定义的衡量指标

  1. 使用 avi.vs.log() DataScript 函数只报告衡量指标的值。

  2. 使用 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_counteruser_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