{"id":5710,"date":"2014-08-15T14:10:35","date_gmt":"2014-08-15T12:10:35","guid":{"rendered":"http:\/\/blog.zhaw.ch\/icclab\/?p=5710"},"modified":"2014-12-02T10:36:29","modified_gmt":"2014-12-02T08:36:29","slug":"collecting-energy-consumption-data-using-kwapi-in-openstack","status":"publish","type":"post","link":"https:\/\/blog.zhaw.ch\/icclab\/collecting-energy-consumption-data-using-kwapi-in-openstack\/","title":{"rendered":"Collecting energy consumption data using Kwapi in Openstack"},"content":{"rendered":"<p>In some of our projects we need to understand the energy consumption of our servers in an Openstack cluster. The first step in this process was to collect energy consumption data from our IBM servers; we stored this in Ceilometer for further study. In this blog post we will cover how we do this.<\/p>\n<p>First, Kwapi 101.<\/p>\n<p><a href=\"https:\/\/kwapi.readthedocs.org\/en\/latest\/index.html\">Kwapi<\/a> is a part of the openstack ecosystem (perhaps a little peripheral) which is focused on collecting energy data. It has pretty good integration with Ceilometer which enables the energy data to be stored there.<\/p>\n<p>Kwapi is architected in such a way that individual drivers listen to a specific wattmeter &#8211; a wattmeter can be a physical energy meter with a wifi interface or connected to ipmi, i.e. any kind of device that measures energy consumption. The drivers then pass the information on to plug-ins. These are the API, the forwarder and the <a href=\"https:\/\/collectd.org\/wiki\/index.php\/Inside_the_RRDtool_plugin\">RRD<\/a> plugin which is the visualization plugin that provides a web interface with power consumption graphs.<\/p>\n<p><!--more-->The API listens to the forwarder endpoint and collects data &#8211; it also provides an outbound interface to enable other entities e.g. Ceilometer to get this data. The purpose of the forwarder is to reduce network traffic by duplicating the metrics and sending only once if multiple plugins listen to the same driver; use of the forwarder is optional, If the drivers and the plugins are running on the same machine it is not necessary to use the forwarder. The architecture is shown in the figure below.<\/p>\n<p style=\"text-align: center\"><a href=\"http:\/\/blog.zhaw.ch\/icclab\/files\/2014\/08\/kwapi.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-medium wp-image-5711\" src=\"http:\/\/blog.zhaw.ch\/icclab\/files\/2014\/08\/kwapi-300x266.jpg\" alt=\"kwapi\" width=\"300\" height=\"266\" srcset=\"https:\/\/blog.zhaw.ch\/icclab\/files\/2014\/08\/kwapi-300x266.jpg 300w, https:\/\/blog.zhaw.ch\/icclab\/files\/2014\/08\/kwapi-337x300.jpg 337w, https:\/\/blog.zhaw.ch\/icclab\/files\/2014\/08\/kwapi.jpg 378w\" sizes=\"auto, (max-width: 300px) 100vw, 300px\" \/><\/a><\/p>\n<p>Following that \u00a0basic introduction, we now describe how we set it up.<\/p>\n<p>Our IBM x-series servers (x3550 M4 to be precise) provide the energy consumed via a <a href=\"http:\/\/www-01.ibm.com\/support\/knowledgecenter\/linuxonibm\/liaai.energymgmt\/liaaienergypgmpower.htm?lang=en\">sysfs<\/a> interface to the <a href=\"http:\/\/www-01.ibm.com\/support\/knowledgecenter\/linuxonibm\/liaai.energymgmt\/liaaienergymeasureenergy.htm?lang=en\">ibmaem<\/a> module; the energy consumed is stored in a dynamically updated file that gives the number of Joules consumed since the system was powered up &#8211; the amount of energy consumed by a task can be calculated by taking the difference between before and after readings.<\/p>\n<p>The commands below show how we set up the servers to collect the energy consumed. The first step was to load the ibmaem module and install <a href=\"http:\/\/www.lm-sensors.org\/wiki\/man\/sensors-detect\">lm-sensors<\/a> to read the power and energy sensors.<\/p>\n<pre><code>\r\n<i>--Install lm_sensors<\/i>\r\n# apt-get install lm-sensors\r\n<i>--Load the module<\/i>\r\n# modprobe ibmaem\r\n<i>-- Scan your system and <\/i><i>detect hardware monitoring chips<\/i>\r\n# sensors-detect\r\n<\/code><\/pre>\n<p>Once these have been installed successfully the state of the system\u2019s sensors can be seen:<\/p>\n<pre><code>\r\n[root@node-1 ~]# sensors\r\naem2-isa-0000\r\nAdapter: ISA adapter\r\ntemp1: \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0+22.0\u00b0C\r\ntemp2: \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0+21.0\u00b0C\r\npower1: \u00a0\u00a0\u00a0\u00a0161.56 W \u00a0(interval = \u00a0\u00a01.00 s)\r\npower2: \u00a0\u00a0\u00a0\u00a0144.67 W \u00a0(interval = \u00a0\u00a01.00 s)\r\npower3: \u00a0\u00a0\u00a0\u00a0\u00a026.00 W\r\npower4: \u00a0\u00a0\u00a0\u00a0427.00 W\r\npower5: \u00a0\u00a0\u00a0\u00a0419.00 W\r\npower6: \u00a0\u00a0\u00a0\u00a0413.80 W\r\npower7: \u00a0\u00a0\u00a0\u00a0293.80 W\r\nenergy1: \u00a0\u00a0\u00a0\u00a0\u00a01.81 GJ\r\nenergy2: \u00a0\u00a0\u00a0\u00a0\u00a02.30 GJ\r\n<\/code><\/pre>\n<p>The ibmaem module provides the power and energy sensor readings where energy2 gives a readout of the rack-mounted servers and energy1 for blade servers; the file where this data is stored can be found \u00a0in \/sys\/devices\/platform\/aem.1\/energyX_input, where X is 1 for blade servers and 2 for rack-mounted.<\/p>\n<p>On Ubuntu setting up kwapi requires going through the following steps.<\/p>\n<p>First, install some basic packages:<\/p>\n<pre><code>\r\n# apt-get install python-dev python-zmq python-rrdtool libxml2-dev libglib2.0 librrd-dev\r\n# pip install greenlet babel prettytable stevedore netaddr\r\n<\/code><\/pre>\n<p>Then download and install Kwapi from the repository:<\/p>\n<pre><code>\r\n# git clone https:\/\/github.com\/stackforge\/kwapi.git\r\n# cd kwapi\r\n# .\/setup.py install\r\n<\/code><\/pre>\n<p><i>NOTE: While we show the process for ubuntu above, in our main deployment we use CentOS6.5 and had issues with the <\/i><i>package manager\u00a0<\/i><a href=\"http:\/\/wiki.centos.org\/PackageManagement\/Yum\"><i>yum<\/i><\/a><i> and the rrdtool dependencies &#8211; we solved it by removing rrdtool from the dependencies needed by Kwapi in the file kwapi\/requirements.txt.<\/i><\/p>\n<p>After installing Kwapi, copy the configurations file to \/etc and create the log files, as follows:<\/p>\n<pre><code>\r\n# cp -r etc\/kwapi \/etc\/\r\n# mkdir \/var\/log\/kwapi\r\n# touch \/var\/log\/kwapi\/kwapi-api.log\r\n# touch \/var\/log\/kwapi\/kwapi-drivers.log\r\n# touch \/var\/log\/kwapi\/kwapi-forwarder.log\r\n<\/code><\/pre>\n<p>Kwapi already has some drivers pre-configured (IPMI, SNMP, Wattsup) but it also supports the addition of new drivers.; the <a href=\"https:\/\/github.com\/stackforge\/kwapi\/blob\/master\/kwapi\/drivers\/dummy.py\">dummy<\/a> driver is a good start to have a better comprehension of how it works. To activate a driver add it to \/etc\/kwapi\/drivers.conf with all necessary parameters.<\/p>\n<p>After <a href=\"https:\/\/kwapi.readthedocs.org\/en\/latest\/configuration.html\">configuring<\/a> Kwapi, start the services:<\/p>\n<pre><code>\r\n# kwapi-api\r\n# kwapi-drivers\r\n# kwapi-forwarder\r\n<\/code><\/pre>\n<p>Ceilometer already supports Kwapi, it is just necessary to tell Ceilometer where kwapi is. This involves setting up the service and endpoint in keystone as follows:<\/p>\n<pre><code>\r\n# keystone service-create --name=Kwapi \\\r\n                          --type=energy \\\r\n                          --description=\"Kwapi Energy Monitor\"\r\n\r\n+-------------+----------------------------------+\r\n| \u00a0\u00a0Property \u00a0| \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0Value \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0|\r\n+-------------+----------------------------------+\r\n| description | Kwapi Energy Monitor \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0|\r\n| id \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0| 15c11a12312e427e91bc41231b45f4bd |\r\n| name \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0| Kwapi \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0|\r\n| type \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0| energy \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0|\r\n+-------------+----------------------------------+\r\n<\/code><\/pre>\n<pre><code>\r\n# keystone endpoint-create --region=RegionOne \\\r\n                           --service-id=<i>service_id \\\r\n                           <\/i>--publicurl=http:\/\/10.0.0.1:<i>api_port<\/i>\/v1 \\\r\n                           --internalurl=http:\/\/10.0.0.1:<i>api_port<\/i>\/v1 \\\r\n                           --adminurl=http:\/\/10.0.0.1:<i>api_port<\/i>\/v1\r\n\r\n+-------------+-----------------------------------+\r\n| \u00a0\u00a0Property \u00a0| \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0Value \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0|\r\n+-------------+-----------------------------------+\r\n| adminurl \u00a0\u00a0\u00a0| <i>http:\/\/10.0.0.1:api_port\/v1 \u00a0 \u00a0 \u00a0<\/i> |\r\n| id \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0| 11f9c625a4324a3f8e66bf4e5dadf213 \u00a0|\r\n| internalurl | <i>http:\/\/10.0.0.1:api_port\/v1 \u00a0 \u00a0 \u00a0<\/i> |\r\n| publicurl \u00a0\u00a0| <i>http:\/\/10.0.0.1:api_port\/v1 \u00a0 \u00a0 \u00a0<\/i> |\r\n| region \u00a0\u00a0\u00a0\u00a0\u00a0| RegionOne \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0|\r\n| service_id \u00a0| <i>service_id \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 <\/i> |\r\n+-------------+-----------------------------------+\r\n<\/code><\/pre>\n<p>When a new service is created a service id is assigned by keystone, this id must be used in the endpoint-create call in <i>service_id <\/i>field<i>.<\/i><\/p>\n<p>Then change file \/etc\/ceilometer\/pipeline.yaml and create a new source to recognize the energy meter &#8211; here is how we did it:<\/p>\n<pre><code>\r\n- name: meter_energy\r\ninterval: <i>interval <\/i>\r\nmeters:\r\n- \"power*\"\r\n- \"energy*\"\r\nsinks:\r\n- meter_sink\r\n<\/code><\/pre>\n<p>Note that <i>interval <\/i>is the time between which ceilometer will query the API and collect the samples in seconds &#8211; an interval of 60 will collect a sample from kwapi every minute. Note that the drivers themselves have their own sampling interval, so care should be taken when configuring this to ensure that there are not significant inconsistencies between these values.<\/p>\n<p>Restart the Ceilometer central agent service.<\/p>\n<pre><code>\r\n# service openstack-ceilometer-agent restart\r\n<\/code><\/pre>\n<p>Following these steps the energy consumption is retrieved by the Kwapi API and stored in Ceilometer &#8211; this can be seen below.<\/p>\n<pre><code>\r\n# ceilometer meter-list\r\n\r\n+-------+-----------+-----+--------------------+-----------+-----------+\r\n| Name \u00a0| Type \u00a0 \u00a0 \u00a0| Unit| Resource ID \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0| User ID \u00a0\u00a0| Project ID|\r\n+-------+-----------+-----+--------------------+-----------+-----------+\r\n| energy| cumulative| kWh | node-41.domain.tld | None \u00a0\u00a0\u00a0\u00a0\u00a0| None \u00a0\u00a0\u00a0\u00a0\u00a0|\r\n| power | gauge \u00a0 \u00a0 | W \u00a0 | node-41.domain.tld | None \u00a0\u00a0\u00a0\u00a0\u00a0| None \u00a0\u00a0\u00a0\u00a0\u00a0|\r\n+-------+-----------+-----+--------------------+-----------+-----------+\r\n<\/code><\/pre>\n<p>We can see some of the samples below:<\/p>\n<pre><code>\r\n# sample-list -m power -q \u201cresource=node-41.domain.tld\u201d\r\n\r\n+-------------------+------+--------+------+----------------------------+\r\n| Resource ID \u00a0 \u00a0 \u00a0 | Name | Volume | Unit | Timestamp \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0|\r\n+-------------------+------+--------+------+----------------------------+\r\n| node-41.domain.tld| power| 173.0 \u00a0| W \u00a0 \u00a0| 2014-08-14T07:25:45.023000 |\r\n| node-41.domain.tld| power| 169.0 \u00a0| W \u00a0 \u00a0| 2014-08-14T07:25:34.908000 |\r\n| node-41.domain.tld| power| 169.0 \u00a0| W \u00a0\u00a0\u00a0| 2014-08-14T07:25:24.760000 |\r\n| node-41.domain.tld| power| 174.0 \u00a0| W \u00a0\u00a0\u00a0| 2014-08-14T07:25:14.646000 |\r\n| node-41.domain.tld| power| 174.0 \u00a0| W \u00a0\u00a0\u00a0| 2014-08-14T07:25:14.646000 |\r\n| node-41.domain.tld| power| 172.0 \u00a0| W \u00a0\u00a0\u00a0| 2014-08-14T07:25:04.532000 |\r\n| node-41.domain.tld| power| 168.0 \u00a0| W \u00a0\u00a0\u00a0| 2014-08-14T07:24:54.418000 |\r\n| node-41.domain.tld| power| 170.0 \u00a0| W \u00a0\u00a0\u00a0| 2014-08-14T07:24:44.269000 |\r\n| node-41.domain.tld| power| 174.0 \u00a0| W \u00a0\u00a0\u00a0| 2014-08-14T07:24:34.154000 |\r\n| node-41.domain.tld| power| 173.0 \u00a0| W \u00a0\u00a0\u00a0| 2014-08-14T07:24:24.037000 |\r\n| node-41.domain.tld| power| 173.0 \u00a0| W \u00a0\u00a0\u00a0| 2014-08-14T07:24:24.037000 |\r\n| node-41.domain.tld| power| 169.0 \u00a0| W \u00a0\u00a0\u00a0| 2014-08-14T07:24:13.922000 |\r\n| node-41.domain.tld| power| 168.0 \u00a0| W \u00a0\u00a0\u00a0| 2014-08-14T07:24:03.808000 |\r\n| node-41.domain.tld| power| 174.0 \u00a0| W \u00a0\u00a0\u00a0| 2014-08-14T07:23:53.691000 |\r\n| node-41.domain.tld| power| 169.0 \u00a0| W \u00a0\u00a0\u00a0| 2014-08-14T07:23:43.585000 |\r\n+-------------------+------+--------+------+----------------------------+\r\n<\/code><\/pre>\n<p>The energy consumed, measured in Watts, is in the Volume field and there is a timestamp which indicates when the sample was taken by Kwapi.<\/p>\n<p>Et voila &#8211; you\u2019ve now set up Kwapi with Ceilometer and you can monitor the energy consumption of your Openstack cluster.<\/p>\n<p>If you&#8217;re interested in this topic, you may be interested in some of our other blog posts:<\/p>\n<ul>\n<li><a href=\"http:\/\/blog.zhaw.ch\/icclab\/web-application-to-monitor-and-understand-energy\/\">A Web Application to Monitor and Understand Energy Consumption in an Openstack Cloud<\/a><\/li>\n<li><a href=\"http:\/\/blog.zhaw.ch\/icclab\/understanding-the-relationship-between-ceilometer-processor-utilisation-and-system-energy-consumption-for-a-basic-scenario-in-openstack\/\">Understanding the relationship between ceilometer processor utilisation and system energy consumption for a basic scenario in Openstack<\/a><\/li>\n<li><a href=\"http:\/\/blog.zhaw.ch\/icclab\/migration-of-ceilometer-energy-consumption-data-from-havanamysql-to-icehousemongodb\/\">Migration of Ceilometer Energy Consumption Data from Havana\/MySQL to Icehouse\/MongoDB<\/a><\/li>\n<\/ul>\n<div class=\"pt-sm\">Schlagw\u00f6rter: <a href=\"https:\/\/blog.zhaw.ch\/icclab\/tag\/ceilometer\/\">Ceilometer<\/a>, <a href=\"https:\/\/blog.zhaw.ch\/icclab\/tag\/energy\/\">Energy<\/a>, <a href=\"https:\/\/blog.zhaw.ch\/icclab\/tag\/kwapi\/\">Kwapi<\/a>, <a href=\"https:\/\/blog.zhaw.ch\/icclab\/tag\/openstack\/\">openstack<\/a><br><\/div>","protected":false},"excerpt":{"rendered":"<p>In some of our projects we need to understand the energy consumption of our servers in an Openstack cluster. The first step in this process was to collect energy consumption data from our IBM servers; we stored this in Ceilometer for further study. In this blog post we will cover how we do this. First, [&hellip;]<\/p>\n","protected":false},"author":101,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"ngg_post_thumbnail":0,"footnotes":""},"categories":[5],"tags":[65,449,448,240],"features":[],"class_list":["post-5710","post","type-post","status-publish","format-standard","hentry","category-articles","tag-ceilometer","tag-energy","tag-kwapi","tag-openstack"],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v27.2 (Yoast SEO v27.2) - https:\/\/yoast.com\/product\/yoast-seo-premium-wordpress\/ -->\n<title>Collecting energy consumption data using Kwapi in Openstack - Service Engineering (ICCLab &amp; SPLab)<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/blog.zhaw.ch\/icclab\/collecting-energy-consumption-data-using-kwapi-in-openstack\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Collecting energy consumption data using Kwapi in Openstack\" \/>\n<meta property=\"og:description\" content=\"In some of our projects we need to understand the energy consumption of our servers in an Openstack cluster. The first step in this process was to collect energy consumption data from our IBM servers; we stored this in Ceilometer for further study. In this blog post we will cover how we do this. First, [&hellip;]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/blog.zhaw.ch\/icclab\/collecting-energy-consumption-data-using-kwapi-in-openstack\/\" \/>\n<meta property=\"og:site_name\" content=\"Service Engineering (ICCLab &amp; SPLab)\" \/>\n<meta property=\"article:published_time\" content=\"2014-08-15T12:10:35+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2014-12-02T08:36:29+00:00\" \/>\n<meta property=\"og:image\" content=\"http:\/\/blog.zhaw.ch\/icclab\/files\/2014\/08\/kwapi-300x266.jpg\" \/>\n<meta name=\"author\" content=\"Bruno Grazioli\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Bruno Grazioli\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"6 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/blog.zhaw.ch\/icclab\/collecting-energy-consumption-data-using-kwapi-in-openstack\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/blog.zhaw.ch\/icclab\/collecting-energy-consumption-data-using-kwapi-in-openstack\/\"},\"author\":{\"name\":\"Bruno Grazioli\",\"@id\":\"https:\/\/blog.zhaw.ch\/icclab\/#\/schema\/person\/769a2455bfa3cbcc87857218f19abeba\"},\"headline\":\"Collecting energy consumption data using Kwapi in Openstack\",\"datePublished\":\"2014-08-15T12:10:35+00:00\",\"dateModified\":\"2014-12-02T08:36:29+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/blog.zhaw.ch\/icclab\/collecting-energy-consumption-data-using-kwapi-in-openstack\/\"},\"wordCount\":860,\"commentCount\":12,\"image\":{\"@id\":\"https:\/\/blog.zhaw.ch\/icclab\/collecting-energy-consumption-data-using-kwapi-in-openstack\/#primaryimage\"},\"thumbnailUrl\":\"http:\/\/blog.zhaw.ch\/icclab\/files\/2014\/08\/kwapi-300x266.jpg\",\"keywords\":[\"Ceilometer\",\"Energy\",\"Kwapi\",\"openstack\"],\"articleSection\":[\"Articles\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/blog.zhaw.ch\/icclab\/collecting-energy-consumption-data-using-kwapi-in-openstack\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/blog.zhaw.ch\/icclab\/collecting-energy-consumption-data-using-kwapi-in-openstack\/\",\"url\":\"https:\/\/blog.zhaw.ch\/icclab\/collecting-energy-consumption-data-using-kwapi-in-openstack\/\",\"name\":\"Collecting energy consumption data using Kwapi in Openstack - Service Engineering (ICCLab &amp; SPLab)\",\"isPartOf\":{\"@id\":\"https:\/\/blog.zhaw.ch\/icclab\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/blog.zhaw.ch\/icclab\/collecting-energy-consumption-data-using-kwapi-in-openstack\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/blog.zhaw.ch\/icclab\/collecting-energy-consumption-data-using-kwapi-in-openstack\/#primaryimage\"},\"thumbnailUrl\":\"http:\/\/blog.zhaw.ch\/icclab\/files\/2014\/08\/kwapi-300x266.jpg\",\"datePublished\":\"2014-08-15T12:10:35+00:00\",\"dateModified\":\"2014-12-02T08:36:29+00:00\",\"author\":{\"@id\":\"https:\/\/blog.zhaw.ch\/icclab\/#\/schema\/person\/769a2455bfa3cbcc87857218f19abeba\"},\"breadcrumb\":{\"@id\":\"https:\/\/blog.zhaw.ch\/icclab\/collecting-energy-consumption-data-using-kwapi-in-openstack\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/blog.zhaw.ch\/icclab\/collecting-energy-consumption-data-using-kwapi-in-openstack\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/blog.zhaw.ch\/icclab\/collecting-energy-consumption-data-using-kwapi-in-openstack\/#primaryimage\",\"url\":\"https:\/\/blog.zhaw.ch\/icclab\/files\/2014\/08\/kwapi.jpg\",\"contentUrl\":\"https:\/\/blog.zhaw.ch\/icclab\/files\/2014\/08\/kwapi.jpg\",\"width\":378,\"height\":336},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/blog.zhaw.ch\/icclab\/collecting-energy-consumption-data-using-kwapi-in-openstack\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Startseite\",\"item\":\"https:\/\/blog.zhaw.ch\/icclab\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Collecting energy consumption data using Kwapi in Openstack\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/blog.zhaw.ch\/icclab\/#website\",\"url\":\"https:\/\/blog.zhaw.ch\/icclab\/\",\"name\":\"Service Engineering (ICCLab &amp; SPLab)\",\"description\":\"A Blog of the ZHAW Zurich University of Applied Sciences\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/blog.zhaw.ch\/icclab\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Person\",\"@id\":\"https:\/\/blog.zhaw.ch\/icclab\/#\/schema\/person\/769a2455bfa3cbcc87857218f19abeba\",\"name\":\"Bruno Grazioli\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/secure.gravatar.com\/avatar\/07d475be0415d5914aa49599b3295e4d972f971e46f5d7ab89d474327ab7b5f0?s=96&d=mm&r=g\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/07d475be0415d5914aa49599b3295e4d972f971e46f5d7ab89d474327ab7b5f0?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/07d475be0415d5914aa49599b3295e4d972f971e46f5d7ab89d474327ab7b5f0?s=96&d=mm&r=g\",\"caption\":\"Bruno Grazioli\"},\"url\":\"https:\/\/blog.zhaw.ch\/icclab\/author\/gaea\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Collecting energy consumption data using Kwapi in Openstack - Service Engineering (ICCLab &amp; SPLab)","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/blog.zhaw.ch\/icclab\/collecting-energy-consumption-data-using-kwapi-in-openstack\/","og_locale":"en_US","og_type":"article","og_title":"Collecting energy consumption data using Kwapi in Openstack","og_description":"In some of our projects we need to understand the energy consumption of our servers in an Openstack cluster. The first step in this process was to collect energy consumption data from our IBM servers; we stored this in Ceilometer for further study. In this blog post we will cover how we do this. First, [&hellip;]","og_url":"https:\/\/blog.zhaw.ch\/icclab\/collecting-energy-consumption-data-using-kwapi-in-openstack\/","og_site_name":"Service Engineering (ICCLab &amp; SPLab)","article_published_time":"2014-08-15T12:10:35+00:00","article_modified_time":"2014-12-02T08:36:29+00:00","og_image":[{"url":"http:\/\/blog.zhaw.ch\/icclab\/files\/2014\/08\/kwapi-300x266.jpg","type":"","width":"","height":""}],"author":"Bruno Grazioli","twitter_card":"summary_large_image","twitter_misc":{"Written by":"Bruno Grazioli","Est. reading time":"6 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/blog.zhaw.ch\/icclab\/collecting-energy-consumption-data-using-kwapi-in-openstack\/#article","isPartOf":{"@id":"https:\/\/blog.zhaw.ch\/icclab\/collecting-energy-consumption-data-using-kwapi-in-openstack\/"},"author":{"name":"Bruno Grazioli","@id":"https:\/\/blog.zhaw.ch\/icclab\/#\/schema\/person\/769a2455bfa3cbcc87857218f19abeba"},"headline":"Collecting energy consumption data using Kwapi in Openstack","datePublished":"2014-08-15T12:10:35+00:00","dateModified":"2014-12-02T08:36:29+00:00","mainEntityOfPage":{"@id":"https:\/\/blog.zhaw.ch\/icclab\/collecting-energy-consumption-data-using-kwapi-in-openstack\/"},"wordCount":860,"commentCount":12,"image":{"@id":"https:\/\/blog.zhaw.ch\/icclab\/collecting-energy-consumption-data-using-kwapi-in-openstack\/#primaryimage"},"thumbnailUrl":"http:\/\/blog.zhaw.ch\/icclab\/files\/2014\/08\/kwapi-300x266.jpg","keywords":["Ceilometer","Energy","Kwapi","openstack"],"articleSection":["Articles"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/blog.zhaw.ch\/icclab\/collecting-energy-consumption-data-using-kwapi-in-openstack\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/blog.zhaw.ch\/icclab\/collecting-energy-consumption-data-using-kwapi-in-openstack\/","url":"https:\/\/blog.zhaw.ch\/icclab\/collecting-energy-consumption-data-using-kwapi-in-openstack\/","name":"Collecting energy consumption data using Kwapi in Openstack - Service Engineering (ICCLab &amp; SPLab)","isPartOf":{"@id":"https:\/\/blog.zhaw.ch\/icclab\/#website"},"primaryImageOfPage":{"@id":"https:\/\/blog.zhaw.ch\/icclab\/collecting-energy-consumption-data-using-kwapi-in-openstack\/#primaryimage"},"image":{"@id":"https:\/\/blog.zhaw.ch\/icclab\/collecting-energy-consumption-data-using-kwapi-in-openstack\/#primaryimage"},"thumbnailUrl":"http:\/\/blog.zhaw.ch\/icclab\/files\/2014\/08\/kwapi-300x266.jpg","datePublished":"2014-08-15T12:10:35+00:00","dateModified":"2014-12-02T08:36:29+00:00","author":{"@id":"https:\/\/blog.zhaw.ch\/icclab\/#\/schema\/person\/769a2455bfa3cbcc87857218f19abeba"},"breadcrumb":{"@id":"https:\/\/blog.zhaw.ch\/icclab\/collecting-energy-consumption-data-using-kwapi-in-openstack\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/blog.zhaw.ch\/icclab\/collecting-energy-consumption-data-using-kwapi-in-openstack\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/blog.zhaw.ch\/icclab\/collecting-energy-consumption-data-using-kwapi-in-openstack\/#primaryimage","url":"https:\/\/blog.zhaw.ch\/icclab\/files\/2014\/08\/kwapi.jpg","contentUrl":"https:\/\/blog.zhaw.ch\/icclab\/files\/2014\/08\/kwapi.jpg","width":378,"height":336},{"@type":"BreadcrumbList","@id":"https:\/\/blog.zhaw.ch\/icclab\/collecting-energy-consumption-data-using-kwapi-in-openstack\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Startseite","item":"https:\/\/blog.zhaw.ch\/icclab\/"},{"@type":"ListItem","position":2,"name":"Collecting energy consumption data using Kwapi in Openstack"}]},{"@type":"WebSite","@id":"https:\/\/blog.zhaw.ch\/icclab\/#website","url":"https:\/\/blog.zhaw.ch\/icclab\/","name":"Service Engineering (ICCLab &amp; SPLab)","description":"A Blog of the ZHAW Zurich University of Applied Sciences","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/blog.zhaw.ch\/icclab\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Person","@id":"https:\/\/blog.zhaw.ch\/icclab\/#\/schema\/person\/769a2455bfa3cbcc87857218f19abeba","name":"Bruno Grazioli","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/secure.gravatar.com\/avatar\/07d475be0415d5914aa49599b3295e4d972f971e46f5d7ab89d474327ab7b5f0?s=96&d=mm&r=g","url":"https:\/\/secure.gravatar.com\/avatar\/07d475be0415d5914aa49599b3295e4d972f971e46f5d7ab89d474327ab7b5f0?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/07d475be0415d5914aa49599b3295e4d972f971e46f5d7ab89d474327ab7b5f0?s=96&d=mm&r=g","caption":"Bruno Grazioli"},"url":"https:\/\/blog.zhaw.ch\/icclab\/author\/gaea\/"}]}},"_links":{"self":[{"href":"https:\/\/blog.zhaw.ch\/icclab\/wp-json\/wp\/v2\/posts\/5710","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/blog.zhaw.ch\/icclab\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/blog.zhaw.ch\/icclab\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/blog.zhaw.ch\/icclab\/wp-json\/wp\/v2\/users\/101"}],"replies":[{"embeddable":true,"href":"https:\/\/blog.zhaw.ch\/icclab\/wp-json\/wp\/v2\/comments?post=5710"}],"version-history":[{"count":22,"href":"https:\/\/blog.zhaw.ch\/icclab\/wp-json\/wp\/v2\/posts\/5710\/revisions"}],"predecessor-version":[{"id":5728,"href":"https:\/\/blog.zhaw.ch\/icclab\/wp-json\/wp\/v2\/posts\/5710\/revisions\/5728"}],"wp:attachment":[{"href":"https:\/\/blog.zhaw.ch\/icclab\/wp-json\/wp\/v2\/media?parent=5710"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blog.zhaw.ch\/icclab\/wp-json\/wp\/v2\/categories?post=5710"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blog.zhaw.ch\/icclab\/wp-json\/wp\/v2\/tags?post=5710"},{"taxonomy":"features","embeddable":true,"href":"https:\/\/blog.zhaw.ch\/icclab\/wp-json\/wp\/v2\/features?post=5710"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}