{"id":4937,"date":"2014-05-12T15:05:10","date_gmt":"2014-05-12T13:05:10","guid":{"rendered":"http:\/\/blog.zhaw.ch\/icclab\/?p=4937"},"modified":"2014-05-23T10:46:05","modified_gmt":"2014-05-23T08:46:05","slug":"benchmarking-openstack-by-using-rally-part-1","status":"publish","type":"post","link":"https:\/\/blog.zhaw.ch\/icclab\/benchmarking-openstack-by-using-rally-part-1\/","title":{"rendered":"Benchmarking OpenStack by using Rally &#8211; part 1"},"content":{"rendered":"<p>As system administrators it is difficult to gather performance data before going productive. Benchmarking tools offer a comfortable way to gather performance data by simulating usage of a productive system. In the OpenStack world we can employ the Mirantis <a title=\"Rally\" href=\"https:\/\/wiki.openstack.org\/wiki\/Rally\">Rally tool<\/a> to benchmark VM performance of our cloud environment.<\/p>\n<p>Rally comes with some predefined benchmarking tasks like e. g. booting new VMs, upstarting VMs and running shell scripts on them, concurrently building new VMs and many more. The nice drawing below shows the performance of booting VMs in an OpenStack instance in a Shewhart Control Chart (often called &#8220;X-Chart&#8221; or &#8220;X-Bar-Chart&#8221;). As you can see it takes almost 7.2 seconds to upstart a VM on average and sometimes the upstarting process is outside the usual six sigma range. For a system administrator this could be quite useful data.<\/p>\n<figure id=\"attachment_4941\" aria-describedby=\"caption-attachment-4941\" style=\"width: 769px\" class=\"wp-caption aligncenter\"><a href=\"http:\/\/blog.zhaw.ch\/icclab\/files\/2014\/05\/Rplot01.png\"><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-4941 size-full\" src=\"http:\/\/blog.zhaw.ch\/icclab\/files\/2014\/05\/Rplot01.png\" alt=\"A X-Chart of VM boot performance in OpenStack.\" width=\"769\" height=\"635\" srcset=\"https:\/\/blog.zhaw.ch\/icclab\/files\/2014\/05\/Rplot01.png 769w, https:\/\/blog.zhaw.ch\/icclab\/files\/2014\/05\/Rplot01-300x247.png 300w, https:\/\/blog.zhaw.ch\/icclab\/files\/2014\/05\/Rplot01-363x300.png 363w\" sizes=\"auto, (max-width: 769px) 100vw, 769px\" \/><\/a><figcaption id=\"caption-attachment-4941\" class=\"wp-caption-text\">A X-Chart of VM boot performance in OpenStack.<\/figcaption><\/figure>\n<p>The data above was collected employing the Rally benchmark software. The Python-based Rally tool is free, open-source and extremely easy to deploy. First you have to download Rally from <a href=\"https:\/\/github.com\/stackforge\/rally.git\">this Github link<\/a>.<\/p>\n<p>Rally comes with an install script just clone the Github repository in a folder of your choice, cd into that folder and run:<\/p>\n<pre><code>$ .\/rally\/install_rally.sh<\/code><\/pre>\n<p>Then deploy Rally by filling your OpenStack credentials in a JSON-file:<\/p>\n<p>And then type:<\/p>\n<pre><code>$ rally deployment create --filename=existing.json --name=existing\r\n+----------+----------------------------+----------+-----------------+\r\n|   uuid   |         created_at         |   name   |      status     |\r\n+----------+----------------------------+----------+-----------------+\r\n|  <strong> UUID <\/strong>  | 2014-04-15 11:00:28.279941 | existing | deploy-finished |\r\n+----------+----------------------------+----------+-----------------+\r\nUsing deployment : <strong>UUID<\/strong> <\/code><\/pre>\n<p>Remember to use the UUID you got after running the previous command.<br \/>\nThen type:<\/p>\n<pre><code>$ rally use deployment --deploy-id=<strong>UUID<\/strong>\r\nUsing deployment : UUID<\/code><\/pre>\n<p>Then you are ready to use Rally. Rally comes with some pre-configured test scenarios in its doc-folder. Just copy a folder like e. g. rally\/doc\/samples\/tasks\/nova\/boot-and-delete.json to your favourite location like e. g. \/etc\/rally\/mytask.json:<\/p>\n<pre><code>\r\n$ cp rally\/doc\/samples\/tasks\/nova\/boot-and-delete.json \/etc\/rally\/mytask.json\r\n<\/code><\/pre>\n<p>Before you can run a Rally task, you have to configure the tasks. This can be done either via JSON- or via YAML-files. The Rally API can deal with both file format types.<br \/>\nIf you edit the JSON-file mytask.json, you see something like the following:<\/p>\n<pre><code>\r\n{\r\n    \"NovaServers.boot_and_delete_server\": [\r\n        {\r\n            \"args\": {\r\n                \"flavor_id\": 1,\r\n                \"image_id\": <strong>\"Glance UUID\"<\/strong>\r\n            },\r\n            \"runner\": {\r\n                \"type\": \"constant\",\r\n                \"times\": 10,\r\n                \"concurrency\": 2\r\n            },\r\n            \"context\": {\r\n                \"users\": {\r\n                    \"tenants\": 3,\r\n                    \"users_per_tenant\": 2\r\n                }\r\n            }\r\n        }\r\n    ]\r\n}\r\n<\/code><\/pre>\n<p>You have to add the correct UUID of a Glance image in order to configure the test run properly. The UUID can be retrieved by typing:<\/p>\n<pre><code>\r\n$ rally show images\r\n+--------------------------------------+--------+----------+\r\n|\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 UUID\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 |\u00a0 Name\u00a0 | Size (B) |\r\n+--------------------------------------+--------+----------+\r\n| d3db863b-ebff-4156-a139-5005ec34cfb7 | Cirros | 13147648 |\r\n| d94f522f-008a-481c-9330-1baafe4933be | TestVM | 14811136 |\r\n+--------------------------------------+--------+----------+\r\n<\/code><\/pre>\n<p>Update the mytask.json file with the UUID of the Glance image.<\/p>\n<p>If we want to run the task simply type (the &#8220;-v&#8221; flag for &#8220;verbose&#8221; output):<\/p>\n<pre><code>\r\n$ rally -v task start \/etc\/rally\/mytask.json\r\n<\/code><\/pre>\n<pre><code>\r\n=================================================================\r\nTask  ... is started\r\n------------------------------------------------------------------\r\n2014-05-12 11:54:07.060 . INFO rally.benchmark.engine [-] Task ... \r\n2014-05-12 11:54:07.864 . INFO rally.benchmark.engine [-] Task ... \r\n2014-05-12 11:54:07.864 . INFO rally.benchmark.engine [-] Task ... \r\n...\r\n+--------------------+-------+---------------+---------------+\r\n|       action       | count |   max (sec)   |   avg (sec)   |\r\n+--------------------+-------+---------------+---------------+\r\n|  nova.boot_server  |   10  | 8.28417992592 | 5.87529754639 | |\r\n| nova.delete_server |   10  | 6.39436888695 | 4.54159021378 |\r\n+--------------------+-------+---------------+---------------+\r\n\r\n---------------+---------------+---------------+---------------+\r\n   avg (sec)   |   min (sec)   | 90 percentile | 95 percentile |\r\n---------------+---------------+---------------+---------------+\r\n 5.87529754639 | 4.68817186356 | 7.33927609921 | 7.81172801256 |\r\n 4.54159021378 | 4.31421685219 | 4.61614284515 | 5.50525586605 |\r\n---------------+---------------+---------------+---------------+\r\n\r\n+---------------+---------------+---------------+---------------+\r\n|   max (sec)   |   avg (sec)   |   min (sec)   |  90 pecentile | \r\n+---------------+---------------+---------------+---------------+\r\n| 13.6288781166 | 10.4170130491 | 9.01177096367 | 12.7189923525 |\r\n+---------------+---------------+---------------+---------------+...\r\n...\r\n<\/code><\/pre>\n<p>The statistical output is now of major interest: it shows how long it takes to boot a VM instance in OpenStack and gives some useful information about the performance of your current OpenStack deployment. It can be viewed as a sample in the Shewhart control chart. Rally takes 10 test runs and measures the average runtime of each run. This technique is called statistical sampling. So each Rally run can be viewed as a sample which is represented as one data point in a control chart.<\/p>\n<p>But how did we get our data into a Shewhart Control chart? This will be explained further in part 2.<\/p>\n<div class=\"pt-sm\">Schlagw\u00f6rter: <a href=\"https:\/\/blog.zhaw.ch\/icclab\/tag\/openstack\/\">openstack<\/a>, <a href=\"https:\/\/blog.zhaw.ch\/icclab\/tag\/performance\/\">performance<\/a>, <a href=\"https:\/\/blog.zhaw.ch\/icclab\/tag\/rally\/\">rally<\/a><br><\/div>","protected":false},"excerpt":{"rendered":"<p>As system administrators it is difficult to gather performance data before going productive. Benchmarking tools offer a comfortable way to gather performance data by simulating usage of a productive system. In the OpenStack world we can employ the Mirantis Rally tool to benchmark VM performance of our cloud environment. Rally comes with some predefined benchmarking [&hellip;]<\/p>\n","protected":false},"author":75,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"ngg_post_thumbnail":0,"footnotes":""},"categories":[5,15],"tags":[240,416,417],"features":[],"class_list":["post-4937","post","type-post","status-publish","format-standard","hentry","category-articles","category-howtos","tag-openstack","tag-performance","tag-rally"],"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>Benchmarking OpenStack by using Rally - part 1 - 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\/benchmarking-openstack-by-using-rally-part-1\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Benchmarking OpenStack by using Rally - part 1\" \/>\n<meta property=\"og:description\" content=\"As system administrators it is difficult to gather performance data before going productive. Benchmarking tools offer a comfortable way to gather performance data by simulating usage of a productive system. In the OpenStack world we can employ the Mirantis Rally tool to benchmark VM performance of our cloud environment. Rally comes with some predefined benchmarking [&hellip;]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/blog.zhaw.ch\/icclab\/benchmarking-openstack-by-using-rally-part-1\/\" \/>\n<meta property=\"og:site_name\" content=\"Service Engineering (ICCLab &amp; SPLab)\" \/>\n<meta property=\"article:published_time\" content=\"2014-05-12T13:05:10+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2014-05-23T08:46:05+00:00\" \/>\n<meta property=\"og:image\" content=\"http:\/\/blog.zhaw.ch\/icclab\/files\/2014\/05\/Rplot01.png\" \/>\n<meta name=\"author\" content=\"benn\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"benn\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"3 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/blog.zhaw.ch\/icclab\/benchmarking-openstack-by-using-rally-part-1\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/blog.zhaw.ch\/icclab\/benchmarking-openstack-by-using-rally-part-1\/\"},\"author\":{\"name\":\"benn\",\"@id\":\"https:\/\/blog.zhaw.ch\/icclab\/#\/schema\/person\/7f2dc402a572b3fc950027b8b809c0d6\"},\"headline\":\"Benchmarking OpenStack by using Rally &#8211; part 1\",\"datePublished\":\"2014-05-12T13:05:10+00:00\",\"dateModified\":\"2014-05-23T08:46:05+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/blog.zhaw.ch\/icclab\/benchmarking-openstack-by-using-rally-part-1\/\"},\"wordCount\":487,\"commentCount\":2,\"image\":{\"@id\":\"https:\/\/blog.zhaw.ch\/icclab\/benchmarking-openstack-by-using-rally-part-1\/#primaryimage\"},\"thumbnailUrl\":\"http:\/\/blog.zhaw.ch\/icclab\/files\/2014\/05\/Rplot01.png\",\"keywords\":[\"openstack\",\"performance\",\"rally\"],\"articleSection\":[\"Articles\",\"HowTos\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/blog.zhaw.ch\/icclab\/benchmarking-openstack-by-using-rally-part-1\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/blog.zhaw.ch\/icclab\/benchmarking-openstack-by-using-rally-part-1\/\",\"url\":\"https:\/\/blog.zhaw.ch\/icclab\/benchmarking-openstack-by-using-rally-part-1\/\",\"name\":\"Benchmarking OpenStack by using Rally - part 1 - Service Engineering (ICCLab &amp; SPLab)\",\"isPartOf\":{\"@id\":\"https:\/\/blog.zhaw.ch\/icclab\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/blog.zhaw.ch\/icclab\/benchmarking-openstack-by-using-rally-part-1\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/blog.zhaw.ch\/icclab\/benchmarking-openstack-by-using-rally-part-1\/#primaryimage\"},\"thumbnailUrl\":\"http:\/\/blog.zhaw.ch\/icclab\/files\/2014\/05\/Rplot01.png\",\"datePublished\":\"2014-05-12T13:05:10+00:00\",\"dateModified\":\"2014-05-23T08:46:05+00:00\",\"author\":{\"@id\":\"https:\/\/blog.zhaw.ch\/icclab\/#\/schema\/person\/7f2dc402a572b3fc950027b8b809c0d6\"},\"breadcrumb\":{\"@id\":\"https:\/\/blog.zhaw.ch\/icclab\/benchmarking-openstack-by-using-rally-part-1\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/blog.zhaw.ch\/icclab\/benchmarking-openstack-by-using-rally-part-1\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/blog.zhaw.ch\/icclab\/benchmarking-openstack-by-using-rally-part-1\/#primaryimage\",\"url\":\"http:\/\/blog.zhaw.ch\/icclab\/files\/2014\/05\/Rplot01.png\",\"contentUrl\":\"http:\/\/blog.zhaw.ch\/icclab\/files\/2014\/05\/Rplot01.png\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/blog.zhaw.ch\/icclab\/benchmarking-openstack-by-using-rally-part-1\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Startseite\",\"item\":\"https:\/\/blog.zhaw.ch\/icclab\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Benchmarking OpenStack by using Rally &#8211; part 1\"}]},{\"@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\/7f2dc402a572b3fc950027b8b809c0d6\",\"name\":\"benn\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/secure.gravatar.com\/avatar\/432dd9c93af6d79a7b97feaee8c4bb7b88d9a3106b571ecc81ea2e7fecb0caf1?s=96&d=mm&r=g\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/432dd9c93af6d79a7b97feaee8c4bb7b88d9a3106b571ecc81ea2e7fecb0caf1?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/432dd9c93af6d79a7b97feaee8c4bb7b88d9a3106b571ecc81ea2e7fecb0caf1?s=96&d=mm&r=g\",\"caption\":\"benn\"},\"sameAs\":[\"http:\/\/blog.zhaw.ch\/icclab\"],\"url\":\"https:\/\/blog.zhaw.ch\/icclab\/author\/benn\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Benchmarking OpenStack by using Rally - part 1 - 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\/benchmarking-openstack-by-using-rally-part-1\/","og_locale":"en_US","og_type":"article","og_title":"Benchmarking OpenStack by using Rally - part 1","og_description":"As system administrators it is difficult to gather performance data before going productive. Benchmarking tools offer a comfortable way to gather performance data by simulating usage of a productive system. In the OpenStack world we can employ the Mirantis Rally tool to benchmark VM performance of our cloud environment. Rally comes with some predefined benchmarking [&hellip;]","og_url":"https:\/\/blog.zhaw.ch\/icclab\/benchmarking-openstack-by-using-rally-part-1\/","og_site_name":"Service Engineering (ICCLab &amp; SPLab)","article_published_time":"2014-05-12T13:05:10+00:00","article_modified_time":"2014-05-23T08:46:05+00:00","og_image":[{"url":"http:\/\/blog.zhaw.ch\/icclab\/files\/2014\/05\/Rplot01.png","type":"","width":"","height":""}],"author":"benn","twitter_card":"summary_large_image","twitter_misc":{"Written by":"benn","Est. reading time":"3 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/blog.zhaw.ch\/icclab\/benchmarking-openstack-by-using-rally-part-1\/#article","isPartOf":{"@id":"https:\/\/blog.zhaw.ch\/icclab\/benchmarking-openstack-by-using-rally-part-1\/"},"author":{"name":"benn","@id":"https:\/\/blog.zhaw.ch\/icclab\/#\/schema\/person\/7f2dc402a572b3fc950027b8b809c0d6"},"headline":"Benchmarking OpenStack by using Rally &#8211; part 1","datePublished":"2014-05-12T13:05:10+00:00","dateModified":"2014-05-23T08:46:05+00:00","mainEntityOfPage":{"@id":"https:\/\/blog.zhaw.ch\/icclab\/benchmarking-openstack-by-using-rally-part-1\/"},"wordCount":487,"commentCount":2,"image":{"@id":"https:\/\/blog.zhaw.ch\/icclab\/benchmarking-openstack-by-using-rally-part-1\/#primaryimage"},"thumbnailUrl":"http:\/\/blog.zhaw.ch\/icclab\/files\/2014\/05\/Rplot01.png","keywords":["openstack","performance","rally"],"articleSection":["Articles","HowTos"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/blog.zhaw.ch\/icclab\/benchmarking-openstack-by-using-rally-part-1\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/blog.zhaw.ch\/icclab\/benchmarking-openstack-by-using-rally-part-1\/","url":"https:\/\/blog.zhaw.ch\/icclab\/benchmarking-openstack-by-using-rally-part-1\/","name":"Benchmarking OpenStack by using Rally - part 1 - Service Engineering (ICCLab &amp; SPLab)","isPartOf":{"@id":"https:\/\/blog.zhaw.ch\/icclab\/#website"},"primaryImageOfPage":{"@id":"https:\/\/blog.zhaw.ch\/icclab\/benchmarking-openstack-by-using-rally-part-1\/#primaryimage"},"image":{"@id":"https:\/\/blog.zhaw.ch\/icclab\/benchmarking-openstack-by-using-rally-part-1\/#primaryimage"},"thumbnailUrl":"http:\/\/blog.zhaw.ch\/icclab\/files\/2014\/05\/Rplot01.png","datePublished":"2014-05-12T13:05:10+00:00","dateModified":"2014-05-23T08:46:05+00:00","author":{"@id":"https:\/\/blog.zhaw.ch\/icclab\/#\/schema\/person\/7f2dc402a572b3fc950027b8b809c0d6"},"breadcrumb":{"@id":"https:\/\/blog.zhaw.ch\/icclab\/benchmarking-openstack-by-using-rally-part-1\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/blog.zhaw.ch\/icclab\/benchmarking-openstack-by-using-rally-part-1\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/blog.zhaw.ch\/icclab\/benchmarking-openstack-by-using-rally-part-1\/#primaryimage","url":"http:\/\/blog.zhaw.ch\/icclab\/files\/2014\/05\/Rplot01.png","contentUrl":"http:\/\/blog.zhaw.ch\/icclab\/files\/2014\/05\/Rplot01.png"},{"@type":"BreadcrumbList","@id":"https:\/\/blog.zhaw.ch\/icclab\/benchmarking-openstack-by-using-rally-part-1\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Startseite","item":"https:\/\/blog.zhaw.ch\/icclab\/"},{"@type":"ListItem","position":2,"name":"Benchmarking OpenStack by using Rally &#8211; part 1"}]},{"@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\/7f2dc402a572b3fc950027b8b809c0d6","name":"benn","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/secure.gravatar.com\/avatar\/432dd9c93af6d79a7b97feaee8c4bb7b88d9a3106b571ecc81ea2e7fecb0caf1?s=96&d=mm&r=g","url":"https:\/\/secure.gravatar.com\/avatar\/432dd9c93af6d79a7b97feaee8c4bb7b88d9a3106b571ecc81ea2e7fecb0caf1?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/432dd9c93af6d79a7b97feaee8c4bb7b88d9a3106b571ecc81ea2e7fecb0caf1?s=96&d=mm&r=g","caption":"benn"},"sameAs":["http:\/\/blog.zhaw.ch\/icclab"],"url":"https:\/\/blog.zhaw.ch\/icclab\/author\/benn\/"}]}},"_links":{"self":[{"href":"https:\/\/blog.zhaw.ch\/icclab\/wp-json\/wp\/v2\/posts\/4937","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\/75"}],"replies":[{"embeddable":true,"href":"https:\/\/blog.zhaw.ch\/icclab\/wp-json\/wp\/v2\/comments?post=4937"}],"version-history":[{"count":27,"href":"https:\/\/blog.zhaw.ch\/icclab\/wp-json\/wp\/v2\/posts\/4937\/revisions"}],"predecessor-version":[{"id":4979,"href":"https:\/\/blog.zhaw.ch\/icclab\/wp-json\/wp\/v2\/posts\/4937\/revisions\/4979"}],"wp:attachment":[{"href":"https:\/\/blog.zhaw.ch\/icclab\/wp-json\/wp\/v2\/media?parent=4937"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blog.zhaw.ch\/icclab\/wp-json\/wp\/v2\/categories?post=4937"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blog.zhaw.ch\/icclab\/wp-json\/wp\/v2\/tags?post=4937"},{"taxonomy":"features","embeddable":true,"href":"https:\/\/blog.zhaw.ch\/icclab\/wp-json\/wp\/v2\/features?post=4937"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}