{"id":10904,"date":"2016-11-21T15:12:13","date_gmt":"2016-11-21T13:12:13","guid":{"rendered":"https:\/\/blog.zhaw.ch\/icclab\/?p=10904"},"modified":"2016-11-22T16:29:04","modified_gmt":"2016-11-22T14:29:04","slug":"installing-monasca-a-happy-ending-after-much-sadness-and-woe","status":"publish","type":"post","link":"https:\/\/blog.zhaw.ch\/icclab\/installing-monasca-a-happy-ending-after-much-sadness-and-woe\/","title":{"rendered":"Installing Monasca &#8211; a happy ending after much sadness and woe"},"content":{"rendered":"<p><span style=\"font-weight: 400\">In one of our projects we are making contributions to an Openstack project called <\/span><a href=\"https:\/\/wiki.openstack.org\/wiki\/Watcher\"><span style=\"font-weight: 400\">Watcher<\/span><\/a><span style=\"font-weight: 400\">, this project focuses on optimizing resource utilization of a cloud according to a given <\/span><a href=\"https:\/\/github.com\/openstack\/watcher\/tree\/master\/watcher\/decision_engine\/strategy\/strategies\"><span style=\"font-weight: 400\">strategy<\/span><\/a><span style=\"font-weight: 400\">. As part of this work it is important to understand the resource utilization of the cloud beforehand in order to make a meaningful contribution. This requires collection of metrics from the system and processing them to understand how the system is performing. The Ceilometer project was our default choice for collecting metrics in an Openstack deployment but as work has evolved we are also exploring alternatives &#8211; specifically Monasca. In this blog post I will cover my personal experience installing Monasca (which was more challenging than expected) and how we hacked the <\/span><a href=\"https:\/\/hub.docker.com\/r\/monasca\/demo\/\"><span style=\"font-weight: 400\">monasca\/demo docker image<\/span><\/a><span style=\"font-weight: 400\"> to connect it to our Openstack deployment. <\/span><!--more--><\/p>\n<p><span style=\"font-weight: 400\">In our earlier <\/span><a href=\"https:\/\/blog.zhaw.ch\/icclab\/how-to-install-and-setup-monasca-1-3\/\"><span style=\"font-weight: 400\">series of blog posts<\/span><\/a><span style=\"font-weight: 400\"> we explained how to install, configure and test Monasca step-by-step using git, Maven and pip &#8211; a good option for learning the moving parts of the giant beast that is Monasca and how it is all linked together. This content was posted over a year ago and hence it is now a little bit stale; since that time work has been done on deployment using automation tools such as \u00a0Ansible or Puppet. Generally, when working on this, we encountered significant issues with lack of documentation, unspecified versioning issues, unclear dependencies etc.<\/span><\/p>\n<p><span style=\"font-weight: 400\">Our first attempt to install Monasca was based on different Ansible <\/span><a href=\"https:\/\/github.com\/search?utf8=%E2%9C%93&amp;q=ansible-monasca\"><span style=\"font-weight: 400\">repositories<\/span><\/a><span style=\"font-weight: 400\"> available on Github &#8211; pointed to by the <\/span><a href=\"https:\/\/wiki.openstack.org\/wiki\/Monasca#Repositories\"><span style=\"font-weight: 400\">official page<\/span><\/a><span style=\"font-weight: 400\"> of Monasca. Although most of the repositories are Ansible roles, some try to put everything in a single place. Interestingly, many of those assume that Openstack is deployed with Devstack (which was not true in our case &#8211; we had a small \u00a0Packstack deployment) and this caused many steps to fail during the installation as files were not where they were expected to be (in devstack many files are into \/opt\/stack\/). Even after solving these issues Monasca itself did not seem to work and we always ended up with a system where only few monasca services were up and running. We\u2019re not certain where the problems were, but there were multiple issues with Kafka and in some cases it was not possible to get monasca-agent or monasca-notifications working.<\/span><\/p>\n<p><i><span style=\"font-weight: 400\">A tip if you want to go this path<\/span><\/i><span style=\"font-weight: 400\">: Most of the repos use Ansible 1.9.2, which is not obvious. We had many issues using Ansible &gt;= 2.0 and some roles using version 1.9.2 which required modification to the source code as there were changes in how <\/span><a href=\"http:\/\/docs.ansible.com\/ansible\/playbooks_loops.html\"><span style=\"font-weight: 400\">loops<\/span><\/a><span style=\"font-weight: 400\"> are defined.<\/span><\/p>\n<p><span style=\"font-weight: 400\">After the frustrating experience with Ansible we then decided to get back to basics, there is a functional out-of-the-box docker <\/span><a href=\"https:\/\/hub.docker.com\/r\/monasca\/demo\/\"><span style=\"font-weight: 400\">image<\/span><\/a><span style=\"font-weight: 400\"> in Docker Hub used for testing Monasca. It contains pretty much everything Monasca needs for running &#8211; even a local Keystone, Nova and Glance. We then decided to modify Monasca components in this image in order to connect it to our to Openstack cluster. Note that only Openstack credentials were modified inside the container &#8211; InfluxDB, MySQL and other services credentials also provided in the container were not modified. After relatively little tinkering, we managed to get this working as described below.<\/span><\/p>\n<p><span style=\"font-weight: 400\">First of all, pull the image into your docker machine &#8211; let\u2019s call it <\/span><b><i>docker-host<\/i><\/b><span style=\"font-weight: 400\">. Note that docker-host must be able to access your Openstack deployment (via the public APIs) and vice-versa<\/span><\/p>\n<pre><code>\r\n<span style=\"font-weight: 400\">docker pull monasca\/demo<\/span>\r\n<\/code>\r\n<\/pre>\n<p><span style=\"font-weight: 400\">Next, create the docker container but it is necessary to modify its entrypoint, so it does not start setting up monasca automatically and we can change the Monasca configuration files; also, note that the since it will not be running Keystone, we will remove the Keystone port:<\/span><\/p>\n<pre><code>\r\n<span style=\"font-weight: 400\">docker run -it -p {port_to_horizon}:80 -p 8080:8080 --name monasca --entrypoint=\/bin\/bash monasca\/demo<\/span>\r\n<\/code>\r\n<\/pre>\n<p><span style=\"font-weight: 400\">Change the value of <\/span><span style=\"font-weight: 400\">port_to_horizon <\/span><span style=\"font-weight: 400\">in case port 80 is already used in docker-host.<\/span><\/p>\n<p><span style=\"font-weight: 400\">Inside the docker container you will be in the \u2018<\/span><i><span style=\"font-weight: 400\">\/setup<\/span><\/i><span style=\"font-weight: 400\">\u2019 directory, in this directory you will see the \u00a0ansible files used to set up this container. The main file in this directory is called <\/span><i><span style=\"font-weight: 400\">demo-start.sh<\/span><\/i><span style=\"font-weight: 400\">, this file will start all the services required by Monasca but before running this script it is necessary to modify the following Monasca Openstack configuration details.<\/span><\/p>\n<p><span style=\"font-weight: 400\">In <\/span><i><span style=\"font-weight: 400\">\/etc\/monasca\/api-config.yml<\/span><\/i><span style=\"font-weight: 400\"> add your credentials in the middleware section (note that you will need to install a text editor in the container):<\/span><\/p>\n<pre><code>\r\n<span style=\"font-weight: 400\">## <\/span><span style=\"font-weight: 400\">\u00a0<\/span><span style=\"font-weight: 400\">\/etc\/monasca\/api-config.yml<\/span>\r\n<span style=\"font-weight: 400\"># region usually defaults to RegionOne<\/span>\r\n<span style=\"font-weight: 400\">region: \u201c{SERVICE_REGION}\u201d<\/span>\r\n<span style=\"font-weight: 400\">...<\/span>\r\n<span style=\"font-weight: 400\">serverVIP: \"KEYSTONE_URL\"<\/span>\r\n<span style=\"font-weight: 400\">serverPort: KEYSTONE_PORT<\/span>\r\n<span style=\"font-weight: 400\">defaultAuthorizedRoles: [user, domainuser, domainadmin, monasca-user, admin]<\/span>\r\n<span style=\"font-weight: 400\">agentAuthorizedRoles: [monasca-agent]<\/span>\r\n<span style=\"font-weight: 400\">adminAuthMethod: password<\/span>\r\n<span style=\"font-weight: 400\">adminUser: \"monasca\"<\/span>\r\n<span style=\"font-weight: 400\">adminPassword: \"MONASCA_PASSWORD\"<\/span>\r\n<span style=\"font-weight: 400\">adminProjectName: \"monasca\"<\/span>\r\n<\/code>\r\n<\/pre>\n<p><span style=\"font-weight: 400\">Similarly in<\/span><i><span style=\"font-weight: 400\"> \/usr\/local\/bin\/monasca-reconfigure<\/span><\/i><span style=\"font-weight: 400\"> and <\/span><i><span style=\"font-weight: 400\">\/setup\/alarms.yml<\/span><\/i><span style=\"font-weight: 400\">:<\/span><\/p>\n<pre><code>\r\n<span style=\"font-weight: 400\">## \u00a0\/usr\/local\/bin\/monasca-reconfigure<\/span>\r\n<span style=\"font-weight: 400\">#!\/bin\/sh<\/span>\r\n<span style=\"font-weight: 400\">'\/opt\/monasca\/bin\/monasca-setup' \\<\/span>\r\n<span style=\"font-weight: 400\"> \u00a0\u00a0\u00a0<\/span> <span style=\"font-weight: 400\">-u 'monasca-agent' \\<\/span>\r\n<span style=\"font-weight: 400\"> \u00a0\u00a0\u00a0<\/span> <span style=\"font-weight: 400\">-p 'MONASCA_AGENT_PASSWORD' \\<\/span>\r\n<span style=\"font-weight: 400\"> \u00a0\u00a0\u00a0\u00a0<\/span> <span style=\"font-weight: 400\">-s 'monitoring' \u00a0\\<\/span>\r\n<span style=\"font-weight: 400\"> \u00a0\u00a0\u00a0<\/span> <span style=\"font-weight: 400\">--keystone_url 'KEYSTONE_URL' \\<\/span>\r\n<span style=\"font-weight: 400\"> \u00a0\u00a0\u00a0<\/span> <span style=\"font-weight: 400\">--project_name 'MONASCA_AGENT_PROJECT' \\<\/span>\r\n<span style=\"font-weight: 400\"> \u00a0\u00a0\u00a0\u00a0<\/span> <span style=\"font-weight: 400\"> --monasca_url 'http:\/\/localhost:8080\/v2.0' \u00a0\\<\/span>\r\n<span style=\"font-weight: 400\"> \u00a0\u00a0\u00a0\u00a0<\/span> <span style=\"font-weight: 400\">\\<\/span>\r\n<span style=\"font-weight: 400\"> \u00a0\u00a0\u00a0\u00a0<\/span> <span style=\"font-weight: 400\">--check_frequency '5' \u00a0\\<\/span>\r\n<span style=\"font-weight: 400\"> \u00a0\u00a0\u00a0\u00a0<\/span> <span style=\"font-weight: 400\">\\<\/span>\r\n<span style=\"font-weight: 400\"> \u00a0\u00a0\u00a0\u00a0<\/span> <span style=\"font-weight: 400\">\\<\/span>\r\n<span style=\"font-weight: 400\"> \u00a0\u00a0\u00a0<\/span> <span style=\"font-weight: 400\">--overwrite<\/span>\r\n\r\n<span style=\"font-weight: 400\">## \/setup\/alarms.yml<\/span>\r\n<span style=\"font-weight: 400\">- name: Setup default alarms<\/span>\r\n<span style=\"font-weight: 400\"> \u00a0<\/span> <span style=\"font-weight: 400\">hosts: localhost<\/span>\r\n<span style=\"font-weight: 400\"> \u00a0<\/span> <span style=\"font-weight: 400\">vars:<\/span>\r\n<span style=\"font-weight: 400\"> \u00a0\u00a0\u00a0<\/span> <span style=\"font-weight: 400\"> \u00a0keystone_url: KEYSTONE_URL<\/span>\r\n<span style=\"font-weight: 400\"> \u00a0\u00a0\u00a0<\/span> <span style=\"font-weight: 400\"> \u00a0keystone_user: monasca<\/span>\r\n<span style=\"font-weight: 400\"> \u00a0\u00a0\u00a0<\/span> <span style=\"font-weight: 400\"> \u00a0keystone_password: MONASCA_PASSWORD<\/span>\r\n<span style=\"font-weight: 400\"> \u00a0\u00a0\u00a0<\/span> <span style=\"font-weight: 400\"> \u00a0keystone_project: monasca<\/span>\r\n<span style=\"font-weight: 400\"> \u00a0<\/span> <span style=\"font-weight: 400\">roles:<\/span>\r\n<span style=\"font-weight: 400\"> \u00a0\u00a0\u00a0<\/span> <span style=\"font-weight: 400\"> \u00a0- {role: monasca-default-alarms, tags: [alarms]}<\/span>\r\n<\/code>\r\n<\/pre>\n<p><span style=\"font-weight: 400\">In <\/span><i><span style=\"font-weight: 400\">\/setup\/demo-start.sh<\/span><\/i><span style=\"font-weight: 400\"> there is an error regarding the location of monasca-notification init script, modify the \u2018\/usr\/local\/bin\/monasca-notification &amp;\u2019 (line 44) to \u2018\/opt\/monasca\/bin\/monasca-notification &amp;\u2019. Also remove the playbook which installs the Keystone service (line 11):<\/span><\/p>\n<pre><code>\r\n<span style=\"font-weight: 400\">## \/setup\/demo-start.sh<\/span>\r\n<span style=\"font-weight: 400\">\u2026<\/span>\r\n<span style=\"font-weight: 400\"># remove this line <\/span>\r\n<span style=\"font-weight: 400\"># ansible-playbook -i \/setup\/hosts \/setup\/keystone.yml -c local<\/span>\r\n<span style=\"font-weight: 400\"> \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0...<\/span>\r\n<span style=\"font-weight: 400\">\/opt\/monasca\/bin\/monasca-notification &amp;<\/span>\r\n<\/code>\r\n<\/pre>\n<p><span style=\"font-weight: 400\">Finally remove services which are not necessary anymore, eg the local Keystone, from <\/span><i><span style=\"font-weight: 400\">start.sh<\/span><\/i><span style=\"font-weight: 400\">, leave apache2 and change the variable OPENSTACK_HOST in <\/span><i><span style=\"font-weight: 400\">\/etc\/openstack-dashboard\/local_settings.py<\/span><\/i><span style=\"font-weight: 400\"> to the IP where Keystone is installed:<\/span><\/p>\n<pre><code>\r\n<span style=\"font-weight: 400\">## \/setup\/start.sh<\/span>\r\n<span style=\"font-weight: 400\">#!\/bin\/bash<\/span>\r\n<span style=\"font-weight: 400\">\/etc\/init.d\/apache2 start<\/span>\r\n\r\n<span style=\"font-weight: 400\">## \/etc\/openstack-dashboard\/local_setting.py<\/span>\r\n<span style=\"font-weight: 400\">OPENSTACK_HOST = \"KEYSTONE_IP\"<\/span>\r\n<\/code>\r\n<\/pre>\n<p><span style=\"font-weight: 400\">Before running the main script to set everything up make sure you have created the Keystone users, projects and roles which are assumed in the way monasca is configured:<\/span><\/p>\n<pre><code>\r\n <span style=\"font-weight: 400\">keystone tenant-create --name monasca --description \"Monasca tenant\"<\/span>\r\n <span style=\"font-weight: 400\">keystone user-create --name monasca-agent --pass password --tenant [monasca-tenant-id]<\/span>\r\n <span style=\"font-weight: 400\">keystone user-create --name monasca --pass password --tenant [monasca-tenant-id]<\/span>\r\n <span style=\"font-weight: 400\">keystone role-create --name monasca-agent<\/span>\r\n <span style=\"font-weight: 400\">keystone role-create --name monasca-user<\/span>\r\n <span style=\"font-weight: 400\">keystone user-role-add --user [monasca-agent-id] --role [monasca-agent-role-id] --tenant [monasca-tenant-id]<\/span>\r\n <span style=\"font-weight: 400\">keystone user-role-add --user [monasca-id] --role [monasca-user-role-id] --tenant [monasca-tenant-id]<\/span>\r\n <span style=\"font-weight: 400\">keystone service-create --type monitoring --name monasca --description \"Monasca monitoring service\"<\/span>\r\n <span style=\"font-weight: 400\">keystone endpoint-create --service [service-id] --publicurl http:\/\/<\/span><b><i>docker-host<\/i><\/b><span style=\"font-weight: 400\">:8080\/v2.0 --internalurl http:\/\/<\/span><b><i>docker-host<\/i><\/b><span style=\"font-weight: 400\">:8080\/v2.0 --adminurl http:\/\/<\/span><b><i>docker-host<\/i><\/b><span style=\"font-weight: 400\">:8080\/v2.0<\/span>\r\n<\/code>\r\n<\/pre>\n<p><span style=\"font-weight: 400\">Once all of this is done, you can now run <\/span><i><span style=\"font-weight: 400\">\/setup\/demo-start.sh<\/span><\/i><span style=\"font-weight: 400\"> to set everything up &#8211; it may take a couple of minutes. When it has finished, you can visit your monasca-dashboard page at <\/span><span style=\"font-weight: 400\">http:\/\/<\/span><b><i>docker-host:<\/i><\/b><b><i>{port_to_horizon}<\/i><\/b><span style=\"font-weight: 400\">. <\/span><span style=\"font-weight: 400\">Log in as the user Monasca and visit the monitoring tab in the dashboard.<\/span><\/p>\n<p><span style=\"font-weight: 400\">In this tab you will be able to <\/span><a href=\"https:\/\/github.com\/openstack\/monasca-api\/blob\/master\/docs\/monasca-api-spec.md#alarm-definition-expressions\"><span style=\"font-weight: 400\">create alarms definitions<\/span><\/a><span style=\"font-weight: 400\"> and notifications. You will also be able to see an overview of the current state of the system in the Grafana dashboard. To collect more data regarding your Openstack cluster you will need to install and configure monasca-agent service in each of the controller\/compute nodes. It is possible to do it in a virtualenv so it does not modify any library in the system.<\/span><\/p>\n<pre><code>\r\n<span style=\"font-weight: 400\"># on compute\/controller nodes<\/span>\r\n<span style=\"font-weight: 400\">virtualenv monasca_agent_env<\/span>\r\n<span style=\"font-weight: 400\">source monasca_agent_env\/bin\/activate<\/span>\r\n<span style=\"font-weight: 400\">pip install --upgrade monasca-agent<\/span>\r\n\r\n<span style=\"font-weight: 400\">monasca-setup -u monasca-agent -p password --project_name monasca -s monitoring --keystone_url {KEYSTONE_URL} --monasca_url http:\/\/<\/span><b><i>docker-host<\/i><\/b><span style=\"font-weight: 400\">:8080\/v2.0 --config_dir \/etc\/monasca\/agent --log_dir \/var\/log\/monasca\/agent --overwrite<\/span>\r\n<\/code>\r\n<\/pre>\n<p><span style=\"font-weight: 400\">Then you\u2019ve got a fully functional Monasca system which works with your Openstack cluster &#8211; it\u2019s a good solution for experimenting with Monasca to understand how powerful it really is. This solution is probably not the best solution for a production deployment, however &#8211; it would probably make more sense to decouple the services and put the data in a persistent data store, but that\u2019s another day\u2019s work!<\/span><\/p>\n<p><span style=\"font-weight: 400\">Troubleshooting<\/span><\/p>\n<p><span style=\"font-weight: 400\">If you are getting <\/span><i><span style=\"font-weight: 400\">\u201crequests.exceptions.ConnectionError: (&#8216;Connection aborted.&#8217;, gaierror(-2, &#8216;Name or service not known&#8217;))<\/span><\/i><span style=\"font-weight: 400\">\u201d error when running demo-start.sh script that means the container is not able reach the endpoint defined in Openstack for the monitoring service. Make sure that the container is able to connect to the external interface in your Openstack cluster and the Keystone endpoint for the monitoring service is configured correctly. <\/span><\/p>\n<p><span style=\"font-weight: 400\">The demo-start.sh is the main script in this container, in case you find any issues you can execute each of the commands in this script sequentially to understand more clearly what is happenning. \u00a0<\/span><\/p>\n<p><i><span style=\"font-weight: 400\">\u201cException in thread &#8220;main&#8221; java.lang.RuntimeException: Topology with name `thresh-cluster` already exists on cluster\u201d<\/span><\/i><span style=\"font-weight: 400\">. This error is known to happen often as the thresh-cluster service tries to configure itself for a second time, you can ignore it.<\/span><\/p>\n<div class=\"pt-sm\">Schlagw\u00f6rter: <a href=\"https:\/\/blog.zhaw.ch\/icclab\/tag\/ansible\/\">Ansible<\/a>, <a href=\"https:\/\/blog.zhaw.ch\/icclab\/tag\/docker\/\">docker<\/a>, <a href=\"https:\/\/blog.zhaw.ch\/icclab\/tag\/installing\/\">Installing<\/a>, <a href=\"https:\/\/blog.zhaw.ch\/icclab\/tag\/monasca\/\">monasca<\/a>, <a href=\"https:\/\/blog.zhaw.ch\/icclab\/tag\/openstack\/\">openstack<\/a>, <a href=\"https:\/\/blog.zhaw.ch\/icclab\/tag\/watcher\/\">watcher<\/a><br><\/div>","protected":false},"excerpt":{"rendered":"<p>In one of our projects we are making contributions to an Openstack project called Watcher, this project focuses on optimizing resource utilization of a cloud according to a given strategy. As part of this work it is important to understand the resource utilization of the cloud beforehand in order to make a meaningful contribution. This [&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":[1,21],"tags":[823,484,822,510,240,783],"features":[],"class_list":["post-10904","post","type-post","status-publish","format-standard","hentry","category-allgemein","category-openstack-2","tag-ansible","tag-docker","tag-installing","tag-monasca","tag-openstack","tag-watcher"],"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>Installing Monasca - a happy ending after much sadness and woe - 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\/installing-monasca-a-happy-ending-after-much-sadness-and-woe\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Installing Monasca - a happy ending after much sadness and woe\" \/>\n<meta property=\"og:description\" content=\"In one of our projects we are making contributions to an Openstack project called Watcher, this project focuses on optimizing resource utilization of a cloud according to a given strategy. As part of this work it is important to understand the resource utilization of the cloud beforehand in order to make a meaningful contribution. This [&hellip;]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/blog.zhaw.ch\/icclab\/installing-monasca-a-happy-ending-after-much-sadness-and-woe\/\" \/>\n<meta property=\"og:site_name\" content=\"Service Engineering (ICCLab &amp; SPLab)\" \/>\n<meta property=\"article:published_time\" content=\"2016-11-21T13:12:13+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2016-11-22T14:29:04+00:00\" \/>\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=\"7 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/blog.zhaw.ch\/icclab\/installing-monasca-a-happy-ending-after-much-sadness-and-woe\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/blog.zhaw.ch\/icclab\/installing-monasca-a-happy-ending-after-much-sadness-and-woe\/\"},\"author\":{\"name\":\"Bruno Grazioli\",\"@id\":\"https:\/\/blog.zhaw.ch\/icclab\/#\/schema\/person\/769a2455bfa3cbcc87857218f19abeba\"},\"headline\":\"Installing Monasca &#8211; a happy ending after much sadness and woe\",\"datePublished\":\"2016-11-21T13:12:13+00:00\",\"dateModified\":\"2016-11-22T14:29:04+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/blog.zhaw.ch\/icclab\/installing-monasca-a-happy-ending-after-much-sadness-and-woe\/\"},\"wordCount\":1183,\"commentCount\":16,\"keywords\":[\"Ansible\",\"docker\",\"Installing\",\"monasca\",\"openstack\",\"watcher\"],\"articleSection\":[\"*.*\",\"OpenStack\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/blog.zhaw.ch\/icclab\/installing-monasca-a-happy-ending-after-much-sadness-and-woe\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/blog.zhaw.ch\/icclab\/installing-monasca-a-happy-ending-after-much-sadness-and-woe\/\",\"url\":\"https:\/\/blog.zhaw.ch\/icclab\/installing-monasca-a-happy-ending-after-much-sadness-and-woe\/\",\"name\":\"Installing Monasca - a happy ending after much sadness and woe - Service Engineering (ICCLab &amp; SPLab)\",\"isPartOf\":{\"@id\":\"https:\/\/blog.zhaw.ch\/icclab\/#website\"},\"datePublished\":\"2016-11-21T13:12:13+00:00\",\"dateModified\":\"2016-11-22T14:29:04+00:00\",\"author\":{\"@id\":\"https:\/\/blog.zhaw.ch\/icclab\/#\/schema\/person\/769a2455bfa3cbcc87857218f19abeba\"},\"breadcrumb\":{\"@id\":\"https:\/\/blog.zhaw.ch\/icclab\/installing-monasca-a-happy-ending-after-much-sadness-and-woe\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/blog.zhaw.ch\/icclab\/installing-monasca-a-happy-ending-after-much-sadness-and-woe\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/blog.zhaw.ch\/icclab\/installing-monasca-a-happy-ending-after-much-sadness-and-woe\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Startseite\",\"item\":\"https:\/\/blog.zhaw.ch\/icclab\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Installing Monasca &#8211; a happy ending after much sadness and woe\"}]},{\"@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":"Installing Monasca - a happy ending after much sadness and woe - 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\/installing-monasca-a-happy-ending-after-much-sadness-and-woe\/","og_locale":"en_US","og_type":"article","og_title":"Installing Monasca - a happy ending after much sadness and woe","og_description":"In one of our projects we are making contributions to an Openstack project called Watcher, this project focuses on optimizing resource utilization of a cloud according to a given strategy. As part of this work it is important to understand the resource utilization of the cloud beforehand in order to make a meaningful contribution. This [&hellip;]","og_url":"https:\/\/blog.zhaw.ch\/icclab\/installing-monasca-a-happy-ending-after-much-sadness-and-woe\/","og_site_name":"Service Engineering (ICCLab &amp; SPLab)","article_published_time":"2016-11-21T13:12:13+00:00","article_modified_time":"2016-11-22T14:29:04+00:00","author":"Bruno Grazioli","twitter_card":"summary_large_image","twitter_misc":{"Written by":"Bruno Grazioli","Est. reading time":"7 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/blog.zhaw.ch\/icclab\/installing-monasca-a-happy-ending-after-much-sadness-and-woe\/#article","isPartOf":{"@id":"https:\/\/blog.zhaw.ch\/icclab\/installing-monasca-a-happy-ending-after-much-sadness-and-woe\/"},"author":{"name":"Bruno Grazioli","@id":"https:\/\/blog.zhaw.ch\/icclab\/#\/schema\/person\/769a2455bfa3cbcc87857218f19abeba"},"headline":"Installing Monasca &#8211; a happy ending after much sadness and woe","datePublished":"2016-11-21T13:12:13+00:00","dateModified":"2016-11-22T14:29:04+00:00","mainEntityOfPage":{"@id":"https:\/\/blog.zhaw.ch\/icclab\/installing-monasca-a-happy-ending-after-much-sadness-and-woe\/"},"wordCount":1183,"commentCount":16,"keywords":["Ansible","docker","Installing","monasca","openstack","watcher"],"articleSection":["*.*","OpenStack"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/blog.zhaw.ch\/icclab\/installing-monasca-a-happy-ending-after-much-sadness-and-woe\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/blog.zhaw.ch\/icclab\/installing-monasca-a-happy-ending-after-much-sadness-and-woe\/","url":"https:\/\/blog.zhaw.ch\/icclab\/installing-monasca-a-happy-ending-after-much-sadness-and-woe\/","name":"Installing Monasca - a happy ending after much sadness and woe - Service Engineering (ICCLab &amp; SPLab)","isPartOf":{"@id":"https:\/\/blog.zhaw.ch\/icclab\/#website"},"datePublished":"2016-11-21T13:12:13+00:00","dateModified":"2016-11-22T14:29:04+00:00","author":{"@id":"https:\/\/blog.zhaw.ch\/icclab\/#\/schema\/person\/769a2455bfa3cbcc87857218f19abeba"},"breadcrumb":{"@id":"https:\/\/blog.zhaw.ch\/icclab\/installing-monasca-a-happy-ending-after-much-sadness-and-woe\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/blog.zhaw.ch\/icclab\/installing-monasca-a-happy-ending-after-much-sadness-and-woe\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/blog.zhaw.ch\/icclab\/installing-monasca-a-happy-ending-after-much-sadness-and-woe\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Startseite","item":"https:\/\/blog.zhaw.ch\/icclab\/"},{"@type":"ListItem","position":2,"name":"Installing Monasca &#8211; a happy ending after much sadness and woe"}]},{"@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\/10904","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=10904"}],"version-history":[{"count":4,"href":"https:\/\/blog.zhaw.ch\/icclab\/wp-json\/wp\/v2\/posts\/10904\/revisions"}],"predecessor-version":[{"id":10908,"href":"https:\/\/blog.zhaw.ch\/icclab\/wp-json\/wp\/v2\/posts\/10904\/revisions\/10908"}],"wp:attachment":[{"href":"https:\/\/blog.zhaw.ch\/icclab\/wp-json\/wp\/v2\/media?parent=10904"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blog.zhaw.ch\/icclab\/wp-json\/wp\/v2\/categories?post=10904"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blog.zhaw.ch\/icclab\/wp-json\/wp\/v2\/tags?post=10904"},{"taxonomy":"features","embeddable":true,"href":"https:\/\/blog.zhaw.ch\/icclab\/wp-json\/wp\/v2\/features?post=10904"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}