Merge "Add docs for cnf auto heal and scale"
This commit is contained in:
commit
2b93c31c40
@ -21,4 +21,7 @@ NFV Orchestration API v2.0
|
||||
|
||||
v1/vnflcm_versions
|
||||
v2/vnflcm
|
||||
v2/vnffm
|
||||
v2/vnfpm
|
||||
v2/prometheus_plugin
|
||||
v2/fault_notification
|
||||
|
@ -72,6 +72,11 @@
|
||||
and none of the range-specifier values in this field overlap the current
|
||||
extent of the selected resource, and the request did not include an
|
||||
If-Range request-header field.
|
||||
422:
|
||||
default: |
|
||||
The content type of the payload body is supported and the payload body of a
|
||||
request contains syntactically correct data (e.g. well-formed JSON) but the data
|
||||
cannot be processed (e.g. because it fails validation against a schema).
|
||||
500:
|
||||
default: |
|
||||
Something went wrong inside the service. This should not happen usually.
|
||||
|
150
api-ref/source/v2/parameters_prometheus_plugin.yaml
Normal file
150
api-ref/source/v2/parameters_prometheus_plugin.yaml
Normal file
@ -0,0 +1,150 @@
|
||||
alert:
|
||||
description: alert message
|
||||
in: body
|
||||
required: true
|
||||
type: array(inlined)
|
||||
annotations:
|
||||
description: |
|
||||
dynamic properties.
|
||||
in: body
|
||||
required: true
|
||||
type: object (inlined)
|
||||
aspect_id:
|
||||
description: |
|
||||
aspectId of the scaling target.
|
||||
in: body
|
||||
required: true
|
||||
type: string
|
||||
auto_scale_type:
|
||||
description: |
|
||||
'SCALE_OUT' for scaling out, 'SCALE_IN' for scaling in.
|
||||
in: body
|
||||
required: true
|
||||
type: string
|
||||
endsAt:
|
||||
description: |
|
||||
alert expiration time.
|
||||
in: body
|
||||
required: true
|
||||
type: string
|
||||
event_type:
|
||||
description: |
|
||||
eventType value defined in ETSI FM interface.
|
||||
in: body
|
||||
required: true
|
||||
type: string
|
||||
fault_details:
|
||||
description: |
|
||||
faultDetails defined in ETSI FM interface.
|
||||
in: body
|
||||
required: true
|
||||
type: string
|
||||
fault_type:
|
||||
description: |
|
||||
faultType defined in ETSI FM interface.
|
||||
in: body
|
||||
required: true
|
||||
type: string
|
||||
fingerprint:
|
||||
description: |
|
||||
id to identify alert.
|
||||
in: body
|
||||
required: true
|
||||
type: string
|
||||
function_type_auto_scale:
|
||||
description: |
|
||||
must be "auto_scale".
|
||||
in: body
|
||||
required: true
|
||||
type: string
|
||||
function_type_fm:
|
||||
description: |
|
||||
must be "vnffm".
|
||||
in: body
|
||||
required: true
|
||||
type: string
|
||||
function_type_pm:
|
||||
description: |
|
||||
must be "vnfpm".
|
||||
in: body
|
||||
required: true
|
||||
type: string
|
||||
job_id:
|
||||
description: |
|
||||
PM job id defined in ETSI PM interface.
|
||||
in: body
|
||||
required: true
|
||||
type: string
|
||||
labels:
|
||||
description: |
|
||||
static properties.
|
||||
in: body
|
||||
required: true
|
||||
type: object (inlined)
|
||||
metric:
|
||||
description: |
|
||||
PerformanceMetric defined in ETSI PM interface.
|
||||
in: body
|
||||
required: true
|
||||
type: string
|
||||
object_instance_id:
|
||||
description: |
|
||||
objectInstanceId defined in ETSI PM interface.
|
||||
in: body
|
||||
required: true
|
||||
type: string
|
||||
perceived_severity:
|
||||
description: |
|
||||
perceivedSeverity value defined in ETSI FM interface.
|
||||
in: body
|
||||
required: true
|
||||
type: string
|
||||
pod:
|
||||
description: |
|
||||
Regex string that matches pods of Healing target.
|
||||
For example, 'test\-test1\-[0-9a-f]{1,10}-[0-9a-z]{5}'
|
||||
in: body
|
||||
required: true
|
||||
type: string
|
||||
probable_cause:
|
||||
description: |
|
||||
probableCause defined in ETSI FM interface.
|
||||
in: body
|
||||
required: true
|
||||
type: string
|
||||
receiver_type:
|
||||
description: |
|
||||
must be "tacker".
|
||||
in: body
|
||||
required: true
|
||||
type: string
|
||||
startsAt:
|
||||
description: |
|
||||
alert firing time.
|
||||
in: body
|
||||
required: true
|
||||
type: string
|
||||
status:
|
||||
description: |
|
||||
'firing': alert is fired, 'resolved': alert is cleared.
|
||||
in: body
|
||||
required: true
|
||||
type: String
|
||||
sub_object_instance_id:
|
||||
description: |
|
||||
subObjectInstanceId defined in ETSI PM interface.
|
||||
in: body
|
||||
required: true
|
||||
type: string
|
||||
value:
|
||||
description: |
|
||||
aspectId of the scaling target.
|
||||
in: body
|
||||
required: true
|
||||
type: number
|
||||
vnf_instance_id:
|
||||
description: |
|
||||
Vnf Instance id.
|
||||
in: body
|
||||
required: true
|
||||
type: string
|
335
api-ref/source/v2/parameters_vnffm.yaml
Normal file
335
api-ref/source/v2/parameters_vnffm.yaml
Normal file
@ -0,0 +1,335 @@
|
||||
# variables in header
|
||||
alarm_id_path:
|
||||
description: |
|
||||
Identifier of this Alarm information element.
|
||||
in: path
|
||||
required: true
|
||||
type: string
|
||||
subscription_id_path:
|
||||
description: |
|
||||
Identifier of this subscription.
|
||||
in: path
|
||||
required: true
|
||||
type: string
|
||||
|
||||
# variables in body
|
||||
ack_state:
|
||||
description: |
|
||||
Acknowledgement state of the alarm. Permitted values: UNACKNOWLEDGED,
|
||||
ACKNOWLEDGED.
|
||||
in: body
|
||||
required: true
|
||||
type: string
|
||||
alarm_acknowledged_time:
|
||||
description: |
|
||||
Time stamp indicating when the alarm was acknowledged. It shall be present
|
||||
if the alarm has been acknowledged.
|
||||
in: body
|
||||
required: false
|
||||
type: string
|
||||
alarm_changed_time:
|
||||
description: |
|
||||
Time stamp indicating when the alarm was last changed. It shall be present
|
||||
if the alarm has been updated.
|
||||
in: body
|
||||
required: false
|
||||
type: string
|
||||
alarm_cleared_time:
|
||||
description: |
|
||||
Time stamp indicating when the alarm was cleared. It shall be present if
|
||||
the alarm has been cleared.
|
||||
in: body
|
||||
required: false
|
||||
type: string
|
||||
alarm_id:
|
||||
description: |
|
||||
Identifier of this Alarm information element.
|
||||
in: body
|
||||
required: true
|
||||
type: string
|
||||
alarm_links:
|
||||
description: |
|
||||
Links for this resource.
|
||||
in: body
|
||||
required: true
|
||||
type: array
|
||||
alarm_raised_time:
|
||||
description: |
|
||||
Time stamp indicating when the alarm is raised by the managed object.
|
||||
in: body
|
||||
required: true
|
||||
type: string
|
||||
alarm_self:
|
||||
description: |
|
||||
URI of this resource.
|
||||
in: body
|
||||
required: true
|
||||
type: object
|
||||
authentication:
|
||||
description: |
|
||||
Authentication parameters to configure the use of Authorization when
|
||||
sending notifications corresponding to this subscription.
|
||||
in: body
|
||||
required: false
|
||||
type: string
|
||||
callback_uri:
|
||||
description: |
|
||||
The URI of the endpoint to send the notification to.
|
||||
in: body
|
||||
required: true
|
||||
type: string
|
||||
correlated_alarm_ids:
|
||||
description: |
|
||||
List of identifiers of other alarms correlated to this fault.
|
||||
in: body
|
||||
required: false
|
||||
type: string
|
||||
event_time:
|
||||
description: |
|
||||
Time stamp indicating when the fault was observed.
|
||||
in: body
|
||||
required: true
|
||||
type: string
|
||||
event_type:
|
||||
description: |
|
||||
Type of event.
|
||||
in: body
|
||||
required: true
|
||||
type: object
|
||||
fault_details:
|
||||
description: |
|
||||
Provides additional information about the fault.
|
||||
in: body
|
||||
required: false
|
||||
type: string
|
||||
fault_type:
|
||||
description: |
|
||||
Additional information to clarify the type of the fault.
|
||||
in: body
|
||||
required: false
|
||||
type: string
|
||||
faulty_resource:
|
||||
description: |
|
||||
Information that identifies the faulty resource instance and its managing
|
||||
entity.
|
||||
in: body
|
||||
required: true
|
||||
type: object
|
||||
faulty_resource_id:
|
||||
description: |
|
||||
Identifier of the resource in the scope of the VIM or the resource provider.
|
||||
in: body
|
||||
required: true
|
||||
type: string
|
||||
faulty_resource_info:
|
||||
description: |
|
||||
The virtualised resources that are causing the VNF fault. Shall be present
|
||||
if the alarm affects virtualised resources.
|
||||
in: body
|
||||
required: false
|
||||
type: object
|
||||
faulty_resource_provider_id:
|
||||
description: |
|
||||
Identifier of the entity responsible for the management of the resource.
|
||||
This attribute shall only be supported and present when VNF-related
|
||||
resource management in indirect mode is applicable. The identification
|
||||
scheme is outside the scope of the present document.
|
||||
in: body
|
||||
required: false
|
||||
type: string
|
||||
faulty_resource_type:
|
||||
description: |
|
||||
Type of the faulty resource. COMPUTE: Virtual compute resource, STORAGE:
|
||||
Virtual storage resource, NETWORK: Virtual network resource.
|
||||
in: body
|
||||
required: true
|
||||
type: object
|
||||
faulty_resource_vim_connection_id:
|
||||
description: |
|
||||
Identifier of the VIM connection to manage the resource. This attribute
|
||||
shall only be supported and present if VNFrelated resource management in
|
||||
direct mode is applicable. The applicable “VimConnectionInfo” structure,
|
||||
which is referenced by vimConnectionId, can be obtained from the
|
||||
“vimConnectionInfo” attribute of the “VnfInstance” structure.
|
||||
in: body
|
||||
required: false
|
||||
type: string
|
||||
faulty_resource_vim_level_resource_type:
|
||||
description: |
|
||||
Identifier of the resource in the scope of the VIM or the resource provider.
|
||||
in: body
|
||||
required: false
|
||||
type: string
|
||||
filter_event_types:
|
||||
description: |
|
||||
Match VNF alarms with an event type. COMMUNICATIONS_ALARM,
|
||||
PROCESSING_ERROR_ALARM, ENVIRONMENTAL_ALARM, QOS_ALARM, EQUIPMENT_ALARM.
|
||||
in: body
|
||||
required: false
|
||||
type: array
|
||||
filter_faulty_resource_types:
|
||||
description: |
|
||||
Match VNF alarms with a faulty resource type. COMPUTE, STORAGE, NETWORK.
|
||||
in: body
|
||||
required: false
|
||||
type: array
|
||||
filter_notification_types:
|
||||
description: |
|
||||
Match particular notification types. Permitted values: AlarmNotification,
|
||||
AlarmClearedNotification, AlarmListRebuiltNotification.
|
||||
in: body
|
||||
required: false
|
||||
type: array
|
||||
filter_perceived_severities:
|
||||
description: |
|
||||
Match VNF alarms with a perceived severity. CRITICAL,MAJOR,MINOR,WARNING,
|
||||
INDETERMINATE,CLEARED.
|
||||
in: body
|
||||
required: false
|
||||
type: array
|
||||
filter_probable_causes:
|
||||
description: |
|
||||
Match VNF alarms with a probable cause listed in this attribute.
|
||||
in: body
|
||||
required: false
|
||||
type: array
|
||||
filter_subscription_filter:
|
||||
description: |
|
||||
Filter criteria to select VNF instances about which to notify.
|
||||
in: body
|
||||
required: false
|
||||
type: object
|
||||
fm_notification_filter:
|
||||
description: |
|
||||
Filter settings for this subscription, to define the subset of all
|
||||
notifications this subscription relates to. A particular notification is
|
||||
sent to the subscriber if the filter matches, or if there is no filter.
|
||||
in: body
|
||||
required: false
|
||||
type: object
|
||||
is_root_cause:
|
||||
description: |
|
||||
Attribute indicating if this fault is the root of other correlated alarms.
|
||||
If true, then the alarms listed in the attribute “correlatedAlarmIds” are
|
||||
caused by this fault.
|
||||
in: body
|
||||
required: true
|
||||
type: bool
|
||||
managed_object_id:
|
||||
description: |
|
||||
Identifier of the affected VNF instance.
|
||||
in: body
|
||||
required: true
|
||||
type: string
|
||||
object_instance:
|
||||
description: |
|
||||
Link to the resource representing the VNF instance to which the notified
|
||||
alarm is correlated. Shall be present if the VNF instance information is
|
||||
accessible as a resource.
|
||||
in: body
|
||||
required: false
|
||||
type: object
|
||||
perceived_severity:
|
||||
description: |
|
||||
Perceived severity of the managed object failure. CRITICAL,MAJOR,MINOR,
|
||||
WARNING,INDETERMINATE,CLEARED.
|
||||
in: body
|
||||
required: true
|
||||
type: object
|
||||
probable_cause:
|
||||
description: |
|
||||
Information about the probable cause of the fault.
|
||||
in: body
|
||||
required: true
|
||||
type: string
|
||||
products_versions:
|
||||
description: |
|
||||
If present, match VNF instances that belong to VNF products with certain
|
||||
versions and a certain product name, from one particular provider.
|
||||
in: body
|
||||
required: false
|
||||
type: array
|
||||
products_vnf_product_name:
|
||||
description: |
|
||||
Name of the VNF product to match.
|
||||
in: body
|
||||
required: true
|
||||
type: string
|
||||
subscription_filter_vnf_instance_ids:
|
||||
description: |
|
||||
If present, match VNF instances with an instance identifier listed in this
|
||||
attribute.
|
||||
in: body
|
||||
required: false
|
||||
type: array
|
||||
subscription_filter_vnf_instance_names:
|
||||
description: |
|
||||
If present, match VNF instances with a VNF Instance Name listed in this
|
||||
attribute.
|
||||
in: body
|
||||
required: false
|
||||
type: array
|
||||
subscription_filter_vnf_products_from_providers:
|
||||
description: |
|
||||
If present, match VNF instances that belong to VNF products from certain
|
||||
providers.
|
||||
in: body
|
||||
required: false
|
||||
type: array
|
||||
subscription_filter_vnfd_ids:
|
||||
description: |
|
||||
If present, match VNF instances that were created based on a VNFD
|
||||
identified by one of the vnfdId values listed in this attribute.
|
||||
in: body
|
||||
required: false
|
||||
type: array
|
||||
subscription_id:
|
||||
description: |
|
||||
Identifier of this subscription.
|
||||
in: body
|
||||
required: true
|
||||
type: string
|
||||
subscription_links:
|
||||
description: |
|
||||
Links for this resource.
|
||||
in: body
|
||||
required: true
|
||||
type: array
|
||||
subscription_self:
|
||||
description: |
|
||||
URI of this resource.
|
||||
in: body
|
||||
required: true
|
||||
type: object
|
||||
versions_vnf_software_version:
|
||||
description: |
|
||||
Software version to match.
|
||||
in: body
|
||||
required: true
|
||||
type: object
|
||||
versions_vnfd_versions:
|
||||
description: |
|
||||
Software version to match.
|
||||
in: body
|
||||
required: false
|
||||
type: array
|
||||
vnf_products_from_providers_vnf_products:
|
||||
description: |
|
||||
If present, match VNF instances that belong to VNF products from certain
|
||||
providers.
|
||||
in: body
|
||||
required: false
|
||||
type: array
|
||||
vnf_products_from_providers_vnf_provider:
|
||||
description: |
|
||||
If present, match VNF instances that belong to VNF products from certain
|
||||
providers.
|
||||
in: body
|
||||
required: true
|
||||
type: string
|
||||
vnfc_instance_ids:
|
||||
description: |
|
||||
Identifiers of the affected VNFC instances.
|
||||
in: body
|
||||
required: false
|
||||
type: array
|
292
api-ref/source/v2/parameters_vnfpm.yaml
Normal file
292
api-ref/source/v2/parameters_vnfpm.yaml
Normal file
@ -0,0 +1,292 @@
|
||||
# variables in header
|
||||
vnf_pm_job_id:
|
||||
description: |
|
||||
Identifier of this PM job.
|
||||
in: path
|
||||
required: true
|
||||
type: string
|
||||
|
||||
vnf_pm_job_report_id:
|
||||
description: |
|
||||
Identifier of this PM job report.
|
||||
in: path
|
||||
required: true
|
||||
type: string
|
||||
|
||||
# variables in body
|
||||
authentication_auth_type:
|
||||
description: |
|
||||
Defines the types of Authentication/Authorization which
|
||||
the API consumer is willing to accept when receiving a
|
||||
notification.
|
||||
Permitted values:
|
||||
|
||||
BASIC: In every HTTP request to the
|
||||
notification endpoint, use HTTP Basic
|
||||
authentication with the client credentials.
|
||||
|
||||
OAUTH2_CLIENT_CREDENTIALS: In every
|
||||
HTTP request to the notification endpoint, use
|
||||
an OAuth 2.0 bearer token, obtained using the
|
||||
client credentials grant type.
|
||||
|
||||
TLS_CERT: Every HTTP request to the
|
||||
notification endpoint is sent over a mutually
|
||||
authenticated TLS session, i.e. not only the
|
||||
server is authenticated, but also the client is
|
||||
authenticated during the TLS tunnel setup.
|
||||
in: body
|
||||
required: true
|
||||
type: array
|
||||
authentication_params_basic:
|
||||
description: |
|
||||
Parameters for authentication/authorization using BASIC.
|
||||
Shall be present if authType is "BASIC" and the
|
||||
contained information has not been provisioned out of
|
||||
band. Shall be absent otherwise.
|
||||
in: body
|
||||
required: false
|
||||
type: object
|
||||
authentication_params_oauth2_client_credentials:
|
||||
description: |
|
||||
Parameters for authentication/authorization using
|
||||
OAUTH2_CLIENT_CREDENTIALS.
|
||||
Shall be present if authType is
|
||||
"OAUTH2_CLIENT_CREDENTIALS" and the contained
|
||||
information has not been provisioned out of band.
|
||||
Shall be absent otherwise.
|
||||
in: body
|
||||
required: false
|
||||
type: object
|
||||
criteria_collection_period:
|
||||
description: |
|
||||
Specifies the periodicity at which the API producer will collect
|
||||
performance information. The unit shall be seconds.
|
||||
in: body
|
||||
required: true
|
||||
type: integer
|
||||
criteria_performance_metric:
|
||||
description: |
|
||||
This defines the types of performance metrics for the specified object
|
||||
instances. At least one of the two attributes (performance metric or
|
||||
group) shall be present.
|
||||
in: body
|
||||
required: false
|
||||
type: array
|
||||
criteria_performance_metric_group:
|
||||
description: |
|
||||
Group of performance metrics. A metric group is a pre-defined list of
|
||||
metrics, known to the API producer that it can decompose to individual
|
||||
metrics. At least one of the two attributes (performance metric or group)
|
||||
shall be present.
|
||||
in: body
|
||||
required: false
|
||||
type: array
|
||||
criteria_reporting_boundary:
|
||||
description: |
|
||||
Identifies a time boundary after which the reporting will stop. The
|
||||
boundary shall allow a single reporting as well as periodic reporting up
|
||||
to the boundary(format:date-time).
|
||||
in: body
|
||||
required: false
|
||||
type: string
|
||||
criteria_reporting_period:
|
||||
description: |
|
||||
Specifies the periodicity at which the API producer will report to the API
|
||||
consumer. about performance information. The unit shall be seconds. The
|
||||
reportingPeriod should be equal to or a multiple of the collectionPeriod.
|
||||
in: body
|
||||
required: true
|
||||
type: integer
|
||||
links_objects:
|
||||
description: |
|
||||
Links to resources representing the measured object instances for which
|
||||
performance information is collected. Shall be present if the measured
|
||||
object instance information is accessible as a resource.
|
||||
in: body
|
||||
required: false
|
||||
type: array
|
||||
links_self:
|
||||
description: |
|
||||
URI of this resource.
|
||||
in: body
|
||||
required: true
|
||||
type: object
|
||||
params_oauth2_client_credentials_client_id:
|
||||
description: |
|
||||
Client identifier to be used in the access token request
|
||||
of the OAuth 2.0 client credentials grant type. Shall be
|
||||
present if it has not been provisioned out of band.
|
||||
in: body
|
||||
required: false
|
||||
type: string
|
||||
params_oauth2_client_credentials_client_password:
|
||||
description: |
|
||||
Client password to be used in the access token request
|
||||
of the OAuth 2.0 client credentials grant type. Shall be
|
||||
present if it has not been provisioned out of band.
|
||||
in: body
|
||||
required: false
|
||||
type: string
|
||||
params_oauth2_client_credentials_token_endpoint:
|
||||
description: |
|
||||
The token endpoint from which the access token can be
|
||||
obtained. Shall be present if it has not been provisioned
|
||||
out of band.
|
||||
in: body
|
||||
required: false
|
||||
type: string
|
||||
paramsBasic_password:
|
||||
description: |
|
||||
Password to be used in HTTP Basic authentication.
|
||||
Shall be present if it has not been provisioned out of band.
|
||||
in: body
|
||||
required: false
|
||||
type: string
|
||||
paramsBasic_userName:
|
||||
description: |
|
||||
Username to be used in HTTP Basic authentication.
|
||||
Shall be present if it has not been provisioned out of band.
|
||||
in: body
|
||||
required: false
|
||||
type: string
|
||||
performance_values_context:
|
||||
description: |
|
||||
Measurement context information related to the measured value.
|
||||
in: body
|
||||
required: false
|
||||
type: key value pairs
|
||||
performance_values_time_stamp:
|
||||
description: |
|
||||
Time stamp indicating when the data has been collected.
|
||||
in: body
|
||||
required: true
|
||||
type: string
|
||||
performance_values_value:
|
||||
description: |
|
||||
Value of the metric collected.
|
||||
in: body
|
||||
required: true
|
||||
type: string
|
||||
pm_job_links:
|
||||
description: |
|
||||
Links for this resource.
|
||||
in: body
|
||||
required: true
|
||||
type: array
|
||||
reports_expiry_time:
|
||||
description: |
|
||||
The time when the report will expire.
|
||||
in: body
|
||||
required: false
|
||||
type: string
|
||||
reports_file_size:
|
||||
description: |
|
||||
The size of the report file in bytes, if known.
|
||||
in: body
|
||||
required: false
|
||||
type: integer
|
||||
reports_href:
|
||||
description: |
|
||||
The URI where the report can be obtained.
|
||||
in: body
|
||||
required: true
|
||||
type: string
|
||||
reports_ready_time:
|
||||
description: |
|
||||
The time when the report was made available.
|
||||
in: body
|
||||
required: true
|
||||
type: string
|
||||
vnf_pm_job_create_callback_uri:
|
||||
description: |
|
||||
The URI of the endpoint to send the notification to.
|
||||
in: body
|
||||
required: true
|
||||
type: string
|
||||
vnf_pm_job_create_criteria:
|
||||
description: |
|
||||
Criteria of the collection of performance information.
|
||||
in: body
|
||||
required: true
|
||||
type: object
|
||||
vnf_pm_job_create_metadata:
|
||||
description: |
|
||||
This attribute provides the access information of Prometheus Server.
|
||||
in: body
|
||||
required: false
|
||||
type: key value pairs
|
||||
vnf_pm_job_create_object_instance_ids:
|
||||
description: |
|
||||
Identifiers of the measured object instances for which performance
|
||||
information is requested to be collected.
|
||||
in: body
|
||||
required: true
|
||||
type: array
|
||||
vnf_pm_job_create_object_type:
|
||||
description: |
|
||||
Type of the measured object.
|
||||
in: body
|
||||
required: true
|
||||
type: string
|
||||
vnf_pm_job_create_request_authentication:
|
||||
description: |
|
||||
Authentication parameters to configure the use of Authorization when
|
||||
sending notifications corresponding to this subscription.
|
||||
in: body
|
||||
required: false
|
||||
type: object
|
||||
vnf_pm_job_create_sub_object_instance_ids:
|
||||
description: |
|
||||
Identifiers of the measured object instances in case of a structured
|
||||
measured object.
|
||||
in: body
|
||||
required: false
|
||||
type: array
|
||||
vnf_pm_job_report_entries:
|
||||
description: |
|
||||
List of performance information entries.
|
||||
in: body
|
||||
required: true
|
||||
type: array
|
||||
vnf_pm_job_report_entries_object_instance_id:
|
||||
description: |
|
||||
Identifier of the measured object instance for which the performance metric
|
||||
is reported.
|
||||
in: body
|
||||
required: true
|
||||
type: string
|
||||
vnf_pm_job_report_entries_performance_metric:
|
||||
description: |
|
||||
Name of the metric collected.
|
||||
in: body
|
||||
required: true
|
||||
type: string
|
||||
vnf_pm_job_report_entries_performance_values:
|
||||
description: |
|
||||
List of performance values with associated timestamp.
|
||||
in: body
|
||||
required: true
|
||||
type: array
|
||||
vnf_pm_job_report_entries_sub_object_instance_id:
|
||||
description: |
|
||||
Identifier of the sub-object instance of the measured object instance for
|
||||
which the performance metric is reported.
|
||||
in: body
|
||||
required: false
|
||||
type: string
|
||||
vnf_pm_job_reports:
|
||||
description: |
|
||||
Information about available reports collected by this PM job.
|
||||
in: body
|
||||
required: false
|
||||
type: array
|
||||
vnf_pm_job_response_id:
|
||||
description: |
|
||||
Identifier of this PM job.
|
||||
in: body
|
||||
required: true
|
||||
type: string
|
||||
|
||||
|
||||
|
151
api-ref/source/v2/prometheus_plugin.inc
Normal file
151
api-ref/source/v2/prometheus_plugin.inc
Normal file
@ -0,0 +1,151 @@
|
||||
.. -*- rst -*-
|
||||
|
||||
===========================
|
||||
Prometheus Plugin Interface
|
||||
===========================
|
||||
|
||||
This interface is used for notifying alert that is detected by
|
||||
the External Monitoring Tool. The External Monitoring Tool is
|
||||
Prometheus based Monitoring system.
|
||||
|
||||
The Prometheus Plugin has 3 functions:
|
||||
|
||||
- Alerting interface for ETSI NFV-SOL 002/003 based Performance Management.
|
||||
- Alerting interface for ETSI NFV-SOL 002/003 based Fault Management.
|
||||
- Alerting interface for Prometheus Plugin AutoScaling.
|
||||
|
||||
Alerting interface for ETSI NFV-SOL 002/003 based Performance Management
|
||||
========================================================================
|
||||
|
||||
.. rest_method:: POST /pm_event
|
||||
|
||||
Alert Tacker when one or more Performance values are obtained.
|
||||
|
||||
Response Codes
|
||||
--------------
|
||||
|
||||
.. rest_status_code:: success status.yaml
|
||||
|
||||
- 204
|
||||
|
||||
.. rest_status_code:: error status.yaml
|
||||
|
||||
- 400
|
||||
- 404: prometheus_plugin_pm
|
||||
|
||||
Request Parameters
|
||||
------------------
|
||||
|
||||
.. rest_parameters:: parameters_prometheus_plugin.yaml
|
||||
|
||||
- alert: alert
|
||||
- \>status: status
|
||||
- \>labels: labels
|
||||
- \>\>receiver_type: receiver_type
|
||||
- \>\>function_type: function_type_pm
|
||||
- \>\>job_id: job_id
|
||||
- \>\>object_instance_id: object_instance_id
|
||||
- \>\>sub_object_instance_id: sub_object_instance_id
|
||||
- \>\>metric: metric
|
||||
- \>annotations: annotations
|
||||
- \>\>value: value
|
||||
- \>startsAt: startsAt
|
||||
- \>endsAt: endsAt
|
||||
- \>fingerprint: fingerprint
|
||||
|
||||
Request Example
|
||||
---------------
|
||||
|
||||
.. literalinclude:: samples/prometheus_plugin/alert_pm.json
|
||||
:language: javascript
|
||||
|
||||
|
||||
Alerting interface for ETSI NFV-SOL 002/003 based Fault Management
|
||||
==================================================================
|
||||
|
||||
.. rest_method:: POST /alert
|
||||
|
||||
Alert Tacker when one or more Fault event are obtained.
|
||||
|
||||
Response Codes
|
||||
--------------
|
||||
|
||||
.. rest_status_code:: success status.yaml
|
||||
|
||||
- 204
|
||||
|
||||
.. rest_status_code:: error status.yaml
|
||||
|
||||
- 400
|
||||
- 404: prometheus_plugin_fm
|
||||
|
||||
Request Parameters
|
||||
------------------
|
||||
|
||||
.. rest_parameters:: parameters_prometheus_plugin.yaml
|
||||
|
||||
- alert: alert
|
||||
- \>status: status
|
||||
- \>labels: labels
|
||||
- \>\>receiver_type: receiver_type
|
||||
- \>\>function_type: function_type_fm
|
||||
- \>\>vnf_instance_id: vnf_instance_id
|
||||
- \>\>pod: pod
|
||||
- \>\>perceived_severity: perceived_severity
|
||||
- \>\>event_type: event_type
|
||||
- \>annotations: annotations
|
||||
- \>\>probable_cause: probable_cause
|
||||
- \>\>fault_type: fault_type
|
||||
- \>\>fault_details: fault_details
|
||||
- \>startsAt: startsAt
|
||||
- \>endsAt: endsAt
|
||||
- \>fingerprint: fingerprint
|
||||
|
||||
Request Example
|
||||
---------------
|
||||
|
||||
.. literalinclude:: samples/prometheus_plugin/alert_fm.json
|
||||
:language: javascript
|
||||
|
||||
Alerting interface for Prometheus Plugin AutoScaling
|
||||
====================================================
|
||||
|
||||
.. rest_method:: POST /alert
|
||||
|
||||
Alert Tacker when scaling should be performed.
|
||||
|
||||
Response Codes
|
||||
--------------
|
||||
|
||||
.. rest_status_code:: success status.yaml
|
||||
|
||||
- 204
|
||||
|
||||
.. rest_status_code:: error status.yaml
|
||||
|
||||
- 400
|
||||
- 404: prometheus_plugin_auto_scale
|
||||
|
||||
Request Parameters
|
||||
------------------
|
||||
|
||||
.. rest_parameters:: parameters_prometheus_plugin.yaml
|
||||
|
||||
- alert: alert
|
||||
- \>status: status
|
||||
- \>labels: labels
|
||||
- \>\>receiver_type: receiver_type
|
||||
- \>\>function_type: function_type_auto_scale
|
||||
- \>\>vnf_instance_id: vnf_instance_id
|
||||
- \>\>auto_scale_type: auto_scale_type
|
||||
- \>\>aspect_id: aspect_id
|
||||
- \>annotations: annotations
|
||||
- \>startsAt: startsAt
|
||||
- \>endsAt: endsAt
|
||||
- \>fingerprint: fingerprint
|
||||
|
||||
Request Example
|
||||
---------------
|
||||
|
||||
.. literalinclude:: samples/prometheus_plugin/alert_auto_scale.json
|
||||
:language: javascript
|
9
api-ref/source/v2/prometheus_plugin.rst
Normal file
9
api-ref/source/v2/prometheus_plugin.rst
Normal file
@ -0,0 +1,9 @@
|
||||
:tocdepth: 2
|
||||
|
||||
########################################################################
|
||||
Prometheus Plugin Interface
|
||||
########################################################################
|
||||
|
||||
.. rest_expand_all::
|
||||
|
||||
.. include:: prometheus_plugin.inc
|
@ -0,0 +1,17 @@
|
||||
{
|
||||
"alerts": [{
|
||||
"status": "firing",
|
||||
"labels": {
|
||||
"receiver_type": "tacker",
|
||||
"function_type": "auto_scale",
|
||||
"vnf_instance_id": "503e635e-dcd8-4fae-9939-279af4c528b1",
|
||||
"auto_scale_type": "SCALE_OUT",
|
||||
"aspect_id": "VDU1"
|
||||
},
|
||||
"annotations": {
|
||||
},
|
||||
"startsAt": "2022-06-21T23:47:36.453Z",
|
||||
"endsAt": "0001-01-01T00:00:00Z",
|
||||
"fingerprint": "5ef77f1f8a3ecb8d"
|
||||
}]
|
||||
}
|
21
api-ref/source/v2/samples/prometheus_plugin/alert_fm.json
Normal file
21
api-ref/source/v2/samples/prometheus_plugin/alert_fm.json
Normal file
@ -0,0 +1,21 @@
|
||||
{
|
||||
"alerts": [{
|
||||
"status": "firing",
|
||||
"labels": {
|
||||
"receiver_type": "tacker",
|
||||
"function_type": "vnffm",
|
||||
"vnf_instance_id": "503e635e-dcd8-4fae-9939-279af4c528b1",
|
||||
"pod": "test\\-test1\\-[0-9a-f]{1,10}-[0-9a-z]{5}$",
|
||||
"perceived_severity": "CRITICAL",
|
||||
"event_type": "PROCESSING_ERROR_ALARM"
|
||||
},
|
||||
"annotations": {
|
||||
"probable_cause": "Server is down.",
|
||||
"fault_type": "Error",
|
||||
"fault_details": "Fault detail"
|
||||
},
|
||||
"startsAt": "2022-06-21T23:47:36.453Z",
|
||||
"endsAt": "0001-01-01T00:00:00Z",
|
||||
"fingerprint": "5ef77f1f8a3ecb8d"
|
||||
}]
|
||||
}
|
19
api-ref/source/v2/samples/prometheus_plugin/alert_pm.json
Normal file
19
api-ref/source/v2/samples/prometheus_plugin/alert_pm.json
Normal file
@ -0,0 +1,19 @@
|
||||
{
|
||||
"alerts": [{
|
||||
"status": "firing",
|
||||
"labels": {
|
||||
"receiver_type": "tacker",
|
||||
"function_type": "vnfpm",
|
||||
"job_id": "64e46b0e-887a-4691-8d2b-aa3d7b157e2c",
|
||||
"metric": "VCpuUsageMeanVnf.25b9b9d0-2461-4109-866e-a7767375415b",
|
||||
"object_instance_id": "25b9b9d0-2461-4109-866e-a7767375415b",
|
||||
"sub_object_instance_id": "85adebfa-d71c-49ab-9d39-d8dd7e393541"
|
||||
},
|
||||
"annotations": {
|
||||
"value": 99
|
||||
},
|
||||
"startsAt": "2022-06-21T23:47:36.453Z",
|
||||
"endsAt": "0001-01-01T00:00:00Z",
|
||||
"fingerprint": "5ef77f1f8a3ecb8d"
|
||||
}]
|
||||
}
|
@ -0,0 +1,57 @@
|
||||
{
|
||||
"filter": {
|
||||
"vnfInstanceSubscriptionFilter": {
|
||||
"vnfdIds": [
|
||||
"dummy-vnfdId-1"
|
||||
],
|
||||
"vnfProductsFromProviders": [
|
||||
{
|
||||
"vnfProvider": "Company",
|
||||
"vnfProducts": [
|
||||
{
|
||||
"vnfProductName": "Sample VNF",
|
||||
"versions": [
|
||||
{
|
||||
"vnfSoftwareVersion": "1.0",
|
||||
"vnfdVersions": ["1.0", "2.0"]
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
],
|
||||
"vnfInstanceIds": [
|
||||
"b0314420-0c9e-40e0-975e-4bf23b07d0c1"
|
||||
],
|
||||
"vnfInstanceNames": [
|
||||
"test"
|
||||
]
|
||||
},
|
||||
"notificationTypes": [
|
||||
"AlarmNotification",
|
||||
"AlarmClearedNotification"
|
||||
],
|
||||
"faultyResourceTypes": [
|
||||
"COMPUTE"
|
||||
],
|
||||
"perceivedSeverities": [
|
||||
"WARNING"
|
||||
],
|
||||
"eventTypes": [
|
||||
"PROCESSING_ERROR_ALARM"
|
||||
],
|
||||
"probableCauses": [
|
||||
"Process Terminated"
|
||||
]
|
||||
},
|
||||
"callbackUri": "/nfvo/notify/alarm",
|
||||
"authentication": {
|
||||
"authType": [
|
||||
"BASIC"
|
||||
],
|
||||
"paramsBasic": {
|
||||
"password": "ubuntu",
|
||||
"userName": "ubuntu"
|
||||
}
|
||||
}
|
||||
}
|
@ -0,0 +1,54 @@
|
||||
{
|
||||
"id": "78a39661-60a8-4824-b989-88c1b0c3534a",
|
||||
"filter": {
|
||||
"vnfInstanceSubscriptionFilter": {
|
||||
"vnfdIds": [
|
||||
"dummy-vnfdId-1"
|
||||
],
|
||||
"vnfProductsFromProviders": [
|
||||
{
|
||||
"vnfProvider": "dummy-vnfProvider-1",
|
||||
"vnfProducts": [
|
||||
{
|
||||
"vnfProductName": "dummy-vnfProductName-1-1",
|
||||
"versions": [
|
||||
{
|
||||
"vnfSoftwareVersion": "1.0",
|
||||
"vnfdVersions": ["1.0", "2.0"]
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
],
|
||||
"vnfInstanceIds": [
|
||||
"dummy-vnfInstanceId-1"
|
||||
],
|
||||
"vnfInstanceNames": [
|
||||
"dummy-vnfInstanceName-1"
|
||||
]
|
||||
},
|
||||
"notificationTypes": [
|
||||
"AlarmNotification",
|
||||
"AlarmClearedNotification"
|
||||
],
|
||||
"faultyResourceTypes": [
|
||||
"COMPUTE"
|
||||
],
|
||||
"perceivedSeverities": [
|
||||
"WARNING"
|
||||
],
|
||||
"eventTypes": [
|
||||
"EQUIPMENT_ALARM"
|
||||
],
|
||||
"probableCauses": [
|
||||
"The server cannot be connected."
|
||||
]
|
||||
},
|
||||
"callbackUri": "/nfvo/notify/alarm",
|
||||
"_links": {
|
||||
"self": {
|
||||
"href": "/vnffm/v1/subscriptions/78a39661-60a8-4824-b989-88c1b0c3534a"
|
||||
}
|
||||
}
|
||||
}
|
@ -0,0 +1,41 @@
|
||||
[
|
||||
{
|
||||
"id": "78a39661-60a8-4824-b989-88c1b0c3534a",
|
||||
"managedObjectId": "c61314d0-f583-4ab3-a457-46426bce02d3",
|
||||
"rootCauseFaultyResource": {
|
||||
"faultyResource": {
|
||||
"vimConnectionId": "0d57e928-86a4-4445-a4bd-1634edae73f3",
|
||||
"resourceId": "4e6ccbe1-38ec-4b1b-a278-64de09ba01b3",
|
||||
"vimLevelResourceType": "OS::Nova::Server"
|
||||
},
|
||||
"faultyResourceType": "COMPUTE"
|
||||
},
|
||||
"alarmRaisedTime": "2021-09-06T10:21:03Z",
|
||||
"alarmChangedTime": "2021-09-06T10:21:03Z",
|
||||
"alarmClearedTime": "2021-09-06T10:21:03Z",
|
||||
"alarmAcknowledgedTime": "2021-09-06T10:21:03Z",
|
||||
"ackState": "UNACKNOWLEDGED",
|
||||
"perceivedSeverity": "WARNING",
|
||||
"eventTime": "2021-09-06T10:21:03Z",
|
||||
"eventType": "EQUIPMENT_ALARM",
|
||||
"faultType": "Fault Type",
|
||||
"probableCause": "The server cannot be connected.",
|
||||
"isRootCause": false,
|
||||
"correlatedAlarmIds": [
|
||||
"c88b624e-e997-4b17-b674-10ca2bab62e0",
|
||||
"c16d41fd-12e2-49a6-bb17-72faf702353f"
|
||||
],
|
||||
"faultDetails": [
|
||||
"Fault",
|
||||
"Details"
|
||||
],
|
||||
"_links": {
|
||||
"self": {
|
||||
"href": "/vnffm/v1/alarms/78a39661-60a8-4824-b989-88c1b0c3534a"
|
||||
},
|
||||
"objectInstance": {
|
||||
"href": "/vnflcm/v1/vnf_instances/0e5f3086-4e79-47ed-a694-54c29155fa26"
|
||||
}
|
||||
}
|
||||
}
|
||||
]
|
@ -0,0 +1,56 @@
|
||||
[
|
||||
{
|
||||
"id": "78a39661-60a8-4824-b989-88c1b0c3534a",
|
||||
"filter": {
|
||||
"vnfInstanceSubscriptionFilter": {
|
||||
"vnfdIds": [
|
||||
"dummy-vnfdId-1"
|
||||
],
|
||||
"vnfProductsFromProviders": [
|
||||
{
|
||||
"vnfProvider": "dummy-vnfProvider-1",
|
||||
"vnfProducts": [
|
||||
{
|
||||
"vnfProductName": "dummy-vnfProductName-1-1",
|
||||
"versions": [
|
||||
{
|
||||
"vnfSoftwareVersion": "1.0",
|
||||
"vnfdVersions": ["1.0", "2.0"]
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
],
|
||||
"vnfInstanceIds": [
|
||||
"dummy-vnfInstanceId-1"
|
||||
],
|
||||
"vnfInstanceNames": [
|
||||
"dummy-vnfInstanceName-1"
|
||||
]
|
||||
},
|
||||
"notificationTypes": [
|
||||
"AlarmNotification",
|
||||
"AlarmClearedNotification"
|
||||
],
|
||||
"faultyResourceTypes": [
|
||||
"COMPUTE"
|
||||
],
|
||||
"perceivedSeverities": [
|
||||
"WARNING"
|
||||
],
|
||||
"eventTypes": [
|
||||
"EQUIPMENT_ALARM"
|
||||
],
|
||||
"probableCauses": [
|
||||
"The server cannot be connected."
|
||||
]
|
||||
},
|
||||
"callbackUri": "/nfvo/notify/alarm",
|
||||
"_links": {
|
||||
"self": {
|
||||
"href": "/vnffm/v1/subscriptions/78a39661-60a8-4824-b989-88c1b0c3534a"
|
||||
}
|
||||
}
|
||||
}
|
||||
]
|
@ -0,0 +1,3 @@
|
||||
{
|
||||
"ackState": "ACKNOWLEDGED"
|
||||
}
|
@ -0,0 +1,3 @@
|
||||
{
|
||||
"ackState": "ACKNOWLEDGED"
|
||||
}
|
@ -0,0 +1,39 @@
|
||||
{
|
||||
"id": "78a39661-60a8-4824-b989-88c1b0c3534a",
|
||||
"managedObjectId": "c61314d0-f583-4ab3-a457-46426bce02d3",
|
||||
"rootCauseFaultyResource": {
|
||||
"faultyResource": {
|
||||
"vimConnectionId": "0d57e928-86a4-4445-a4bd-1634edae73f3",
|
||||
"resourceId": "4e6ccbe1-38ec-4b1b-a278-64de09ba01b3",
|
||||
"vimLevelResourceType": "OS::Nova::Server"
|
||||
},
|
||||
"faultyResourceType": "COMPUTE"
|
||||
},
|
||||
"alarmRaisedTime": "2021-09-06T10:21:03Z",
|
||||
"alarmChangedTime": "2021-09-06T10:21:03Z",
|
||||
"alarmClearedTime": "2021-09-06T10:21:03Z",
|
||||
"alarmAcknowledgedTime": "2021-09-06T10:21:03Z",
|
||||
"ackState": "UNACKNOWLEDGED",
|
||||
"perceivedSeverity": "WARNING",
|
||||
"eventTime": "2021-09-06T10:21:03Z",
|
||||
"eventType": "EQUIPMENT_ALARM",
|
||||
"faultType": "Fault Type",
|
||||
"probableCause": "The server cannot be connected.",
|
||||
"isRootCause": false,
|
||||
"correlatedAlarmIds": [
|
||||
"c88b624e-e997-4b17-b674-10ca2bab62e0",
|
||||
"c16d41fd-12e2-49a6-bb17-72faf702353f"
|
||||
],
|
||||
"faultDetails": [
|
||||
"Fault",
|
||||
"Details"
|
||||
],
|
||||
"_links": {
|
||||
"self": {
|
||||
"href": "/vnffm/v1/alarms/78a39661-60a8-4824-b989-88c1b0c3534a"
|
||||
},
|
||||
"objectInstance": {
|
||||
"href": "/vnflcm/v1/vnf_instances/0e5f3086-4e79-47ed-a694-54c29155fa26"
|
||||
}
|
||||
}
|
||||
}
|
@ -0,0 +1,54 @@
|
||||
{
|
||||
"id": "78a39661-60a8-4824-b989-88c1b0c3534a",
|
||||
"filter": {
|
||||
"vnfInstanceSubscriptionFilter": {
|
||||
"vnfdIds": [
|
||||
"dummy-vnfdId-1"
|
||||
],
|
||||
"vnfProductsFromProviders": [
|
||||
{
|
||||
"vnfProvider": "dummy-vnfProvider-1",
|
||||
"vnfProducts": [
|
||||
{
|
||||
"vnfProductName": "dummy-vnfProductName-1-1",
|
||||
"versions": [
|
||||
{
|
||||
"vnfSoftwareVersion": "1.0",
|
||||
"vnfdVersions": ["1.0", "2.0"]
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
],
|
||||
"vnfInstanceIds": [
|
||||
"dummy-vnfInstanceId-1"
|
||||
],
|
||||
"vnfInstanceNames": [
|
||||
"dummy-vnfInstanceName-1"
|
||||
]
|
||||
},
|
||||
"notificationTypes": [
|
||||
"AlarmNotification",
|
||||
"AlarmClearedNotification"
|
||||
],
|
||||
"faultyResourceTypes": [
|
||||
"COMPUTE"
|
||||
],
|
||||
"perceivedSeverities": [
|
||||
"WARNING"
|
||||
],
|
||||
"eventTypes": [
|
||||
"EQUIPMENT_ALARM"
|
||||
],
|
||||
"probableCauses": [
|
||||
"The server cannot be connected."
|
||||
]
|
||||
},
|
||||
"callbackUri": "/nfvo/notify/alarm",
|
||||
"_links": {
|
||||
"self": {
|
||||
"href": "/vnffm/v1/subscriptions/78a39661-60a8-4824-b989-88c1b0c3534a"
|
||||
}
|
||||
}
|
||||
}
|
49
api-ref/source/v2/samples/vnfpm/create-pm-job-request.json
Normal file
49
api-ref/source/v2/samples/vnfpm/create-pm-job-request.json
Normal file
@ -0,0 +1,49 @@
|
||||
{
|
||||
"objectType": "Vnf",
|
||||
"objectInstanceIds": ["da459819-a2eb-442b-b9a2-0c1c02466baf"],
|
||||
"subObjectInstanceIds": [],
|
||||
"criteria": {
|
||||
"performanceMetric": [
|
||||
"VCpuUsageMeanVnf.25b9b9d0-2461-4109-866e-a7767375415b"],
|
||||
"performanceMetricGroup": ["VirtualisedComputeResource"],
|
||||
"collectionPeriod": 5,
|
||||
"reportingPeriod": 10,
|
||||
"reportingBoundary": "2022-08-05T02:24:46Z"
|
||||
},
|
||||
"callbackUri": "http://localhost:9990/notification/callback/callbackUri",
|
||||
"authentication": {
|
||||
"authType": [
|
||||
"BASIC"
|
||||
],
|
||||
"paramsBasic": {
|
||||
"password": "ubuntu",
|
||||
"userName": "ubuntu"
|
||||
}
|
||||
},
|
||||
"metadata": {
|
||||
"monitor": {
|
||||
"monitorName": "prometheus",
|
||||
"driverType": "external",
|
||||
"targetsInfo": [
|
||||
{
|
||||
"prometheusHost": "prometheus.example",
|
||||
"alertmanagerHost": "prometheus.example",
|
||||
"authInfo": {
|
||||
"ssh_username": "ubuntu",
|
||||
"ssh_password": "ubuntu"
|
||||
},
|
||||
"metricsEndpointConfigPath":
|
||||
"/etc/prometheus/prometheus.yml",
|
||||
"alertRuleConfigPath":
|
||||
"/etc/prometheus/rules/tacker-rule.yml",
|
||||
"receiverConfigPath":
|
||||
"/etc/prometheus/alertmanager.yml",
|
||||
"prometheusReloadApiEndpoint":
|
||||
"http://localhost:9990/-/reload",
|
||||
"alertmanagerReloadApiEndpoint":
|
||||
"http://prometheus.example:9093/-/reload"
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
}
|
20
api-ref/source/v2/samples/vnfpm/create-pm-job-response.json
Normal file
20
api-ref/source/v2/samples/vnfpm/create-pm-job-response.json
Normal file
@ -0,0 +1,20 @@
|
||||
{
|
||||
"id": "aa474574-a2eb-442b-b9a2-0c1c02466baf",
|
||||
"objectType": "Vnf",
|
||||
"objectInstanceIds": ["da459819-a2eb-442b-b9a2-0c1c02466baf"],
|
||||
"criteria": {
|
||||
"performanceMetric": [
|
||||
"VCpuUsageMeanVnf.25b9b9d0-2461-4109-866e-a7767375415b"
|
||||
],
|
||||
"performanceMetricGroup": [
|
||||
"VirtualisedComputeResource"
|
||||
],
|
||||
"collectionPeriod": 5,
|
||||
"reportingPeriod": 10,
|
||||
"reportingBoundary": "2022-08-05T02:24:46Z"
|
||||
},
|
||||
"callbackUri":"http://127.0.0.1/",
|
||||
"_links": {
|
||||
"href": "http://127.0.0.1:9890/vnfpm/v2/pm_jobs/aa474574-a2eb-442b-b9a2-0c1c02466baf"
|
||||
},
|
||||
}
|
22
api-ref/source/v2/samples/vnfpm/list-pm-job-response.json
Normal file
22
api-ref/source/v2/samples/vnfpm/list-pm-job-response.json
Normal file
@ -0,0 +1,22 @@
|
||||
[
|
||||
{
|
||||
"id": "aa474574-a2eb-442b-b9a2-0c1c02466baf",
|
||||
"objectType": "Vnf",
|
||||
"objectInstanceIds": ["da459819-a2eb-442b-b9a2-0c1c02466baf"],
|
||||
"criteria": {
|
||||
"performanceMetric": [
|
||||
"VCpuUsageMeanVnf.25b9b9d0-2461-4109-866e-a7767375415b"
|
||||
],
|
||||
"performanceMetricGroup": [
|
||||
"VirtualisedComputeResource"
|
||||
],
|
||||
"collectionPeriod": 5,
|
||||
"reportingPeriod": 10,
|
||||
"reportingBoundary": "2022-08-05T02:24:46Z"
|
||||
},
|
||||
"callbackUri":"http://127.0.0.1/",
|
||||
"_links": {
|
||||
"href": "http://127.0.0.1:9890/vnfpm/v2/pm_jobs/aa474574-a2eb-442b-b9a2-0c1c02466baf"
|
||||
}
|
||||
}
|
||||
]
|
@ -0,0 +1,12 @@
|
||||
[
|
||||
{
|
||||
"objectType": "Vnf",
|
||||
"objectInstanceId": "da459819-a2eb-442b-b9a2-0c1c02466baf",
|
||||
"performanceMetric": "VCpuUsageMeanVnf.25b9b9d0-2461-4109-866e-a7767375415b",
|
||||
"performanceValues": {
|
||||
"timeStamp": "2022-08-05T02:24:46Z",
|
||||
"value": "value_test",
|
||||
"context": "{'test': 'test'}"
|
||||
}
|
||||
}
|
||||
]
|
20
api-ref/source/v2/samples/vnfpm/show-pm-job-response.json
Normal file
20
api-ref/source/v2/samples/vnfpm/show-pm-job-response.json
Normal file
@ -0,0 +1,20 @@
|
||||
{
|
||||
"id": "aa474574-a2eb-442b-b9a2-0c1c02466baf",
|
||||
"objectType": "Vnf",
|
||||
"objectInstanceIds": ["da459819-a2eb-442b-b9a2-0c1c02466baf"],
|
||||
"criteria": {
|
||||
"performanceMetric": [
|
||||
"VCpuUsageMeanVnf.25b9b9d0-2461-4109-866e-a7767375415b"
|
||||
],
|
||||
"performanceMetricGroup": [
|
||||
"VirtualisedComputeResource"
|
||||
],
|
||||
"collectionPeriod": 5,
|
||||
"reportingPeriod": 10,
|
||||
"reportingBoundary": "2022-08-05T02:24:46Z"
|
||||
},
|
||||
"callbackUri":"http://127.0.0.1/",
|
||||
"_links": {
|
||||
"href": "http://127.0.0.1:9890/vnfpm/v2/pm_jobs/aa474574-a2eb-442b-b9a2-0c1c02466baf"
|
||||
}
|
||||
}
|
@ -0,0 +1,3 @@
|
||||
{
|
||||
"callbackUri": "http://localhost:9990/notification/callback/callbackUri"
|
||||
}
|
@ -0,0 +1,3 @@
|
||||
{
|
||||
"callbackUri": "http://localhost:9990/notification/callback/callbackUri"
|
||||
}
|
@ -55,6 +55,15 @@
|
||||
fault_notification: |
|
||||
The fault notification API is not enabled.
|
||||
(CONF.server_notification.server_notification)
|
||||
prometheus_plugin_pm: |
|
||||
The Prometheus Plugin API is not enabled.
|
||||
(CONF.prometheus_plugin.performance_management)
|
||||
prometheus_plugin_fm: |
|
||||
The Prometheus Plugin API is not enabled.
|
||||
(CONF.prometheus_plugin.fault_management)
|
||||
prometheus_plugin_auto_scale: |
|
||||
The Prometheus Plugin API is not enabled.
|
||||
(CONF.prometheus_plugin.auto_scaling)
|
||||
405:
|
||||
default: |
|
||||
Method is not valid for this endpoint.
|
||||
@ -77,9 +86,9 @@
|
||||
If-Range request-header field.
|
||||
422:
|
||||
default: |
|
||||
The content type of the payload body is supported and the payload body of a
|
||||
request contains syntactically correct data (e.g. well-formed JSON) but the data
|
||||
cannot be processed (e.g. because it fails validation against a schema).
|
||||
The content type of the payload body is supported and the payload body of a
|
||||
request contains syntactically correct data (e.g. well-formed JSON) but the
|
||||
data cannot be processed (e.g. because it fails validation against a schema).
|
||||
500:
|
||||
default: |
|
||||
Something went wrong inside the service. This should not happen usually.
|
||||
|
474
api-ref/source/v2/vnffm.inc
Normal file
474
api-ref/source/v2/vnffm.inc
Normal file
@ -0,0 +1,474 @@
|
||||
.. -*- rst -*-
|
||||
|
||||
================================================================
|
||||
Virtualized Network Function Fault Management Interface (VNF FM)
|
||||
================================================================
|
||||
|
||||
This interface manages the VNF fault management operations of VNF instances.
|
||||
|
||||
This interface allows the NFVO to invoke VNF fault management operations of
|
||||
VNF instances towards the VNFM. The detail of this interface is described in
|
||||
SOL002 v3.3.1 clause 7. The parameters of some specific standards need
|
||||
reference SOL013 v3.4.1 clause 5.
|
||||
|
||||
Get all alarms (v1)
|
||||
===================
|
||||
|
||||
.. rest_method:: GET /vnffm/v1/alarms
|
||||
|
||||
The GET method gets all alarms, Allow users to filter out alarms based on query
|
||||
parameter in the request.
|
||||
|
||||
If the API consumer intends to query all alarms, it sends a GET request to the
|
||||
"Alarms" resource.The VNFM returns a "200 OK" response to the API consumer, and
|
||||
includes zero or more data structures of type "Alarm" in the payload body.
|
||||
|
||||
An attribute selector allows the API consumer to choose which attributes it
|
||||
wants to be contained in the response. *all_fields*, *fields*, *exclude_fields*
|
||||
and *exclude_default* can be set as query parameters.
|
||||
|
||||
Attribute-based filtering expression. The following attribute names shall be
|
||||
supported by the Tacker in the attribute-based filtering expression: id,
|
||||
managedObjectId, rootCauseFaultyResource/faultyResourceType, eventType,
|
||||
perceivedSeverity, probableCause.
|
||||
|
||||
Response Codes
|
||||
--------------
|
||||
|
||||
.. rest_status_code:: success status.yaml
|
||||
|
||||
- 200
|
||||
|
||||
.. rest_status_code:: error status.yaml
|
||||
|
||||
- 400
|
||||
- 401
|
||||
- 406
|
||||
|
||||
Response Parameters
|
||||
-------------------
|
||||
|
||||
.. rest_parameters:: parameters_vnffm.yaml
|
||||
|
||||
- id: alarm_id
|
||||
- managedObjectId: managed_object_id
|
||||
- vnfcInstanceIds: vnfc_instance_ids
|
||||
- rootCauseFaultyResource: faulty_resource_info
|
||||
- faultyResource: faulty_resource
|
||||
- vimConnectionId: faulty_resource_vim_connection_id
|
||||
- resourceProviderId: faulty_resource_provider_id
|
||||
- resourceId: faulty_resource_id
|
||||
- vimLevelResourceType: faulty_resource_vim_level_resource_type
|
||||
- faultyResourceType: faulty_resource_type
|
||||
- alarmRaisedTime: alarm_raised_time
|
||||
- alarmChangedTime: alarm_changed_time
|
||||
- alarmClearedTime: alarm_cleared_time
|
||||
- alarmAcknowledgedTime: alarm_acknowledged_time
|
||||
- ackState: ack_state
|
||||
- perceivedSeverity: perceived_severity
|
||||
- eventTime: event_time
|
||||
- eventType: event_type
|
||||
- faultType: fault_type
|
||||
- probableCause: probable_cause
|
||||
- isRootCause: is_root_cause
|
||||
- correlatedAlarmIds: correlated_alarm_ids
|
||||
- faultDetails: fault_details
|
||||
- _links: alarm_links
|
||||
- self: alarm_self
|
||||
- objectInstance: object_instance
|
||||
|
||||
Response Example
|
||||
----------------
|
||||
|
||||
.. literalinclude:: samples/vnffm/list-vnffm-alarm-response.json
|
||||
:language: javascript
|
||||
|
||||
Get the individual alarm (v1)
|
||||
=============================
|
||||
|
||||
.. rest_method:: GET /vnffm/v1/alarms/{alarmId}
|
||||
|
||||
The GET method gets the alarm specified in the Tacker.
|
||||
|
||||
If the API consumer intends to read a particular alarm, it sends a GET request
|
||||
to the "Individual alarm" resource, addressed by the appropriate alarm
|
||||
identifier in its resource URI. In case of failure, appropriate error
|
||||
information is provided in the response.
|
||||
|
||||
Response Codes
|
||||
--------------
|
||||
|
||||
.. rest_status_code:: success status.yaml
|
||||
|
||||
- 200
|
||||
|
||||
.. rest_status_code:: error status.yaml
|
||||
|
||||
- 400
|
||||
- 401
|
||||
- 404
|
||||
- 406
|
||||
|
||||
Request Parameters
|
||||
------------------
|
||||
|
||||
.. rest_parameters:: parameters_vnffm.yaml
|
||||
|
||||
- alarmId: alarm_id_path
|
||||
|
||||
Response Parameters
|
||||
-------------------
|
||||
|
||||
.. rest_parameters:: parameters_vnffm.yaml
|
||||
|
||||
- id: alarm_id
|
||||
- managedObjectId: managed_object_id
|
||||
- vnfcInstanceIds: vnfc_instance_ids
|
||||
- rootCauseFaultyResource: faulty_resource_info
|
||||
- faultyResource: faulty_resource
|
||||
- vimConnectionId: faulty_resource_vim_connection_id
|
||||
- resourceProviderId: faulty_resource_provider_id
|
||||
- resourceId: faulty_resource_id
|
||||
- vimLevelResourceType: faulty_resource_vim_level_resource_type
|
||||
- faultyResourceType: faulty_resource_type
|
||||
- alarmRaisedTime: alarm_raised_time
|
||||
- alarmChangedTime: alarm_changed_time
|
||||
- alarmClearedTime: alarm_cleared_time
|
||||
- alarmAcknowledgedTime: alarm_acknowledged_time
|
||||
- ackState: ack_state
|
||||
- perceivedSeverity: perceived_severity
|
||||
- eventTime: event_time
|
||||
- eventType: event_type
|
||||
- faultType: fault_type
|
||||
- probableCause: probable_cause
|
||||
- isRootCause: is_root_cause
|
||||
- correlatedAlarmIds: correlated_alarm_ids
|
||||
- faultDetails: fault_details
|
||||
- _links: alarm_links
|
||||
- self: alarm_self
|
||||
- objectInstance: object_instance
|
||||
|
||||
|
||||
Response Example
|
||||
----------------
|
||||
|
||||
.. literalinclude:: samples/vnffm/show-vnffm-alarm-response.json
|
||||
:language: javascript
|
||||
|
||||
Modify the confirmation status (v1)
|
||||
===================================
|
||||
|
||||
.. rest_method:: PATCH /vnffm/v1/alarms/{alarmId}
|
||||
|
||||
The PATCH method modifies the confirmation status of the alarm specified in the
|
||||
Tacker.
|
||||
|
||||
The API consumer sends a PATCH request to the individual alarm. The VNFM
|
||||
returns a "200 OK" response to the API consumer, and includes a data structure
|
||||
of type "AlarmModifications" in the payload body. In case of failure,
|
||||
appropriate error information is provided in the response.
|
||||
|
||||
Response Codes
|
||||
--------------
|
||||
|
||||
.. rest_status_code:: success status.yaml
|
||||
|
||||
- 200
|
||||
|
||||
.. rest_status_code:: error status.yaml
|
||||
|
||||
- 400
|
||||
- 401
|
||||
- 404
|
||||
- 406
|
||||
- 409
|
||||
|
||||
Request Parameters
|
||||
------------------
|
||||
|
||||
.. rest_parameters:: parameters_vnffm.yaml
|
||||
|
||||
- alarmId: alarm_id_path
|
||||
- ackState: ack_state
|
||||
|
||||
Request Example
|
||||
---------------
|
||||
|
||||
.. literalinclude:: samples/vnffm/modify-vnffm-alarm-request.json
|
||||
:language: javascript
|
||||
|
||||
Response Parameters
|
||||
-------------------
|
||||
|
||||
.. rest_parameters:: parameters_vnffm.yaml
|
||||
|
||||
- ackState: ack_state
|
||||
|
||||
Response Example
|
||||
----------------
|
||||
|
||||
.. literalinclude:: samples/vnffm/modify-vnffm-alarm-response.json
|
||||
:language: javascript
|
||||
|
||||
Create a subscription (v1)
|
||||
==========================
|
||||
|
||||
.. rest_method:: POST /vnffm/v1/subscriptions
|
||||
|
||||
The POST method creates a new VNF FM-Subscription.
|
||||
|
||||
As the result of successfully executing this method, a new VNF FM-Subscription
|
||||
shall have been created, and return detailed FM subscription data. In case of
|
||||
failure, including an invalid notification endpoint, appropriate error
|
||||
information is provided in the response.
|
||||
|
||||
Response Codes
|
||||
--------------
|
||||
|
||||
.. rest_status_code:: success status.yaml
|
||||
|
||||
- 201
|
||||
|
||||
.. rest_status_code:: error status.yaml
|
||||
|
||||
- 400
|
||||
- 401
|
||||
- 406
|
||||
- 422
|
||||
|
||||
Request Parameters
|
||||
------------------
|
||||
|
||||
.. rest_parameters:: parameters_vnffm.yaml
|
||||
|
||||
- filter: fm_notification_filter
|
||||
- vnfInstanceSubscriptionFilter: filter_subscription_filter
|
||||
- vnfdIds: subscription_filter_vnfd_ids
|
||||
- vnfProductsFromProviders: subscription_filter_vnf_products_from_providers
|
||||
- vnfProvider: vnf_products_from_providers_vnf_provider
|
||||
- vnfProducts: vnf_products_from_providers_vnf_products
|
||||
- vnfProductName: products_vnf_product_name
|
||||
- versions: products_versions
|
||||
- vnfSoftwareVersion: versions_vnf_software_version
|
||||
- vnfdVersions: versions_vnfd_versions
|
||||
- vnfInstanceIds: subscription_filter_vnf_instance_ids
|
||||
- vnfInstanceNames: subscription_filter_vnf_instance_names
|
||||
- notificationTypes: filter_notification_types
|
||||
- faultyResourceTypes: filter_faulty_resource_types
|
||||
- perceivedSeverities: filter_perceived_severities
|
||||
- eventTypes: filter_event_types
|
||||
- probableCauses: filter_probable_causes
|
||||
- callbackUri: callback_uri
|
||||
- authentication: authentication
|
||||
|
||||
Request Example
|
||||
---------------
|
||||
|
||||
.. literalinclude:: samples/vnffm/create-vnffm-subscription-request.json
|
||||
:language: javascript
|
||||
|
||||
Response Parameters
|
||||
-------------------
|
||||
|
||||
.. rest_parameters:: parameters_vnffm.yaml
|
||||
|
||||
- id: subscription_id
|
||||
- filter: fm_notification_filter
|
||||
- vnfInstanceSubscriptionFilter: filter_subscription_filter
|
||||
- vnfdIds: subscription_filter_vnfd_ids
|
||||
- vnfProductsFromProviders: subscription_filter_vnf_products_from_providers
|
||||
- vnfProvider: vnf_products_from_providers_vnf_provider
|
||||
- vnfProducts: vnf_products_from_providers_vnf_products
|
||||
- vnfProductName: products_vnf_product_name
|
||||
- versions: products_versions
|
||||
- vnfSoftwareVersion: versions_vnf_software_version
|
||||
- vnfdVersions: versions_vnfd_versions
|
||||
- vnfInstanceIds: subscription_filter_vnf_instance_ids
|
||||
- vnfInstanceNames: subscription_filter_vnf_instance_names
|
||||
- notificationTypes: filter_notification_types
|
||||
- faultyResourceTypes: filter_faulty_resource_types
|
||||
- perceivedSeverities: filter_perceived_severities
|
||||
- eventTypes: filter_event_types
|
||||
- probableCauses: filter_probable_causes
|
||||
- callbackUri: callback_uri
|
||||
- _links: subscription_links
|
||||
- self: subscription_self
|
||||
|
||||
Response Example
|
||||
----------------
|
||||
|
||||
.. literalinclude:: samples/vnffm/create-vnffm-subscription-response.json
|
||||
:language: javascript
|
||||
|
||||
Get all subscriptions (v1)
|
||||
==========================
|
||||
|
||||
.. rest_method:: GET /vnffm/v1/subscriptions
|
||||
|
||||
The GET method allows users to filter out subscriptions based on query parameter
|
||||
in the request.
|
||||
|
||||
If desired, e.g. to recover from an error situation, the API consumer can query
|
||||
information about its subscriptions by sending a GET request to the
|
||||
"Subscriptions" resource. In that case, the VNFM returns a "200 OK" response
|
||||
that contains the list of representations of all existing subscriptions that
|
||||
were created by the API consumer.
|
||||
|
||||
An attribute selector allows the API consumer to choose which attributes it
|
||||
wants to be contained in the response. *all_fields*, *fields*, *exclude_fields*
|
||||
and *exclude_default* can be set as query parameters.
|
||||
|
||||
Attribute-based filtering expression. The following attribute names shall be
|
||||
supported by the Tacker in the attribute-based filtering expression. All
|
||||
attribute names that appear in the FmSubscription and in data types referenced
|
||||
from it shall be supported by the VNFM in the filter expression. For example,
|
||||
below URI query parameter will match alarms with perceivedSeverity=WARNING
|
||||
|
||||
Response Codes
|
||||
--------------
|
||||
|
||||
.. rest_status_code:: success status.yaml
|
||||
|
||||
- 200
|
||||
|
||||
.. rest_status_code:: error status.yaml
|
||||
|
||||
- 400
|
||||
- 401
|
||||
- 404
|
||||
- 406
|
||||
- 409
|
||||
|
||||
Response Parameters
|
||||
-------------------
|
||||
|
||||
.. rest_parameters:: parameters_vnffm.yaml
|
||||
|
||||
- id: subscription_id
|
||||
- filter: fm_notification_filter
|
||||
- vnfInstanceSubscriptionFilter: filter_subscription_filter
|
||||
- vnfdIds: subscription_filter_vnfd_ids
|
||||
- vnfProductsFromProviders: subscription_filter_vnf_products_from_providers
|
||||
- vnfProvider: vnf_products_from_providers_vnf_provider
|
||||
- vnfProducts: vnf_products_from_providers_vnf_products
|
||||
- vnfProductName: products_vnf_product_name
|
||||
- versions: products_versions
|
||||
- vnfSoftwareVersion: versions_vnf_software_version
|
||||
- vnfdVersions: versions_vnfd_versions
|
||||
- vnfInstanceIds: subscription_filter_vnf_instance_ids
|
||||
- vnfInstanceNames: subscription_filter_vnf_instance_names
|
||||
- notificationTypes: filter_notification_types
|
||||
- faultyResourceTypes: filter_faulty_resource_types
|
||||
- perceivedSeverities: filter_perceived_severities
|
||||
- eventTypes: filter_event_types
|
||||
- probableCauses: filter_probable_causes
|
||||
- callbackUri: callback_uri
|
||||
- _links: subscription_links
|
||||
- self: subscription_self
|
||||
|
||||
Response Example
|
||||
----------------
|
||||
|
||||
.. literalinclude:: samples/vnffm/list-vnffm-subscription-response.json
|
||||
:language: javascript
|
||||
|
||||
Get a subscription (v1)
|
||||
=======================
|
||||
|
||||
.. rest_method:: GET /vnffm/v1/subscriptions/{subscriptionId}
|
||||
|
||||
The POST method gets the subscription in the Tacker.
|
||||
|
||||
If desired, e.g. to recover from an error situation, the API consumer can read
|
||||
information about a particular subscription by sending a GET request to the
|
||||
resource representing that individual subscription. In that case, the VNFM
|
||||
returns a "200 OK" response that contains a representation of that individual
|
||||
subscription.
|
||||
|
||||
Response Codes
|
||||
--------------
|
||||
|
||||
.. rest_status_code:: success status.yaml
|
||||
|
||||
- 200
|
||||
|
||||
.. rest_status_code:: error status.yaml
|
||||
|
||||
- 400
|
||||
- 401
|
||||
- 404
|
||||
- 406
|
||||
|
||||
Request Parameters
|
||||
------------------
|
||||
|
||||
.. rest_parameters:: parameters_vnffm.yaml
|
||||
|
||||
- subscriptionId: subscription_id_path
|
||||
|
||||
Response Parameters
|
||||
-------------------
|
||||
|
||||
.. rest_parameters:: parameters_vnffm.yaml
|
||||
|
||||
- id: subscription_id
|
||||
- filter: fm_notification_filter
|
||||
- vnfInstanceSubscriptionFilter: filter_subscription_filter
|
||||
- vnfdIds: subscription_filter_vnfd_ids
|
||||
- vnfProductsFromProviders: subscription_filter_vnf_products_from_providers
|
||||
- vnfProvider: vnf_products_from_providers_vnf_provider
|
||||
- vnfProducts: vnf_products_from_providers_vnf_products
|
||||
- vnfProductName: products_vnf_product_name
|
||||
- versions: products_versions
|
||||
- vnfSoftwareVersion: versions_vnf_software_version
|
||||
- vnfdVersions: versions_vnfd_versions
|
||||
- vnfInstanceIds: subscription_filter_vnf_instance_ids
|
||||
- vnfInstanceNames: subscription_filter_vnf_instance_names
|
||||
- notificationTypes: filter_notification_types
|
||||
- faultyResourceTypes: filter_faulty_resource_types
|
||||
- perceivedSeverities: filter_perceived_severities
|
||||
- eventTypes: filter_event_types
|
||||
- probableCauses: filter_probable_causes
|
||||
- callbackUri: callback_uri
|
||||
- _links: subscription_links
|
||||
- self: subscription_self
|
||||
|
||||
Request Example
|
||||
---------------
|
||||
|
||||
.. literalinclude:: samples/vnffm/show-vnffm-subscription-response.json
|
||||
:language: javascript
|
||||
|
||||
Delete a subscription (v1)
|
||||
==========================
|
||||
|
||||
.. rest_method:: DELETE /vnffm/v1/subscriptions/{subscriptionId}
|
||||
|
||||
The DELETE method deletes the subscription in the Tacker
|
||||
|
||||
When the API consumer does not need the subscription anymore, it terminates the
|
||||
subscription by sending a DELETE request to the resource that represents the
|
||||
individual subscription. The VNFM acknowledges the successful termination of
|
||||
the subscription by returning a "204 No Content" response.
|
||||
|
||||
Response Codes
|
||||
--------------
|
||||
|
||||
.. rest_status_code:: success status.yaml
|
||||
|
||||
- 204
|
||||
|
||||
.. rest_status_code:: error status.yaml
|
||||
|
||||
- 400
|
||||
- 401
|
||||
- 404
|
||||
- 406
|
||||
- 409
|
||||
|
||||
Request Parameters
|
||||
------------------
|
||||
|
||||
.. rest_parameters:: parameters_vnffm.yaml
|
||||
|
||||
- subscriptionId: subscription_id_path
|
9
api-ref/source/v2/vnffm.rst
Normal file
9
api-ref/source/v2/vnffm.rst
Normal file
@ -0,0 +1,9 @@
|
||||
:tocdepth: 2
|
||||
|
||||
###################################################################
|
||||
Virtualized Network Function Fault Management Interface (VNF FM) v1
|
||||
###################################################################
|
||||
|
||||
.. rest_expand_all::
|
||||
|
||||
.. include:: vnffm.inc
|
382
api-ref/source/v2/vnfpm.inc
Normal file
382
api-ref/source/v2/vnfpm.inc
Normal file
@ -0,0 +1,382 @@
|
||||
.. -*- rst -*-
|
||||
|
||||
======================================================================
|
||||
Virtualized Network Function Performance Management Interface (VNF PM)
|
||||
======================================================================
|
||||
|
||||
This interface manages the VNF performance management operations of VNF
|
||||
instances.
|
||||
|
||||
This interface allows providing performance management (measurement results
|
||||
collection and notifications) related to VNFs. The detail of this interface
|
||||
is described in SOL002 v3.3.1 clause 6. The parameters of some specific
|
||||
standards need reference SOL013 v3.4.1 clause 5.
|
||||
|
||||
Create a PM job (v2)
|
||||
====================
|
||||
|
||||
.. rest_method:: POST /vnfpm/v2/pm_jobs
|
||||
|
||||
The POST method creates a new PM job. PM jobs group details of performance
|
||||
collection and reporting information.
|
||||
|
||||
As the result of successfully executing this method, a new PM job shall have
|
||||
been created, and return detailed PM job data. In case of failure, including
|
||||
an invalid notification endpoint, appropriate error information is provided in
|
||||
the response.
|
||||
|
||||
Response Codes
|
||||
--------------
|
||||
|
||||
.. rest_status_code:: success status.yaml
|
||||
|
||||
- 201
|
||||
|
||||
.. rest_status_code:: error status.yaml
|
||||
|
||||
- 400
|
||||
- 401
|
||||
- 404
|
||||
- 406
|
||||
- 409
|
||||
- 422
|
||||
- 503
|
||||
|
||||
Request Parameters
|
||||
------------------
|
||||
|
||||
.. rest_parameters:: parameters_vnfpm.yaml
|
||||
|
||||
- objectType: vnf_pm_job_create_object_type
|
||||
- objectInstanceIds: vnf_pm_job_create_object_instance_ids
|
||||
- subObjectInstanceIds: vnf_pm_job_create_sub_object_instance_ids
|
||||
- criteria: vnf_pm_job_create_criteria
|
||||
- performanceMetric: criteria_performance_metric
|
||||
- performanceMetricGroup: criteria_performance_metric_group
|
||||
- collectionPeriod: criteria_collection_period
|
||||
- reportingPeriod: criteria_reporting_period
|
||||
- reportingBoundary: criteria_reporting_boundary
|
||||
- callbackUri: vnf_pm_job_create_callback_uri
|
||||
- authentication: vnf_pm_job_create_request_authentication
|
||||
- authType: authentication_auth_type
|
||||
- paramsBasic: authentication_params_basic
|
||||
- userName: paramsBasic_userName
|
||||
- password: paramsBasic_password
|
||||
- paramsOauth2ClientCredentials: authentication_params_oauth2_client_credentials
|
||||
- clientId: params_oauth2_client_credentials_client_id
|
||||
- clientPassword: params_oauth2_client_credentials_client_password
|
||||
- tokenEndpoint: params_oauth2_client_credentials_token_endpoint
|
||||
- metadata: vnf_pm_job_create_metadata
|
||||
|
||||
Request Example
|
||||
---------------
|
||||
|
||||
.. literalinclude:: samples/vnfpm/create-pm-job-request.json
|
||||
:language: javascript
|
||||
|
||||
Response Parameters
|
||||
-------------------
|
||||
|
||||
.. rest_parameters:: parameters_vnfpm.yaml
|
||||
|
||||
- id: vnf_pm_job_response_id
|
||||
- objectType: vnf_pm_job_create_object_type
|
||||
- objectInstanceIds: vnf_pm_job_create_object_instance_ids
|
||||
- subObjectInstanceIds: vnf_pm_job_create_sub_object_instance_ids
|
||||
- criteria: vnf_pm_job_create_criteria
|
||||
- performanceMetric: criteria_performance_metric
|
||||
- performanceMetricGroup: criteria_performance_metric_group
|
||||
- collectionPeriod: criteria_collection_period
|
||||
- reportingPeriod: criteria_reporting_period
|
||||
- reportingBoundary: criteria_reporting_boundary
|
||||
- callbackUri: vnf_pm_job_create_callback_uri
|
||||
- reports: vnf_pm_job_reports
|
||||
- href: reports_href
|
||||
- readyTime: reports_ready_time
|
||||
- expiryTime: reports_expiry_time
|
||||
- fileSize: reports_file_size
|
||||
- _links: pm_job_links
|
||||
- self: links_self
|
||||
- objects: links_objects
|
||||
|
||||
Response Example
|
||||
----------------
|
||||
|
||||
.. literalinclude:: samples/vnfpm/create-pm-job-response.json
|
||||
:language: javascript
|
||||
|
||||
Get for PM jobs (v2)
|
||||
====================
|
||||
|
||||
.. rest_method:: GET /vnfpm/v2/pm_jobs
|
||||
|
||||
The GET method allows users to filter out PM jobs based on query parameter in
|
||||
the request.
|
||||
|
||||
It supports attribute-based filtering and attribute selectors defined in ETSI
|
||||
NFV SOL013 v3.4.1. The detail of attribute-based filtering is described in
|
||||
SOL013 v3.4.1 clause 5.2. The detail of attribute selectors is described in
|
||||
SOL013 v3.4.1 clause 5.3.
|
||||
|
||||
An attribute selector allows the API consumer to choose which attributes it
|
||||
wants to be contained in the response. *all_fields*, *fields*, *exclude_fields*
|
||||
and *exclude_default* can be set as query parameters.
|
||||
|
||||
Response Codes
|
||||
--------------
|
||||
|
||||
.. rest_status_code:: success status.yaml
|
||||
|
||||
- 200
|
||||
|
||||
.. rest_status_code:: error status.yaml
|
||||
|
||||
- 400
|
||||
- 401
|
||||
- 406
|
||||
- 409
|
||||
|
||||
Response Parameters
|
||||
-------------------
|
||||
|
||||
.. rest_parameters:: parameters_vnfpm.yaml
|
||||
|
||||
- id: vnf_pm_job_response_id
|
||||
- objectType: vnf_pm_job_create_object_type
|
||||
- objectInstanceIds: vnf_pm_job_create_object_instance_ids
|
||||
- subObjectInstanceIds: vnf_pm_job_create_sub_object_instance_ids
|
||||
- criteria: vnf_pm_job_create_criteria
|
||||
- performanceMetric: criteria_performance_metric
|
||||
- performanceMetricGroup: criteria_performance_metric_group
|
||||
- collectionPeriod: criteria_collection_period
|
||||
- reportingPeriod: criteria_reporting_period
|
||||
- reportingBoundary: criteria_reporting_boundary
|
||||
- callbackUri: vnf_pm_job_create_callback_uri
|
||||
- reports: vnf_pm_job_reports
|
||||
- href: reports_href
|
||||
- readyTime: reports_ready_time
|
||||
- expiryTime: reports_expiry_time
|
||||
- fileSize: reports_file_size
|
||||
- _links: pm_job_links
|
||||
- self: links_self
|
||||
- objects: links_objects
|
||||
|
||||
Response Example
|
||||
----------------
|
||||
|
||||
.. literalinclude:: samples/vnfpm/list-pm-job-response.json
|
||||
:language: javascript
|
||||
|
||||
Get a PM job (v2)
|
||||
=================
|
||||
|
||||
.. rest_method:: GET /vnfpm/v2/pm_jobs/{pmJobId}
|
||||
|
||||
The GET method gets an individual PM job.
|
||||
|
||||
If the API consumer intends to read information about a particular PM job,
|
||||
it sends a GET request to the "Individual PM job" resource, addressed by the
|
||||
appropriate PM job identifier in its resource URI. The VNFM returns a "200 OK"
|
||||
response to the API consumer, and includes one data structure of type "PmJob"
|
||||
in the payload body. In case of failure, appropriate error information is
|
||||
provided in the response.
|
||||
|
||||
Response Codes
|
||||
--------------
|
||||
|
||||
.. rest_status_code:: success status.yaml
|
||||
|
||||
- 200
|
||||
|
||||
.. rest_status_code:: error status.yaml
|
||||
|
||||
- 400
|
||||
- 401
|
||||
- 404
|
||||
|
||||
Request Parameters
|
||||
------------------
|
||||
|
||||
.. rest_parameters:: parameters_vnfpm.yaml
|
||||
|
||||
- pmJobId: vnf_pm_job_id
|
||||
|
||||
Response Parameters
|
||||
-------------------
|
||||
|
||||
.. rest_parameters:: parameters_vnfpm.yaml
|
||||
|
||||
- id: vnf_pm_job_response_id
|
||||
- objectType: vnf_pm_job_create_object_type
|
||||
- objectInstanceIds: vnf_pm_job_create_object_instance_ids
|
||||
- subObjectInstanceIds: vnf_pm_job_create_sub_object_instance_ids
|
||||
- criteria: vnf_pm_job_create_criteria
|
||||
- performanceMetric: criteria_performance_metric
|
||||
- performanceMetricGroup: criteria_performance_metric_group
|
||||
- collectionPeriod: criteria_collection_period
|
||||
- reportingPeriod: criteria_reporting_period
|
||||
- reportingBoundary: criteria_reporting_boundary
|
||||
- callbackUri: vnf_pm_job_create_callback_uri
|
||||
- reports: vnf_pm_job_reports
|
||||
- href: reports_href
|
||||
- readyTime: reports_ready_time
|
||||
- expiryTime: reports_expiry_time
|
||||
- fileSize: reports_file_size
|
||||
- _links: pm_job_links
|
||||
- self: links_self
|
||||
- objects: links_objects
|
||||
|
||||
Response Example
|
||||
----------------
|
||||
|
||||
.. literalinclude:: samples/vnfpm/show-pm-job-response.json
|
||||
:language: javascript
|
||||
|
||||
Modify a PM job(v2)
|
||||
===================
|
||||
|
||||
.. rest_method:: PATCH /vnfpm/v2/pm_jobs/{pmJobId}
|
||||
|
||||
|
||||
The PATCH method Modifies a PM job.
|
||||
|
||||
If the API consumer intends to update the callback URI in a PM job, it sends
|
||||
a PATCH request to the "Individual PM job" resource, including a data
|
||||
structure of type "PmJobModifications" in the payload body. The VNFM returns
|
||||
a "200 OK" response to the API consumer and includes in the payload body a data
|
||||
structure of type "PmJobModifications" to indicate the performed modifications.
|
||||
|
||||
Response Codes
|
||||
--------------
|
||||
|
||||
.. rest_status_code:: success status.yaml
|
||||
|
||||
- 200
|
||||
|
||||
.. rest_status_code:: error status.yaml
|
||||
|
||||
- 400
|
||||
- 401
|
||||
- 422
|
||||
|
||||
Request Parameters
|
||||
------------------
|
||||
|
||||
.. rest_parameters:: parameters_vnfpm.yaml
|
||||
|
||||
- pmJobId: vnf_pm_job_id
|
||||
- callbackUri: vnf_pm_job_create_callback_uri
|
||||
- authentication: vnf_pm_job_create_request_authentication
|
||||
- authType: authentication_auth_type
|
||||
- paramsBasic: authentication_params_basic
|
||||
- userName: paramsBasic_userName
|
||||
- password: paramsBasic_password
|
||||
- paramsOauth2ClientCredentials: authentication_params_oauth2_client_credentials
|
||||
- clientId: params_oauth2_client_credentials_client_id
|
||||
- clientPassword: params_oauth2_client_credentials_client_password
|
||||
- tokenEndpoint: params_oauth2_client_credentials_token_endpoint
|
||||
|
||||
Request Example
|
||||
---------------
|
||||
|
||||
.. literalinclude:: samples/vnfpm/update-pm-job-request.json
|
||||
:language: javascript
|
||||
|
||||
Response Parameters
|
||||
-------------------
|
||||
|
||||
.. rest_parameters:: parameters_vnfpm.yaml
|
||||
|
||||
- callbackUri: vnf_pm_job_create_callback_uri
|
||||
|
||||
Response Example
|
||||
----------------
|
||||
|
||||
.. literalinclude:: samples/vnfpm/update-pm-job-response.json
|
||||
:language: javascript
|
||||
|
||||
Delete a PM job (v2)
|
||||
====================
|
||||
|
||||
.. rest_method:: DELETE /vnfpm/v2/pm_jobs/{pmJobId}
|
||||
|
||||
The DELETE method deletes a PM job.
|
||||
|
||||
If the API consumer intends to delete a PM job, it sends a DELETE request to
|
||||
the "Individual PM job" resource addressed by the appropriate PM job identifier
|
||||
in its resource URI. The VNFM returns a response with a "204 No Content"
|
||||
response code and an empty payload body to the API consumer.
|
||||
|
||||
Response Codes
|
||||
--------------
|
||||
|
||||
.. rest_status_code:: success status.yaml
|
||||
|
||||
- 204
|
||||
|
||||
.. rest_status_code:: error status.yaml
|
||||
|
||||
- 400
|
||||
- 401
|
||||
- 404
|
||||
|
||||
Request Parameters
|
||||
------------------
|
||||
|
||||
.. rest_parameters:: parameters_vnfpm.yaml
|
||||
|
||||
- pmJobId: vnf_pm_job_id
|
||||
|
||||
Get individual performance report (v2)
|
||||
======================================
|
||||
|
||||
.. rest_method:: GET /vnfpm/v2/pm_jobs/{pmJobId}/reports/{reportId}
|
||||
|
||||
The GET method gets individual performance report.
|
||||
|
||||
The API consumer sends to the VNFM a GET request to the URI , in order to read
|
||||
an "Individual performance report" resource. The VNFM returns a "200 OK"
|
||||
response to the API consumer, and includes a data structure of type
|
||||
"PerformanceReport" in the payload body.
|
||||
|
||||
Response Codes
|
||||
--------------
|
||||
|
||||
.. rest_status_code:: success status.yaml
|
||||
|
||||
- 200
|
||||
|
||||
.. rest_status_code:: error status.yaml
|
||||
|
||||
- 400
|
||||
- 401
|
||||
- 404
|
||||
|
||||
Request Parameters
|
||||
------------------
|
||||
|
||||
.. rest_parameters:: parameters_vnfpm.yaml
|
||||
|
||||
- pmJobId: vnf_pm_job_id
|
||||
- reportId: vnf_pm_job_report_id
|
||||
|
||||
Response Parameters
|
||||
-------------------
|
||||
|
||||
.. rest_parameters:: parameters_vnfpm.yaml
|
||||
|
||||
- entries: vnf_pm_job_report_entries
|
||||
- objectType: vnf_pm_job_create_object_type
|
||||
- objectInstanceId: vnf_pm_job_report_entries_object_instance_id
|
||||
- subObjectInstanceId: vnf_pm_job_report_entries_sub_object_instance_id
|
||||
- performanceMetric: vnf_pm_job_report_entries_performance_metric
|
||||
- performanceValues: vnf_pm_job_report_entries_performance_values
|
||||
- timeStamp: performance_values_time_stamp
|
||||
- value: performance_values_value
|
||||
- context: performance_values_context
|
||||
|
||||
Response Example
|
||||
----------------
|
||||
|
||||
.. literalinclude:: samples/vnfpm/show-pm-job-report-response.json
|
||||
:language: javascript
|
9
api-ref/source/v2/vnfpm.rst
Normal file
9
api-ref/source/v2/vnfpm.rst
Normal file
@ -0,0 +1,9 @@
|
||||
:tocdepth: 2
|
||||
|
||||
#########################################################################
|
||||
Virtualized Network Function Performance Management Interface (VNF PM) v2
|
||||
#########################################################################
|
||||
|
||||
.. rest_expand_all::
|
||||
|
||||
.. include:: vnfpm.inc
|
BIN
doc/source/_images/etsi_cnf_auto_healing_fm.png
Normal file
BIN
doc/source/_images/etsi_cnf_auto_healing_fm.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 81 KiB |
45
doc/source/_images/etsi_cnf_auto_healing_fm.pu
Normal file
45
doc/source/_images/etsi_cnf_auto_healing_fm.pu
Normal file
@ -0,0 +1,45 @@
|
||||
@startuml
|
||||
|
||||
frame "Prometheus" {
|
||||
component "Prometheus" as prom
|
||||
}
|
||||
|
||||
frame "NFVO" {
|
||||
component "NFVO" as nfvo
|
||||
}
|
||||
|
||||
frame "tacker" {
|
||||
component "tacker-server" {
|
||||
component "VnffmControllerV2" as fm_ctl
|
||||
component "PrometheusPlugin" as plugin
|
||||
component "VnflcmControllerV2" as lcm_ctl
|
||||
}
|
||||
component "tacker-conductor" {
|
||||
component "Vnffm\ndriver" as fm_driver
|
||||
component "Kubernetes\ninfra-driver" as infra
|
||||
}
|
||||
}
|
||||
|
||||
node "Kubernetes Cluster\n(Master)" as k8s_m
|
||||
cloud "Hardware Resources" as hw {
|
||||
node "Kubernetes Cluster\n(Worker)" as k8s_w {
|
||||
node "Pod" as ins1
|
||||
node "Pod" as ins2
|
||||
}
|
||||
}
|
||||
|
||||
'# Relationships
|
||||
|
||||
nfvo --> fm_ctl: 1. Create subscription\n(Notification Mode)
|
||||
ins1 --> prom: 2. Collect metrics
|
||||
prom --> plugin: 3. POST alert
|
||||
plugin --> fm_driver: 4. Convert alert to alarm
|
||||
nfvo --> fm_ctl: 5. Get Alarms\n(Polling Mode)
|
||||
fm_driver --> nfvo: 6. Send alarm notification\n(Notification Mode)
|
||||
nfvo --> lcm_ctl: 7. Heal
|
||||
lcm_ctl --> infra
|
||||
infra --> k8s_m: 8. Call Kubernetes API
|
||||
k8s_m --> ins2: 9. Create a new pod
|
||||
k8s_m --> ins1: 10. Delete the old pod
|
||||
|
||||
@enduml
|
BIN
doc/source/_images/etsi_cnf_auto_scaling_pm.png
Normal file
BIN
doc/source/_images/etsi_cnf_auto_scaling_pm.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 91 KiB |
47
doc/source/_images/etsi_cnf_auto_scaling_pm.pu
Normal file
47
doc/source/_images/etsi_cnf_auto_scaling_pm.pu
Normal file
@ -0,0 +1,47 @@
|
||||
@startuml
|
||||
|
||||
frame "Prometheus" {
|
||||
component "Prometheus" as prom
|
||||
}
|
||||
|
||||
frame "NFVO" {
|
||||
component "NFVO" as nfvo
|
||||
}
|
||||
|
||||
frame "tacker" {
|
||||
component "tacker-server" {
|
||||
component "VnfpmControllerV2" as pm_ctl
|
||||
component "PrometheusPlugin" as plugin
|
||||
component "VnflcmControllerV2" as lcm_ctl
|
||||
}
|
||||
component "tacker-conductor" {
|
||||
component "Vnfpm\ndriver" as pm_driver
|
||||
component "Kubernetes\ninfra-driver" as infra
|
||||
}
|
||||
}
|
||||
|
||||
node "Kubernetes Cluster\n(Master)" as k8s_m
|
||||
cloud "Hardware Resources" as hw {
|
||||
node "Kubernetes Cluster\n(Worker)" as k8s_w {
|
||||
node "Pod" as ins1
|
||||
node "Pod" as ins2
|
||||
node "Pod" as ins3
|
||||
}
|
||||
}
|
||||
|
||||
'# Relationships
|
||||
nfvo --> pm_ctl: 1. Create PM job
|
||||
pm_ctl --> plugin
|
||||
plugin --> prom: 2. Set PM job
|
||||
ins1 --> prom: 3. Trigger event
|
||||
ins2 --> prom
|
||||
prom --> plugin: 4. POST event
|
||||
plugin --> pm_driver: 5. Convert event to report
|
||||
pm_driver --> nfvo: 6. Send report notification
|
||||
nfvo --> pm_ctl: 7. Get PM report
|
||||
nfvo --> lcm_ctl: 8. Scale
|
||||
lcm_ctl --> infra
|
||||
infra --> k8s_m: 9. Call Kubernetes API
|
||||
k8s_m --> ins3: 10. Change the number of Pods
|
||||
|
||||
@enduml
|
605
doc/source/cli/cli-etsi-vnffm.rst
Normal file
605
doc/source/cli/cli-etsi-vnffm.rst
Normal file
@ -0,0 +1,605 @@
|
||||
====================
|
||||
VNF Fault Management
|
||||
====================
|
||||
|
||||
This document describes how to manage VNF Fault with CLI in Tacker.
|
||||
|
||||
Prerequisites
|
||||
-------------
|
||||
|
||||
The following packages should be installed:
|
||||
|
||||
* tacker
|
||||
* python-tackerclient
|
||||
|
||||
CLI Reference for VNF Fault Management
|
||||
--------------------------------------
|
||||
|
||||
.. note::
|
||||
To call the VNF FM API with vnffm subcommand,
|
||||
you need to use the option **--os-tacker-api-version 2**
|
||||
|
||||
1. List alarms
|
||||
^^^^^^^^^^^^^^
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
$ openstack vnffm alarm list --os-tacker-api-version 2
|
||||
|
||||
|
||||
Result:
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
+--------------------------------------+--------------------------------------+--------------+------------------------+--------------------+--------------------+
|
||||
| ID | Managed Object Id | Ack State | Event Type | Perceived Severity | Probable Cause |
|
||||
+--------------------------------------+--------------------------------------+--------------+------------------------+--------------------+--------------------+
|
||||
| d59545c5-6882-47a2-85aa-b25a5a0591c0 | 398c139d-a047-4047-bd3c-56558de87e67 | ACKNOWLEDGED | PROCESSING_ERROR_ALARM | WARNING | Process Terminated |
|
||||
| fadd40db-a6f8-405f-a77a-72a9d408d7ae | ef635ef7-1f14-47d5-abcb-ed3b28f8ba74 | ACKNOWLEDGED | PROCESSING_ERROR_ALARM | WARNING | Process Terminated |
|
||||
+--------------------------------------+--------------------------------------+--------------+------------------------+--------------------+--------------------+
|
||||
|
||||
|
||||
Help:
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
$ openstack vnffm alarm list --os-tacker-api-version 2 --help
|
||||
usage: openstack vnffm alarm list [-h] [-f {csv,json,table,value,yaml}]
|
||||
[-c COLUMN]
|
||||
[--quote {all,minimal,none,nonnumeric}] [--noindent]
|
||||
[--max-width <integer>] [--fit-width] [--print-empty]
|
||||
[--sort-column SORT_COLUMN]
|
||||
[--sort-ascending | --sort-descending]
|
||||
[--filter <filter>]
|
||||
|
||||
List VNF FM alarms
|
||||
|
||||
optional arguments:
|
||||
-h, --help show this help message and exit
|
||||
--filter <filter> Attribute-based-filtering parameters
|
||||
|
||||
output formatters:
|
||||
output formatter options
|
||||
|
||||
-f {csv,json,table,value,yaml}, --format {csv,json,table,value,yaml}
|
||||
the output format, defaults to table
|
||||
-c COLUMN, --column COLUMN
|
||||
specify the column(s) to include, can be repeated to show multiple
|
||||
columns
|
||||
--sort-column SORT_COLUMN
|
||||
specify the column(s) to sort the data (columns specified first have a
|
||||
priority, non-existing columns are ignored), can be repeated
|
||||
--sort-ascending sort the column(s) in ascending order
|
||||
--sort-descending sort the column(s) in descending order
|
||||
|
||||
CSV Formatter:
|
||||
--quote {all,minimal,none,nonnumeric}
|
||||
when to include quotes, defaults to nonnumeric
|
||||
|
||||
json formatter:
|
||||
--noindent whether to disable indenting the JSON
|
||||
|
||||
table formatter:
|
||||
--max-width <integer>
|
||||
Maximum display width, <1 to disable. You can also use the
|
||||
CLIFF_MAX_TERM_WIDTH environment variable, but the parameter takes
|
||||
precedence.
|
||||
--fit-width Fit the table to the display width. Implied if --max-width greater than
|
||||
0. Set the environment variable CLIFF_FIT_WIDTH=1 to always enable
|
||||
--print-empty Print empty table if there is no data to show.
|
||||
|
||||
|
||||
2. Show alarm
|
||||
^^^^^^^^^^^^^
|
||||
|
||||
The `<vnf-fm-alarm-id>` should be replaced with the 'ID' in result of
|
||||
'1. List alarms'. In the following sample,
|
||||
`d59545c5-6882-47a2-85aa-b25a5a0591c0` is used.
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
$ openstack vnffm alarm show <vnf-fm-alarm-id> --os-tacker-api-version 2
|
||||
|
||||
|
||||
Result:
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
+----------------------------+------------------------------------------------------------------------------------------------------+
|
||||
| Field | Value |
|
||||
+----------------------------+------------------------------------------------------------------------------------------------------+
|
||||
| Ack State | ACKNOWLEDGED |
|
||||
| Alarm Acknowledged Time | |
|
||||
| Alarm Changed Time | 2022-08-29T05:49:02Z |
|
||||
| Alarm Cleared Time | 2022-06-22T23:47:36Z |
|
||||
| Alarm Raised Time | 2022-08-29T05:48:56Z |
|
||||
| Correlated Alarm Ids | |
|
||||
| Event Time | 2022-06-21T23:47:36Z |
|
||||
| Event Type | PROCESSING_ERROR_ALARM |
|
||||
| Fault Details | [ |
|
||||
| | "fingerprint: 5ef77f1f8a3ecb8d", |
|
||||
| | "detail: pid 12345" |
|
||||
| | ] |
|
||||
| Fault Type | Server Down |
|
||||
| ID | d59545c5-6882-47a2-85aa-b25a5a0591c0 |
|
||||
| Is Root Cause | False |
|
||||
| Links | { |
|
||||
| | "self": { |
|
||||
| | "href": "http://127.0.0.1:9890/vnffm/v1/alarms/d59545c5-6882-47a2-85aa-b25a5a0591c0" |
|
||||
| | }, |
|
||||
| | "objectInstance": { |
|
||||
| | "href": "http://127.0.0.1:9890/vnflcm/v2/vnf_instances/398c139d-a047-4047-bd3c-56558de87e67" |
|
||||
| | } |
|
||||
| | } |
|
||||
| Managed Object Id | 398c139d-a047-4047-bd3c-56558de87e67 |
|
||||
| Perceived Severity | WARNING |
|
||||
| Probable Cause | Process Terminated |
|
||||
| Root Cause Faulty Resource | |
|
||||
| Vnfc Instance Ids | [] |
|
||||
+----------------------------+------------------------------------------------------------------------------------------------------+
|
||||
|
||||
|
||||
Help:
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
$ openstack vnffm alarm show --os-tacker-api-version 2 --help
|
||||
usage: openstack vnffm alarm show [-h] [-f {json,shell,table,value,yaml}]
|
||||
[-c COLUMN] [--noindent] [--prefix PREFIX]
|
||||
[--max-width <integer>] [--fit-width] [--print-empty]
|
||||
<vnf-fm-alarm-id>
|
||||
|
||||
Display VNF FM alarm details
|
||||
|
||||
positional arguments:
|
||||
<vnf-fm-alarm-id> VNF FM alarm ID to display
|
||||
|
||||
optional arguments:
|
||||
-h, --help show this help message and exit
|
||||
|
||||
output formatters:
|
||||
output formatter options
|
||||
|
||||
-f {json,shell,table,value,yaml}, --format {json,shell,table,value,yaml}
|
||||
the output format, defaults to table
|
||||
-c COLUMN, --column COLUMN
|
||||
specify the column(s) to include, can be repeated to show multiple
|
||||
columns
|
||||
|
||||
json formatter:
|
||||
--noindent whether to disable indenting the JSON
|
||||
|
||||
shell formatter:
|
||||
a format a UNIX shell can parse (variable="value")
|
||||
|
||||
--prefix PREFIX add a prefix to all variable names
|
||||
|
||||
table formatter:
|
||||
--max-width <integer>
|
||||
Maximum display width, <1 to disable. You can also use the
|
||||
CLIFF_MAX_TERM_WIDTH environment variable, but the parameter takes
|
||||
precedence.
|
||||
--fit-width Fit the table to the display width. Implied if --max-width greater than
|
||||
0. Set the environment variable CLIFF_FIT_WIDTH=1 to always enable
|
||||
--print-empty Print empty table if there is no data to show.
|
||||
|
||||
|
||||
3. Update alarm
|
||||
^^^^^^^^^^^^^^^
|
||||
|
||||
The `<vnf-fm-alarm-id>` should be replaced with the 'ID' in result of
|
||||
'1. List alarms'. In the following sample,
|
||||
`d59545c5-6882-47a2-85aa-b25a5a0591c0` is used.
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
$ openstack vnffm alarm update <vnf-fm-alarm-id> --ack-state UNACKNOWLEDGED --os-tacker-api-version 2
|
||||
|
||||
|
||||
Result:
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
+-----------+----------------+
|
||||
| Field | Value |
|
||||
+-----------+----------------+
|
||||
| Ack State | UNACKNOWLEDGED |
|
||||
+-----------+----------------+
|
||||
|
||||
|
||||
Help:
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
$ openstack vnffm alarm update --os-tacker-api-version 2 --help
|
||||
usage: openstack vnffm alarm update [-h] [-f {json,shell,table,value,yaml}]
|
||||
[-c COLUMN] [--noindent] [--prefix PREFIX]
|
||||
[--max-width <integer>] [--fit-width] [--print-empty]
|
||||
[--ack-state <ack-state>]
|
||||
<vnf-fm-alarm-id>
|
||||
|
||||
Update information about an individual VNF FM alarm
|
||||
|
||||
positional arguments:
|
||||
<vnf-fm-alarm-id> VNF FM alarm ID to update.
|
||||
|
||||
optional arguments:
|
||||
-h, --help show this help message and exit
|
||||
|
||||
output formatters:
|
||||
output formatter options
|
||||
|
||||
-f {json,shell,table,value,yaml}, --format {json,shell,table,value,yaml}
|
||||
the output format, defaults to table
|
||||
-c COLUMN, --column COLUMN
|
||||
specify the column(s) to include, can be repeated to show multiple
|
||||
columns
|
||||
|
||||
json formatter:
|
||||
--noindent whether to disable indenting the JSON
|
||||
|
||||
shell formatter:
|
||||
a format a UNIX shell can parse (variable="value")
|
||||
|
||||
--prefix PREFIX add a prefix to all variable names
|
||||
|
||||
table formatter:
|
||||
--max-width <integer>
|
||||
Maximum display width, <1 to disable. You can also use the
|
||||
CLIFF_MAX_TERM_WIDTH environment variable, but the parameter takes
|
||||
precedence.
|
||||
--fit-width Fit the table to the display width. Implied if --max-width greater than
|
||||
0. Set the environment variable CLIFF_FIT_WIDTH=1 to always enable
|
||||
--print-empty Print empty table if there is no data to show.
|
||||
|
||||
require arguments:
|
||||
--ack-state <ack-state>
|
||||
Ask state can be 'ACKNOWLEDGED' or 'UNACKNOWLEDGED'.
|
||||
|
||||
|
||||
4. Create subscription
|
||||
^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
$ openstack vnffm sub create <param-file> --os-tacker-api-version 2
|
||||
|
||||
|
||||
Result:
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
+--------------+-----------------------------------------------------------------------------------------------------+
|
||||
| Field | Value |
|
||||
+--------------+-----------------------------------------------------------------------------------------------------+
|
||||
| Callback Uri | /nfvo/notify/alarm |
|
||||
| Filter | { |
|
||||
| | "vnfInstanceSubscriptionFilter": { |
|
||||
| | "vnfdIds": [ |
|
||||
| | "27b1c79c-5d78-43dd-a653-a1d6b9f3ea5d" |
|
||||
| | ], |
|
||||
| | "vnfProductsFromProviders": [ |
|
||||
| | { |
|
||||
| | "vnfProvider": "Company", |
|
||||
| | "vnfProducts": [ |
|
||||
| | { |
|
||||
| | "vnfProductName": "Sample VNF", |
|
||||
| | "versions": [ |
|
||||
| | { |
|
||||
| | "vnfSoftwareVersion": "1.0", |
|
||||
| | "vnfdVersions": [ |
|
||||
| | "1.0", |
|
||||
| | "2.0" |
|
||||
| | ] |
|
||||
| | } |
|
||||
| | ] |
|
||||
| | } |
|
||||
| | ] |
|
||||
| | } |
|
||||
| | ], |
|
||||
| | "vnfInstanceIds": [ |
|
||||
| | "b0314420-0c9e-40e0-975e-4bf23b07d0c1" |
|
||||
| | ], |
|
||||
| | "vnfInstanceNames": [ |
|
||||
| | "test" |
|
||||
| | ] |
|
||||
| | }, |
|
||||
| | "notificationTypes": [ |
|
||||
| | "AlarmNotification", |
|
||||
| | "AlarmClearedNotification" |
|
||||
| | ], |
|
||||
| | "faultyResourceTypes": [ |
|
||||
| | "COMPUTE" |
|
||||
| | ], |
|
||||
| | "perceivedSeverities": [ |
|
||||
| | "WARNING" |
|
||||
| | ], |
|
||||
| | "eventTypes": [ |
|
||||
| | "PROCESSING_ERROR_ALARM" |
|
||||
| | ], |
|
||||
| | "probableCauses": [ |
|
||||
| | "Process Terminated" |
|
||||
| | ] |
|
||||
| | } |
|
||||
| ID | 4102e2a5-019b-40ea-8da2-579ecd5f17db |
|
||||
| Links | { |
|
||||
| | "self": { |
|
||||
| | "href": "http://127.0.0.1:9890/vnffm/v1/subscriptions/4102e2a5-019b-40ea-8da2-579ecd5f17db" |
|
||||
| | } |
|
||||
| | } |
|
||||
+--------------+-----------------------------------------------------------------------------------------------------+
|
||||
|
||||
|
||||
Help:
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
$ openstack vnffm sub create --os-tacker-api-version 2 --help
|
||||
usage: openstack vnffm sub create [-h] [-f {json,shell,table,value,yaml}]
|
||||
[-c COLUMN] [--noindent] [--prefix PREFIX]
|
||||
[--max-width <integer>] [--fit-width] [--print-empty]
|
||||
<param-file>
|
||||
|
||||
Create a new VNF FM subscription
|
||||
|
||||
positional arguments:
|
||||
<param-file> Specify create VNF FM subscription request parameters in a json file.
|
||||
|
||||
optional arguments:
|
||||
-h, --help show this help message and exit
|
||||
|
||||
output formatters:
|
||||
output formatter options
|
||||
|
||||
-f {json,shell,table,value,yaml}, --format {json,shell,table,value,yaml}
|
||||
the output format, defaults to table
|
||||
-c COLUMN, --column COLUMN
|
||||
specify the column(s) to include, can be repeated to show multiple
|
||||
columns
|
||||
|
||||
json formatter:
|
||||
--noindent whether to disable indenting the JSON
|
||||
|
||||
shell formatter:
|
||||
a format a UNIX shell can parse (variable="value")
|
||||
|
||||
--prefix PREFIX
|
||||
add a prefix to all variable names
|
||||
|
||||
table formatter:
|
||||
--max-width <integer>
|
||||
Maximum display width, <1 to disable. You can also use the
|
||||
CLIFF_MAX_TERM_WIDTH environment variable, but the parameter takes
|
||||
precedence.
|
||||
--fit-width Fit the table to the display width. Implied if --max-width greater than
|
||||
0. Set the environment variable CLIFF_FIT_WIDTH=1 to always enable
|
||||
--print-empty Print empty table if there is no data to show.
|
||||
|
||||
|
||||
5. List subscriptions
|
||||
^^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
$ openstack vnffm sub list --os-tacker-api-version 2
|
||||
|
||||
|
||||
Result:
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
+--------------------------------------+--------------------+
|
||||
| ID | Callback Uri |
|
||||
+--------------------------------------+--------------------+
|
||||
| 4102e2a5-019b-40ea-8da2-579ecd5f17db | /nfvo/notify/alarm |
|
||||
+--------------------------------------+--------------------+
|
||||
|
||||
|
||||
Help:
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
$ openstack vnffm sub list --os-tacker-api-version 2 --help
|
||||
usage: openstack vnffm sub list [-h] [-f {csv,json,table,value,yaml}]
|
||||
[-c COLUMN]
|
||||
[--quote {all,minimal,none,nonnumeric}]
|
||||
[--noindent] [--max-width <integer>] [--fit-width]
|
||||
[--print-empty] [--sort-column SORT_COLUMN]
|
||||
[--sort-ascending | --sort-descending]
|
||||
[--filter <filter>]
|
||||
|
||||
List VNF FM subs
|
||||
|
||||
optional arguments:
|
||||
-h, --help show this help message and exit
|
||||
--filter <filter>
|
||||
Attribute-based-filtering parameters
|
||||
|
||||
output formatters:
|
||||
output formatter options
|
||||
|
||||
-f {csv,json,table,value,yaml}, --format {csv,json,table,value,yaml}
|
||||
the output format, defaults to table
|
||||
-c COLUMN, --column COLUMN
|
||||
specify the column(s) to include, can be repeated to show multiple
|
||||
columns
|
||||
--sort-column SORT_COLUMN
|
||||
specify the column(s) to sort the data (columns specified first
|
||||
have a priority, non-existing columns are ignored), can be repeated
|
||||
--sort-ascending sort the column(s) in ascending order
|
||||
--sort-descending sort the column(s) in descending order
|
||||
|
||||
CSV Formatter:
|
||||
--quote {all,minimal,none,nonnumeric}
|
||||
when to include quotes, defaults to nonnumeric
|
||||
|
||||
json formatter:
|
||||
--noindent whether to disable indenting the JSON
|
||||
|
||||
table formatter:
|
||||
--max-width <integer>
|
||||
Maximum display width, <1 to disable. You can also use the
|
||||
CLIFF_MAX_TERM_WIDTH environment variable, but the parameter takes
|
||||
precedence.
|
||||
--fit-width Fit the table to the display width. Implied if --max-width greater
|
||||
than 0. Set the environment variable CLIFF_FIT_WIDTH=1 to always
|
||||
enable
|
||||
--print-empty Print empty table if there is no data to show.
|
||||
|
||||
|
||||
6. Show subscription
|
||||
^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
The `<vnf-fm-sub-id>` should be replaced with the 'ID' in result of
|
||||
'4. Create subscription' or '5. List subscriptions'. In the following sample,
|
||||
`4102e2a5-019b-40ea-8da2-579ecd5f17db` is used.
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
$ openstack vnffm sub show <vnf-fm-sub-id> --os-tacker-api-version 2
|
||||
|
||||
|
||||
Result:
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
+--------------+-----------------------------------------------------------------------------------------------------+
|
||||
| Field | Value |
|
||||
+--------------+-----------------------------------------------------------------------------------------------------+
|
||||
| Callback Uri | /nfvo/notify/alarm |
|
||||
| Filter | { |
|
||||
| | "vnfInstanceSubscriptionFilter": { |
|
||||
| | "vnfdIds": [ |
|
||||
| | "27b1c79c-5d78-43dd-a653-a1d6b9f3ea5d" |
|
||||
| | ], |
|
||||
| | "vnfProductsFromProviders": [ |
|
||||
| | { |
|
||||
| | "vnfProvider": "Company", |
|
||||
| | "vnfProducts": [ |
|
||||
| | { |
|
||||
| | "vnfProductName": "Sample VNF", |
|
||||
| | "versions": [ |
|
||||
| | { |
|
||||
| | "vnfSoftwareVersion": "1.0", |
|
||||
| | "vnfdVersions": [ |
|
||||
| | "1.0", |
|
||||
| | "2.0" |
|
||||
| | ] |
|
||||
| | } |
|
||||
| | ] |
|
||||
| | } |
|
||||
| | ] |
|
||||
| | } |
|
||||
| | ], |
|
||||
| | "vnfInstanceIds": [ |
|
||||
| | "b0314420-0c9e-40e0-975e-4bf23b07d0c1" |
|
||||
| | ], |
|
||||
| | "vnfInstanceNames": [ |
|
||||
| | "test" |
|
||||
| | ] |
|
||||
| | }, |
|
||||
| | "notificationTypes": [ |
|
||||
| | "AlarmNotification", |
|
||||
| | "AlarmClearedNotification" |
|
||||
| | ], |
|
||||
| | "faultyResourceTypes": [ |
|
||||
| | "COMPUTE" |
|
||||
| | ], |
|
||||
| | "perceivedSeverities": [ |
|
||||
| | "WARNING" |
|
||||
| | ], |
|
||||
| | "eventTypes": [ |
|
||||
| | "PROCESSING_ERROR_ALARM" |
|
||||
| | ], |
|
||||
| | "probableCauses": [ |
|
||||
| | "Process Terminated" |
|
||||
| | ] |
|
||||
| | } |
|
||||
| ID | 4102e2a5-019b-40ea-8da2-579ecd5f17db |
|
||||
| Links | { |
|
||||
| | "self": { |
|
||||
| | "href": "http://127.0.0.1:9890/vnffm/v1/subscriptions/4102e2a5-019b-40ea-8da2-579ecd5f17db" |
|
||||
| | } |
|
||||
| | } |
|
||||
+--------------+-----------------------------------------------------------------------------------------------------+
|
||||
|
||||
|
||||
Help:
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
$ openstack vnffm sub show --os-tacker-api-version 2 --help
|
||||
usage: openstack vnffm sub show [-h] [-f {json,shell,table,value,yaml}]
|
||||
[-c COLUMN] [--noindent] [--prefix PREFIX]
|
||||
[--max-width <integer>] [--fit-width] [--print-empty]
|
||||
<vnf-fm-sub-id>
|
||||
|
||||
Display VNF FM subscription details
|
||||
|
||||
positional arguments:
|
||||
<vnf-fm-sub-id>
|
||||
VNF FM subscription ID to display
|
||||
|
||||
optional arguments:
|
||||
-h, --help show this help message and exit
|
||||
|
||||
output formatters:
|
||||
output formatter options
|
||||
|
||||
-f {json,shell,table,value,yaml}, --format {json,shell,table,value,yaml}
|
||||
the output format, defaults to table
|
||||
-c COLUMN, --column COLUMN
|
||||
specify the column(s) to include, can be repeated to show multiple
|
||||
columns
|
||||
|
||||
json formatter:
|
||||
--noindent whether to disable indenting the JSON
|
||||
|
||||
shell formatter:
|
||||
a format a UNIX shell can parse (variable="value")
|
||||
|
||||
--prefix PREFIX add a prefix to all variable names
|
||||
|
||||
table formatter:
|
||||
--max-width <integer>
|
||||
Maximum display width, <1 to disable. You can also use the
|
||||
CLIFF_MAX_TERM_WIDTH environment variable, but the parameter takes
|
||||
precedence.
|
||||
--fit-width Fit the table to the display width. Implied if --max-width greater than
|
||||
0. Set the environment variable CLIFF_FIT_WIDTH=1 to always enable
|
||||
--print-empty Print empty table if there is no data to show.
|
||||
|
||||
|
||||
7. Delete subscription
|
||||
^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
The `<vnf-fm-sub-id>` should be replaced with the 'ID' in result of
|
||||
'4. Create subscription' or '5. List subscriptions'. In the following sample,
|
||||
`4102e2a5-019b-40ea-8da2-579ecd5f17db` is used.
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
$ openstack vnffm sub delete <vnf-fm-sub-id> --os-tacker-api-version 2
|
||||
|
||||
|
||||
Result:
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
VNF FM subscription '4102e2a5-019b-40ea-8da2-579ecd5f17db' deleted successfully
|
||||
|
||||
|
||||
Help:
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
$ openstack vnffm sub delete --os-tacker-api-version 2 --help
|
||||
usage: openstack vnffm sub delete [-h] <vnf-fm-sub-id> [<vnf-fm-sub-id> ...]
|
||||
|
||||
Delete VNF FM subscription(s)
|
||||
|
||||
positional arguments:
|
||||
<vnf-fm-sub-id> VNF FM subscription ID(s) to delete
|
||||
|
||||
optional arguments:
|
||||
-h, --help show this help message and exit
|
501
doc/source/cli/cli-etsi-vnfpm.rst
Normal file
501
doc/source/cli/cli-etsi-vnfpm.rst
Normal file
@ -0,0 +1,501 @@
|
||||
==========================
|
||||
VNF Performance Management
|
||||
==========================
|
||||
|
||||
This document describes how to manage VNF Performance with CLI in Tacker.
|
||||
|
||||
Prerequisites
|
||||
-------------
|
||||
|
||||
The following packages should be installed:
|
||||
|
||||
* tacker
|
||||
* python-tackerclient
|
||||
|
||||
CLI Reference for VNF Performance Management
|
||||
--------------------------------------------
|
||||
|
||||
.. note::
|
||||
To call the VNF PM API with vnfpm subcommand, ....
|
||||
you need to use the option **--os-tacker-api-version 2**
|
||||
|
||||
1. Create PM job
|
||||
^^^^^^^^^^^^^^^^
|
||||
|
||||
'param-file': Specify create VNF PM job request parameters in a json file.
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
$ openstack vnfpm job create <param-file> --os-tacker-api-version 2
|
||||
|
||||
|
||||
Result:
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
+-------------------------+----------------------------------------------------------------------------------------------------------+
|
||||
| Field | Value |
|
||||
+-------------------------+----------------------------------------------------------------------------------------------------------+
|
||||
| Callback Uri | http://localhost:9990/notification/callback/test_performancemanagement_interface_min_1 |
|
||||
| Criteria | { |
|
||||
| | "performanceMetric": [ |
|
||||
| | "VCpuUsageMeanVnf.{7749c637-6e8d-4b6c-a6f4-563aa73744dd}" |
|
||||
| | ], |
|
||||
| | "collectionPeriod": 5, |
|
||||
| | "reportingPeriod": 10 |
|
||||
| | } |
|
||||
| ID | ca9b58cf-8493-44e3-9e76-678ea0e80a80 |
|
||||
| Links | { |
|
||||
| | "self": { |
|
||||
| | "href": "http://127.0.0.1:9890/vnfpm/v2/pm_jobs/ca9b58cf-8493-44e3-9e76-678ea0e80a80" |
|
||||
| | }, |
|
||||
| | "objects": [ |
|
||||
| | { |
|
||||
| | "href": "http://127.0.0.1:9890/vnflcm/v2/vnf_instances/7749c637-6e8d-4b6c-a6f4-563aa73744dd" |
|
||||
| | } |
|
||||
| | ] |
|
||||
| | } |
|
||||
| Object Instance Ids | [ |
|
||||
| | "7749c637-6e8d-4b6c-a6f4-563aa73744dd" |
|
||||
| | ] |
|
||||
| Object Type | Vnf |
|
||||
| Reports | [] |
|
||||
| Sub Object Instance Ids | |
|
||||
+-------------------------+----------------------------------------------------------------------------------------------------------+
|
||||
|
||||
|
||||
Help:
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
$ openstack vnfpm job create --os-tacker-api-version 2 --help
|
||||
usage: openstack vnfpm job create [-h] [-f {json,shell,table,value,yaml}]
|
||||
[-c COLUMN] [--noindent] [--prefix PREFIX]
|
||||
[--max-width <integer>] [--fit-width]
|
||||
[--print-empty]
|
||||
<param-file>
|
||||
|
||||
Create a new VNF PM job
|
||||
|
||||
positional arguments:
|
||||
<param-file> Specify create VNF PM job request parameters in a json file.
|
||||
|
||||
optional arguments:
|
||||
-h, --help show this help message and exit
|
||||
|
||||
output formatters:
|
||||
output formatter options
|
||||
|
||||
-f {json,shell,table,value,yaml}, --format {json,shell,table,value,yaml}
|
||||
the output format, defaults to table
|
||||
-c COLUMN, --column COLUMN
|
||||
specify the column(s) to include, can be repeated to
|
||||
show multiple columns
|
||||
|
||||
json formatter:
|
||||
--noindent whether to disable indenting the JSON
|
||||
|
||||
shell formatter:
|
||||
a format a UNIX shell can parse (variable="value")
|
||||
|
||||
--prefix PREFIX
|
||||
add a prefix to all variable names
|
||||
|
||||
table formatter:
|
||||
--max-width <integer>
|
||||
Maximum display width, <1 to disable. You can also use
|
||||
the CLIFF_MAX_TERM_WIDTH environment variable, but the
|
||||
parameter takes precedence.
|
||||
--fit-width Fit the table to the display width. Implied if
|
||||
--max-width greater than 0. Set the environment variable
|
||||
CLIFF_FIT_WIDTH=1 to always enable
|
||||
--print-empty Print empty table if there is no data to show.
|
||||
|
||||
|
||||
2. Update PM job
|
||||
^^^^^^^^^^^^^^^^
|
||||
|
||||
The `<vnf-pm-job-id>` should be replaced with the 'ID' in result of
|
||||
'1. Create PM job'. In the following sample,
|
||||
`ca9b58cf-8493-44e3-9e76-678ea0e80a80` is used.
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
$ openstack vnfpm job update <vnf-pm-job-id> <param-file> --os-tacker-api-version 2
|
||||
|
||||
|
||||
Result:
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
+----------------+---------------------------------------------------------+
|
||||
| Field | Value |
|
||||
+----------------+---------------------------------------------------------+
|
||||
| Authentication | |
|
||||
| Callback Uri | http://localhost:9990/notification/callback/callbackUri |
|
||||
+----------------+---------------------------------------------------------+
|
||||
|
||||
|
||||
Help:
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
$ openstack vnfpm job update --os-tacker-api-version 2 --help
|
||||
usage: openstack vnfpm job update [-h] [-f {json,shell,table,value,yaml}]
|
||||
[-c COLUMN] [--noindent] [--prefix PREFIX]
|
||||
[--max-width <integer>] [--fit-width]
|
||||
[--print-empty]
|
||||
<vnf-pm-job-id> <param-file>
|
||||
|
||||
Update information about an individual VNF PM job
|
||||
|
||||
positional arguments:
|
||||
<vnf-pm-job-id> VNF PM job ID to update.
|
||||
<param-file> Specify update PM job request parameters in a json file.
|
||||
|
||||
optional arguments:
|
||||
-h, --help show this help message and exit
|
||||
|
||||
output formatters:
|
||||
output formatter options
|
||||
|
||||
-f {json,shell,table,value,yaml}, --format {json,shell,table,value,yaml}
|
||||
the output format, defaults to table
|
||||
-c COLUMN, --column COLUMN
|
||||
specify the column(s) to include, can be repeated to
|
||||
show multiple columns
|
||||
|
||||
json formatter:
|
||||
--noindent whether to disable indenting the JSON
|
||||
|
||||
shell formatter:
|
||||
a format a UNIX shell can parse (variable="value")
|
||||
|
||||
--prefix PREFIX
|
||||
add a prefix to all variable names
|
||||
|
||||
table formatter:
|
||||
--max-width <integer>
|
||||
Maximum display width, <1 to disable. You can also use
|
||||
the CLIFF_MAX_TERM_WIDTH environment variable, but the
|
||||
parameter takes precedence.
|
||||
--fit-width Fit the table to the display width. Implied if --max-width
|
||||
greater than 0. Set the environment variable CLIFF_FIT_WIDTH=1
|
||||
to always enable
|
||||
--print-empty Print empty table if there is no data to show.
|
||||
|
||||
|
||||
3. List PM jobs
|
||||
^^^^^^^^^^^^^^^
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
$ openstack vnfpm job list --os-tacker-api-version 2
|
||||
|
||||
|
||||
Result:
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
+--------------------------------------+-------------+----------------------------------------------------------------------------------------------------------+
|
||||
| Id | Object Type | Links |
|
||||
+--------------------------------------+-------------+----------------------------------------------------------------------------------------------------------+
|
||||
| ca9b58cf-8493-44e3-9e76-678ea0e80a80 | Vnf | { |
|
||||
| | | "self": { |
|
||||
| | | "href": "http://127.0.0.1:9890/vnfpm/v2/pm_jobs/ca9b58cf-8493-44e3-9e76-678ea0e80a80" |
|
||||
| | | }, |
|
||||
| | | "objects": [ |
|
||||
| | | { |
|
||||
| | | "href": "http://127.0.0.1:9890/vnflcm/v2/vnf_instances/7749c637-6e8d-4b6c-a6f4-563aa73744dd" |
|
||||
| | | } |
|
||||
| | | ] |
|
||||
| | | } |
|
||||
| 2067f412-6a02-4491-a5ab-426c772110f2 | Vnf | { |
|
||||
| | | "self": { |
|
||||
| | | "href": "http://127.0.0.1:9890/vnfpm/v2/pm_jobs/2067f412-6a02-4491-a5ab-426c772110f2" |
|
||||
| | | }, |
|
||||
| | | "objects": [ |
|
||||
| | | { |
|
||||
| | | "href": "http://127.0.0.1:9890/vnflcm/v2/vnf_instances/492c6347-668f-4b04-bb98-e69af8194887" |
|
||||
| | | } |
|
||||
| | | ] |
|
||||
| | | } |
|
||||
+--------------------------------------+-------------+----------------------------------------------------------------------------------------------------------+
|
||||
|
||||
|
||||
Help:
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
$ openstack vnfpm job list --os-tacker-api-version 2 --help
|
||||
usage: openstack vnfpm job list [-h] [-f {csv,json,table,value,yaml}] [-c COLUMN]
|
||||
[--quote {all,minimal,none,nonnumeric}]
|
||||
[--noindent] [--max-width <integer>] [--fit-width]
|
||||
[--print-empty] [--sort-column SORT_COLUMN]
|
||||
[--sort-ascending | --sort-descending]
|
||||
[--filter <filter>]
|
||||
[--all_fields | --fields fields | --exclude_fields exclude-fields]
|
||||
[--exclude_default]
|
||||
|
||||
List VNF PM jobs
|
||||
|
||||
optional arguments:
|
||||
-h, --help show this help message and exit
|
||||
--filter <filter> Attribute-based-filtering parameters
|
||||
--all_fields Include all complex attributes in the response
|
||||
--fields fields Complex attributes to be included into the response
|
||||
--exclude_fields exclude-fields
|
||||
Complex attributes to be excluded from the response
|
||||
--exclude_default Indicates to exclude all complex attributes from the response. This
|
||||
argument can be used alone or with --fields and --filter. For all
|
||||
other combinations tacker server will throw bad request error
|
||||
|
||||
output formatters:
|
||||
output formatter options
|
||||
|
||||
-f {csv,json,table,value,yaml}, --format {csv,json,table,value,yaml}
|
||||
the output format, defaults to table
|
||||
-c COLUMN, --column COLUMN
|
||||
specify the column(s) to include, can be repeated to show multiple
|
||||
columns
|
||||
--sort-column SORT_COLUMN
|
||||
specify the column(s) to sort the data (columns specified first have a
|
||||
priority, non-existing columns are ignored),
|
||||
can be repeated
|
||||
--sort-ascending sort the column(s) in ascending order
|
||||
--sort-descending sort the column(s) in descending order
|
||||
|
||||
CSV Formatter:
|
||||
--quote {all,minimal,none,nonnumeric}
|
||||
when to include quotes, defaults to nonnumeric
|
||||
|
||||
json formatter:
|
||||
--noindent whether to disable indenting the JSON
|
||||
|
||||
table formatter:
|
||||
--max-width <integer>
|
||||
Maximum display width, <1 to disable. You can also use the
|
||||
CLIFF_MAX_TERM_WIDTH environment variable, but the parameter takes
|
||||
precedence.
|
||||
--fit-width Fit the table to the display width. Implied if --max-width greater than
|
||||
0. Set the environment variable CLIFF_FIT_WIDTH=1 to always enable
|
||||
--print-empty Print empty table if there is no data to show.
|
||||
|
||||
|
||||
4. Show PM job
|
||||
^^^^^^^^^^^^^^
|
||||
|
||||
The `<vnf-pm-job-id>` should be replaced with the 'ID' in result of
|
||||
'1. Create PM job' or '3. List PM jobs'. In the following sample,
|
||||
`ca9b58cf-8493-44e3-9e76-678ea0e80a80` is used.
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
$ openstack vnfpm job show <vnf-pm-job-id> --os-tacker-api-version 2
|
||||
|
||||
|
||||
Result:
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
+-------------------------+------------------------------------------------------------------------------------------------------------------------+
|
||||
| Field | Value |
|
||||
+-------------------------+------------------------------------------------------------------------------------------------------------------------+
|
||||
| Callback Uri | http://localhost:9990/notification/callback/callbackUri |
|
||||
| Criteria | { |
|
||||
| | "performanceMetric": [ |
|
||||
| | "VCpuUsageMeanVnf.{7749c637-6e8d-4b6c-a6f4-563aa73744dd}" |
|
||||
| | ], |
|
||||
| | "collectionPeriod": 5, |
|
||||
| | "reportingPeriod": 10 |
|
||||
| | } |
|
||||
| ID | ca9b58cf-8493-44e3-9e76-678ea0e80a80 |
|
||||
| Links | { |
|
||||
| | "self": { |
|
||||
| | "href": "http://127.0.0.1:9890/vnfpm/v2/pm_jobs/ca9b58cf-8493-44e3-9e76-678ea0e80a80" |
|
||||
| | }, |
|
||||
| | "objects": [ |
|
||||
| | { |
|
||||
| | "href": "http://127.0.0.1:9890/vnflcm/v2/vnf_instances/7749c637-6e8d-4b6c-a6f4-563aa73744dd" |
|
||||
| | } |
|
||||
| | ] |
|
||||
| | } |
|
||||
| Object Instance Ids | [ |
|
||||
| | "7749c637-6e8d-4b6c-a6f4-563aa73744dd" |
|
||||
| | ] |
|
||||
| Object Type | Vnf |
|
||||
| Reports | [ |
|
||||
| | { |
|
||||
| | "href": "/vnfpm/v2/pm_jobs/ca9b58cf-8493-44e3-9e76-678ea0e80a80/reports/53aafe25-7124-4880-8b58-47a93b3dc371", |
|
||||
| | "readyTime": "2022-08-30T08:02:58Z" |
|
||||
| | } |
|
||||
| | ] |
|
||||
| Sub Object Instance Ids | |
|
||||
+-------------------------+------------------------------------------------------------------------------------------------------------------------+
|
||||
|
||||
|
||||
Help:
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
$ openstack vnfpm job show --os-tacker-api-version 2 --help
|
||||
usage: openstack vnfpm job show [-h] [-f {json,shell,table,value,yaml}]
|
||||
[-c COLUMN] [--noindent] [--prefix PREFIX]
|
||||
[--max-width <integer>] [--fit-width] [--print-empty]
|
||||
<vnf-pm-job-id>
|
||||
|
||||
Display VNF PM job details
|
||||
|
||||
positional arguments:
|
||||
<vnf-pm-job-id> VNF PM job ID to display
|
||||
|
||||
optional arguments:
|
||||
-h, --help show this help message and exit
|
||||
|
||||
output formatters:
|
||||
output formatter options
|
||||
|
||||
-f {json,shell,table,value,yaml}, --format {json,shell,table,value,yaml}
|
||||
the output format, defaults to table
|
||||
-c COLUMN, --column COLUMN
|
||||
specify the column(s) to include, can be repeated to show multiple
|
||||
columns
|
||||
|
||||
json formatter:
|
||||
--noindent whether to disable indenting the JSON
|
||||
|
||||
shell formatter:
|
||||
a format a UNIX shell can parse (variable="value")
|
||||
|
||||
--prefix PREFIX add a prefix to all variable names
|
||||
|
||||
table formatter:
|
||||
--max-width <integer>
|
||||
Maximum display width, <1 to disable. You can also use the
|
||||
CLIFF_MAX_TERM_WIDTH environment variable, but the parameter takes
|
||||
precedence.
|
||||
--fit-width Fit the table to the display width. Implied if --max-width greater than
|
||||
0. Set the environment variable CLIFF_FIT_WIDTH=1 to always enable
|
||||
--print-empty Print empty table if there is no data to show.
|
||||
|
||||
|
||||
5. Delete PM job
|
||||
^^^^^^^^^^^^^^^^
|
||||
|
||||
The `<vnf-pm-job-id>` should be replaced with the 'ID' in result of
|
||||
'1. Create PM job' or '3. List PM jobs'. In the following sample,
|
||||
`ca9b58cf-8493-44e3-9e76-678ea0e80a80` is used.
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
$ openstack vnfpm job delete <vnf-pm-job-id> --os-tacker-api-version 2
|
||||
|
||||
|
||||
Result:
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
VNF PM job 'ca9b58cf-8493-44e3-9e76-678ea0e80a80' deleted successfully
|
||||
|
||||
|
||||
Help:
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
$ openstack vnfpm job delete --os-tacker-api-version 2 --help
|
||||
usage: openstack vnfpm job delete [-h] <vnf-pm-job-id> [<vnf-pm-job-id> ...]
|
||||
|
||||
Delete VNF PM job
|
||||
|
||||
positional arguments:
|
||||
<vnf-pm-job-id> VNF PM job ID(s) to delete
|
||||
|
||||
optional arguments:
|
||||
-h, --help show this help message and exit
|
||||
|
||||
|
||||
6. Show PM job report
|
||||
^^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
The `<vnf-pm-job-id>` should be replaced with the 'ID' in result of
|
||||
'1. Create PM job' or '3. List PM jobs'. In the following sample,
|
||||
`500f538e-44a5-460a-a95e-e9189354c2be` is used.
|
||||
The `<vnf-pm-report-id>` should be replaced with the last part marked by `/` of
|
||||
'href'. The 'href' is part of 'Reports' in result of '4. Show PM job'.
|
||||
In the following sample, `53aafe25-7124-4880-8b58-47a93b3dc371` is used.
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
$ openstack vnfpm report show <vnf-pm-job-id> <vnf-pm-report-id> --os-tacker-api-version 2
|
||||
|
||||
|
||||
Result:
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
+---------+---------------------------------------------------------------------------------------+
|
||||
| Field | Value |
|
||||
+---------+---------------------------------------------------------------------------------------+
|
||||
| Entries | [ |
|
||||
| | { |
|
||||
| | "objectType": "Vnf", |
|
||||
| | "objectInstanceId": "495ffedf-2755-42c8-bf14-a5433701311e", |
|
||||
| | "performanceMetric": "VCpuUsageMeanVnf.495ffedf-2755-42c8-bf14-a5433701311e", |
|
||||
| | "performanceValues": [ |
|
||||
| | { |
|
||||
| | "timeStamp": "2022-08-30T08:02:58Z", |
|
||||
| | "value": "99.0" |
|
||||
| | } |
|
||||
| | ] |
|
||||
| | } |
|
||||
| | ] |
|
||||
+---------+---------------------------------------------------------------------------------------+
|
||||
|
||||
|
||||
Help:
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
$ openstack vnfpm report show --os-tacker-api-version 2 --help
|
||||
usage: openstack vnfpm report show [-h] [-f {json,shell,table,value,yaml}]
|
||||
[-c COLUMN] [--noindent] [--prefix PREFIX]
|
||||
[--max-width <integer>] [--fit-width] [--print-empty]
|
||||
<vnf-pm-job-id> <vnf-pm-report-id>
|
||||
|
||||
Display VNF PM report details
|
||||
|
||||
positional arguments:
|
||||
<vnf-pm-job-id>
|
||||
VNF PM job id where the VNF PM report is located
|
||||
<vnf-pm-report-id>
|
||||
VNF PM report ID to display
|
||||
|
||||
optional arguments:
|
||||
-h, --help show this help message and exit
|
||||
|
||||
output formatters:
|
||||
output formatter options
|
||||
|
||||
-f {json,shell,table,value,yaml}, --format {json,shell,table,value,yaml}
|
||||
the output format, defaults to table
|
||||
-c COLUMN, --column COLUMN
|
||||
specify the column(s) to include, can be repeated to show multiple
|
||||
columns
|
||||
|
||||
json formatter:
|
||||
--noindent whether to disable indenting the JSON
|
||||
|
||||
shell formatter:
|
||||
a format a UNIX shell can parse (variable="value")
|
||||
|
||||
--prefix PREFIX
|
||||
add a prefix to all variable names
|
||||
|
||||
table formatter:
|
||||
--max-width <integer>
|
||||
Maximum display width, <1 to disable. You can also use the
|
||||
CLIFF_MAX_TERM_WIDTH environment variable, but the parameter takes
|
||||
precedence.
|
||||
--fit-width Fit the table to the display width. Implied if --max-width greater than
|
||||
0. Set the environment variable CLIFF_FIT_WIDTH=1 to always enable
|
||||
--print-empty Print empty table if there is no data to show.
|
@ -24,6 +24,8 @@ Operations for ETSI NFV-SOL implementation
|
||||
|
||||
cli-etsi-vnfpkgm
|
||||
cli-etsi-vnflcm
|
||||
cli-etsi-vnffm
|
||||
cli-etsi-vnfpm
|
||||
|
||||
|
||||
Operations for Legacy implementation
|
||||
|
736
doc/source/user/etsi_cnf_auto_healing_fm.rst
Normal file
736
doc/source/user/etsi_cnf_auto_healing_fm.rst
Normal file
@ -0,0 +1,736 @@
|
||||
===============================================================
|
||||
ETSI NFV-SOL CNF Auto Healing With Prometheus via FM Interfaces
|
||||
===============================================================
|
||||
|
||||
This document describes how to auto heal CNF in Tacker with Prometheus
|
||||
via Fault Management Interfaces.
|
||||
|
||||
Overview
|
||||
--------
|
||||
|
||||
Using the Fault Management interfaces, there are two ways to implement
|
||||
auto heal, Polling Mode and Notification Mode.
|
||||
|
||||
The diagram below shows an overview of the CNF auto healing.
|
||||
|
||||
1. Create FM subscription(Notification Mode)
|
||||
|
||||
NFVO sends a request to Tacker to create a FM subscription.
|
||||
|
||||
2. Collect metrics
|
||||
|
||||
Prometheus collects metrics and decides whether triggering alert
|
||||
is needed or not.
|
||||
|
||||
3. POST alert
|
||||
|
||||
Prometheus sends alerts to Tacker.
|
||||
|
||||
4. Convert alert to alarm
|
||||
|
||||
Tacker receives informed alerts, converts them to alarms, and saves
|
||||
them to Tacker DB.
|
||||
|
||||
5. Get Alarms and return result(Polling Mode)
|
||||
|
||||
NFVO sends a request at regular intervals to get the alarm in
|
||||
the Tacker. Tacker searches Tacker DB with the query condition
|
||||
specified by NFVO, and returns the alarm that matches the
|
||||
condition to NFVO.
|
||||
|
||||
6. Send alarm notification(Notification Mode)
|
||||
|
||||
VnffmDriver finds all FM subscriptions in the DB and matches the
|
||||
alerts to them. If there is a FM subscription that can match
|
||||
successfully, the alarm is sent to the specified path of the
|
||||
NFVO. If the match is not successful, the processing ends.
|
||||
|
||||
7. Heal
|
||||
|
||||
NFVO recognizes the failure of the CNF from the alarm and sends
|
||||
a heal request to the Tacker.
|
||||
|
||||
8. Call Kubernetes API
|
||||
|
||||
In tacker-conductor, the request is redirected again to an
|
||||
appropriate infra-driver (in this case Kubernetes infra-driver)
|
||||
according to the contents of the instantiate parameters. Then,
|
||||
Kubernetes infra-driver calls Kubernetes APIs.
|
||||
|
||||
9. Create a new pod
|
||||
|
||||
Kubernetes Master adds the number of Pods according to the
|
||||
API calls.
|
||||
|
||||
10. Delete the old pod
|
||||
|
||||
Kubernetes Master deletes the number of Pods according to the
|
||||
API calls.
|
||||
|
||||
.. figure:: ../_images/etsi_cnf_auto_healing_fm.png
|
||||
:align: left
|
||||
|
||||
Prerequisites
|
||||
-------------
|
||||
|
||||
* The following packages should be installed:
|
||||
|
||||
* tacker
|
||||
* python-tackerclient
|
||||
|
||||
At least one VNF instance with status of ``INSTANTIATED`` is required.
|
||||
You can refer to :doc:`./etsi_containerized_vnf_usage_guide` for the
|
||||
procedure to instantiate VNF.
|
||||
|
||||
The VNF Package used can refer to `the sample`_.
|
||||
|
||||
* The following third-party services should be installed
|
||||
|
||||
* NFVO
|
||||
* Prometheus(including Alertmanager)
|
||||
|
||||
Each operator has its own NFVO, there is no restriction here, as long as
|
||||
it conforms to `ETSI NFV-SOL 002 v3.3.1`_ and `ETSI NFV-SOL 003 v3.3.1`_,
|
||||
it can be used.
|
||||
|
||||
For the installation of Prometheus and Alertmanager, please refer to
|
||||
the `Prometheus official website`_.
|
||||
|
||||
How to configure Prometheus Plugin
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
The Prometheus Plugin is disabled by default in Tacker.
|
||||
For it to work, we need to find ``fault_management`` in
|
||||
``tacker.conf`` and change its value to ``True``.
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
$ vi /etc/tacker/tacker.conf
|
||||
...
|
||||
[prometheus_plugin]
|
||||
fault_management = True
|
||||
...
|
||||
|
||||
After modifying the configuration file, don't forget to restart the
|
||||
Tacker service to take effect.
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
$ sudo systemctl stop devstack@tacker
|
||||
$ sudo systemctl restart devstack@tacker-conductor
|
||||
$ sudo systemctl start devstack@tacker
|
||||
|
||||
How to configure Prometheus
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
Unlike auto scale via PM interfaces, auto heal via FM interfaces does not
|
||||
need to login Prometheus server via SSH to modify its configuration.
|
||||
Users need to manually modify the configuration file of Prometheus, and
|
||||
then it will monitor the specified resources.
|
||||
|
||||
For the setting method of Prometheus configuration file, please refer to
|
||||
`Prometheus Configuration`_ for details.
|
||||
|
||||
The following is the content of a sample ``prometheus.yml``:
|
||||
|
||||
.. code-block:: yaml
|
||||
|
||||
# my global config
|
||||
global:
|
||||
scrape_interval: 15s # Set the scrape interval to every 15 seconds. Default is every 1 minute.
|
||||
evaluation_interval: 15s # Evaluate rules every 15 seconds. The default is every 1 minute.
|
||||
# scrape_timeout is set to the global default (10s).
|
||||
|
||||
# Alertmanager configuration
|
||||
alerting:
|
||||
alertmanagers:
|
||||
- static_configs:
|
||||
- targets:
|
||||
- <IP of Alertmanager>:9093
|
||||
|
||||
# Load rules once and periodically evaluate them according to the global 'evaluation_interval'.
|
||||
rule_files:
|
||||
# - "first_rules.yml"
|
||||
# - "second_rules.yml"
|
||||
- "tacker-samplevnf-rules.yaml"
|
||||
|
||||
# A scrape configuration containing exactly one endpoint to scrape:
|
||||
# Here it's Prometheus itself.
|
||||
scrape_configs:
|
||||
# The job name is added as a label `job=<job_name>` to any timeseries scraped from this config.
|
||||
- job_name: "kube-state-metrics"
|
||||
|
||||
# metrics_path defaults to '/metrics'
|
||||
# scheme defaults to 'http'.
|
||||
|
||||
static_configs:
|
||||
- targets: ["<IP of Kubernetes>:<port of metrics>"]
|
||||
|
||||
The following is the content of a sample ``tacker-samplevnf-rules.yaml``:
|
||||
|
||||
.. code-block:: yaml
|
||||
|
||||
groups:
|
||||
- name: example
|
||||
rules:
|
||||
- alert: KubePodCrashLooping
|
||||
annotations:
|
||||
probable_cause: The server cannot be connected.
|
||||
fault_type: Server Down
|
||||
fault_details: fault details
|
||||
expr: |
|
||||
rate(kube_pod_container_status_restarts_total{job="kube-state-metrics"}[10m]) * 60 * 5 > 0
|
||||
for: 5m
|
||||
labels:
|
||||
receiver_type: tacker
|
||||
function_type: vnffm
|
||||
vnf_instance_id: <VNF instance ID>
|
||||
perceived_severity: WARNING
|
||||
event_type: EQUIPMENT_ALARM
|
||||
|
||||
The following is the content of a sample ``alertmanager.yml``:
|
||||
|
||||
.. code-block:: yaml
|
||||
|
||||
route:
|
||||
group_by: ['cluster']
|
||||
group_wait: 30s
|
||||
group_interval: 2m
|
||||
repeat_interval: 1h
|
||||
receiver: 'web.boo'
|
||||
routes:
|
||||
- match:
|
||||
alertname: KubePodCrashLooping
|
||||
receiver: 'web.boo'
|
||||
receivers:
|
||||
- name: 'web.boo'
|
||||
webhook_configs:
|
||||
- url: 'http://<IP of Tacker>:9890/alert'
|
||||
inhibit_rules:
|
||||
- source_match:
|
||||
severity: 'critical'
|
||||
target_match:
|
||||
severity: 'warning'
|
||||
equal: ['dev', 'instance']
|
||||
|
||||
How does NFVO Auto Heal CNF
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
Through the FM interfaces, there are two modes to auto heal the CNF.
|
||||
|
||||
Polling Mode
|
||||
^^^^^^^^^^^^
|
||||
|
||||
This mode is where NFVO actively sends a get alarms request to Tacker
|
||||
at an interval.
|
||||
According to the content of the response, confirm the VNFC instance ID
|
||||
of the CNF in which the problem occurred.
|
||||
|
||||
The following is an example of a response to a get alarms request:
|
||||
|
||||
.. code-block:: json
|
||||
|
||||
[
|
||||
{
|
||||
"id": "78a39661-60a8-4824-b989-88c1b0c3534a",
|
||||
"managedObjectId": "c61314d0-f583-4ab3-a457-46426bce02d3",
|
||||
"vnfcInstanceIds": [
|
||||
"VDU2-curry-probe-test001-766bdd79bf-wgc7m"
|
||||
],
|
||||
"alarmRaisedTime": "2021-09-03 10:21:03",
|
||||
"alarmChangedTime": "",
|
||||
"alarmClearedTime": "",
|
||||
"alarmAcknowledgedTime": "",
|
||||
"ackState": "UNACKNOWLEDGED",
|
||||
"perceivedSeverity": "WARNING",
|
||||
"eventTime": "2021-09-03 10:06:03",
|
||||
"eventType": "EQUIPMENT_ALARM",
|
||||
"faultType": "",
|
||||
"probableCause": "The server cannot be connected.",
|
||||
"isRootCause": "false",
|
||||
"correlatedAlarmIds": [],
|
||||
"faultDetails": [],
|
||||
"_links": {
|
||||
"self": "/vnffm/v1/alarms/78a39661-60a8-4824-b989-88c1b0c3534a",
|
||||
"objectInstance": ""
|
||||
}
|
||||
}
|
||||
]
|
||||
|
||||
.. note::
|
||||
|
||||
The value of ``managedObjectId`` is the VNF instance ID.
|
||||
The value of ``vnfcInstanceIds`` is the VNFC instance IDs.
|
||||
|
||||
Then send a heal request specifying the VNFC instance ID to Tacker.
|
||||
The format of the heal request can refer to `heal request`_.
|
||||
|
||||
.. _Notification Mode :
|
||||
|
||||
Notification Mode
|
||||
^^^^^^^^^^^^^^^^^
|
||||
|
||||
This mode is that NFVO will create a FM subscription on Tacker.
|
||||
In this FM subscription, multiple filter conditions can be set, so that
|
||||
the VNF instance that has been instantiated in Tacker can be matched.
|
||||
|
||||
Create FM subscription can be executed by the following CLI command.
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
$ openstack vnffm sub create sample_param_file.json --os-tacker-api-version 2
|
||||
|
||||
The content of the sample ``sample_param_file.json`` in this document is
|
||||
as follows:
|
||||
|
||||
.. code-block:: json
|
||||
|
||||
{
|
||||
"filter": {
|
||||
"vnfInstanceSubscriptionFilter": {
|
||||
"vnfdIds": [
|
||||
"4d5ffa3b-9dde-45a9-a805-659dc8df0c02"
|
||||
],
|
||||
"vnfProductsFromProviders": [
|
||||
{
|
||||
"vnfProvider": "Company",
|
||||
"vnfProducts": [
|
||||
{
|
||||
"vnfProductName": "Sample VNF",
|
||||
"versions": [
|
||||
{
|
||||
"vnfSoftwareVersion": 1.0,
|
||||
"vnfdVersions": [1.0, 2.0]
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
],
|
||||
"vnfInstanceIds": [
|
||||
"aad7d2fe-ed51-47da-a20d-7b299860607e"
|
||||
],
|
||||
"vnfInstanceNames": [
|
||||
"test"
|
||||
]
|
||||
},
|
||||
"notificationTypes": [
|
||||
"AlarmNotification"
|
||||
],
|
||||
"faultyResourceTypes": [
|
||||
"COMPUTE"
|
||||
],
|
||||
"perceivedSeverities": [
|
||||
"WARNING"
|
||||
],
|
||||
"eventTypes": [
|
||||
"EQUIPMENT_ALARM"
|
||||
],
|
||||
"probableCauses": [
|
||||
"The server cannot be connected."
|
||||
]
|
||||
},
|
||||
"callbackUri": "http://127.0.0.1:9890/vnffm/v1/subscriptions/407cb9c5-60f2-43e8-a43a-925c0323c3eb",
|
||||
"authentication": {
|
||||
"authType": [
|
||||
"BASIC",
|
||||
"OAUTH2_CLIENT_CREDENTIALS"
|
||||
],
|
||||
"paramsBasic": {
|
||||
"userName": "nfvo",
|
||||
"password": "nfvopwd"
|
||||
},
|
||||
"paramsOauth2ClientCredentials": {
|
||||
"clientId": "auth_user_name",
|
||||
"clientPassword": "auth_password",
|
||||
"tokenEndpoint": "token_endpoint"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Here is an example of create FM subscription:
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
$ openstack vnffm sub create sample_param_file.json --os-tacker-api-version 2
|
||||
+--------------+-----------------------------------------------------------------------------------------------------+
|
||||
| Field | Value |
|
||||
+--------------+-----------------------------------------------------------------------------------------------------+
|
||||
| Callback Uri | /nfvo/notification |
|
||||
| Filter | { |
|
||||
| | "vnfInstanceSubscriptionFilter": { |
|
||||
| | "vnfdIds": [ |
|
||||
| | "4d5ffa3b-9dde-45a9-a805-659dc8df0c02" |
|
||||
| | ], |
|
||||
| | "vnfProductsFromProviders": [ |
|
||||
| | { |
|
||||
| | "vnfProvider": "Company", |
|
||||
| | "vnfProducts": [ |
|
||||
| | { |
|
||||
| | "vnfProductName": "Sample VNF", |
|
||||
| | "versions": [ |
|
||||
| | { |
|
||||
| | "vnfSoftwareVersion": "1.0", |
|
||||
| | "vnfdVersions": [ |
|
||||
| | "1.0", |
|
||||
| | "2.0" |
|
||||
| | ] |
|
||||
| | } |
|
||||
| | ] |
|
||||
| | } |
|
||||
| | ] |
|
||||
| | } |
|
||||
| | ], |
|
||||
| | "vnfInstanceIds": [ |
|
||||
| | "aad7d2fe-ed51-47da-a20d-7b299860607e" |
|
||||
| | ], |
|
||||
| | "vnfInstanceNames": [ |
|
||||
| | "test" |
|
||||
| | ] |
|
||||
| | }, |
|
||||
| | "notificationTypes": [ |
|
||||
| | "AlarmNotification" |
|
||||
| | ], |
|
||||
| | "faultyResourceTypes": [ |
|
||||
| | "COMPUTE" |
|
||||
| | ], |
|
||||
| | "perceivedSeverities": [ |
|
||||
| | "WARNING" |
|
||||
| | ], |
|
||||
| | "eventTypes": [ |
|
||||
| | "EQUIPMENT_ALARM" |
|
||||
| | ], |
|
||||
| | "probableCauses": [ |
|
||||
| | "The server cannot be connected." |
|
||||
| | ] |
|
||||
| | } |
|
||||
| ID | a7a18ac6-a668-4d94-8ba0-f04c20cfeacd |
|
||||
| Links | { |
|
||||
| | "self": { |
|
||||
| | "href": "http://127.0.0.1:9890/vnffm/v1/subscriptions/407cb9c5-60f2-43e8-a43a-925c0323c3eb" |
|
||||
| | } |
|
||||
| | } |
|
||||
+--------------+-----------------------------------------------------------------------------------------------------+
|
||||
|
||||
After the FM subscription is created, whenever Prometheus sends an alert
|
||||
to Tacker, Tacker will find a matching FM subscription based on the
|
||||
information in the alert.
|
||||
|
||||
The following is an example of the request body that Prometheus sends
|
||||
an alert:
|
||||
|
||||
.. code-block:: json
|
||||
|
||||
{
|
||||
"receiver": "receiver",
|
||||
"status": "firing",
|
||||
"alerts": [
|
||||
{
|
||||
"status": "firing",
|
||||
"labels": {
|
||||
"receiver_type": "tacker",
|
||||
"function_type": "vnffm",
|
||||
"vnf_instance_id": "aad7d2fe-ed51-47da-a20d-7b299860607e",
|
||||
"pod": "curry-probe-test001-766bdd79bf-wgc7m",
|
||||
"perceived_severity": "WARNING",
|
||||
"event_type": "PROCESSING_ERROR_ALARM"
|
||||
},
|
||||
"annotations": {
|
||||
"fault_type": "Server Down",
|
||||
"probable_cause": "Process Terminated",
|
||||
"fault_details": "pid 12345"
|
||||
},
|
||||
"startsAt": "2022-06-21T23:47:36.453Z",
|
||||
"endsAt": "0001-01-01T00:00:00Z",
|
||||
"generatorURL": "http://controller147:9090/graph?g0.expr=up%7Bjob%3D%22node%22%7D+%3D%3D+0&g0.tab=1",
|
||||
"fingerprint": "5ef77f1f8a3ecb8d"
|
||||
}
|
||||
],
|
||||
"groupLabels": {},
|
||||
"commonLabels": {
|
||||
"alertname": "NodeInstanceDown",
|
||||
"job": "node"
|
||||
},
|
||||
"commonAnnotations": {
|
||||
"description": "sample"
|
||||
},
|
||||
"externalURL": "http://controller147:9093",
|
||||
"version": "4",
|
||||
"groupKey": "{}:{}",
|
||||
"truncatedAlerts": 0
|
||||
}
|
||||
|
||||
Finally, a notification is sent to the Callback Uri (i.e. NFVO) in the FM
|
||||
subscription. NFVO sends a heal request to Tacker according to the
|
||||
content in the notification.
|
||||
The format of the heal request can refer to `heal request`_.
|
||||
|
||||
The following is an example of the request body that Tacker sends
|
||||
a notification:
|
||||
|
||||
.. code-block:: json
|
||||
|
||||
{
|
||||
"id": "87bea1ed-6ced-403e-8640-2c631eb55d08",
|
||||
"notificationType": "AlarmNotification",
|
||||
"subscriptionId": "fb782658-af96-47e7-9faa-90ba8416e426",
|
||||
"timeStamp": "2021-09-03 10:21:03",
|
||||
"alarm": {
|
||||
"id": "78a39661-60a8-4824-b989-88c1b0c3534a",
|
||||
"managedObjectId": "c61314d0-f583-4ab3-a457-46426bce02d3",
|
||||
"vnfcInstanceIds": [
|
||||
"VDU2-curry-probe-test001-766bdd79bf-wgc7m"
|
||||
],
|
||||
"alarmRaisedTime": "2021-09-03 10:21:03",
|
||||
"alarmChangedTime": "",
|
||||
"alarmClearedTime": "",
|
||||
"alarmAcknowledgedTime": "",
|
||||
"ackState": "UNACKNOWLEDGED",
|
||||
"perceivedSeverity": "WARNING",
|
||||
"eventTime": "2021-09-03 10:06:03",
|
||||
"eventType": "EQUIPMENT_ALARM",
|
||||
"faultType": "",
|
||||
"probableCause": "The server cannot be connected.",
|
||||
"isRootCause": "false",
|
||||
"correlatedAlarmIds": [],
|
||||
"faultDetails": [],
|
||||
"_links": {
|
||||
"self": {
|
||||
"href": "/vnffm/v1/alarms/78a39661-60a8-4824-b989-88c1b0c3534a"
|
||||
},
|
||||
"objectInstance": {
|
||||
"href": "/vnffm/v1/vnf_instances/c61314d0-f583-4ab3-a457-46426bce02d3"
|
||||
}
|
||||
}
|
||||
},
|
||||
"_links": {
|
||||
"subscription": {
|
||||
"href": "/vnffm/v1/subscriptions/fb782658-af96-47e7-9faa-90ba8416e426"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
How to use the CLI of FM interfaces
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
Get all alarms
|
||||
^^^^^^^^^^^^^^
|
||||
|
||||
Get all alarms can be executed by the following CLI command.
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
$ openstack vnffm alarm list --os-tacker-api-version 2
|
||||
|
||||
Here is an example of getting all alarms:
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
$ openstack vnffm alarm list --os-tacker-api-version 2
|
||||
+--------------------------------------+--------------------------------------+--------------+------------------------+--------------------+--------------------+
|
||||
| ID | Managed Object Id | Ack State | Event Type | Perceived Severity | Probable Cause |
|
||||
+--------------------------------------+--------------------------------------+--------------+------------------------+--------------------+--------------------+
|
||||
| 1829331c-4439-4bda-bf57-832fb5786ce9 | fe9b053d-777a-442f-ad24-cfc9fd23b0c4 | ACKNOWLEDGED | PROCESSING_ERROR_ALARM | WARNING | Process Terminated |
|
||||
| 70935ca5-e03c-4190-8eca-233dd4b2be9a | ca1999fd-44ef-43c0-b3e3-3290a54b2bb4 | ACKNOWLEDGED | PROCESSING_ERROR_ALARM | WARNING | Process Terminated |
|
||||
+--------------------------------------+--------------------------------------+--------------+------------------------+--------------------+--------------------+
|
||||
|
||||
Get the specified alarm
|
||||
^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
Get the specified alarm can be executed by the following CLI command.
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
$ openstack vnffm alarm show ALARM_ID --os-tacker-api-version 2
|
||||
|
||||
Here is an example of getting the specified alarm:
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
$ openstack vnffm alarm show 1829331c-4439-4bda-bf57-832fb5786ce9 --os-tacker-api-version 2
|
||||
+----------------------------+------------------------------------------------------------------------------------------------------+
|
||||
| Field | Value |
|
||||
+----------------------------+------------------------------------------------------------------------------------------------------+
|
||||
| Ack State | ACKNOWLEDGED |
|
||||
| Alarm Acknowledged Time | |
|
||||
| Alarm Changed Time | 2022-08-31T07:47:05Z |
|
||||
| Alarm Cleared Time | 2022-06-22T23:47:36Z |
|
||||
| Alarm Raised Time | 2022-08-31T07:46:59Z |
|
||||
| Correlated Alarm Ids | |
|
||||
| Event Time | 2022-06-21T23:47:36Z |
|
||||
| Event Type | PROCESSING_ERROR_ALARM |
|
||||
| Fault Details | [ |
|
||||
| | "fingerprint: 5ef77f1f8a3ecb8d", |
|
||||
| | "detail: pid 12345" |
|
||||
| | ] |
|
||||
| Fault Type | Server Down |
|
||||
| ID | 1829331c-4439-4bda-bf57-832fb5786ce9 |
|
||||
| Is Root Cause | False |
|
||||
| Links | { |
|
||||
| | "self": { |
|
||||
| | "href": "http://127.0.0.1:9890/vnffm/v1/alarms/1829331c-4439-4bda-bf57-832fb5786ce9" |
|
||||
| | }, |
|
||||
| | "objectInstance": { |
|
||||
| | "href": "http://127.0.0.1:9890/vnflcm/v2/vnf_instances/fe9b053d-777a-442f-ad24-cfc9fd23b0c4" |
|
||||
| | } |
|
||||
| | } |
|
||||
| Managed Object Id | fe9b053d-777a-442f-ad24-cfc9fd23b0c4 |
|
||||
| Perceived Severity | WARNING |
|
||||
| Probable Cause | Process Terminated |
|
||||
| Root Cause Faulty Resource | |
|
||||
| Vnfc Instance Ids | [ |
|
||||
| | "VDU2-curry-probe-test001-766bdd79bf-wgc7m" |
|
||||
| | ] |
|
||||
+----------------------------+------------------------------------------------------------------------------------------------------+
|
||||
|
||||
Change target Alarm
|
||||
^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
Change the ackState of the alarm can be executed by the following CLI
|
||||
command.
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
$ openstack vnffm alarm update ALARM_ID --ack-state UNACKNOWLEDGED --os-tacker-api-version 2
|
||||
|
||||
.. note::
|
||||
|
||||
The value of ``--ack-state`` can only be ``ACKNOWLEDGED`` or
|
||||
``UNACKNOWLEDGED``.
|
||||
|
||||
Here is an example of changing target alarm:
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
$ openstack vnffm alarm update 1829331c-4439-4bda-bf57-832fb5786ce9 --ack-state UNACKNOWLEDGED --os-tacker-api-version 2
|
||||
+-----------+----------------+
|
||||
| Field | Value |
|
||||
+-----------+----------------+
|
||||
| Ack State | UNACKNOWLEDGED |
|
||||
+-----------+----------------+
|
||||
|
||||
Create a new FM subscription
|
||||
^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
The creation of FM subscription has been introduced in the
|
||||
:ref:`Notification Mode` above, and the use case of the CLI command
|
||||
can be referred to there.
|
||||
|
||||
Get all FM subscriptions
|
||||
^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
Get all FM subscriptions can be executed by the following CLI command.
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
$ openstack vnffm sub list --os-tacker-api-version 2
|
||||
|
||||
Here is an example of getting all FM subscriptions:
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
$ openstack vnffm sub list --os-tacker-api-version 2
|
||||
+--------------------------------------+--------------------------------------------------------------------------------+
|
||||
| ID | Callback Uri |
|
||||
+--------------------------------------+--------------------------------------------------------------------------------+
|
||||
| 407cb9c5-60f2-43e8-a43a-925c0323c3eb | http://localhost:9990/notification/callback/test_faultmanagement_interface_max |
|
||||
| c4f21875-c41d-42a8-967a-3ec7efe1d867 | http://localhost:9990/notification/callback/test_faultmanagement_interface_min |
|
||||
+--------------------------------------+--------------------------------------------------------------------------------+
|
||||
|
||||
Get the specified FM subscription
|
||||
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
Get the specified FM subscription can be executed by the following CLI command.
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
$ openstack vnffm sub show FM_SUBSCRIPTION_ID --os-tacker-api-version 2
|
||||
|
||||
Here is an example of getting the specified FM subscription:
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
$ openstack vnffm sub show 407cb9c5-60f2-43e8-a43a-925c0323c3eb --os-tacker-api-version 2
|
||||
+--------------+-----------------------------------------------------------------------------------------------------+
|
||||
| Field | Value |
|
||||
+--------------+-----------------------------------------------------------------------------------------------------+
|
||||
| Callback Uri | http://localhost:9990/notification/callback/test_faultmanagement_interface_max |
|
||||
| Filter | { |
|
||||
| | "vnfInstanceSubscriptionFilter": { |
|
||||
| | "vnfdIds": [ |
|
||||
| | "4d5ffa3b-9dde-45a9-a805-659dc8df0c02" |
|
||||
| | ], |
|
||||
| | "vnfProductsFromProviders": [ |
|
||||
| | { |
|
||||
| | "vnfProvider": "Company", |
|
||||
| | "vnfProducts": [ |
|
||||
| | { |
|
||||
| | "vnfProductName": "Sample VNF", |
|
||||
| | "versions": [ |
|
||||
| | { |
|
||||
| | "vnfSoftwareVersion": "1.0", |
|
||||
| | "vnfdVersions": [ |
|
||||
| | "1.0" |
|
||||
| | ] |
|
||||
| | } |
|
||||
| | ] |
|
||||
| | } |
|
||||
| | ] |
|
||||
| | } |
|
||||
| | ], |
|
||||
| | "vnfInstanceIds": [ |
|
||||
| | "aad7d2fe-ed51-47da-a20d-7b299860607e" |
|
||||
| | ], |
|
||||
| | "vnfInstanceNames": [ |
|
||||
| | "test" |
|
||||
| | ] |
|
||||
| | }, |
|
||||
| | "notificationTypes": [ |
|
||||
| | "AlarmNotification", |
|
||||
| | "AlarmClearedNotification" |
|
||||
| | ], |
|
||||
| | "faultyResourceTypes": [ |
|
||||
| | "COMPUTE" |
|
||||
| | ], |
|
||||
| | "perceivedSeverities": [ |
|
||||
| | "WARNING" |
|
||||
| | ], |
|
||||
| | "eventTypes": [ |
|
||||
| | "PROCESSING_ERROR_ALARM" |
|
||||
| | ], |
|
||||
| | "probableCauses": [ |
|
||||
| | "Process Terminated" |
|
||||
| | ] |
|
||||
| | } |
|
||||
| ID | 407cb9c5-60f2-43e8-a43a-925c0323c3eb |
|
||||
| Links | { |
|
||||
| | "self": { |
|
||||
| | "href": "http://127.0.0.1:9890/vnffm/v1/subscriptions/407cb9c5-60f2-43e8-a43a-925c0323c3eb" |
|
||||
| | } |
|
||||
| | } |
|
||||
+--------------+-----------------------------------------------------------------------------------------------------+
|
||||
|
||||
Delete the specified FM subscription
|
||||
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
Delete the specified FM subscription can be executed by the following CLI
|
||||
command.
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
$ openstack vnffm sub delete FM_SUBSCRIPTION_ID --os-tacker-api-version 2
|
||||
|
||||
Here is an example of deleting the specified FM subscription:
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
$ openstack vnffm sub delete a7a18ac6-a668-4d94-8ba0-f04c20cfeacd --os-tacker-api-version 2
|
||||
VNF FM subscription 'a7a18ac6-a668-4d94-8ba0-f04c20cfeacd' deleted successfully
|
||||
|
||||
.. _the sample : https://docs.openstack.org/tacker/latest/user/etsi_cnf_healing.html#how-to-create-vnf-package-for-healing
|
||||
.. _Prometheus Configuration : https://prometheus.io/docs/prometheus/latest/configuration/configuration/
|
||||
.. _Prometheus official website : https://prometheus.io/docs/prometheus/latest/getting_started/
|
||||
.. _ETSI NFV-SOL 002 v3.3.1 : https://www.etsi.org/deliver/etsi_gs/NFV-SOL/001_099/002/03.03.01_60/gs_nfv-sol002v030301p.pdf
|
||||
.. _ETSI NFV-SOL 003 v3.3.1 : https://www.etsi.org/deliver/etsi_gs/NFV-SOL/001_099/003/03.03.01_60/gs_nfv-sol003v030301p.pdf
|
||||
.. _heal request : https://docs.openstack.org/api-ref/nfv-orchestration/v2/vnflcm.html?expanded=heal-a-vnf-instance-v2-detail#heal-a-vnf-instance-v2
|
||||
|
650
doc/source/user/etsi_cnf_auto_scaling_pm.rst
Normal file
650
doc/source/user/etsi_cnf_auto_scaling_pm.rst
Normal file
@ -0,0 +1,650 @@
|
||||
===============================================================
|
||||
ETSI NFV-SOL CNF Auto Scaling With Prometheus via PM Interfaces
|
||||
===============================================================
|
||||
|
||||
This document describes how to auto scale CNF in Tacker with Prometheus
|
||||
via Performance Management Interfaces.
|
||||
|
||||
Overview
|
||||
--------
|
||||
|
||||
The diagram below shows an overview of the CNF auto scaling.
|
||||
|
||||
1. Create PM job
|
||||
|
||||
The NFVO sends a request to the Tacker to create a PM job.
|
||||
|
||||
2. Set PM job
|
||||
|
||||
Prometheus Plugin sets PM job to Prometheus.
|
||||
|
||||
3. Trigger event
|
||||
|
||||
Prometheus collects metrics and decides whether triggering event is
|
||||
needed or not.
|
||||
|
||||
4. POST event
|
||||
|
||||
Prometheus sends POST request to Tacker with specified URI. Tacker
|
||||
collects data related to the PM event.
|
||||
|
||||
5. Convert event to report
|
||||
|
||||
Tacker receives informed event, converts it to report, and saves
|
||||
it to DB. Tacker also saves timestamp of the event.
|
||||
|
||||
6. Send report notification
|
||||
|
||||
VnfPmDriverV2 finds all jobs in the DB and matches the report to
|
||||
job. If there is a job that can match successfully, the report is
|
||||
sent to the specified path of the NFVO. If the match is not successful,
|
||||
the processing ends.
|
||||
|
||||
7. Get PM report
|
||||
|
||||
The NFVO make a request for the content of the report, then make a
|
||||
decision of scaling.
|
||||
|
||||
8. Scale
|
||||
|
||||
Upon receiving a request to scale VNF from NFVO, tacker-server
|
||||
redirects it to tacker-conductor.
|
||||
|
||||
9. Call Kubernetes API
|
||||
|
||||
In tacker-conductor, the request is redirected again to an
|
||||
appropriate infra-driver (in this case Kubernetes infra-driver)
|
||||
according to the contents of the instantiate parameters. Then,
|
||||
Kubernetes infra-driver calls Kubernetes APIs.
|
||||
|
||||
10. Change the number of Pods
|
||||
|
||||
Kubernetes Master change the number of Pods according to the
|
||||
API calls.
|
||||
|
||||
.. figure:: ../_images/etsi_cnf_auto_scaling_pm.png
|
||||
:align: left
|
||||
|
||||
Prerequisites
|
||||
-------------
|
||||
|
||||
* The following packages should be installed:
|
||||
|
||||
* tacker
|
||||
* python-tackerclient
|
||||
|
||||
At least one VNF instance with status of ``INSTANTIATED`` is required.
|
||||
You can refer to :doc:`./etsi_containerized_vnf_usage_guide` for the
|
||||
procedure to instantiate VNF.
|
||||
|
||||
The VNF Package used can refer to `the sample`_.
|
||||
|
||||
* The following third-party services should be installed
|
||||
|
||||
* NFVO
|
||||
* Prometheus(including Alertmanager)
|
||||
|
||||
Each operator has its own NFVO, there is no restriction here, as long as
|
||||
it conforms to `ETSI NFV-SOL 002 v3.3.1`_ and `ETSI NFV-SOL 003 v3.3.1`_,
|
||||
it can be used.
|
||||
|
||||
For the installation of Prometheus and Alertmanager, please refer to
|
||||
the `official website`_.
|
||||
|
||||
How to configure Prometheus Plugin
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
The Prometheus Plugin is disabled by default in Tacker.
|
||||
For it to work, we need to find ``performance_management`` in
|
||||
``tacker.conf`` and change its value to ``True``.
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
$ vi /etc/tacker/tacker.conf
|
||||
...
|
||||
[prometheus_plugin]
|
||||
performance_management = True
|
||||
...
|
||||
|
||||
After modifying the configuration file, don't forget to restart the
|
||||
Tacker service to take effect.
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
$ sudo systemctl stop devstack@tacker
|
||||
$ sudo systemctl restart devstack@tacker-conductor
|
||||
$ sudo systemctl start devstack@tacker
|
||||
|
||||
.. _Create PM job :
|
||||
|
||||
How to create a PM job
|
||||
~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
After having a CNF that can scale, we need to create a PM job. It
|
||||
determines the monitoring metrics and monitoring resources to be
|
||||
used by Prometheus.
|
||||
|
||||
.. note::
|
||||
|
||||
When having an NFVO client, the request is sent by NFVO.
|
||||
|
||||
The interface for creating PM jobs is defined in both
|
||||
`ETSI NFV-SOL 002 v3.3.1`_ and `ETSI NFV-SOL 003 v3.3.1`_.
|
||||
|
||||
The following are the parameters required by this interface.
|
||||
|
||||
.. list-table:: additional params
|
||||
:widths: 18 18 10 50
|
||||
:header-rows: 1
|
||||
|
||||
* - Attribute name
|
||||
- Data type
|
||||
- Cardinality
|
||||
- Description
|
||||
* - objectType
|
||||
- String
|
||||
- 1
|
||||
- Type of the measured object. The applicable measured object type for a
|
||||
measurement is defined in clause 7.2 of `ETSI GS NFV-IFA 027`_.
|
||||
* - objectInstanceIds
|
||||
- Identifier
|
||||
- 1..N
|
||||
- Identifiers of the measured object instances for which performance
|
||||
information is requested to be collected.
|
||||
* - subObjectInstanceIds
|
||||
- IdentifierInVnf
|
||||
- 0..N
|
||||
- Identifiers of the measured object instances in case of a structured
|
||||
measured object.
|
||||
* - criteria
|
||||
- PmJobCriteria
|
||||
- 1
|
||||
- Criteria of the collection of performance information.
|
||||
* - >performanceMetric
|
||||
- String
|
||||
- 0..N
|
||||
- This defines the types of performance metrics for the specified object
|
||||
instances. Valid values are specified as "Measurement Name" values in
|
||||
clause 7.2 of `ETSI GS NFV-IFA 027`_. At least one of the two
|
||||
attributes (performance metric or group) shall be present.
|
||||
* - >performanceMetricGroup
|
||||
- String
|
||||
- 0..N
|
||||
- Group of performance metrics. A metric group is a pre-defined list of
|
||||
metrics, known to the API producer that it can decompose to individual
|
||||
metrics. Valid values are specified as "Measurement Group" values in
|
||||
clause 7.2 of `ETSI GS NFV-IFA 027`_. At least one of the two
|
||||
attributes (performance metric or group) shall be present.
|
||||
* - >collectionPeriod
|
||||
- UnsignedInt
|
||||
- 1
|
||||
- Specifies the periodicity at which the API producer will collect
|
||||
performance information. The unit shall be seconds.
|
||||
* - >reportingPeriod
|
||||
- UnsignedInt
|
||||
- 1
|
||||
- Specifies the periodicity at which the API producer will report to
|
||||
the API consumer. about performance information. The unit shall be
|
||||
seconds. The reportingPeriod should be equal to or a multiple of
|
||||
the collectionPeriod.
|
||||
* - >reportingBoundary
|
||||
- DateTime
|
||||
- 0..1
|
||||
- Identifies a time boundary after which the reporting will stop. The
|
||||
boundary shall allow a single reporting as well as periodic reporting
|
||||
up to the boundary.
|
||||
* - callbackUri
|
||||
- Uri
|
||||
- 1
|
||||
- The URI of the endpoint to send the notification to.
|
||||
* - authentication
|
||||
- SubscriptionAuthentication
|
||||
- 0..1
|
||||
- Authentication parameters to configure the use of Authorization when
|
||||
sending notifications corresponding to this subscription. See as
|
||||
clause 8.3.4 of `ETSI GS NFV-SOL 013`_.
|
||||
* - metadata
|
||||
- Structure
|
||||
- 1
|
||||
- Additional parameters to create PM job.
|
||||
* - >monitoring
|
||||
- Structure
|
||||
- 1
|
||||
- Treats to specify such as monitoring system and driver information.
|
||||
* - >>monitorName
|
||||
- String
|
||||
- 1
|
||||
- In case specifying “prometheus”, backend of monitoring feature is
|
||||
to be Prometheus.
|
||||
* - >>driverType
|
||||
- String
|
||||
- 1
|
||||
- “external”: SCP/SFTP for config file transfer.
|
||||
* - >>targetsInfo
|
||||
- Structure
|
||||
- 1..N
|
||||
- Information about the target monitoring system.
|
||||
* - >>>prometheusHost
|
||||
- String
|
||||
- 1
|
||||
- FQDN or ip address of target PrometheusServer.
|
||||
* - >>>prometheusHostPort
|
||||
- Int
|
||||
- 1
|
||||
- Port of the ssh target PrometheusServer.
|
||||
* - >>>alertRuleConfigPath
|
||||
- String
|
||||
- 1
|
||||
- Path of alertRuleConfig path for target Prometheus.
|
||||
* - >>>prometheusReloadApiEndpoint
|
||||
- String
|
||||
- 1
|
||||
- Endpoint url of reload API of target Prometheus.
|
||||
* - >>>authInfo
|
||||
- Structure
|
||||
- 1
|
||||
- Define authentication information to access host.
|
||||
* - >>>>ssh_username
|
||||
- String
|
||||
- 1
|
||||
- The username of the target host for ssh.
|
||||
* - >>>>ssh_password
|
||||
- String
|
||||
- 1
|
||||
- The password of the target host for ssh.
|
||||
|
||||
.. note::
|
||||
|
||||
* If ``subObjectInstanceIds`` is present, the cardinality of the
|
||||
``objectInstanceIds`` attribute shall be 1.
|
||||
* ``performanceMetric`` and ``performanceMetricGroup``, at least one of
|
||||
the two attributes shall be present.
|
||||
* ``objectType`` has only the following values: ``Vnf``, ``Vnfc``,
|
||||
``VnfIntCP``, ``VnfExtCP``.
|
||||
|
||||
|
||||
|
||||
Create PM job can be executed by the following CLI command.
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
$ openstack vnfpm job create sample_param_file.json --os-tacker-api-version 2
|
||||
|
||||
The content of the sample ``sample_param_file.json`` in this document is
|
||||
as follows:
|
||||
|
||||
.. code-block:: json
|
||||
|
||||
{
|
||||
"objectType": "Vnf",
|
||||
"objectInstanceIds": ["495ffedf-2755-42c8-bf14-a5433701311e"],
|
||||
"subObjectInstanceIds": [],
|
||||
"criteria": {
|
||||
"performanceMetric": [
|
||||
"VcpuUsageMeanVnf.495ffedf-2755-42c8-bf14-a5433701311e"
|
||||
],
|
||||
"performanceMetricGroup": [
|
||||
"VirtualizedComputeResource"
|
||||
],
|
||||
"collectionPeriod": 5,
|
||||
"reportingPeriod": 10,
|
||||
"reportingBoundary": "2022-06-23T04:56:00.910Z"
|
||||
},
|
||||
"callbackUri": "http://localhost:9990/notification/callback/test_performancemanagement_interface_min_1",
|
||||
"authentication": {
|
||||
"authType": [
|
||||
"BASIC",
|
||||
"OAUTH2_CLIENT_CREDENTIALS"
|
||||
],
|
||||
"paramsBasic": {
|
||||
"userName": "nfvo",
|
||||
"password": "nfvopwd"
|
||||
},
|
||||
"paramsOauth2ClientCredentials": {
|
||||
"clientId": "auth_user_name",
|
||||
"clientPassword": "auth_password",
|
||||
"tokenEndpoint": "token_endpoint"
|
||||
}
|
||||
},
|
||||
"metadata": {
|
||||
"monitoring": {
|
||||
"monitorName": "prometheus",
|
||||
"driverType": "external",
|
||||
"targetsInfo": [
|
||||
{
|
||||
"prometheusHost": "prometheusHost",
|
||||
"prometheusHostPort": "22",
|
||||
"authInfo": {
|
||||
"ssh_username": "ssh_username",
|
||||
"ssh_password": "ssh_password"
|
||||
},
|
||||
"alertRuleConfigPath": "/etc/prometheus/rules/tacker-rule.yml",
|
||||
"prometheusReloadApiEndpoint": "http://localhost:9990/-/reload"
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Here is an example of create PM job:
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
$ openstack vnfpm job create sample_param_file.json --os-tacker-api-version 2
|
||||
+-------------------------+------------------------------------------------------------------------------------------------------------------------+
|
||||
| Field | Value |
|
||||
+-------------------------+------------------------------------------------------------------------------------------------------------------------+
|
||||
| Callback Uri | http://localhost:9990/notification/callback/test_performancemanagement_interface_min_1 |
|
||||
| Criteria | { |
|
||||
| | "performanceMetric": [ |
|
||||
| | "VCpuUsageMeanVnf.495ffedf-2755-42c8-bf14-a5433701311e" |
|
||||
| | ], |
|
||||
| | "collectionPeriod": 5, |
|
||||
| | "reportingPeriod": 10 |
|
||||
| | } |
|
||||
| ID | ca9b58cf-8493-44e3-9e76-678ea0e80a80 |
|
||||
| Links | { |
|
||||
| | "self": { |
|
||||
| | "href": "http://127.0.0.1:9890/vnfpm/v2/pm_jobs/ca9b58cf-8493-44e3-9e76-678ea0e80a80" |
|
||||
| | }, |
|
||||
| | "objects": [ |
|
||||
| | { |
|
||||
| | "href": "http://127.0.0.1:9890/vnflcm/v2/vnf_instances/495ffedf-2755-42c8-bf14-a5433701311e" |
|
||||
| | } |
|
||||
| | ] |
|
||||
| | } |
|
||||
| Object Instance Ids | [ |
|
||||
| | "495ffedf-2755-42c8-bf14-a5433701311e" |
|
||||
| | ] |
|
||||
| Object Type | Vnf |
|
||||
| Reports | [] |
|
||||
| Sub Object Instance Ids | |
|
||||
+-------------------------+------------------------------------------------------------------------------------------------------------------------+
|
||||
|
||||
When creating a PM job, Tacker will modify the configuration file on the
|
||||
specified Prometheus based on ``metadata``.
|
||||
Then Prometheus will monitor the specified resource and send the monitored
|
||||
information to Tacker.
|
||||
Tacker converts the received monitoring information into a report and
|
||||
sends a notification request to NFVO.
|
||||
|
||||
The following is the request body of a sample notification request.
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
{
|
||||
'id': 'c045dae8-cd94-4a29-b09c-96729060f2ad',
|
||||
'notificationType': 'PerformanceInformationAvailableNotification',
|
||||
'timeStamp': '2022-09-05T06:56:39Z',
|
||||
'pmJobId': '34f7a186-88fa-4a42-a35f-30ea9ad710f1',
|
||||
'objectType': 'Vnf',
|
||||
'objectInstanceId': 'e30f5f45-522c-4e84-9b2d-9e1669708fff',
|
||||
'_links': {
|
||||
'objectInstance': {
|
||||
'href': 'http://127.0.0.1:9890/vnflcm/v2/vnf_instances/e30f5f45-522c-4e84-9b2d-9e1669708fff'
|
||||
},
|
||||
'pmJob': {
|
||||
'href': 'http://127.0.0.1:9890/vnfpm/v2/pm_jobs/34f7a186-88fa-4a42-a35f-30ea9ad710f1'
|
||||
},
|
||||
'performanceReport': {
|
||||
'href': 'http://127.0.0.1:9890/vnfpm/v2/pm_jobs/34f7a186-88fa-4a42-a35f-30ea9ad710f1/reports/46e95584-7f11-4fd0-b59c-4688c37177ff'
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.. note::
|
||||
|
||||
The target URL of this notification request is the ``Callback Uri``
|
||||
field in the PM job.
|
||||
|
||||
How does NFVO Auto Scale CNF
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
NFVO will send a get PM report request to Tacker according to the URL
|
||||
of the report in the notification request.
|
||||
|
||||
The response returned by Tacker is as follows:
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
{
|
||||
'entries': [
|
||||
{
|
||||
'objectType': 'Vnf',
|
||||
'objectInstanceId': 'e30f5f45-522c-4e84-9b2d-9e1669708fff',
|
||||
'subObjectInstanceId': 'VDU2-curry-probe-test001-766bdd79bf-wgc7m',
|
||||
'performanceMetric': 'VCpuUsageMeanVnf.e30f5f45-522c-4e84-9b2d-9e1669708fff',
|
||||
'performanceValues': [
|
||||
{
|
||||
'timeStamp': '2022-09-05T08:02:58Z',
|
||||
'value': 99.0
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
|
||||
NFVO will determine whether a scale operation is required based on
|
||||
the report data. If needed, a scale request will be sent to Tacker.
|
||||
|
||||
How to use the CLI of PM interfaces
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
Create a PM job
|
||||
^^^^^^^^^^^^^^^
|
||||
|
||||
The creation of PM job has been introduced in the
|
||||
:ref:`Create PM job` above, and the use case of the CLI
|
||||
command can be referred to there.
|
||||
|
||||
Get all PM jobs
|
||||
^^^^^^^^^^^^^^^
|
||||
|
||||
Get all PM jobs can be executed by the following CLI command.
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
$ openstack vnfpm job list --os-tacker-api-version 2
|
||||
|
||||
Here is an example of getting all PM jobs:
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
$ openstack vnfpm job list --os-tacker-api-version 2
|
||||
+--------------------------------------+-------------+----------------------------------------------------------------------------------------------------------+
|
||||
| Id | Object Type | Links |
|
||||
+--------------------------------------+-------------+----------------------------------------------------------------------------------------------------------+
|
||||
| b8b4095a-148d-42b5-b714-9d703e6c7c62 | Vnf | { |
|
||||
| | | "self": { |
|
||||
| | | "href": "http://127.0.0.1:9890/vnfpm/v2/pm_jobs/b8b4095a-148d-42b5-b714-9d703e6c7c62" |
|
||||
| | | }, |
|
||||
| | | "objects": [ |
|
||||
| | | { |
|
||||
| | | "href": "http://127.0.0.1:9890/vnflcm/v2/vnf_instances/97efce79-34c4-474d-87a0-38ad954f64af" |
|
||||
| | | } |
|
||||
| | | ] |
|
||||
| | | } |
|
||||
| ca9b58cf-8493-44e3-9e76-678ea0e80a80 | Vnf | { |
|
||||
| | | "self": { |
|
||||
| | | "href": "http://127.0.0.1:9890/vnfpm/v2/pm_jobs/ca9b58cf-8493-44e3-9e76-678ea0e80a80" |
|
||||
| | | }, |
|
||||
| | | "objects": [ |
|
||||
| | | { |
|
||||
| | | "href": "http://127.0.0.1:9890/vnflcm/v2/vnf_instances/495ffedf-2755-42c8-bf14-a5433701311e" |
|
||||
| | | } |
|
||||
| | | ] |
|
||||
| | | } |
|
||||
+--------------------------------------+-------------+----------------------------------------------------------------------------------------------------------+
|
||||
|
||||
Get the specified PM job
|
||||
^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
Get the specified PM job can be executed by the following CLI command.
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
$ openstack vnfpm job show JOB_ID --os-tacker-api-version 2
|
||||
|
||||
Here is an example of getting the specified PM job:
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
$ openstack vnfpm job show ca9b58cf-8493-44e3-9e76-678ea0e80a80 --os-tacker-api-version 2
|
||||
+-------------------------+------------------------------------------------------------------------------------------------------------------------+
|
||||
| Field | Value |
|
||||
+-------------------------+------------------------------------------------------------------------------------------------------------------------+
|
||||
| Callback Uri | http://localhost:9990/notification/callback/test_performancemanagement_interface_min_1 |
|
||||
| Criteria | { |
|
||||
| | "performanceMetric": [ |
|
||||
| | "VCpuUsageMeanVnf.495ffedf-2755-42c8-bf14-a5433701311e" |
|
||||
| | ], |
|
||||
| | "collectionPeriod": 5, |
|
||||
| | "reportingPeriod": 10 |
|
||||
| | } |
|
||||
| ID | ca9b58cf-8493-44e3-9e76-678ea0e80a80 |
|
||||
| Links | { |
|
||||
| | "self": { |
|
||||
| | "href": "http://127.0.0.1:9890/vnfpm/v2/pm_jobs/ca9b58cf-8493-44e3-9e76-678ea0e80a80" |
|
||||
| | }, |
|
||||
| | "objects": [ |
|
||||
| | { |
|
||||
| | "href": "http://127.0.0.1:9890/vnflcm/v2/vnf_instances/495ffedf-2755-42c8-bf14-a5433701311e" |
|
||||
| | } |
|
||||
| | ] |
|
||||
| | } |
|
||||
| Object Instance Ids | [ |
|
||||
| | "495ffedf-2755-42c8-bf14-a5433701311e" |
|
||||
| | ] |
|
||||
| Object Type | Vnf |
|
||||
| Reports | [ |
|
||||
| | { |
|
||||
| | "href": "/vnfpm/v2/pm_jobs/ca9b58cf-8493-44e3-9e76-678ea0e80a80/reports/53aafe25-7124-4880-8b58-47a93b3dc371", |
|
||||
| | "readyTime": "2022-08-30T08:02:58Z" |
|
||||
| | } |
|
||||
| | ] |
|
||||
| Sub Object Instance Ids | |
|
||||
+-------------------------+------------------------------------------------------------------------------------------------------------------------+
|
||||
|
||||
Change target PM job
|
||||
^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
Updating a PM job can only change two fields, callbackUri and authentication.
|
||||
It can be executed by the following CLI command.
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
$ openstack vnfpm job update JOB_ID sample_param_file.json --os-tacker-api-version 2
|
||||
|
||||
The content of the sample ``sample_param_file.json`` in this document is
|
||||
as follows:
|
||||
|
||||
.. code-block:: json
|
||||
|
||||
{
|
||||
"callbackUri": "http://localhost:9990/notification/callback",
|
||||
"authentication": {
|
||||
"authType": [
|
||||
"BASIC",
|
||||
"OAUTH2_CLIENT_CREDENTIALS"
|
||||
],
|
||||
"paramsBasic": {
|
||||
"userName": "nfvo",
|
||||
"password": "nfvopwd"
|
||||
},
|
||||
"paramsOauth2ClientCredentials": {
|
||||
"clientId": "auth_user_name",
|
||||
"clientPassword": "auth_password",
|
||||
"tokenEndpoint": "token_endpoint"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Here is an example of changing target PM job:
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
$ openstack vnfpm job update ca9b58cf-8493-44e3-9e76-678ea0e80a80 sample_param_file.json --os-tacker-api-version 2
|
||||
+-------------------------+------------------------------------------------------------------------------------------------------------------------+
|
||||
| Field | Value |
|
||||
+-------------------------+------------------------------------------------------------------------------------------------------------------------+
|
||||
| Callback Uri | http://localhost:9990/notification/callback |
|
||||
| Criteria | { |
|
||||
| | "performanceMetric": [ |
|
||||
| | "VCpuUsageMeanVnf.495ffedf-2755-42c8-bf14-a5433701311e" |
|
||||
| | ], |
|
||||
| | "collectionPeriod": 5, |
|
||||
| | "reportingPeriod": 10 |
|
||||
| | } |
|
||||
| ID | ca9b58cf-8493-44e3-9e76-678ea0e80a80 |
|
||||
| Links | { |
|
||||
| | "self": { |
|
||||
| | "href": "http://127.0.0.1:9890/vnfpm/v2/pm_jobs/ca9b58cf-8493-44e3-9e76-678ea0e80a80" |
|
||||
| | }, |
|
||||
| | "objects": [ |
|
||||
| | { |
|
||||
| | "href": "http://127.0.0.1:9890/vnflcm/v2/vnf_instances/495ffedf-2755-42c8-bf14-a5433701311e" |
|
||||
| | } |
|
||||
| | ] |
|
||||
| | } |
|
||||
| Object Instance Ids | [ |
|
||||
| | "495ffedf-2755-42c8-bf14-a5433701311e" |
|
||||
| | ] |
|
||||
| Object Type | Vnf |
|
||||
| Reports | [] |
|
||||
| Sub Object Instance Ids | |
|
||||
+-------------------------+------------------------------------------------------------------------------------------------------------------------+
|
||||
|
||||
Delete the specified PM job
|
||||
^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
Delete the specified PM job can be executed by the following CLI command.
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
$ openstack vnfpm job delete JOB_ID --os-tacker-api-version 2
|
||||
|
||||
Here is an example of deleting the specified PM job:
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
$ openstack vnfpm job delete ca9b58cf-8493-44e3-9e76-678ea0e80a80 --os-tacker-api-version 2
|
||||
VNF PM job 'ca9b58cf-8493-44e3-9e76-678ea0e80a80' deleted successfully
|
||||
|
||||
Get the specified PM report
|
||||
^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
Get the specified PM report can be executed by the following CLI command.
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
$ openstack vnfpm report show JOB_ID REPORT_ID --os-tacker-api-version 2
|
||||
|
||||
Here is an example of getting the specified PM report:
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
$ openstack vnfpm report show ca9b58cf-8493-44e3-9e76-678ea0e80a80 53aafe25-7124-4880-8b58-47a93b3dc371 --os-tacker-api-version 2
|
||||
+---------+---------------------------------------------------------------------------------------+
|
||||
| Field | Value |
|
||||
+---------+---------------------------------------------------------------------------------------+
|
||||
| Entries | [ |
|
||||
| | { |
|
||||
| | "objectType": "Vnf", |
|
||||
| | "objectInstanceId": "495ffedf-2755-42c8-bf14-a5433701311e", |
|
||||
| | "performanceMetric": "VCpuUsageMeanVnf.495ffedf-2755-42c8-bf14-a5433701311e", |
|
||||
| | "performanceValues": [ |
|
||||
| | { |
|
||||
| | "timeStamp": "2022-08-30T08:02:58Z", |
|
||||
| | "value": "99.0" |
|
||||
| | } |
|
||||
| | ] |
|
||||
| | } |
|
||||
| | ] |
|
||||
+---------+---------------------------------------------------------------------------------------+
|
||||
|
||||
.. _ETSI NFV-SOL 002 v3.3.1 : https://www.etsi.org/deliver/etsi_gs/NFV-SOL/001_099/002/03.03.01_60/gs_nfv-sol002v030301p.pdf
|
||||
.. _ETSI NFV-SOL 003 v3.3.1 : https://www.etsi.org/deliver/etsi_gs/NFV-SOL/001_099/003/03.03.01_60/gs_nfv-sol003v030301p.pdf
|
||||
.. _official website : https://prometheus.io/docs/prometheus/latest/getting_started/
|
||||
.. _the sample : https://docs.openstack.org/tacker/latest/user/etsi_cnf_scaling.html#how-to-create-vnf-package-for-scaling
|
||||
.. _ETSI GS NFV-IFA 027 : https://www.etsi.org/deliver/etsi_gs/NFV-IFA/001_099/027/03.03.01_60/gs_nfv-ifa027v030301p.pdf
|
||||
.. _ETSI GS NFV-SOL 013 : https://www.etsi.org/deliver/etsi_gs/NFV-SOL/001_099/013/03.04.01_60/gs_nfv-sol013v030401p.pdf
|
@ -162,3 +162,22 @@ VM
|
||||
:maxdepth: 1
|
||||
|
||||
practical_sample_package_usage_guide
|
||||
|
||||
Prometheus Plugin
|
||||
^^^^^^^^^^^^^^^^^
|
||||
|
||||
Auto Scaling
|
||||
~~~~~~~~~~~~
|
||||
|
||||
.. toctree::
|
||||
:maxdepth: 1
|
||||
|
||||
etsi_cnf_auto_scaling_pm
|
||||
|
||||
Auto Healing
|
||||
~~~~~~~~~~~~
|
||||
|
||||
.. toctree::
|
||||
:maxdepth: 1
|
||||
|
||||
etsi_cnf_auto_healing_fm
|
||||
|
@ -52,3 +52,4 @@ Use Case Guide
|
||||
legacy_use_case_guide
|
||||
oauth2_usage_guide
|
||||
fault_notification_use_case_guide
|
||||
prometheus_plugin_use_case_guide
|
||||
|
336
doc/source/user/prometheus_plugin_use_case_guide.rst
Normal file
336
doc/source/user/prometheus_plugin_use_case_guide.rst
Normal file
@ -0,0 +1,336 @@
|
||||
================================
|
||||
Prometheus Plugin Use Case Guide
|
||||
================================
|
||||
|
||||
Overview
|
||||
~~~~~~~~
|
||||
|
||||
This document describes about Prometheus Plugin that provides
|
||||
monitoring functions in combination with External Monitoring Tool
|
||||
|
||||
The Prometheus Plugin has 3 functions:
|
||||
|
||||
- Alerting function for ETSI NFV-SOL 002/003 based Performance Management.
|
||||
- Alerting function for ETSI NFV-SOL 002/003 based Fault Management.
|
||||
- Alerting function for Prometheus Plugin AutoScaling.
|
||||
|
||||
The Prometheus Plugin works in conjunction with the External Monitoring
|
||||
Tool. External Monitoring Tool is a monitoring service based on Prometheus.
|
||||
When External Monitoring Tool detects an alerting event on CNF,
|
||||
External Monitoring Tool sends an alert to Prometheus Plugin.
|
||||
|
||||
The External Monitoring Tool is implemented by each operators,
|
||||
thus it is not included in Tacker.
|
||||
|
||||
Configuration
|
||||
~~~~~~~~~~~~~
|
||||
|
||||
Prometheus Plugin is disabled by default.
|
||||
It can be enabled by configuration file (e.g. /etc/tacker/tacker.conf).
|
||||
To enable Prometheus Plugin, be sure to set true for
|
||||
performance_management, fault_management or auto_scaling below.
|
||||
|
||||
.. list-table::
|
||||
:header-rows: 1
|
||||
:widths: 20 10 40
|
||||
|
||||
* - Configuration
|
||||
- Default
|
||||
- Description
|
||||
* - ``CONF.prometheus_plugin.performance_management``
|
||||
- false
|
||||
- Enable prometheus plugin performance management.
|
||||
* - ``CONF.prometheus_plugin.reporting_period_margin``
|
||||
- 1
|
||||
- Some margin time for PM jos's reportingPeriod.
|
||||
When multiple alerts are received within a time period
|
||||
shorter than (reportingPeriod - reporting_period_margin),
|
||||
the subsequent alerts are ignored.
|
||||
* - ``CONF.prometheus_plugin.fault_management``
|
||||
- false
|
||||
- Enable prometheus plugin fault management.
|
||||
* - ``CONF.prometheus_plugin.auto_scaling``
|
||||
- false
|
||||
- Enable prometheus plugin autoscaling.
|
||||
|
||||
System
|
||||
~~~~~~
|
||||
|
||||
Prometheus Plugin needs external service called External
|
||||
Monitoring Tool.
|
||||
|
||||
Prometheus Plugin operates the External Monitoring Tool
|
||||
along the Performance Management, Fault Management or Auto scaling.
|
||||
The flow of each process is as follows.
|
||||
|
||||
- ``ETSI NFV-SOL 002/003 based Performance Management``
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
+---------------------------------+
|
||||
| Client (NFVO/EM) |
|
||||
| 8. Perform scaling if necessary <--+
|
||||
+----+----------------------------+ |
|
||||
| 1.Create PM job | 7. Notify PM event
|
||||
+----v-------------------------------+---------------+
|
||||
| Tacker |
|
||||
+-------------+ | +------------------------------------------------+ |
|
||||
| External | 3. Set alert rule | | Prometheus Plugin | |
|
||||
| Monitoring <-------------------+ | 2. Convert PM job to Prometheus Alert Rule | |
|
||||
| Tool | 5. Send alert | | | |
|
||||
| +-------------------> | 6. Convert Prometheus Alert event to PM event | |
|
||||
| | | +------------------------------------------------+ |
|
||||
+--+----------+ +----------------------------------------------------+
|
||||
| 4. Performance
|
||||
| monitoring +----------------------------------------------------+
|
||||
| | CISM/CIS |
|
||||
| | +------------+ +------------+ +------------+ |
|
||||
+------------------------------> | CNF | | CNF | | CNF | |
|
||||
| +------------+ +------------+ +------------+ |
|
||||
+----------------------------------------------------+
|
||||
|
||||
- ``ETSI NFV-SOL 002/003 based Fault Management``
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
+---------------------------------+
|
||||
| Client (NFVO/EM) |
|
||||
+----------------------------+ 7. Perform healing if necessary <--+
|
||||
| 2. Set alert rule +----+----------------------------+ |
|
||||
| | 1. Subscribe FM alarms | 6. Notify FM alarm
|
||||
| +----v-------------------------------+---------------+
|
||||
| | Tacker |
|
||||
+---v---------+ | +------------------------------------------------+ |
|
||||
| External | 4. Send alert | | Prometheus Plugin | |
|
||||
| Monitoring +------------------> | 5. Convert Prometheus Alert event to FM alarm | |
|
||||
| Tool | | +------------------------------------------------+ |
|
||||
+--+----------+ +----------------------------------------------------+
|
||||
| 3. Fault
|
||||
| monitoring +----------------------------------------------------+
|
||||
| | CISM/CIS |
|
||||
| | +------------+ +------------+ +------------+ |
|
||||
+-----------------------------> | CNF | | CNF | | CNF | |
|
||||
| +------------+ +------------+ +------------+ |
|
||||
+----------------------------------------------------+
|
||||
|
||||
- ``Prometheus Plugin AutoScaling``
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
+--------------------------+
|
||||
+----------------------------+ Client (NFVO/EM) |
|
||||
| 1. Set alert rule +--------------------------+
|
||||
|
|
||||
| +----------------------------------------------------+
|
||||
| | Tacker |
|
||||
+---v---------+ | +------------------------------------------------+ |
|
||||
| External | 3. Send alert | | Prometheus Plugin | |
|
||||
| Monitoring +------------------> | 4. Perform scaling | |
|
||||
| Tool | | +------------------------------------------------+ |
|
||||
+--+----------+ +-----------------------+----------------------------+
|
||||
| 2. Scaling event | 5. Delete or Create pods
|
||||
| monitoring +-----------------------|----------------------------+
|
||||
| | +-----------+--------------+ CISM/VIM |
|
||||
| | +---------v--+ +----v-------+ +--v---------+ |
|
||||
+-----------------------------> | CNF/VNF | | CNF/VNF | | CNF/VNF | |
|
||||
| +------------+ +------------+ +------------+ |
|
||||
+----------------------------------------------------+
|
||||
|
||||
|
||||
External Monitoring Tool
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
External Monitoring Tool is consist of Prometheus Server,
|
||||
AlertManager and SSH Server.
|
||||
|
||||
This section describes the requirements for each service.
|
||||
|
||||
Prometheus Server
|
||||
-----------------
|
||||
|
||||
Prometheus Server needs config to scrape kubernetes information.
|
||||
For example:
|
||||
|
||||
.. code-block:: yaml
|
||||
|
||||
global:
|
||||
scrape_interval: 30s
|
||||
evaluation_interval: 30s
|
||||
|
||||
rule_files:
|
||||
- /etc/prometheus/rules/*.json
|
||||
|
||||
alerting:
|
||||
alertmanagers:
|
||||
- static_configs:
|
||||
- targets:
|
||||
- <alertmanager_host>
|
||||
|
||||
scrape_configs:
|
||||
- job_name: "kubestatemetrics"
|
||||
static_configs:
|
||||
- targets: ["<kube-state-metrics exporter host>"]
|
||||
- job_name: "k8smetricsresourceworker1"
|
||||
static_configs:
|
||||
- targets: ["<worker1 exporter host>"]
|
||||
metrics_path: "/api/v1/nodes/worker1/proxy/metrics/resource"
|
||||
- job_name: "k8smetricscadvisorworker1"
|
||||
static_configs:
|
||||
- targets: ["<worker1 exporter host>"]
|
||||
metrics_path: "/api/v1/nodes/worker1/proxy/metrics/cadvisor"
|
||||
- job_name: "k8smetricsresourceworker2"
|
||||
static_configs:
|
||||
- targets: ["<worker2 exporter host>"]
|
||||
metrics_path: "/api/v1/nodes/worker2/proxy/metrics/resource"
|
||||
- job_name: "k8smetricscadvisorworker2"
|
||||
static_configs:
|
||||
- targets: ["<worker2 exporter host>"]
|
||||
metrics_path: "/api/v1/nodes/worker2/proxy/metrics/cadvisor"
|
||||
|
||||
Alert Manager
|
||||
-------------
|
||||
|
||||
Alert manager needs to setup to send alert to Tacker.
|
||||
For example:
|
||||
|
||||
.. code-block:: yaml
|
||||
|
||||
global:
|
||||
|
||||
route:
|
||||
group_by:
|
||||
- "k8smetricsresourceworker1"
|
||||
- "k8smetricscadvisorworker1"
|
||||
- "k8smetricsresourceworker2"
|
||||
- "k8smetricscadvisorworker2"
|
||||
group_wait: 30s
|
||||
group_interval: 30s
|
||||
repeat_interval: 30s
|
||||
receiver: default-receiver
|
||||
routes:
|
||||
- matchers:
|
||||
- function_type = vnfpm
|
||||
receiver: vnfpm
|
||||
- matchers:
|
||||
- function_type = vnffm
|
||||
receiver: vnffm
|
||||
- matchers:
|
||||
- function_type = auto-scale
|
||||
receiver: auto-scale
|
||||
|
||||
receivers:
|
||||
- name: default-receiver
|
||||
- name: vnfpm
|
||||
webhook_configs:
|
||||
- url: "http://<tacker_host>/pm_event"
|
||||
- name: vnffm
|
||||
webhook_configs:
|
||||
- url: "http://<tacker_host>/alert"
|
||||
- name: auto-scale
|
||||
webhook_configs:
|
||||
- url: "http://<tacker_host>/alert/vnf_instances"
|
||||
|
||||
SSH server
|
||||
----------
|
||||
|
||||
Tacker sends alert rule file via SSH. So External Monitoring Tool
|
||||
needs to activate sshd.
|
||||
|
||||
- PasswordAuthentication setting should be "yes".
|
||||
- The directory indicated by "rule_files" setting of prometheus
|
||||
server config should be accessible by SSH.
|
||||
|
||||
Alert rule registration
|
||||
~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
ETSI NFV-SOL 002/003 based Performance Management
|
||||
--------------------------------------------------
|
||||
|
||||
Registration of alerting rule is performed through
|
||||
PM job creation. Below is example of request body
|
||||
of PM job creation.
|
||||
|
||||
Access information of External Monitoring Tool must be set
|
||||
at "metadata" field.
|
||||
|
||||
.. code-block:: json
|
||||
|
||||
{
|
||||
"objectType": "Vnf",
|
||||
"objectInstanceIds": ["507280d8-bfc5-4b88-904b-9280ba6bc3ea"],
|
||||
"criteria": {
|
||||
"performanceMetric": [
|
||||
"VCpuUsageMeanVnf.507280d8-bfc5-4b88-904b-9280ba6bc3ea"],
|
||||
"collectionPeriod": 30,
|
||||
"reportingPeriod": 30,
|
||||
"reportingBoundary": "2099-08-05T02:24:46Z"
|
||||
},
|
||||
"callbackUri": "<client_callback_uri>",
|
||||
"metadata": {
|
||||
"monitoring": {
|
||||
"monitorName": "prometheus",
|
||||
"driverType": "external",
|
||||
"targetsInfo": [
|
||||
{
|
||||
"prometheusHost": "<prometheus_server_hostname>",
|
||||
"authInfo": {
|
||||
"ssh_username": "ubuntu",
|
||||
"ssh_password": "ubuntu"
|
||||
},
|
||||
"alertRuleConfigPath":
|
||||
"/etc/prometheus/rules",
|
||||
"prometheusReloadApiEndpoint":
|
||||
"http://<prometheus_server_hostname>/-/reload"
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
ETSI NFV-SOL 002/003 based Fault Management
|
||||
-------------------------------------------
|
||||
|
||||
Registration of alerting rule is performed by updating
|
||||
rule file directly. Below is example of alert rule.
|
||||
|
||||
.. code-block:: yaml
|
||||
|
||||
groups:
|
||||
- name: example
|
||||
rules:
|
||||
- alert: Test
|
||||
expr: sum(pod_memory_working_set_bytes{namespace="default"}) > 10000000000
|
||||
for: 30s
|
||||
labels:
|
||||
receiver_type: tacker
|
||||
function_type: vnffm
|
||||
vnf_instance_id: 3721ab69-3f33-44bc-85f1-f416ad1b765e
|
||||
pod: test\\-test1\\-[0-9a-f]{1,10}-[0-9a-z]{5}$
|
||||
perceived_severity: CRITICAL,
|
||||
event_type: PROCESSING_ERROR_ALARM
|
||||
annotations:
|
||||
probable_cause: Server is down.
|
||||
fault_type: Error
|
||||
fault_details: Fault detail
|
||||
|
||||
Prometheus Plugin AutoScaling
|
||||
-----------------------------
|
||||
|
||||
Registration of alerting rule is performed by updating
|
||||
rule file directly. Below is example of alert rule.
|
||||
|
||||
.. code-block:: yaml
|
||||
|
||||
groups:
|
||||
- name: example
|
||||
rules:
|
||||
- alert: Test
|
||||
expr: sum(pod_memory_working_set_bytes{namespace="default"}) > 10000000000
|
||||
for: 30s
|
||||
labels:
|
||||
receiver_type: tacker
|
||||
function_type: auto_scale
|
||||
vnf_instance_id: 3721ab69-3f33-44bc-85f1-f416ad1b765e
|
||||
auto_scale_type: SCALE_OUT,
|
||||
aspect_id: VDU1_aspect
|
||||
annotations:
|
Loading…
Reference in New Issue
Block a user