PM 接口中的支持阈值资源

https://blueprints.launchpad.net/tacker/+spec/support-auto-lcm

问题描述

本规范提供了“阈值”资源的实现,以支持使用外部监控工具(如 Prometheus [4])的性能管理接口。Tacker Zed 版本已支持 ETSI NFV-SOL 002 v3.3.1 [1] 和 ETSI NFV-SOL 003 v3.3.1 [2] 基于的故障管理和性能管理接口,但是,Tacker 中尚未为性能管理接口实现阈值资源。Tacker 需要支持阈值资源,以提高 ETSI NFV 标准的合规性和功能性。

  • 表格:性能管理接口的操作和 Tacker 支持状态

    PM 接口的操作

    在 (Zed) 中支持

    在 (Antelope) 中支持

    创建 PM 作业

    查询 PM 作业

    读取单个 PM 作业

    更新 PM 作业回调

    删除 PM 作业

    读取单个性能报告

    创建阈值

    查询阈值

    读取单个阈值

    更新阈值回调

    删除阈值

    通知 PM 相关事件

    仅提供性能信息

    同时提供性能信息和阈值越界

    测试通知端点

    仅 PM 作业

    同时支持 PM 作业和阈值

提议的变更

需要进行以下更改

  1. 为 SOL002/003 中指定的性能管理接口添加支持阈值资源。

    • 在 VNF 性能管理接口中添加阈值资源

      • 创建和更新阈值

        • POST /vnfpm/v2/thresholds 以创建阈值。

        • PATCH /vnfpm/v2/thresholds/{thresholdId} 以更新指定的阈值回调。

      • 获取阈值

        • GET /vnfpm/v2/thresholds 以获取所有阈值。

        • GET /vnfpm/v2/thresholds/{thresholdId} 以获取指定的阈值。

      • 删除阈值

        • DELETE /vnfpm/v2/thresholds/{thresholdId} 以删除指定的阈值。

    • 增强对客户端的通知

      • POST <Client URI for notifications> 以通知客户端 Tacker 收到与 PM 阈值相关的事件。

      • GET <Client URI from subscriptions> 确认客户端的 URI 正确。

  2. 添加 Tacker 与外部监控工具之间通信的 RESTful API 支持

    • POST /pm_threshold 以接收来自外部监控工具发送的 PM 阈值事件。

  3. 为 PM 阈值创建一个新的 DB 表。

注意

外部监控工具是一种监控服务,不包含在 Tacker 中。运营商实施外部监控工具。外部监控工具使用指标服务,例如 Prometheus,并使用 Prometheus 插件接口 [3] 通知 PM 事件。

基于 PM 阈值事件触发的自动伸缩

Tacker 在元数据中具有一个配置值,指示警报管理器的 URI。Prometheus 插件在创建 PM 阈值时将 PM 阈值模式转换为 Prometheus 模式。

当外部监控工具检测到 CNF 存在一些 PM 阈值事件时,它会将事件消息发送到 Tacker。在 Tacker 接收到事件后,它会将事件转换为存储在 DB 中。

PM 阈值中缩放操作的设计

以下是缩放的示意图

                                +------------------------+
                                |                        |       9. Send threshold notification
                                |   Client (NFVO/EM)     <-------------------+
                                |                        |                   |
                                +--+---------+-----------+                   |
                                   |         | 1. Create threshold           |
                        10. Scale  |         |                               |
                            +------|---------|-------------------------------|----------------------------+
                            |      |         |                               |                       VNFM |
                            |  +---|---------|---------+ +-------------------|-------------+              |
                            |  |   |         |  Tacker | |                   |  Tacker     |              |
                            |  |   |         |  Server | |                   |  Conductor  |              |
                            |  |   | +-------v------+  | |                   |             |   +--------+ |
                            |  |   | | VnfPm        +------------------------+-----------------> Tacker | |
                            |  |   | | ControllerV2 |  | |         +---------+----+        |   | DB     | |
+----------------+          |  |   | +---------+----+  | |  +------> VnfPm        +------------>        | |
|  External      |          |  |   | 2. Set    |       | |  |      | DriverV2     |        |   +--------+ |
|  Monitoring    | 5. POST  |  |   | threshold |       | |  |      +--------------+        |              |
|  Tool          |    event |  |   |   +-------v----+  | |  |    8. Create threshold       |              |
|  (based on     +---------------------> Prometheus +-------+       notification           |              |
|   Prometheus)  <---------------------+ Plugin     |  | |                                 |              |
|                | 6. Get related data +------------+  | |                                 |              |
|                |          |  |   |    7.Evaluate     | |                                 |              |
+--+-------------+ 3. Set   |  |   |      threshold    | |                                 |              |
   ^              threshold |  |   |      crossing     | |                                 |              |
   | 4. Trigger event       |  |   |   +------------+  | |         +--------------+        |              |
   |                        |  |   +---> Vnflcm     +--------------> VmfLcmDriver +---+    |              |
   |                        |  |       | Controller |  | |         +--------------+   |    |              |
   |                        |  |       +------------+  | |                  +---------v--+ |              |
   |                        |  |                       | |                  | Infra      | |              |
   |                        |  |                       | |                  | Driver     | |              |
   |                        |  |                       | |                  +----+-------+ |              |
   |                        |  +-----------------------+ +-----------------------|---------+              |
   |                        +----------------------------------------------------|------------------------+
   |                                                                             |
   |                        +----------------------------------------------------|------------+
   |                        |  CISM/CIS                                          |            |
   |                        |                  +---------------+-----------------+            |
   |                        |                  |               | 11. Create or Delete         |
   |                        |                  |               |     CNF                      |
   |                        |         +--------v----+   +------v------+    +-------------+    |
   |                        |         | +--------+  |   | +--------+  |    |             |    |
   +----------------------------------> | CNF    |  |   | | CNF    |  |    |             |    |
                            |         | +--------+  |   | +--------+  |    |             |    |
                            |         |      Worker |   |      Worker |    |      Master |    |
                            |         +-------------+   +-------------+    +-------------+    |
                            +-----------------------------------------------------------------+
  1. 客户端向 Tacker 发送请求以创建阈值。

  2. VnfPmControllerV2 将阈值信息发送到 Prometheus 插件。

  3. Prometheus 插件将阈值设置为外部监控工具。

  4. 外部监控工具收集指标并触发事件。

  5. 外部监控工具向具有指定 URI 的 Tacker 发送 POST 请求。

  6. Tacker 收集与 PM 事件相关的数据。从步骤 4-5 获得的数据中,确定与阈值越界相对应的数值和上下文。Prometheus 插件还会更新 DB 中的相应资源。

  7. Prometheus 插件评估事件。如果存在可以成功匹配的阈值越界条件,则将事件发送到客户端的指定路径。如果评估不成功,则处理结束。

  8. VnfPmDriverV2 创建阈值通知并将阈值信息保存到 DB。

  9. VnfPmDriverV2 将阈值通知发送到客户端。

  10. 客户端请求通知的上下文,然后做出缩放决策。

  11. 触发缩放操作,在缩放时创建新的 CNF,或在缩减时删除旧的 CNF。

PM 阈值操作的请求参数

API 详细信息在 REST API 影响 中描述。

PM 阈值操作的序列

以下序列图描述了客户端通过 PM 阈值自动缩放 Tacker 的处理流程。

../../_images/015.png
  1. 客户端向 Tacker 发送请求以创建阈值。在 Tacker 接收到阈值后,它将获取其中的 callback_uri。为了验证 callback_uri 的正确性,Tacker 会向客户端的 callback_uri 地址发送请求。在从客户端获得正常的响应 HTTP 204 No Content 后,Tacker 会将订阅保存到 DB。

  2. Tacker 将阈值发送到 Prometheus 插件。Prometheus 插件将其转换为 Prometheus 格式,然后将其发送到外部监控工具。Tacker 将阈值保存到 DB 并向客户端响应 HTTP 201 Created。

  3. 外部监控工具接收到来自 Prometheus 发送的事件并告知事件到指定的 URI(Tacker)。

  4. Prometheus 插件从 cfg.CONF.tacker.prometheus_plugin 获取值以确定是否启用此功能。Prometheus 插件根据事件中标签的 function_type 字段判断执行什么处理。当 labels.function_typevnfpm 时,执行自动缩放。

  5. Prometheus 插件根据事件中节点标签的值找到相应的资源信息。

  6. Prometheus 插件评估阈值越界条件,如果未匹配,则处理结束。

  7. Prometheus 插件执行 VnfPmDriverV2。

  8. VnfPmDriverV2 向客户端的 callback_uri 地址发送通知阈值事件请求。在客户端接收到请求并处理后,默认返回 HTTP 204 No Content。

  9. 客户端从通知中获取 VNFC 信息。

  10. 客户端向 Tacker 发送请求以缩放 VNFC。

  11. 从这一步开始,与默认缩放操作完全相同。

备选方案

数据模型影响

在 ‘Tacker’ 数据库中添加以下新数据库表。

  • 表格:ThresholdV2

    名称

    类型

    约束

    id

    varchar(255)

    Pri

    objectType

    varchar(32)

    NOT NULL

    objectInstanceId

    varchar(255)

    NOT NULL

    subObjectInstanceIds

    JSON

    NULL

    criteria

    JSON

    NOT NULL

    callbackUri

    varchar(255)

    NOT NULL

    authentication

    JSON

    NULL

    metadata

    JSON

    NOT NULL

    此表具有 id 作为主键。

REST API 影响

以下 RESTful API 符合 SOL002/003 [1] [2] 6.VNF 性能管理接口。

  • 名称:创建阈值
    描述:创建阈值。阈值分组性能信息的详细信息
    方法类型: POST
    资源的 URL:/vnfpm/v2/thresholds
    请求:

    数据类型

    基数

    描述

    CreateThresholdRequest

    1

    阈值创建请求

    属性名称 (CreateThresholdRequest)

    数据类型

    基数

    描述

    objectType

    字符串

    1

    要测量对象的类型。适用于测量的对象类型在 ETSI GS NFV-IFA 027 的 7.2 条中定义 [6]

    objectInstanceId

    标识符

    1

    与此阈值关联的被测量对象实例的标识符。

    subObjectInstanceIds

    IdentifierInVnf

    0..N

    在结构化被测量对象的情况下,被测量对象实例的标识符。

    criteria

    ThresholdCriteria

    1

    定义此阈值的标准。

    >performanceMetric

    字符串

    1

    这定义了与阈值关联的性能指标的类型。有效值在 ETSI GS NFV-IFA 027 的 7.2 条中指定为“测量名称”值 [6]

    >thresholdType

    Enum

    1

    阈值的类型。此属性确定数据结构中存在哪些其他属性。在 ETSI NFV-SOL 002 v3.3.1 [1] 和 ETSI NFV-SOL 003 v3.3.1 [2] 中,允许“SIMPLE:单值静态阈值”。

    >simpleThresholdDetails

    结构

    0..1

    简单阈值的详细信息。如果 thresholdType=”SIMPLE”,则必须存在。

    >>thresholdValue

    数字

    1

    阈值。必须表示为浮点数。

    >>hysteresis

    数字

    1

    阈值的滞后。必须表示为非负浮点数。

    callbackUri

    Uri

    1

    用于发送通知的端点的 URI。

    authentication

    SubscriptionAuthentication

    0..1

    配置使用授权进行通知时,需要身份验证参数。参见 ETSI GS NFV-SOL 013 的 8.3.4 条 [5]

    metadata

    结构

    1

    创建阈值的附加参数(Tacker 原始属性)

    >monitoring

    结构

    1

    处理方式,例如监控系统和驱动程序信息。

    >>monitorName

    字符串

    1

    如果指定“prometheus”,则监控功能的后端为 Prometheus。

    >>driverType

    字符串

    1

    “external”:SCP/SFTP 用于配置文件传输。

    >>targetsInfo

    结构

    1..N

    目标监控系统的信息。

    >>>prometheusHost

    字符串

    1

    目标 PrometheusServer 的 FQDN 或 IP 地址。

    >>>prometheusHostPort

    Int

    1

    目标 PrometheusServer 的 ssh 端口。

    >>>alertRuleConfigPath

    字符串

    1

    目标 Prometheus 的 alertRuleConfig 路径。

    >>>prometheusReloadApiEndpoint

    字符串

    1

    目标 Prometheus 的重新加载 API 的端点 URL。

    >>>authInfo

    结构

    1

    定义访问主机的身份验证信息。

    >>>>ssh_username

    字符串

    1

    目标主机用于 ssh 的用户名。

    >>>>ssh_password

    字符串

    1

    目标主机用于 ssh 的密码。

    响应:

    数据类型

    基数

    响应代码

    描述

    阈值

    1

    成功: 201

    应在成功创建阈值时返回。

    ProblemDetails

    1

    错误: 422

    有效负载体的内容类型受支持,并且请求的有效负载体包含语法上正确的数据,但无法处理该数据。

    ProblemDetails

    参见 [5] 的 6.4 条

    错误: 4xx/5xx

    除了上述响应代码外,还可以返回 ETSI GS NFV-SOL 013 的 6.4 条中定义的任何常见错误响应代码 [5]

    属性名称 (Threshold)

    数据类型

    基数

    描述

    id

    标识符

    1

    此阈值的标识符。

    objectType

    字符串

    1

    要测量对象的类型。适用于测量的对象类型在 ETSI GS NFV-IFA 027 的 7.2 条中定义 [6]

    objectInstanceId

    标识符

    1

    与此阈值关联的被测量对象实例的标识符。

    subObjectInstanceIds

    IdentifierInVnf

    0..N

    在结构化被测量对象的情况下,被测量对象实例的标识符。

    criteria

    ThresholdCriteria

    1

    定义此阈值的标准。

    >performanceMetric

    字符串

    1

    这定义了与阈值关联的性能指标的类型。有效值在 ETSI GS NFV-IFA 027 的 7.2 条中指定为“测量名称”值 [6]

    >thresholdType

    Enum

    1

    阈值的类型。此属性确定数据结构中存在哪些其他属性。在 ETSI NFV-SOL 002 v3.3.1 [1] 和 ETSI NFV-SOL 003 v3.3.1 [2] 中,允许“SIMPLE:单值静态阈值”。

    >simpleThresholdDetails

    结构

    0..1

    简单阈值的详细信息。如果 thresholdType=”SIMPLE”,则必须存在。

    >>thresholdValue

    数字

    1

    阈值。必须表示为浮点数。

    >>hysteresis

    数字

    1

    阈值的滞后。必须表示为非负浮点数。

    callbackUri

    Uri

    1

    用于发送通知的端点的 URI。

    _links

    结构

    1

    此资源的链接。

    >self

    链接

    1

    此资源的 URI。

    >object

    链接

    0..1

    链接到表示收集性能信息的被测量对象实例的资源。如果被测量对象实例信息可以作为资源访问,则必须存在。

    注意

    在处理创建阈值的请求时,应通过覆盖该值或拒绝该请求来强制执行此属性的适当最小值。

    注意

    “滞后”基于 thresholdType,“单值静态阈值”实现。如果被测量值达到或超过“thresholdValue”+“hysteresis”,则将生成方向为“UP”的通知。如果被测量值达到或低于“thresholdValue” - “hysteresis”,则将生成方向为“DOWN”的通知。这些方法需要在 Tacker DB 中存储先前的值以检测越界方向。

  • 名称:查询阈值
    描述:允许用户根据请求中的查询参数过滤阈值
    方法类型: GET
    资源的 URL:/vnfpm/v2/thresholds
    查询参数:

    名称

    基数

    描述

    filter

    0..1

    基于属性的过滤表达式。根据 ETSI GS NFV-SOL 013 的 5.2 条 [5]

    例如,以下 URI 查询参数将匹配 objectType=VNFC 的阈值。

    GET /vnfpm/v2/thresholds?filter=(eq,objectType,VNFC)
    

    nextpage_opaque_marker

    0..1

    标记以获取分页响应的下一页。根据 ETSI GS NFV-SOL 013 的 5.4 条 [5]

    请求:

    数据类型

    基数

    描述

    n/a

    响应:

    数据类型

    基数

    响应代码

    描述

    阈值

    0..N

    成功: 200

    应在成功查询零个或多个阈值的信息时返回。

    ProblemDetails

    1

    错误: 400

    无效的基于属性的过滤表达式。响应主体应包含 ProblemDetails 结构,其中“detail”属性应传达有关错误的更多信息。

    ProblemDetails

    1

    错误: 400

    响应过大。

    ProblemDetails

    参见 [5] 的 6.4 条

    错误: 4xx/5xx

    除了上述响应代码外,还可以返回 ETSI GS NFV-SOL 013 的 6.4 条中定义的任何常见错误响应代码 [5]

    属性名称 (Threshold)

    数据类型

    基数

    描述

    id

    标识符

    1

    此阈值的标识符。

    objectType

    字符串

    1

    要测量对象的类型。适用于测量的对象类型在 ETSI GS NFV-IFA 027 的 7.2 条中定义 [6]

    objectInstanceId

    标识符

    1

    与此阈值关联的被测量对象实例的标识符。

    subObjectInstanceIds

    IdentifierInVnf

    0..N

    在结构化被测量对象的情况下,被测量对象实例的标识符。

    criteria

    ThresholdCriteria

    1

    定义此阈值的标准。

    >performanceMetric

    字符串

    1

    这定义了与阈值关联的性能指标类型。有效值如ETSI GS NFV-IFA 027 第 7.2 条中指定的“测量名称”值。[6]

    >thresholdType

    Enum

    1

    阈值的类型。此属性决定数据结构中存在哪些其他属性。在 ETSI NFV-SOL 002 v3.3.1 [1] 和 ETSI NFV-SOL 003 v3.3.1 [2] 中,允许使用“SIMPLE: 单值静态阈值”。

    >simpleThresholdDetails

    结构

    0..1

    简单阈值的详细信息。如果 thresholdType=”SIMPLE”,则必须存在。

    >>thresholdValue

    数字

    1

    阈值。必须表示为浮点数。

    >>hysteresis

    数字

    1

    阈值的滞后。必须表示为非负浮点数。

    callbackUri

    Uri

    1

    用于发送通知的端点的 URI。

    _links

    结构

    1

    此资源的链接。

    >self

    链接

    1

    此资源的 URI。

    >object

    链接

    0..1

    链接到表示收集性能信息的被测量对象实例的资源。如果被测量对象实例信息可以作为资源访问,则必须存在。

  • 名称:读取单个阈值
    描述:获取单个阈值
    方法类型: GET
    资源的 URL:/vnfpm/v2/thresholds/{thresholdId}
    路径参数:

    名称

    基数

    描述

    thresholdId

    1

    阈值 ID。

    请求:

    数据类型

    基数

    描述

    n/a

    响应:

    数据类型

    基数

    响应代码

    描述

    阈值

    1

    成功: 200

    当成功读取单个阈值的信息时,应返回此信息。

    ProblemDetails

    请参阅 [5] 的第 6.4 条。

    错误: 4xx/5xx

    除了上述响应代码外,还可以返回 ETSI GS NFV-SOL 013 的第 6.4 条中定义的任何常见错误响应代码 [5]

    属性名称 (Threshold)

    数据类型

    基数

    描述

    id

    标识符

    1

    此阈值的标识符。

    objectType

    字符串

    1

    被测量对象的类型。测量的适用被测量对象类型在 ETSI GS NFV-IFA 027 的第 7.2 条中定义。[6]

    objectInstanceId

    标识符

    1

    用于收集性能信息的被测量对象实例的标识符。

    subObjectInstanceIds

    IdentifierInVnf

    0..N

    在结构化被测量对象的情况下,被测量对象实例的标识符。

    criteria

    ThresholdCriteria

    1

    定义此阈值的标准。

    >performanceMetric

    字符串

    1

    这定义了与阈值关联的性能指标类型。有效值如ETSI GS NFV-IFA 027 第 7.2 条中指定的“测量名称”值。[6]

    >thresholdType

    Enum

    1

    阈值的类型。此属性决定数据结构中存在哪些其他属性。在 ETSI NFV-SOL 002 v3.3.1 [1] 和 ETSI NFV-SOL 003 v3.3.1 [2] 中,允许使用“SIMPLE: 单值静态阈值”。

    >simpleThresholdDetails

    结构

    0..1

    简单阈值的详细信息。如果 thresholdType=”SIMPLE”,则必须存在。

    >>thresholdValue

    数字

    1

    阈值。必须表示为浮点数。

    >>hysteresis

    数字

    1

    阈值的滞后。必须表示为非负浮点数。

    callbackUri

    Uri

    1

    用于发送通知的端点的 URI。

    _links

    结构

    1

    此资源的链接。

    >self

    链接

    1

    此资源的 URI。

    >object

    链接

    0..1

    链接到表示收集性能信息的被测量对象实例的资源。如果被测量对象实例信息可以作为资源访问,则必须存在。

  • 名称:更新阈值回调
    描述:修改单个阈值的资源
    方法类型: PATCH
    资源的 URL:/vnfpm/v2/thresholds/{thresholdId}
    Content-Type:application/mergepatch+json
    路径参数:

    名称

    基数

    描述

    thresholdId

    1

    阈值 ID。

    请求:

    数据类型

    基数

    描述

    ThresholdModifications

    1

    阈值修改的参数。

    属性名称 (ThresholdModifications)

    数据类型

    基数

    描述

    callbackUri

    Uri

    0..1

    “callbackUri”属性的新值。不允许使用值“null”。

    authentication

    SubscriptionAuthentication

    0..1

    “authentication”属性的新值,或“null”以删除该属性。如果存在于请求体中,这些修改应根据 JSON Merge Patch 的规则应用。

    响应:

    数据类型

    基数

    响应代码

    描述

    ThresholdModifications

    1

    成功: 200

    当请求已成功处理时,应返回此信息。

    ProblemDetails

    1

    422

    有效负载体的内容类型受支持,并且请求的有效负载体包含语法上正确的数据,但无法处理该数据。

    ProblemDetails

    请参阅 [5] 的第 6.4 条。

    错误: 4xx/5xx

    除了上述响应代码外,还可以返回 ETSI GS NFV-SOL 013 的第 6.4 条中定义的任何常见错误响应代码 [5]

    注意

    由于当前的 Tacker 不支持 http Etag,因此不支持错误代码:412 前置条件失败。根据 ETSI NFV SOL 文档,尚未定义 Etag 的 API 请求/响应规范,并且使用 Etag 的事务尚未通过标准化定义。在 ETSI NFV 规范定义相关事务后,Tacker 将支持 Etag。

    属性名称 (ThresholdModifications)

    数据类型

    基数

    描述

    callbackUri

    Uri

    0..1

    “callbackUri”属性的新值。不允许使用值“null”。

    响应体中不应存在 authentication 参数。

  • 名称:删除阈值
    描述:在 Tacker 中删除阈值
    方法类型:DELETE
    资源的 URL:/vnfpm/v2/thresholds/{thresholdId}
    路径参数:

    名称

    基数

    描述

    thresholdId

    1

    阈值 ID。

    请求:

    数据类型

    基数

    描述

    n/a

    响应:

    数据类型

    基数

    响应代码

    描述

    n/a

    成功:204

    当阈值已成功删除时,应返回此信息。

    ProblemDetails

    请参阅 [5] 的第 6.4 条。

    错误: 4xx/5xx

    除了上述响应代码外,还可以返回 ETSI GS NFV-SOL 013 的第 6.4 条中定义的任何常见错误响应代码 [5]

  • 名称:通知 PM 相关事件
    描述:传递有关阈值交叉事件的通知。
    方法类型: POST
    资源的 URL:<Client URI for notifications>
    请求:

    数据类型

    基数

    描述

    ThresholdCrossedNotification

    1

    阈值交叉通知

    属性名称 (ThresholdCrossedNotification)

    数据类型

    基数

    描述

    id

    标识符

    1

    此通知的标识符。如果由于多次订阅而多次发送通知,则所有这些通知的“id”属性应具有相同的值。

    notificationType

    字符串

    1

    不同通知类型的区分符。对于此通知类型,应设置为“ThresholdCrossedNotification”。

    timeStamp

    DateTime

    1

    生成通知的日期和时间。

    thresholdId

    标识符

    1

    已交叉阈值的阈值标识符。

    crossingDirection

    CrossingDirectionType

    1

    指示阈值是向上还是向下交叉。

    objectType

    字符串

    1

    被测量对象的类型。测量的适用被测量对象类型在 ETSI GS NFV-IFA 027 的第 7.2 条中定义。[6]

    objectInstanceId

    标识符

    1

    根据 ETSI GS NFV-IFA 027 的第 6.2 条,用于收集性能信息的被测量对象实例的标识符。[6]

    subObjectInstanceId

    IdentifierInVnf

    0..1

    被测量对象实例的子对象实例的标识符,用于收集性能测量。如果相关的阈值设置为仅测量被测量对象实例的所有子对象实例的子集,并且在 ETSI GS NFV-IFA 027 的第 6.2 条中定义了子对象,则应存在此信息。否则,应不存在此信息。

    performanceMetric

    字符串

    1

    收集的指标名称。此属性应包含 ETSI GS NFV-IFA 027 的第 7.2 条中定义的相关的“测量名称”值。[6]

    performanceValue

    (任何类型)

    1

    导致阈值交叉的指标值。此属性应包含 ETSI GS NFV-IFA 027 的第 7.2 条中定义的相关的“测量名称”值。[6]。与测量值相关的测量上下文信息。适用的密钥集由 ETSI GS NFV-IFA 027 的第 7.2 条中相关“测量上下文”中针对每个测量定义的。

    context

    KeyValuePairs

    0..1

    与测量值相关的测量上下文信息。适用的密钥集由 ETSI GS NFV-IFA 027 的第 7.2 条中相关“测量上下文”中针对每个测量定义的。[6]

    _links

    结构

    1

    与此通知相关的资源的链接。

    >objectInstance

    NotificationLink

    0..1

    指向表示应用通知的被测量对象实例的资源的链接。如果被测量对象实例信息可以作为资源访问,则应存在此信息。

    >threshold

    NotificationLink

    1

    指向表示已交叉阈值的资源的链接。

    响应:

    数据类型

    基数

    响应代码

    描述

    n/a

    成功:204

    当通知已成功传递时,应返回此信息。

    ProblemDetails

    请参阅 [5] 的第 6.4 条。

    错误: 4xx/5xx

    除了上述响应代码外,还可以返回 ETSI GS NFV-SOL 013 的第 6.4 条中定义的任何常见错误响应代码 [5]

  • 名称:测试通知端点
    描述:确认客户端的 URI 是否正确。
    方法类型: GET
    资源的 URL:<Client URI for notifications>
    请求:

    数据类型

    基数

    描述

    n/a

    响应:

    数据类型

    基数

    响应代码

    描述

    n/a

    成功:204

    应返回此信息,以指示已成功测试通知端点。

    ProblemDetails

    请参阅 [5] 的第 6.4 条。

    错误: 4xx/5xx

    除了上述响应代码外,还可以返回 ETSI GS NFV-SOL 013 的第 6.4 条中定义的任何常见错误响应代码 [5]

以下 RESTful API 是 Tacker 特定的接口,用于 Tacker 和外部监控工具之间的 PM 阈值。

  • 名称:发送 PM 阈值事件
    描述:接收来自外部监控工具发送的 PM 阈值事件
    方法类型: POST
    资源的 URL:/pm_threshold
    请求:

    数据类型

    基数

    描述

    ThresholdEvent

    1

    来自外部监控工具发送的 PM 阈值事件

    属性名称 (ThresholdEvent)

    数据类型

    基数

    描述

    alerts

    结构

    1..N

    此组中所有警报对象的列表。

    >status

    字符串

    1

    定义警报是 resolved 还是当前 firing。

    >labels

    结构

    1

    要附加到警报的一组标签。

    >>receiver_type

    字符串

    1

    接收器类型:tacker

    >>function_type

    字符串

    1

    函数类型:vnfpm-threshold

    >>threshold_id

    标识符

    1

    PM 阈值的标识符

    >>object_instance_id

    标识符

    1

    报告性能指标的被测量对象实例的标识符。

    >>sub_object_instance_id

    标识符

    0..1

    报告性能指标的被测量对象子实例的标识符。

    >annotations

    结构

    1

    警报的一组注释。

    >>value

    (任何类型)

    0..1

    收集的指标值。

    >startsAt

    DateTime

    1

    警报开始触发的时间。

    >endsAt

    DateTime

    0..1

    警报的结束时间。

    >fingerprint

    字符串

    1

    可用于标识警报的指纹。

安全影响

通知影响

性能管理
  • Tacker 向 NFVO 或 EM 发送 POST <Client URI for notifications>,以通知客户端 Tacker 收到与 PM 阈值相关的事件。

  • Tacker 向 NFVO 或 EM 发送 GET <Client URI for notifications>,以确认客户端的 URI 是否正确。

  • Tacker 创建与 PM 阈值请求相关的 prometheus 规则文件,并使用 SSH 上传这些文件。

其他最终用户影响

性能影响

其他部署者影响

开发人员影响

实现

负责人

主要负责人

Yuta Kazato <yuta.kazato.nw@hco.ntt.co.jp>

Kenta Fukaya <kenta.fukaya.xv@hco.ntt.co.jp>

其他贡献者

Koji Shimizu <shimizu.koji@fujitsu.com>

Yoshiyuki Katada <katada.yoshiyuk@fujitsu.com>

工作项

  • 实现 Tacker 以支持

    • 性能管理接口

      • 添加新的 Rest API POST /vnfpm/v2/thresholds 以创建阈值。

      • 添加新的 Rest API GET /vnfpm/v2/thresholds 以获取所有阈值。

      • 添加新的 Rest API GET /vnfpm/v2/thresholds/{thresholdId} 以获取指定的阈值。

      • 添加新的 Rest API PATCH /vnfpm/v2/thresholds/{thresholdId} 以更新目标阈值回调。

      • 添加新的 Rest API DELETE /vnfpm/v2/thresholds/{thresholdId} 以删除指定的阈值。

      • 添加新的请求 POST <Client URI for notifications> 以通知客户端 Tacker 收到阈值警报。

      • 添加新的请求 GET <Client URI for notifications> 以确认客户端的 URI 是否正确。

    • 外部监控接口

      • 添加新的 Rest API POST /pm_threshold 以接收来自外部监控工具发送的 PM 阈值事件。

  • 添加新的单元和功能测试。

依赖项

无。

测试

将添加单元和功能测试,以涵盖规范所需的用例。

文档影响

  • 在 Tacker 用户指南中添加阈值检查。

  • 更新 REST API 影响 中提到的 API 添加项的 API 文档。

参考资料