| .. This work is licensed under a Creative Commons Attribution 4.0 International License. |
| .. http://creativecommons.org/licenses/by/4.0 |
| .. Copyright 2017 AT&T Intellectual Property, All rights reserved |
| .. Copyright 2017-2018 Huawei Technologies Co., Ltd. |
| |
| ========================== |
| VES Event Registration 1.6 |
| ========================== |
| |
| .. contents:: Table of Contents |
| |
| Introduction |
| ============ |
| |
| This document specifies a YAML format for the registration of VES |
| Events. The YAML format enables both human designers and applications to |
| parse and understand the fields that will be sent by event sources in |
| conjunction with specific types of events, which are identified by their |
| eventNames. |
| |
| The semantics of the YAML format are easily extensible to accommodate |
| processing needs that may arise in the future. Among the types of |
| information specified in the YAML are field optionality, restrictions on |
| field values, and event handling recommendations and requirements. |
| |
| This document should be read in conjunction with the VES Event Listener |
| service specification, which defines the Common Event Format and |
| introduces the concept of specific types of events, identified by |
| eventNames. |
| |
| Audience |
| -------- |
| |
| This document is intended to support the following groups: |
| |
| - VNF Vendors |
| |
| - Service Provider (e.g., AT&T) Teams responsible for deploying VNFs |
| within their infrastructure |
| |
| VNF vendors will provide a YAML file to the Service Provider that |
| describes the events that their VNFs generate. Using the semantics and |
| syntax supported by YAML, vendors will indicate specific conditions that |
| may arise, and recommend actions that should be taken at specific |
| thresholds, or if specific conditions repeat within a specified time |
| interval. |
| |
| Based on the vendor’s recommendations, the Service Provider may create |
| another YAML, which finalizes their engineering rules for the processing |
| of the vendor’s events. The Service Provider may alter the threshold |
| levels recommended by the vendor, and may modify and more clearly |
| specify actions that should be taken when specified conditions arise. |
| The Service Provided-created version of the YAML will be distributed to |
| Service Provider applications at design time. |
| |
| Goal |
| ---- |
| |
| The goal of the YAML is to completely describe the processing of VNF |
| events in a way that can be compiled or interpreted by applications |
| across a Service Provider’s infrastructure, so that no additional human |
| configuration or development is required beyond the creation of the YAML |
| itself. |
| |
| Relation to the Common Event Format |
| ----------------------------------- |
| |
| The Common Event Format described in the VES Event Listener service |
| specification defines the structure of VES events including optional |
| fields that may be provided. |
| |
| Specific eventNames registered by the YAML (e.g., an InvalidLicense |
| fault), may require that certain fields, which are optional in the |
| Common Event Format, be present when events with that eventName are |
| published. For example, a fault eventName which communicates an |
| ‘InvalidLicense’ condition, may be registered to require that the |
| configured ‘licenseKey’ be provided as a name-value pair in the Common |
| Event Format’s ‘additionalFields’ structure, within the ‘faultFields’ |
| block. Anytime an ‘InvalidLicense’ fault event is detected, designers, |
| applications and microservices across the Service Provider’s |
| infrastructure can count on that name-value pair being present. |
| |
| The YAML registration may also restrict ranges or enumerations defined |
| in the Common Event Format. For example, eventSeverity is an enumerated |
| string within the Common Event Format with several values ranging from |
| ‘NORMAL’ to ‘CRITICAL’. The YAML registration for a particular eventName |
| may require that it always be sent with eventSeverity set to a single |
| value (e.g., ‘MINOR’), or to a subset of the possible enumerated values |
| allowed by the Common Event Format (e.g., ‘MINOR’ or ‘NORMAL’). |
| |
| Relation to Service Design and Creation |
| --------------------------------------- |
| |
| Event registration for a VNF (or other event source) is provided to the |
| Service Provider’s Service Creation and Design Environment (e.g., SDC) |
| as a set of two YAML files consisting of the vendor recommendation YAML |
| and (optionally) the final Service Provider YAML. These YAML files |
| describe all the eventNames that that VNF (or other event source) |
| generates. |
| |
| Once their events are registered, the Service Creation and Design |
| Environment can then list the registered eventNames (e.g., as a drop |
| down list), for each VNF or other event source (e.g., a service), and |
| enable designers to study the YAML registrations for specific |
| eventNames. The YAMLs provide the information that the designers need to |
| develop and understand policies, work flows and microservices that are |
| triggered by those events. YAML registrations are both human readable |
| and machine readable. |
| |
| The final Service Provider YAML is a type of Service Design and Creation |
| ‘artifact’, which is distributed to Service Provider applications at |
| design time: notably, to applications involved in the collection and |
| processing of VNF events. It is parsed by those applications so they can |
| automatically support the receipt and processing of VNF events, without |
| the need for any manual, VNF-specific development. |
| |
| YAML Files |
| ========== |
| |
| YAML Specification Conformance |
| ------------------------------ |
| |
| YAML files should conform to version 1.2 of the YAML specification |
| available at: http://yaml.org/spec/1.2/spec.html. |
| |
| Filename |
| -------- |
| |
| YAML file names should conform to the following naming convention: |
| |
| {sdcModel}\_{sdcModelType}\_{v#}.yml |
| |
| The ‘#’ should be replaced with the current numbered version of the |
| file. |
| |
| ‘SDC’ is a reference to the Service Provider’s Service Design and |
| Creation environment. The sdcModelType is an enumeration with several |
| values of which the following three are potentially relevant: |
| |
| - Service |
| |
| - VNF |
| |
| - VfModule |
| |
| The sdcModel is the modelName of the specific modelType whose events |
| are being registered (e.g., the name of the specific VNF or service as |
| it appears in the the Service Design and Creation Environment). |
| |
| For example: |
| |
| - vMRF\_Vnf\_v1.yml |
| |
| - vMRF\_Service\_v1.yml |
| |
| - vIsbcSsc\_VfModule\_v1.yml |
| |
| File Structure |
| -------------- |
| |
| Each eventType is registered as a distinct YAML ‘document’. |
| |
| YAML files consist of a series of YAML documents delimited by ‘---‘ and |
| ‘…’ for example: |
| |
| :: |
| |
| --- |
| |
| # Event Registration for eventName ‘name1’ |
| |
| # details omitted |
| |
| ... |
| |
| --- |
| |
| # Event Registration for eventName ‘name2’ |
| |
| # details omitted |
| |
| ... |
| |
| --- |
| |
| # Event Registration for eventName ‘name3’ |
| |
| # details omitted |
| |
| ... |
| |
| YAML Syntax and Semantics |
| ========================= |
| |
| YAML registration documents show each relevant VES Common Event Model |
| object and field (i.e., each element) for the eventName being |
| registered, including any extensible fields (e.g., specific name-value |
| pairs). |
| |
| Qualifiers |
| ---------- |
| |
| Each object or field name in the eventName being registered is followed |
| by a ‘qualifier’, which consists of a colon and two curly braces, for |
| example: |
| |
| “objectOrFieldName: { }” |
| |
| The curly braces contain meta-information about that object or field |
| name (also known as the ‘element’), such as whether it is required to be |
| present, what values it may have, what handling it should trigger, etc… |
| |
| Semantics have been defined for the following types of meta-information |
| within the curly braces: |
| |
| Action |
| ~~~~~~ |
| |
| The ‘action’ keyword may be applied to field values or to the event as a |
| whole. The ‘action’ keyword specifies a set of actions that should be |
| taken if a specified trigger occurs. For example, the ‘action’ keyword |
| may specify that a threshold crossing alert (i.e., tca) be generated, |
| and/or that a specific microservice handler be invoked, and/or that a |
| specific named-condition be asserted. In the Rules section of the YAML |
| file, tca’s and microservices may be defined on individual |
| named-conditions or on logical combinations of named-conditions. |
| |
| The ‘action:’ keyword is followed by five values in square brackets. The |
| first two values communicate the trigger, and the last three values |
| communicate the actions to be taken if that trigger occurs: |
| |
| 1. The first value conveys the trigger level. If the field on which the |
| action is defined reaches or passes through that level, then the |
| trigger fires. If a specific level is not important to the |
| recommended action, the ‘any’ keyword may be used as the first value. |
| (Note: ‘any’ is often used when an action is defined on the ‘event’ |
| structure as a whole). |
| |
| 2. The second value indicates the direction of traversal of the level |
| specified in the first value. The second value may be ‘up’, ‘down’, |
| ‘at’ or ‘any’. ‘any’ is used if the direction of traversal is not |
| important. ‘at’ implies that it traversed (or exactly attained) the |
| trigger level but it doesn’t matter if the traversal was in the up |
| direction or down direction. Note: If ‘up’, ‘down’ or ‘at’ are used, |
| the implication is that the microservices processing the events |
| within the service provider are maintaining state (e.g., to know that |
| a measurement field traversed a trigger level in an ‘up’ direction, |
| the microservice would have to know that the field was previously |
| below the trigger level). When initially implementing support for |
| YAML actions, a service provider may choose to use and interpret |
| these keywords in a simpler way to eliminate the need to handle |
| state. Specifically, they may choose to define and interpret all ‘up’ |
| guidance to mean ‘at the indicated trigger level or greater’, and |
| they may choose to define and interpret all ‘down’ guidance to mean |
| ‘at the indicated trigger level or lower’. |
| |
| 3. The third value optionally names the condition that has been attained |
| when the triggers fires (e.g., ‘invalidLicence’ or |
| ‘capacityExhaustion’). Named-conditions should be expressed in upper |
| camel case with no underscores, hyphens or spaces. In the Rules |
| section of the YAML file, named-conditions may be used to specify |
| tca’s that should be generated and/or microservices that should be |
| invoked. If it is not important to name a condition, then the keyword |
| ‘null’ may be used as the third value. |
| |
| 4. The fourth value recommends a specific microservice (e.g., ‘rebootVm’ |
| or ‘rebuildVnf’) supported by the Service Provider, be invoked if the |
| trigger is attained. Design time processing of the YAML by the |
| service provider can use these directives to automatically establish |
| policies and configure flows that need to be in place to support the |
| recommended runtime behavior. |
| |
| If a vendor wants to recommend an action, it can either work with |
| the service provider to identify and specify microservices that the |
| service provider support, or, the vendor may simply indicate and |
| recommend a generic microservice function by prefixing ‘RECO-’ in |
| front of the microservice name, which should be expressed in upper |
| camel case with no underscores, hyphens or spaces. |
| |
| The fourth value may also be set to ‘null’. |
| |
| 1. The fifth value third value indicates a specific threshold crossing |
| alert (i.e., tca) that should be generated if the trigger occurs. |
| This field may be omitted or provided as ‘null’. |
| |
| Tca’s should be indicated by their eventNames. |
| |
| When a tca is specified, a YAML registration for that tca eventName |
| should be added to the event registrations within the YAML file. |
| |
| Examples: |
| |
| - event: { action: [ any, any, null, rebootVm ] } |
| |
| # whenever the above event occurs, the VM should be rebooted |
| |
| - fieldname: { action: [ 80, up, null, null, tcaUpEventName ], action: |
| [ 60, down, overcapacity, null ] } |
| |
| # when the value of fieldname crosses 80 in an up direction, |
| tcaUpEventName |
| |
| should be published; if the fieldname crosses 60 in a down direction |
| an |
| |
| ‘overCapacity’ named-condition is asserted. |
| |
| Array |
| ~~~~~ |
| |
| The ‘array’ keyword indicates that the element is an array; ‘array:’ is |
| following by square brackets which contain the elements of the array. |
| Note that unlike JSON itself, the YAML registration will explicitly |
| declare the array elements and will not communicate them anonymously. |
| |
| Examples: |
| |
| - element: { array: [ |
| |
| firstArrayElement: { }, |
| |
| secondArrayElement: { } |
| |
| ] } |
| |
| Default |
| ~~~~~~~ |
| |
| The ‘default’ keyword specifies a default field value. Note: the default |
| value must be within the range or enumeration of acceptable values. |
| |
| Examples: |
| |
| - fieldname: { range: [ 1, unbounded ], default: 5 } |
| |
| - fieldname: { value: [ red, white, blue ], default: blue } |
| |
| HeartbeatAction |
| ~~~~~~~~~~~~~~~ |
| |
| The ‘heartbeatAction’ keyword is provided on the ‘event’ objectName for |
| heartbeat events only. It provides design time guidance to the service |
| provider’s heartbeat processing applications (i.e., their watchdog |
| timers). The syntax and semantics of the ‘heartbeatAction’ keyword are |
| similar to the ‘action’ keyword except the trigger is specified by the |
| first field only instead of the first two fields. When the |
| ‘heartbeatAction’ keyword is indicated, the first field is an integer |
| indicating the number of successively missed heartbeat events. Should |
| that trigger occur, the remaining fields have the same order, meaning |
| and optionality as those described for the ‘action’ keyword. |
| |
| Examples: |
| |
| - event: { heartbeatAction: [ 3, vnfDown, RECO-rebootVnf, tcaEventName |
| ] } |
| |
| # whenever the above event occurs, a vnfDown condition is asserted |
| and the VNF should be rebooted, plus the indicated tca should be |
| generated. |
| |
| Presence |
| ~~~~~~~~ |
| |
| The ‘presence’ keyword may be defined as ‘required’ or ‘optional’. If |
| not provided, the element is assumed to be ‘optional’. |
| |
| Examples |
| |
| - element: { presence: required } # element must be present |
| |
| - element: { presence: optional } # element is optional |
| |
| - element: { value: blue } # by omitting a presence definition, the element is assumed to be optional |
| |
| Range |
| ~~~~~ |
| |
| The ‘range’ keyword applies to fields (i.e., simpleTypes); indicates the |
| value of the field is a number within a specified range of values from |
| low to high (inclusive of the indicated values). . ‘range:’ is followed |
| by two parameters in square brackets: |
| |
| - the first parameter conveys the minimum value |
| |
| - the second parameter conveys the maximum value or ‘unbounded’ |
| |
| The keyword ‘unbounded’ is supported to convey an unbounded upper limit. |
| Note that the range cannot override any restrictions defined in the VES |
| Common Event Format. |
| |
| Examples: |
| |
| - fieldname: { range: [ 1, unbounded ] } |
| |
| - fieldname: { range: [ 0, 3.14 ] } |
| |
| Structure |
| ~~~~~~~~~ |
| |
| The ‘structure’ keyword indicates that the element is a complexType |
| (i.e., an object) and is followed by curly braces containing that |
| object. |
| |
| Example: |
| |
| - objectName: { structure: { |
| element1: { }, |
| element2: { }, |
| anotherObject: { structure: { |
| element3: { }, |
| element4: { } |
| } } |
| } } |
| |
| Units |
| ~~~~~ |
| |
| The ‘units’ qualifier may be applied to values provided in VES Common |
| Event Format extensible field structures. The ‘units’ qualifier |
| communicates the units (e.g., megabytes, seconds, Hz) that the value is |
| expressed in. Note: the ‘units’ should not contain any space characters |
| (e.g., use ‘numberOfPorts’ or ‘number\_of\_ports’ but not ‘number of |
| ports’). |
| |
| Example: |
| |
| - field: { structure: { |
| |
| name: { value: pilotNumberPoolSize }, |
| |
| value: { units: megabytes } # the value will be expressed in |
| megabytes |
| |
| } } |
| |
| Value |
| ~~~~~ |
| |
| The ‘value’ keyword applies to fields (i.e., simpleTypes); indicates a |
| single value or an enumeration of possible values. If not provided, it |
| is assumed the value will be determined at runtime. Note that the |
| declared value cannot be inconsistent with restrictions defined in the |
| VES Common Event Format (e.g., it cannot add an enumerated value to an |
| enumeration defined in the Common Event Format, but it can subset the |
| defined enumerations in the Common Event Format). |
| |
| Values that are strings containing spaces should always be indicated in |
| single quotes. |
| |
| Examples: |
| |
| - fieldname: { value: x } # the value is ‘x’ |
| |
| - fieldname: { value: [ x, y, z ] } # the value is either ‘x’, ‘y’, or |
| ‘z’ |
| |
| - fieldname: { presence: required } # the value will be provided at |
| runtime |
| |
| - fieldname: { value: ‘error state’ } # the value is the string within |
| the single quotes |
| |
| Rules |
| ----- |
| |
| Rules Document |
| ~~~~~~~~~~~~~~ |
| |
| After all events have been defined, the YAML file may conclude with a |
| final YAML document delimited by ‘---‘ and ‘…’, which defines rules |
| based on the named ‘conditions’ asserted in action qualifiers in the |
| preceding event definitions. For example: |
| |
| :: |
| |
| --- |
| |
| # Event Registration for eventName ‘name1’ |
| |
| event: {presence: required, action: [any, any, A, null], structure: |
| { |
| |
| # details omitted |
| |
| }} |
| |
| ... |
| |
| --- |
| |
| # Event Registration for eventName ‘name2’ |
| event: {presence: required, structure: { |
| commonEventHeader: {presence: required, structure: { |
| # details omitted |
| }} |
| |
| measurementsForVfScalingFields: {presence: required, structure: { |
| cpuUsageArray: {presence: required, array: { |
| cpuUsage: {presence: required, structure: { |
| cpuIdentifier: {presence: required}, |
| percentUsage: {presence: required, action: [90, up, B, null]} |
| }} |
| }}, |
| # details omitted |
| }} |
| }} |
| ... |
| |
| --- |
| |
| # Rules |
| rules: [ |
| |
| # defined based on conditions ‘A’ and ‘B’ - details omitted |
| |
| ] |
| |
| ... |
| |
| Rules Syntax and Semantics |
| ~~~~~~~~~~~~~~~~~~~~~~~~~~ |
| |
| The YAML ‘rules’ document begins with the keyword ‘rules’ followed by a |
| colon and square brackets. Each rule is then defined within the square |
| brackets. Commas are used to separate rules. |
| |
| Each rule is expressed as follows:: |
| |
| rule: { |
| trigger: *logical expression in terms of conditions*, |
| microservices: [ *microservice1, microservice2, microservice3…* ] |
| alerts: [tcaE*ventName1, tcaEventName2, tcaEventName3…* ], |
| } |
| |
| Notes: |
| |
| - All referenced tcaEventNames should be defined within the YAML. |
| |
| - For information about microservices, see section 3.1.1 bullet number |
| 4. |
| |
| - At least one microservice or alert should be specified, and both |
| microservices and alerts may be specified. |
| |
| Simple Triggers |
| ~~~~~~~~~~~~~~~ |
| |
| The trigger is based on the named ‘conditions’ asserted in the action |
| qualifiers within the event definitions earlier in the YAML file. The |
| following logical operators are supported: |
| |
| - &: which is a logical AND |
| |
| - \|\|, which is a logical OR |
| |
| In addition parentheses may be used to group expressions. |
| |
| Example logical expression: |
| |
| (A & B) \|\| (C & D) |
| |
| Where A, B, C and D are named conditions expressed earlier in the YAML |
| file. |
| |
| Example rules definition:: |
| |
| rules: [ |
| rule: { |
| trigger: A, |
| alerts: [tcaEventName1], |
| microservices: [rebootVm] |
| }, |
| rule: { |
| trigger: B \|\| (C & D), |
| microservices: [scaleOut] |
| } |
| ] |
| |
| Note: when microservices are defined in terms of multiple event |
| conditions, the designer should take care to consider whether the target |
| of the microservice is clear (e.g., which VNF or VM instance to perform |
| the action on). Future versions of this document may provide more |
| clarity. |
| |
| Time Based Qualifiers |
| ~~~~~~~~~~~~~~~~~~~~~ |
| |
| Time based rules may be established by following any named condition |
| with a colon and curly braces. The time based rule is placed in the |
| curly braces as follows: |
| |
| :: |
| |
| trigger: B:{3 times in 300 seconds} |
| |
| This means that if condition B occurs 3 (or more) times in 300 seconds |
| (e.g., 5 minutes), the trigger fires. |
| |
| More complex triggers can be created as follows: |
| |
| :: |
| |
| trigger: B:{3 times in 300 seconds} \|\| (C & D:{2 times in 600 seconds}), |
| |
| This means that the trigger fires if condition B occurs 3 (or more) |
| times in 5 minutes, OR, if condition D occurs 2 (or more) times in 10 |
| minutes AND condition C is in effect. |
| |
| YAML Examples |
| ============= |
| |
| An example YAML file is provided below which registers some events for a |
| vMRF VNF. Note: some of the lines have been manually wrapped/indented to |
| make it easier to read. |
| |
| :: |
| |
| --- |
| # registration for Fault\_vMrf\_alarm003 |
| # Constants: the values of domain, eventName, priority, vfstatus |
| # , version, alarmCondition, eventSeverity, eventSourceType, |
| # faultFieldsVersion, specificProblem, |
| # Variables (to be supplied at runtime) include: eventId, |
| lastEpochMicrosec, |
| |
| # reportingEntityId, reportingEntityName, sequence, sourceId, sourceName, |
| # startEpochMicrosec |
| |
| event: {presence: required, action: [ any, any, alarm003,RECO-rebuildVnf ], |
| structure: { |
| commonEventHeader: {presence: required, structure: { |
| domain: {presence: required, value: fault}, |
| eventName: {presence: required, value: Fault\_vMrf\_alarm003}, |
| eventId: {presence: required}, |
| nfNamingCode: {value: mrfx}, |
| priority: {presence: required, value: Medium}, |
| reportingEntityId: {presence: required}, |
| reportingEntityName: {presence: required}, |
| sequence: {presence: required}, |
| sourceId: {presence: required}, |
| sourceName: {presence: required}, |
| startEpochMicrosec: {presence: required}, |
| lastEpochMicrosec: {presence: required}, |
| version: {presence: required, value: 3.0} |
| }}, |
| faultFields: {presence: required, structure: { |
| alarmCondition: {presence: required, value: alarm003}, |
| eventSeverity: {presence: required, value: MAJOR}, |
| eventSourceType: {presence: required, value: virtualNetworkFunction}, |
| faultFieldsVersion: {presence: required, value: 2.0}, |
| specificProblem: {presence: required, value: "Configuration file was |
| corrupt or not present"}, |
| vfStatus: {presence: required, value: "Requesting Termination"} |
| }} |
| }} |
| |
| ... |
| |
| --- |
| # registration for clearing Fault\_vMrf\_alarm003Cleared |
| # Constants: the values of domain, eventName, priority, |
| # , version, alarmCondition, eventSeverity, eventSourceType, |
| # faultFieldsVersion, specificProblem, |
| # Variables (to be supplied at runtime) include: eventId,lastEpochMicrosec, |
| # reportingEntityId, reportingEntityName, sequence, sourceId, |
| # sourceName, startEpochMicrosec, vfStatus |
| event: {presence: required, action: [ any, any, alarm003, Clear ], structure: { |
| commonEventHeader: {presence: required, structure: { |
| domain: {presence: required, value: fault}, |
| eventName: {presence: required, value: Fault\_vMrf\_alarm003Cleared}, |
| eventId: {presence: required}, |
| nfNamingCode: {value: mrfx}, |
| priority: {presence: required, value: Medium}, |
| reportingEntityId: {presence: required}, |
| reportingEntityName: {presence: required}, |
| sequence: {presence: required}, |
| sourceId: {presence: required}, |
| sourceName: {presence: required}, |
| startEpochMicrosec: {presence: required}, |
| lastEpochMicrosec: {presence: required}, |
| version: {presence: required, value: 3.0} |
| }}, |
| faultFields: {presence: required, structure: { |
| alarmCondition: {presence: required, value: alarm003}, |
| eventSeverity: {presence: required, value: NORMAL}, |
| eventSourceType: {presence: required, value: virtualNetworkFunction}, |
| faultFieldsVersion: {presence: required, value: 2.0}, |
| specificProblem: {presence: required, value: "Valid configuration file found"}, |
| vfStatus: {presence: required, value: "Requesting Termination"} |
| }} |
| }} |
| |
| ... |
| |
| --- |
| # registration for Heartbeat_vMRF |
| # Constants: the values of domain, eventName, priority, version |
| # Variables (to be supplied at runtime) include: eventId, lastEpochMicrosec, |
| # reportingEntityId, reportingEntityName, sequence, sourceId, sourceName, |
| # startEpochMicrosec |
| event: {presence: required, heartbeatAction: [3, vnfDown,RECO-rebuildVnf], |
| structure: { |
| commonEventHeader: {presence: required, structure: { |
| domain: {presence: required, value: heartbeat}, |
| eventName: {presence: required, value: Heartbeat\_vMrf}, |
| eventId: {presence: required}, |
| nfNamingCode: {value: mrfx}, |
| priority: {presence: required, value: Normal}, |
| reportingEntityId: {presence: required}, |
| reportingEntityName: {presence: required}, |
| sequence: {presence: required}, |
| sourceId: {presence: required}, |
| sourceName: {presence: required}, |
| startEpochMicrosec: {presence: required}, |
| lastEpochMicrosec: {presence: required}, |
| version: {presence: required, value: 3.0} |
| }}, |
| heartbeatFields: {presence: optional, structure:{ |
| heartbeatFieldsVersion: {presence: required, value: 1.0}, |
| heartbeatInterval: {presence: required, range: [ 15, 300 ], default: 60 } |
| }} |
| }} |
| |
| ... |
| |
| --- |
| # registration for Mfvs\_vMRF |
| # Constants: the values of domain, eventName, priority, version, |
| # measurementFieldsVersion, additionalMeasurements.namedArrayOfFields.name, |
| # Variables (to be supplied at runtime) include: eventId, reportingEntityName, sequence, |
| # sourceName, start/lastEpochMicrosec, measurementInterval, |
| # concurrentSessions, requestRate, numberOfMediaPortsInUse, |
| # cpuUsageArray.cpuUsage,cpuUsage.cpuIdentifier, cpuUsage.percentUsage, |
| # additionalMeasurements.namedArrayOfFields.arrayOfFields, |
| # vNicPerformance.receivedOctetsAccumulated, |
| # vNicPerformance.transmittedOctetsAccumulated, |
| # vNicPerformance.receivedTotalPacketsAccumulated, |
| # vNicPerformance.transmittedTotalPacketsAccumulated, |
| # vNicPerformance.vNicIdentifier, vNicPerformance.receivedOctetsDelta, |
| # vNicPerformance.receivedTotalPacketsDelta, |
| # vNicPerformance.transmittedOctetsDelta, |
| # vNicPerformance.transmittedTotalPacketsDelta, |
| # vNicPerformance.valuesAreSuspect, memoryUsageArray.memoryUsage, |
| # memoryUsage.memoryConfigured, memoryUsage.vmIdentifier, |
| # memoryUsage.memoryUsed, memoryUsage.memoryFree |
| event: {presence: required, structure: { |
| commonEventHeader: {presence: required, structure: { |
| domain: {presence: required, value: measurementsForVfScaling}, |
| eventName: {presence: required, value: Mfvs\_vMrf}, |
| eventId: {presence: required}, |
| nfNamingCode: {value: mrfx}, |
| priority: {presence: required, value: Normal}, |
| reportingEntityId: {presence: required}, |
| reportingEntityName: {presence: required}, |
| sequence: {presence: required}, |
| sourceId: {presence: required}, |
| sourceName: {presence: required}, |
| startEpochMicrosec: {presence: required}, |
| lastEpochMicrosec: {presence: required}, |
| version: {presence: required, value: 3.0} |
| }}, |
| measurementsForVfScalingFields: {presence: required, structure: { |
| measurementFieldsVersion: {presence: required, value: 2.0}, |
| measurementInterval: {presence: required, range: [ 60, 3600 ], default:300}, |
| concurrentSessions: {presence: required, range: [ 0, 100000 ]}, |
| requestRate: {presence: required, range: [ 0, 100000 ]}, |
| numberOfMediaPortsInUse: {presence: required, range: [ 0, 100000 ]}, |
| cpuUsageArray: {presence: required, array: [ |
| cpuUsage: {presence: required, structure: { |
| cpuIdentifier: {presence: required}, |
| percentUsage: {presence: required, range: [ 0, 100 ], |
| action: [80, up, CpuUsageHigh, RECO-scaleOut], |
| action: [10, down, CpuUsageLow, RECO-scaleIn]} |
| }} |
| ]}, |
| memoryUsageArray: {presence: required, array: [ |
| memoryUsage: {presence: required, structure: { |
| memoryConfigured: {presence: required, value: 33554432}, |
| memoryFree: {presence: required, range: [ 0, 33554432 ], |
| action: [100, down, FreeMemLow, RECO-scaleOut], |
| action: [30198989, up, FreeMemHigh, RECO-scaleIn]}, |
| memoryUsed: {presence: required, range: [ 0, 33554432 ]}, |
| vmIdentifier: {presence: required} |
| }} |
| ]}, |
| additionalMeasurements: {presence: required, array: [ |
| namedArrayOfFields: {presence: required, structure: { |
| name: {presence: required, value: licenseUsage}, |
| arrayOfFields: {presence: required, array: [ |
| field: {presence: required, structure: { |
| name: {presence: required, value: G711AudioPort}, |
| value: {presence: required, range: [ 0, 100000 ], |
| units: numberOfPorts } |
| }}, |
| field: {presence: required, structure: { |
| name: {presence: required, value: G729AudioPort}, |
| value: {presence: required, range: [ 0, 100000 ], |
| units: numberOfPorts } |
| }}, |
| field: {presence: required, structure: { |
| name: {presence: required, value: G722AudioPort}, |
| value: {presence: required, range: [ 0, 100000 ], |
| units: numberOfPorts } |
| }}, |
| field: {presence: required, structure: { |
| name: {presence: required, value: AMRAudioPort}, |
| value: {presence: required, range: [ 0, 100000 ], |
| units: numberOfPorts } |
| }}, |
| field: {presence: required, structure: { |
| name: {presence: required, value: AMRWBAudioPort}, |
| value: {presence: required, range: [ 0, 100000 ], |
| units: numberOfPorts } |
| }}, |
| field: {presence: required, structure: { |
| name: {presence: required, value: OpusAudioPort}, |
| value: {presence: required, range: [ 0, 100000 ], |
| units: numberOfPorts } |
| }}, |
| field: {presence: required, structure: { |
| name: {presence: required, value: H263VideoPort}, |
| value: {presence: required, range: [ 0, 100000 ], |
| units: numberOfPorts } |
| }}, |
| field: {presence: required, structure: { |
| name: {presence: required, value: H264NonHCVideoPort}, |
| value: {presence: required, range: [ 0, 100000 ], |
| units: numberOfPorts } |
| }}, |
| field: {presence: required, structure: { |
| name: {presence: required, value: H264HCVideoPort}, |
| value: {presence: required, range: [ 0, 100000 ], |
| units: numberOfPorts } |
| }}, |
| field: {presence: required, structure: { |
| name: {presence: required, value: MPEG4VideoPort}, |
| value: {presence: required, range: [ 0, 100000 ], |
| units: numberOfPorts } |
| }}, |
| field: {presence: required, structure: { |
| name: {presence: required, value: VP8NonHCVideoPort}, |
| value: {presence: required, range: [ 0, 100000 ], |
| units: numberOfPorts } |
| }}, |
| field: {presence: required, structure: { |
| name: {presence: required, value: VP8HCVideoPort}, |
| value: {presence: required, range: [ 0, 100000 ], |
| units: numberOfPorts } |
| }}, |
| field: {presence: required, structure: { |
| name: {presence: required, value: PLC}, |
| value: {presence: required, range: [ 0, 100000 ], |
| units: numberOfPorts } |
| }}, |
| field: {presence: required, structure: { |
| name: {presence: required, value: AEC}, |
| value: {presence: required, range: [ 0, 100000 ], |
| units: numberOfPorts } |
| }}, |
| field: {presence: required, structure: { |
| name: {presence: required, value: NR}, |
| value: {presence: required, range: [ 0, 100000 ], |
| units: numberOfPorts } |
| }}, |
| field: {presence: required, structure: { |
| name: {presence: required, value: NG}, |
| value: {presence: required, range: [ 0, 100000 ], |
| units: numberOfPorts } |
| }}, |
| field: {presence: required, structure: { |
| name: {presence: required, value: NLD}, |
| value: {presence: required, range: [ 0, 100000 ], |
| units: numberOfPorts } |
| }}, |
| field: {presence: required, structure: { |
| name: {presence: required, value: G711FaxPort}, |
| value: {presence: required, range: [ 0, 100000 ], |
| units: numberOfPorts } |
| }}, |
| field: {presence: required, structure: { |
| name: {presence: required, value: T38FaxPort}, |
| value: {presence: required, range: [ 0, 100000 ], |
| units: numberOfPorts } |
| }}, |
| field: {presence: required, structure: { |
| name: {presence: required, value: RFactor}, |
| value: {presence: required, range: [ 0, 100000 ], |
| units: numberOfPorts } |
| }}, |
| field: {presence: required, structure: { |
| name: {presence: required, value: T140TextPort}, |
| value: {presence: required, range: [ 0, 100000 ], |
| units: numberOfPorts } |
| }}, |
| field: {presence: required, structure: { |
| name: {presence: required, value: EVSAudioPort}, |
| value: {presence: required, range: [ 0, 100000 ], |
| units: numberOfPorts } |
| }} |
| ]} |
| }}, |
| namedArrayOfFields: {presence: required, structure: { |
| name: {presence: required, value: mediaCoreUtilization}, |
| arrayOfFields: {presence: required, array: [ |
| field: {presence: required, structure: { |
| name: {presence: required, value: actualAvgAudio}, |
| value: {presence: required, range: [ 0, 255 ], |
| action: [80, up, AudioCoreUsageHigh, RECO-scaleOut], |
| action: [10, down, AudioCoreUsageLow, RECO-scaleIn]} |
| }}, |
| field: {presence: required, structure: { |
| name: {presence: required, value: modelAvgAudio}, |
| value: {presence: required, range: [ 0, 100 ], |
| action: [80, up, AudioCoreUsageHigh, RECO-scaleOut], |
| action: [10, down, AudioCoreUsageLow, RECO-scaleIn]} |
| }}, |
| field: {presence: required, structure: { |
| name: {presence: required, value: actualMaxAudio}, |
| value: {presence: required, range: [ 0, 255 ]} |
| }}, |
| field: {presence: required, structure: { |
| name: {presence: required, value: modelMaxAudio}, |
| value: {presence: required, range: [ 0, 100 ]} |
| }}, |
| field: {presence: required, structure: { |
| name: {presence: required, value: actualAvgVideo}, |
| value: {presence: required, range: [ 0, 255 ], |
| action: [80, up, VideoCoreUsageHigh, RECO-scaleOut], |
| action: [10, down, VideoCoreUsageLow, RECO-scaleIn]} |
| }}, |
| field: {presence: required, structure: { |
| name: {presence: required, value: modelAvgVideo}, |
| value: {presence: required, range: [ 0, 100 ], |
| action: [80, up, VideoCoreUsageHigh, RECO-scaleOut], |
| action: [10, down, VideoCoreUsageLow, RECO-scaleIn]} |
| }}, |
| field: {presence: required, structure: { |
| name: {presence: required, value: actualMaxVideo}, |
| value: {presence: required, range: [ 0, 255 ]} |
| }}, |
| field: {presence: required, structure: { |
| name: {presence: required, value: modelMaxVideo}, |
| value: {presence: required, range: [ 0, 100 ]} |
| }}, |
| field: {presence: required, structure: { |
| name: {presence: required, value: actualAvgHcVideo}, |
| value: {presence: required, range: [ 0, 255 ], |
| action: [80, up, HcVideoCoreUsageHigh, RECO-scaleOut], |
| action: [10, down, HcVideoCoreUsageLow, RECO-scaleIn]} |
| }}, |
| field: {presence: required, structure: { |
| name: {presence: required, value: modelAvgHcVideo}, |
| value: {presence: required, range: [ 0, 100 ], |
| action: [80, up, HcVideoCoreUsageHigh, RECO-scaleOut], |
| action: [10, down, HcVideoCoreUsageLow, RECO-scaleIn]} |
| }}, |
| field: {presence: required, structure: { |
| name: {presence: required, value: actualMaxHcVideo}, |
| value: {presence: required, range: [ 0, 255 ]} |
| }}, |
| field: {presence: required, structure: { |
| name: {presence: required, value: modelMaxHcVideo}, |
| value: {presence: required, range: [ 0, 100 ]} |
| }} |
| ]} |
| }} |
| ]}, |
| vNicPerformanceArray: {presence: required, array: [ |
| vNicPerformance: {presence: required, structure: { |
| receivedOctetsAccumulated: {presence: required, |
| range: [ 0, 18446744073709551615 ]}, |
| receivedTotalPacketsAccumulated: {presence: required, |
| range: [ 0, 18446744073709551615 ]}, |
| receivedOctetsDelta: {presence: required}, |
| range: [ 0, 18446744073709551615 ], |
| receivedTotalPacketsDelta: {presence: required, |
| range: [ 0, 18446744073709551615 ]}, |
| transmittedOctetsDelta: {presence: required, |
| range: [ 0, 18446744073709551615 ]}, |
| transmittedOctetsAccumulated: {presence: required, |
| range: [ 0, 18446744073709551615 ]}, |
| transmittedTotalPacketsAccumulated: {presence: required, |
| range: [ 0, 18446744073709551615 ]}, |
| transmittedTotalPacketsDelta: {presence: required, |
| range: [ 0, 18446744073709551615 ]}, |
| valuesAreSuspect: {presence: required, value: [ true, false ]}, |
| vNicIdentifier: {presence: required} |
| }} |
| ]} |
| }} |
| }} |
| |
| ... |
| |
| --- |
| # registration for Syslog\_vMRF |
| # Constants: the values of domain, eventName, priority, lastEpochMicrosec, version, |
| # syslogFields.syslogFieldsVersion, syslogFields.syslogTag |
| # Variables include: eventId, lastEpochMicrosec, reportingEntityId, reportingEntityName, |
| # sequence, sourceId, sourceName, startEpochMicrosec, |
| # syslogFields.eventSourceHost, syslogFields.eventSourceType, |
| # syslogFields.syslogFacility, syslogFields.syslogMsg |
| event: {presence: required, structure: { |
| commonEventHeader: {presence: required, structure: { |
| domain: {presence: required, value: syslog}, |
| eventName: {presence: required, value: Syslog\_vMrf}, |
| eventId: {presence: required}, |
| nfNamingCode: {value: mrfx}, |
| priority: {presence: required, value: Normal}, |
| reportingEntityId: {presence: required}, |
| reportingEntityName: {presence: required}, |
| sequence: {presence: required}, |
| sourceId: {presence: required}, |
| sourceName: {presence: required}, |
| startEpochMicrosec: {presence: required}, |
| lastEpochMicrosec: {presence: required}, |
| version: {presence: required, value: 3.0}, |
| }}, |
| syslogFields: {presence: required, structure: { |
| eventSourceHost: {presence: required}, |
| eventSourceType: {presence: required, value: virtualNetworkFunction}, |
| syslogFacility: {presence: required, range: [16, 23]}, |
| syslogSev: {presence: required, value: [ 0, 1, 2, 3, 4 ]}, |
| syslogFieldsVersion: {presence: required, value: 3.0}, |
| syslogMsg: {presence: required}, |
| syslogTag: {presence: required, value: vMRF}, |
| }} |
| }} |
| |
| ... |
| |
| --- |
| #Rules |
| Rules: [ |
| rule: { |
| trigger: CpuUsageHigh \|\| FreeMemLow \|\| AudioCoreUsageHigh \|\| |
| VideoCoreUsageHigh \|\| HcVideoCoreUsageHigh, |
| microservices: [scaleOut] |
| }, |
| rule: { |
| trigger: CpuUsageLow && FreeMemHigh && AudioCoreUsageLow && |
| VideoCoreUsageLow && HcVideoCoreUsageLow, |
| microservices: [scaleIn] |
| } |
| ] |
| |
| |