From 10bdb05de0c63877002129bccb0b4b4960a41ab0 Mon Sep 17 00:00:00 2001 From: Bryan Sullivan Date: Thu, 20 Oct 2016 19:39:29 -0700 Subject: Pass VM IDs to monitor for correlation JIRA: VES-1 Update collectd conf for current agent Remove unneeded/fake fields in HTTP request rate report Change-Id: I1e30d5c78ea5025c864a8ca2955adc8a8852ed50 Signed-off-by: Bryan Sullivan --- tests/blueprints/tosca-vnfd-hello-ves/evel_demo.c | 20 +---- tests/blueprints/tosca-vnfd-hello-ves/monitor.py | 55 +++++++++++--- tests/blueprints/tosca-vnfd-hello-ves/start.sh | 91 ++++++++++++++++++++--- tests/vHello_VES.sh | 2 +- 4 files changed, 127 insertions(+), 41 deletions(-) diff --git a/tests/blueprints/tosca-vnfd-hello-ves/evel_demo.c b/tests/blueprints/tosca-vnfd-hello-ves/evel_demo.c index ecd4961..49ad3dc 100644 --- a/tests/blueprints/tosca-vnfd-hello-ves/evel_demo.c +++ b/tests/blueprints/tosca-vnfd-hello-ves/evel_demo.c @@ -252,24 +252,8 @@ void measure_traffic() { if (measurement != NULL) { cpu(); evel_measurement_type_set(measurement, "HTTP request rate"); - evel_measurement_agg_cpu_use_set(measurement, loadavg); - evel_measurement_cpu_use_add(measurement, "cpu0", loadavg); - evel_measurement_fsys_use_add(measurement,"00-11-22",100.11, 100.22, 33, - 200.11, 200.22, 44); - evel_measurement_fsys_use_add(measurement,"33-44-55",300.11, 300.22, 55, - 400.11, 400.22, 66); - - evel_measurement_latency_add(measurement, 0.0, 10.0, 20); - evel_measurement_latency_add(measurement, 10.0, 20.0, 30); - - evel_measurement_vnic_use_add(measurement, "eth0", 1, 2, - 3, 4, - 5, 6, - 7, 8); - evel_measurement_vnic_use_add(measurement, "eth1", 11, 12, - 13, 14, - 15, 16, - 17, 18); +// evel_measurement_agg_cpu_use_set(measurement, loadavg); +// evel_measurement_cpu_use_add(measurement, "cpu0", loadavg); evel_rc = evel_post_event((EVENT_HEADER *)measurement); if (evel_rc != EVEL_SUCCESS) { diff --git a/tests/blueprints/tosca-vnfd-hello-ves/monitor.py b/tests/blueprints/tosca-vnfd-hello-ves/monitor.py index a9e1b65..b34bed9 100644 --- a/tests/blueprints/tosca-vnfd-hello-ves/monitor.py +++ b/tests/blueprints/tosca-vnfd-hello-ves/monitor.py @@ -34,11 +34,11 @@ import json import jsonschema import select -report_time = '' -requestRate = '' monitor_mode = "f" -summary = ['***** Summary of key stats *****','','','',''] -status = ['','unknown','unknown','unknown','unknown'] +vdu_id = ['','','',''] +summary_e = ['***** Summary of key stats *****','','',''] +summary_c = ['Collectd agents:'] +status = ['','Started','Started','Started'] base_url = '' template_404 = b'''POST {0}''' columns = 0 @@ -90,10 +90,14 @@ class PathDispatcher: #-------------------------------------------------------------------------- def process_event(e): global status - global summary + global summary_e + global summary_c + global vdu_id vdu = 0 + epoch = e.event.commonEventHeader.lastEpochMicrosec + sourceId = e.event.commonEventHeader.sourceId report_time = time.strftime('%Y-%m-%d %H:%M:%S', time.localtime(int(epoch)/1000000)) @@ -107,17 +111,32 @@ def process_event(e): if domain == 'measurementsForVfScaling': if vdu >= 1: - aggregateCpuUsage = e.event.measurementsForVfScaling.aggregateCpuUsage requestRate = e.event.measurementsForVfScaling.requestRate - summary[vdu] = host + ": state=" + status[vdu] + ", tps=" + str(requestRate) + ", cpu=" + str(aggregateCpuUsage) + summary_e[vdu] = host + ": state=" + status[vdu] + ", tps=" + str(requestRate) else: aggregateCpuUsage = e.event.measurementsForVfScalingFields.aggregateCpuUsage - summary[4] = host + ": cpu=" + str(aggregateCpuUsage) - - for s in summary: + vNicUsageArray = e.event.measurementsForVfScalingFields.vNicUsageArray + s = "" + for i in range(1,len(vdu_id)): + if sourceId.upper() in vdu_id[i].upper(): + s = "(VDU"+ str(i) + ") " + if s: + s += host + ": cpu=" + str(aggregateCpuUsage) + found = False + for i in range(1,len(summary_c)): + if host in summary_c[i]: + summary_c[i] = s + found = True + break + if not found: + summary_c.extend([s]) + + for s in summary_e: + print '{0}'.format(s) + for s in summary_c: print '{0}'.format(s) - if domain == 'fault': + if domain == 'fault' and vdu >= 1: alarmCondition = e.event.faultFields.alarmCondition specificProblem = e.event.faultFields.specificProblem # status[vdu] = e.event.faultFields.vfStatus @@ -187,6 +206,7 @@ def ves_monitor(environ, start_response): def main(argv=None): global columns global rows + a,b = os.popen('stty size', 'r').read().split() rows = int(a) columns = int(b) @@ -252,6 +272,7 @@ def main(argv=None): vars=overrides) global vel_username global vel_password + global vdu_id vel_username = config.get(config_section, 'vel_username', vars=overrides) @@ -264,6 +285,18 @@ def main(argv=None): base_schema_file = config.get(config_section, 'base_schema_file', vars=overrides) + vdu_id[1] = config.get(config_section, + 'vdu1_id', + vars=overrides) + vdu_id[2] = config.get(config_section, + 'vdu2_id', + vars=overrides) + vdu_id[3] = config.get(config_section, + 'vdu3_id', + vars=overrides) + base_schema_file = config.get(config_section, + 'base_schema_file', + vars=overrides) #---------------------------------------------------------------------- # Perform some basic error checking on the config. diff --git a/tests/blueprints/tosca-vnfd-hello-ves/start.sh b/tests/blueprints/tosca-vnfd-hello-ves/start.sh index 4f53a6a..db5a92f 100755 --- a/tests/blueprints/tosca-vnfd-hello-ves/start.sh +++ b/tests/blueprints/tosca-vnfd-hello-ves/start.sh @@ -24,8 +24,7 @@ # type: type of VNF component [webserver|lb|monitor|collectd] # webserver params: ID CollectorIP username password # lb params: ID CollectorIP username password app1_ip app2_ip -# collector params: ID CollectorIP username password -# collector params: ID CollectorIP username password +# monitor params: VDU1_ID VDU1_ID VDU1_ID username password # ID: VM ID # CollectorIP: IP address of the collector # username: Username for Collector RESTful API authentication @@ -33,6 +32,7 @@ # app1_ip app2_ip: address of the web servers setup_collectd () { + guest=$1 echo "$0: Install prerequisites" sudo apt-get update echo "$0: Install collectd plugin" @@ -45,7 +45,9 @@ setup_collectd () { sudo sed -i -- "s/#LoadPlugin disk/LoadPlugin disk/" /etc/collectd/collectd.conf sudo sed -i -- "s/#LoadPlugin interface/LoadPlugin interface/" /etc/collectd/collectd.conf sudo sed -i -- "s/#LoadPlugin memory/LoadPlugin memory/" /etc/collectd/collectd.conf - cat < Globals true @@ -63,6 +65,46 @@ setup_collectd () { Username "hello" Password "world" FunctionalRole "Collectd VES Agent" + GuestRunning true + + + + ReportByCpu false + ValuesPercentage true + +LoadPlugin aggregation + + + Plugin "cpu" + Type "percent" + GroupBy "Host" + GroupBy "TypeInstance" + SetPlugin "cpu-aggregation" + CalculateAverage true + + +LoadPlugin uuid +EOF + else + cat < + Globals true + + + ModulePath "/home/ubuntu/OpenStackBarcelonaDemo/ves_plugin/" + LogTraces true + Interactive false + Import "ves_plugin" + + Domain "$collector_ip" + Port 30000 + Path "" + Topic "" + UseHttps false + Username "hello" + Password "world" + FunctionalRole "Collectd VES Agent" + GuestRunning $guest LoadPlugin virt @@ -75,7 +117,18 @@ LoadPlugin virt ReportByCpu false ValuesPercentage true -EOF +LoadPlugin aggregation + + + Plugin "cpu" + Type "percent" + GroupBy "Host" + GroupBy "TypeInstance" + SetPlugin "cpu-aggregation" + CalculateAverage true + +EOF + fi sudo service collectd restart } @@ -97,8 +150,9 @@ setup_agent () { cp ves/tests/blueprints/tosca-vnfd-hello-ves/evel_demo.c evel-library/code/evel_demo/evel_demo.c echo "$0: Update parameters and build agent demo" + # This sed command will add a line after the search line sed -i -- "/api_secure,/{n;s/.*/ \"$username\",/}" evel-library/code/evel_demo/evel_demo.c - sed -i -- "/\"hello\",/{n;s/.*/ \"$password\",/}" evel-library/code/evel_demo/evel_demo.c + sed -i -- "/\"$username\",/{n;s/.*/ \"$password\",/}" evel-library/code/evel_demo/evel_demo.c echo "$0: Build evel_demo agent" cd evel-library/bldjobs @@ -107,6 +161,9 @@ setup_agent () { echo "$0: Start evel_demo agent" nohup ../output/x86_64/evel_demo --id $vm_id --fqdn $collector_ip --port 30000 --username $username --password $password > /dev/null 2>&1 & + + echo "$0: Start collectd agent running in the VM" + setup_collectd true } setup_webserver () { @@ -200,17 +257,29 @@ setup_monitor () { git clone https://github.com/att/evel-test-collector.git sed -i -- "s/vel_username = /vel_username = $username/" evel-test-collector/config/collector.conf sed -i -- "s/vel_password = /vel_password = $password/" evel-test-collector/config/collector.conf + sed -i -- "/vel_topic_name = /a vdu3_id = $vdu3_id" evel-test-collector/config/collector.conf + sed -i -- "/vel_topic_name = /a vdu2_id = $vdu2_id" evel-test-collector/config/collector.conf + sed -i -- "/vel_topic_name = /a vdu1_id = $vdu1_id" evel-test-collector/config/collector.conf python monitor.py --config evel-test-collector/config/collector.conf --section default } type=$1 -vm_id=$2 -collector_ip=$3 -username=$4 -password=$5 -app1_ip=$6 -app2_ip=$7 + +if [[ "$type" == "monitor" ]]; then + vdu1_id=$2 + vdu2_id=$3 + vdu3_id=$4 + username=$5 + password=$6 +else + vm_id=$2 + collector_ip=$3 + username=$4 + password=$5 + app1_ip=$6 + app2_ip=$7 +fi setup_$type exit 0 diff --git a/tests/vHello_VES.sh b/tests/vHello_VES.sh index 9ac4aa2..e8911e7 100644 --- a/tests/vHello_VES.sh +++ b/tests/vHello_VES.sh @@ -252,7 +252,7 @@ EOF echo "$0: $(date) start Monitor in VDU4 at ${vdu_ip[4]}" # Replacing the default collector with monitor.py which has processing logic as well scp -i /tmp/tacker/vHello.pem -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no /tmp/tacker/blueprints/tosca-vnfd-hello-ves/monitor.py ubuntu@${vdu_ip[4]}:/home/ubuntu/monitor.py - ssh -i /tmp/tacker/vHello.pem -t -t -x -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no ubuntu@${vdu_ip[4]} "bash /home/ubuntu/start.sh monitor ${vdu_id[4]} ${vdu_ip[4]} hello world" + ssh -i /tmp/tacker/vHello.pem -t -t -x -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no ubuntu@${vdu_ip[4]} "bash /home/ubuntu/start.sh monitor ${vdu_id[1]} ${vdu_id[2]} ${vdu_id[3]} hello world" # echo "$0: $(date) verify vHello server is running at http://${vdu_ip[3]}" # apt-get install -y curl -- cgit 1.2.3-korg