Install Monitoring Service Components

Refer to Bring-up A-CORD in CORD POD environment

Publish Data to Monitoring Service

Though technically any type of data can be published to Monitoring service, It is suitable for two types of telemetry data:

Telemetry data can be of type:

Data can be published by any type of element in CORD:

In order to be able to publish the data to monitoring service, there are three steps involved:

Currently Monitoring service supports publishing of telemetry data only using RabbitMQ messaging mechanism. The formatted message has two parts: Fixed header and unstructured payload. All the messages should contain the fixed header fields for the RabbitMQ server to process the messages. The payload part of the message is unstructured and entirely depends on how the service specific notification plugin expects the messages.

msg = {'event_type': 'vsg.dns.cache.size',
       'message_id':six.text_type(uuid.uuid4()),
       'publisher_id': 'vsg_publisher_on_compute1',
       'timestamp':datetime.datetime.now().isoformat(),
       'priority':'INFO',
       'payload': {'name': 'vsg.dns.cache.size',
                   'unit': 'entries',
                   'result': 200,
                   'resource_id':'vsg-222-333',
                   'user_id':'1e3ce043029547f1a61c1996d1a531a2',
                   'tenant_id':'3a397e70f64e4e40b69b6266c634d9d0'
                  }
      }

The service specific ceilometer plugin parses the published data and normalizes in to ceilometer sample/event format (as shown below):

{
      name=message['payload']['name'],
      type=sample.TYPE_GAUGE,
      unit=message['payload']['unit'],
      volume=message['payload']['result'],
      user_id=message['payload']['user_id'],
      project_id=message['payload']['tenant_id'],
      resource_id=message['payload']['resource_id'],
      message=message
}

 

Access Data from Monitoring Service

Monitoring service supports multi-tenancy such that each tenant is able to access only to the data of the network resources belonging to that tenant. This tenant abstraction is called monitoring channel. Typically the tenants would be the analytics applications running on top of this service. So, the tenant applications should acquire a monitoring channel before accessing the data from monitoring service. The monitoring channel object would embed the URL (monitoring_channel_url) to be used by tenant applications for accessing APIs. 

 

Once collected by monitoring service, the data is available for application consumption in two ways: Query APIs, Publish/Subscribe APIs.

APIDescription
http://<monitoring_channel_url>/v2/resourcesGET all tenant resources
http://<monitoring_channel_url>/v2/resources/(resource_id)GET details of specified resource
http://<monitoring_channel_url>/v2/metersGET all tenant meters
http://<monitoring_channel_url>/v2/meters/(meter_name)GET details of specified meter
http://<monitoring_channel_url>/v2/meters/(meter_name)/statisticsGET statistics for a given meter type
http://<monitoring_channel_url>/v2/samplesGET samples for a given meter type
http://<monitoring_channel_url>/v2/samples/(sample_id)GET details of specific sample
http://<monitoring_channel_url>/subscribeSubscribe to telemetry data
http://<monitoring_channel_url>/unsubscribeUnSubscribe to telemetry data

GET statistics for 'vcpe' meter type ==> curl http://<monitoring_channel_url>/v2/meters/vcpe/statistics

GET samples for 'vcpe' meter type ==> curl 'http://<monitoring_channel_url>/v2/samples?q.field=meter&q.op=eq&q.value=vcpe'

GET statistics for a given meter type based on a query ==> curl 'http://<monitoring_channel_url>/v2/meters/vcpe/statistics?q.field=timestamp&q.field=timestamp&q.op=ge&q.op=le&q.type=&q.type=&q.value=2015-10-19&q.value=2015-10-20&period=86400'

Notify 'cpu_util' events of all resources in a slice and report results to kafka topic 'auto_scale' ==> curl -i -H "Content-Type: application/json" -X POST -d '{"app_id":"auto_scale","target":"kafka://IP:9092/topic=auto_scale","sub_info":"cpu_util","query":[{"field":"project_id","op":"eq","value":"b1a3bf16d2014b47be9aefea88087318"}]}' -L http://<monitoring_channel_url>/subscribe

Define Ceilometer data handler plugin

 

Monitoring Agents

Refer to Sample event publisher code snippets that publishes data to Ceilometer rabbitmq notification bus

Current Implementation

The following features are supported in current CORD release: