{"id":1564,"date":"2024-03-01T09:27:56","date_gmt":"2024-03-01T09:27:56","guid":{"rendered":"https:\/\/marketaylor.synology.me\/?p=1564"},"modified":"2024-03-12T07:27:09","modified_gmt":"2024-03-12T07:27:09","slug":"mq-metrics-with-opentelemetry","status":"publish","type":"post","link":"https:\/\/marketaylor.synology.me\/?p=1564","title":{"rendered":"MQ Metrics with OpenTelemetry"},"content":{"rendered":"\n<p>As I promised in a <a href=\"https:\/\/marketaylor.synology.me\/?p=1542\" target=\"_blank\" rel=\"noreferrer noopener\">recent article<\/a>, I am coming back to the OpenTelemetry topic. This time, it&#8217;s going to be about another pillar of the observability requirements &#8211; integrating MQ&#8217;s metrics with OpenTelemetry.<\/p>\n\n\n\n<!--more-->\n\n\n\n<p>I&#8217;ve written many times about the monitoring packages maintained <a href=\"https:\/\/github.com\/ibm-messaging\/mq-metric-samples\" target=\"_blank\" rel=\"noreferrer noopener\">here<\/a>. The tools in that repository can send metrics to a range of destinations and databases such as Prometheus. The latest update to that repository extends the collection components to send the information to an OpenTelemetry (OTel) environment.<\/p>\n\n\n\n<p>The visible metrics are the same as for the other collectors &#8211; things like queue depth and number of API calls made in an interval.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large is-style-default\"><a href=\"https:\/\/marketaylor.synology.me\/wp-content\/uploads\/2024\/03\/otel2-1024x523.png\" target=\"_blank\" rel=\"noreferrer noopener\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"523\" src=\"https:\/\/marketaylor.synology.me\/wp-content\/uploads\/2024\/03\/otel2-1024x523.png\" alt=\"A Grafana dashboard built from OTel data\" class=\"wp-image-1581\" srcset=\"https:\/\/marketaylor.synology.me\/wp-content\/uploads\/2024\/03\/otel2-1024x523.png 1024w, https:\/\/marketaylor.synology.me\/wp-content\/uploads\/2024\/03\/otel2-300x153.png 300w, https:\/\/marketaylor.synology.me\/wp-content\/uploads\/2024\/03\/otel2-768x392.png 768w, https:\/\/marketaylor.synology.me\/wp-content\/uploads\/2024\/03\/otel2-1536x784.png 1536w, https:\/\/marketaylor.synology.me\/wp-content\/uploads\/2024\/03\/otel2-2048x1046.png 2048w, https:\/\/marketaylor.synology.me\/wp-content\/uploads\/2024\/03\/otel2-1200x613.png 1200w\" sizes=\"auto, (max-width: 709px) 85vw, (max-width: 909px) 67vw, (max-width: 1362px) 62vw, 840px\" \/><\/a><figcaption class=\"wp-element-caption\">A Grafana dashboard built from OpenTelemetry data<\/figcaption><\/figure>\n\n\n\n<h3 class=\"wp-block-heading\">Output Destinations<\/h3>\n\n\n\n<p>The OTel client packages permit configuration of a range of communications protocols to get the data to a variety of backend stores. For this particular implementation, I&#8217;ve chosen to only have configuration for two mechanisms &#8211; sending the metrics to stdout (which appear in JSON format), or sending them in OTLP format over the gRPC protocol.<\/p>\n\n\n\n<p>The JSON-style output:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">{\"Resource\":[{\"Key\":\"service.name\",\"Value\":{\"Type\":\"STRING\",\"Value\":\"ibmmq\"}},{\"Key\":\"service.version\",\"Value\":{\"Type\":\"STRING\",\"Value\":\"0.0.1\"}}],\"ScopeMetrics\":\n[{\"Scope\":{\"Name\":\"ibmmq\",\"Version\":\"\",\"SchemaURL\":\"\"},\"Metrics\":[{\"Name\":\"ibmmq.qmgr.exporter_collection_time\",\"Description\":\"How long last collection took\",\"Uni\nt\":\"1\",\"Data\":{\"DataPoints\":[{\"Attributes\":[{\"Key\":\"platform\",\"Value\":{\"Type\":\"STRING\",\"Value\":\"UNIX\"}},{\"Key\":\"qmgr\",\"Value\":{\"Type\":\"STRING\",\"Value\":\"QM1\"}}],\"S\ntartTime\":\"0001-01-01T00:00:00Z\",\"Time\":\"2024-03-01T08:24:10.027338544Z\",\"Value\":0}]}}]}]}\n<\/pre>\n\n\n\n<p>Because the metrics might be going to any number of backends, OTLP\/gRPC is the preferred &#8220;common&#8221; mechanism that the OTel Collector proxy can handle. It can then deal with the varying onward protocols. <\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Counters vs Gauges<\/h3>\n\n\n\n<p>The OTel definitions have a clear distinction between &#8220;Counters&#8221; and &#8220;Gauges&#8221;. Counters are metrics that continue to increase; for example the number of messages transferred across a channel. Gauges are metrics that indicate the current state of something, but do not make any sense as cumulative values. For example, the number of application connections right now.<\/p>\n\n\n\n<p>The queue manager reports some of the &#8220;counter&#8221;-type metrics as a truly cumulative value across the lifetime of the object, but other metrics as a delta value since the last collection. Generally, this distinction comes from the metric appearing either from a <code>DISPLAY xxSTATUS<\/code> command or from the published resource metrics, as used by the <code>amqsrua<\/code> sample program. Since we have to choose one or the other approach, we send all counters as deltas &#8211; where necessary, this tool calculates the delta from the previous scrape.<\/p>\n\n\n\n<p>The distinction between Counters and Gauges is particularly relevant when building dashboards. The operations available may differ depending on the kind of metric. See <a href=\"https:\/\/www.innoq.com\/en\/blog\/2019\/05\/prometheus-counters\" target=\"_blank\" rel=\"noreferrer noopener\">here<\/a> for good introduction to handling counters.<\/p>\n\n\n\n<p>As always, the exact format of the metric names will vary by database. Whether elements are separated by dots or underscores or a mixture &#8230; But the visualisation tools like Grafana or a database-specific equivalent ought to provide a way to explore the available names.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">A simple configuration<\/h3>\n\n\n\n<p>I used the <a href=\"https:\/\/opentelemetry.io\/docs\/collector\/\" target=\"_blank\" rel=\"noreferrer noopener\">OTel Collector<\/a> as a proxy to handle the data, rather than going direct to a particular database. Because I already had a Prometheus database running locally, I used that as the final destination.<\/p>\n\n\n\n<p>The relevant parts of the OTel Collector configuration:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">receivers:\n  otlp:\n    protocols:\n      grpc:\n        endpoint: 0.0.0.0:4317\n    \nservice:\n  pipelines:\n    metrics:\n      receivers: [otlp]\n      processors: [batch]\n      exporters: [prometheus]\n\nexporters:\n  prometheus:\n    endpoint: ':9159'\n    send_timestamps: true\n    metric_expiration: 10m\n    resource_to_telemetry_conversion:\n      enabled: false\n    add_metric_suffixes: false<\/pre>\n\n\n\n<p>This gets the OTel Collector listening on port 4317 for GRPC traffic, and listening on port 9159 for Prometheus callbacks. So I had to add a reference to 9159 in the Prometheus engine configuration too.<\/p>\n\n\n\n<p>I also added a <code>exporters.prometheus.namespace<\/code>value in the configuration, simply to distinguish metrics being sent from the OTel environment from those sent direct to Prometheus by one of my other collectors. That&#8217;s unlikely to be something you would choose to do.<\/p>\n\n\n\n<p>The MQ process then has this section in its OTel-specific configuration block:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">otel:\n  interval: 10s\n  maxErrors: 10\n  logLevel: INFO \n  endpoint: localhost:4317\n  insecure: true<\/pre>\n\n\n\n<p>The address of the OTel collector is in the <code>endpoint<\/code>attribute. If that line is missing or empty, then the <code>stdout<\/code> destination is used instead.<\/p>\n\n\n\n<p>The <code>insecure<\/code>is there to simplify my TLS configuration. In a production environment, you would obviously want to set up certificate stores etc. Although I&#8217;ve not exposed  those certificate attributes in this YAML file, you can set them via environment variables recognised directly by the OTel client libraries. I&#8217;ve put references to those in the <em>cmd\/mq_otel\/README.md<\/em> file in the repository.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Building the MQ component<\/h3>\n\n\n\n<p>The MQ OTel component is built in the same way as all the other collectors in the repository.  First:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">$ git clone git@github.com:ibm-messaging\/mq-metric-samples<\/pre>\n\n\n\n<p>From there, the easiest way is probably to use one of the included Docker build mechanisms:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">$ cd mq-metric-samples\n$ docker build --build-arg EXPORTER=mq_otel -f Dockerfile -t mqotel:0.1 .<\/pre>\n\n\n\n<p>To set up a configuration file, combine the <em>config.common.yaml<\/em> file with <em>cmd\/mq_otel\/config.collector.yaml<\/em> and edit it for your environment. Then run the built container, mounting the configuration:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">$ docker run -it -v mq_otel.yaml:\/opt\/config\/mq_otel.yaml mqotel:0.1<\/pre>\n\n\n\n<p>Once you&#8217;re happy that the configuration is good, you can remove the <code>-it<\/code> option to run as a detached container.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Summary<\/h3>\n\n\n\n<p>This is an initial release of an Open Telemetry metrics integration, and it reports itself as a <code>0.0.1<\/code>version. And so I&#8217;m looking for any feedback on how useful it might be, or any additional features that might be appropriate.<\/p>\n<p class=\"last-modified\" style=\"border:1px solid;padding: 10px;\">This post was last updated on March 12th, 2024 at 07:27 am<\/p>","protected":false},"excerpt":{"rendered":"<p>As I promised in a recent article, I am coming back to the OpenTelemetry topic. This time, it&#8217;s going to be about another pillar of the observability requirements &#8211; integrating MQ&#8217;s metrics with OpenTelemetry. This post was last updated on March 12th, 2024 at 07:27 am<\/p>\n","protected":false},"author":1,"featured_media":1546,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_jetpack_memberships_contains_paid_content":false,"footnotes":""},"categories":[5],"tags":[43,35,20,131,42],"class_list":["post-1564","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-mq","tag-grafana","tag-ibmmq","tag-mqseries","tag-opentelemetry","tag-prometheus"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.5 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>MQ Metrics with OpenTelemetry - Mark Taylor&#039;s Blog<\/title>\n<meta name=\"description\" content=\"This post shows how to collect MQ metrics and status information and integrate it with an OpenTelemetry system.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/marketaylor.synology.me\/?p=1564\" \/>\n<meta property=\"og:locale\" content=\"en_GB\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"MQ Metrics with OpenTelemetry - Mark Taylor&#039;s Blog\" \/>\n<meta property=\"og:description\" content=\"This post shows how to collect MQ metrics and status information and integrate it with an OpenTelemetry system.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/marketaylor.synology.me\/?p=1564\" \/>\n<meta property=\"og:site_name\" content=\"Mark Taylor&#039;s Blog\" \/>\n<meta property=\"article:published_time\" content=\"2024-03-01T09:27:56+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2024-03-12T07:27:09+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/marketaylor.synology.me\/wp-content\/uploads\/2024\/02\/opentelemetrylogo-1.png\" \/>\n\t<meta property=\"og:image:width\" content=\"367\" \/>\n\t<meta property=\"og:image:height\" content=\"137\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"Mark\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@marketaylor\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Mark\" \/>\n\t<meta name=\"twitter:label2\" content=\"Estimated reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"5 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/marketaylor.synology.me\\\/?p=1564#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/marketaylor.synology.me\\\/?p=1564\"},\"author\":{\"name\":\"Mark\",\"@id\":\"https:\\\/\\\/marketaylor.synology.me\\\/#\\\/schema\\\/person\\\/2d6f4113ff54187023e20c20186bbb3c\"},\"headline\":\"MQ Metrics with OpenTelemetry\",\"datePublished\":\"2024-03-01T09:27:56+00:00\",\"dateModified\":\"2024-03-12T07:27:09+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/marketaylor.synology.me\\\/?p=1564\"},\"wordCount\":787,\"commentCount\":3,\"image\":{\"@id\":\"https:\\\/\\\/marketaylor.synology.me\\\/?p=1564#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/marketaylor.synology.me\\\/wp-content\\\/uploads\\\/2024\\\/02\\\/opentelemetrylogo-1.png\",\"keywords\":[\"grafana\",\"ibmmq\",\"mqseries\",\"opentelemetry\",\"prometheus\"],\"articleSection\":[\"IBM MQ\"],\"inLanguage\":\"en-GB\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/marketaylor.synology.me\\\/?p=1564#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/marketaylor.synology.me\\\/?p=1564\",\"url\":\"https:\\\/\\\/marketaylor.synology.me\\\/?p=1564\",\"name\":\"MQ Metrics with OpenTelemetry - Mark Taylor&#039;s Blog\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/marketaylor.synology.me\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/marketaylor.synology.me\\\/?p=1564#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/marketaylor.synology.me\\\/?p=1564#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/marketaylor.synology.me\\\/wp-content\\\/uploads\\\/2024\\\/02\\\/opentelemetrylogo-1.png\",\"datePublished\":\"2024-03-01T09:27:56+00:00\",\"dateModified\":\"2024-03-12T07:27:09+00:00\",\"author\":{\"@id\":\"https:\\\/\\\/marketaylor.synology.me\\\/#\\\/schema\\\/person\\\/2d6f4113ff54187023e20c20186bbb3c\"},\"description\":\"This post shows how to collect MQ metrics and status information and integrate it with an OpenTelemetry system.\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/marketaylor.synology.me\\\/?p=1564#breadcrumb\"},\"inLanguage\":\"en-GB\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/marketaylor.synology.me\\\/?p=1564\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-GB\",\"@id\":\"https:\\\/\\\/marketaylor.synology.me\\\/?p=1564#primaryimage\",\"url\":\"https:\\\/\\\/marketaylor.synology.me\\\/wp-content\\\/uploads\\\/2024\\\/02\\\/opentelemetrylogo-1.png\",\"contentUrl\":\"https:\\\/\\\/marketaylor.synology.me\\\/wp-content\\\/uploads\\\/2024\\\/02\\\/opentelemetrylogo-1.png\",\"width\":367,\"height\":137,\"caption\":\"OTel logo\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/marketaylor.synology.me\\\/?p=1564#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/marketaylor.synology.me\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"MQ Metrics with OpenTelemetry\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/marketaylor.synology.me\\\/#website\",\"url\":\"https:\\\/\\\/marketaylor.synology.me\\\/\",\"name\":\"Mark Taylor&#039;s Blog\",\"description\":\"Messaging, Music and Moving Around\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/marketaylor.synology.me\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-GB\"},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/marketaylor.synology.me\\\/#\\\/schema\\\/person\\\/2d6f4113ff54187023e20c20186bbb3c\",\"name\":\"Mark\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-GB\",\"@id\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/9a5ae091c43730194cba7cabb5d65c1dc3f48d05caaddec6ff2319a1ce66376f?s=96&d=mm&r=g\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/9a5ae091c43730194cba7cabb5d65c1dc3f48d05caaddec6ff2319a1ce66376f?s=96&d=mm&r=g\",\"contentUrl\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/9a5ae091c43730194cba7cabb5d65c1dc3f48d05caaddec6ff2319a1ce66376f?s=96&d=mm&r=g\",\"caption\":\"Mark\"},\"sameAs\":[\"https:\\\/\\\/x.com\\\/marketaylor\"],\"url\":\"https:\\\/\\\/marketaylor.synology.me\\\/?author=1\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"MQ Metrics with OpenTelemetry - Mark Taylor&#039;s Blog","description":"This post shows how to collect MQ metrics and status information and integrate it with an OpenTelemetry system.","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:\/\/marketaylor.synology.me\/?p=1564","og_locale":"en_GB","og_type":"article","og_title":"MQ Metrics with OpenTelemetry - Mark Taylor&#039;s Blog","og_description":"This post shows how to collect MQ metrics and status information and integrate it with an OpenTelemetry system.","og_url":"https:\/\/marketaylor.synology.me\/?p=1564","og_site_name":"Mark Taylor&#039;s Blog","article_published_time":"2024-03-01T09:27:56+00:00","article_modified_time":"2024-03-12T07:27:09+00:00","og_image":[{"width":367,"height":137,"url":"https:\/\/marketaylor.synology.me\/wp-content\/uploads\/2024\/02\/opentelemetrylogo-1.png","type":"image\/png"}],"author":"Mark","twitter_card":"summary_large_image","twitter_creator":"@marketaylor","twitter_misc":{"Written by":"Mark","Estimated reading time":"5 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/marketaylor.synology.me\/?p=1564#article","isPartOf":{"@id":"https:\/\/marketaylor.synology.me\/?p=1564"},"author":{"name":"Mark","@id":"https:\/\/marketaylor.synology.me\/#\/schema\/person\/2d6f4113ff54187023e20c20186bbb3c"},"headline":"MQ Metrics with OpenTelemetry","datePublished":"2024-03-01T09:27:56+00:00","dateModified":"2024-03-12T07:27:09+00:00","mainEntityOfPage":{"@id":"https:\/\/marketaylor.synology.me\/?p=1564"},"wordCount":787,"commentCount":3,"image":{"@id":"https:\/\/marketaylor.synology.me\/?p=1564#primaryimage"},"thumbnailUrl":"https:\/\/marketaylor.synology.me\/wp-content\/uploads\/2024\/02\/opentelemetrylogo-1.png","keywords":["grafana","ibmmq","mqseries","opentelemetry","prometheus"],"articleSection":["IBM MQ"],"inLanguage":"en-GB","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/marketaylor.synology.me\/?p=1564#respond"]}]},{"@type":"WebPage","@id":"https:\/\/marketaylor.synology.me\/?p=1564","url":"https:\/\/marketaylor.synology.me\/?p=1564","name":"MQ Metrics with OpenTelemetry - Mark Taylor&#039;s Blog","isPartOf":{"@id":"https:\/\/marketaylor.synology.me\/#website"},"primaryImageOfPage":{"@id":"https:\/\/marketaylor.synology.me\/?p=1564#primaryimage"},"image":{"@id":"https:\/\/marketaylor.synology.me\/?p=1564#primaryimage"},"thumbnailUrl":"https:\/\/marketaylor.synology.me\/wp-content\/uploads\/2024\/02\/opentelemetrylogo-1.png","datePublished":"2024-03-01T09:27:56+00:00","dateModified":"2024-03-12T07:27:09+00:00","author":{"@id":"https:\/\/marketaylor.synology.me\/#\/schema\/person\/2d6f4113ff54187023e20c20186bbb3c"},"description":"This post shows how to collect MQ metrics and status information and integrate it with an OpenTelemetry system.","breadcrumb":{"@id":"https:\/\/marketaylor.synology.me\/?p=1564#breadcrumb"},"inLanguage":"en-GB","potentialAction":[{"@type":"ReadAction","target":["https:\/\/marketaylor.synology.me\/?p=1564"]}]},{"@type":"ImageObject","inLanguage":"en-GB","@id":"https:\/\/marketaylor.synology.me\/?p=1564#primaryimage","url":"https:\/\/marketaylor.synology.me\/wp-content\/uploads\/2024\/02\/opentelemetrylogo-1.png","contentUrl":"https:\/\/marketaylor.synology.me\/wp-content\/uploads\/2024\/02\/opentelemetrylogo-1.png","width":367,"height":137,"caption":"OTel logo"},{"@type":"BreadcrumbList","@id":"https:\/\/marketaylor.synology.me\/?p=1564#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/marketaylor.synology.me\/"},{"@type":"ListItem","position":2,"name":"MQ Metrics with OpenTelemetry"}]},{"@type":"WebSite","@id":"https:\/\/marketaylor.synology.me\/#website","url":"https:\/\/marketaylor.synology.me\/","name":"Mark Taylor&#039;s Blog","description":"Messaging, Music and Moving Around","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/marketaylor.synology.me\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-GB"},{"@type":"Person","@id":"https:\/\/marketaylor.synology.me\/#\/schema\/person\/2d6f4113ff54187023e20c20186bbb3c","name":"Mark","image":{"@type":"ImageObject","inLanguage":"en-GB","@id":"https:\/\/secure.gravatar.com\/avatar\/9a5ae091c43730194cba7cabb5d65c1dc3f48d05caaddec6ff2319a1ce66376f?s=96&d=mm&r=g","url":"https:\/\/secure.gravatar.com\/avatar\/9a5ae091c43730194cba7cabb5d65c1dc3f48d05caaddec6ff2319a1ce66376f?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/9a5ae091c43730194cba7cabb5d65c1dc3f48d05caaddec6ff2319a1ce66376f?s=96&d=mm&r=g","caption":"Mark"},"sameAs":["https:\/\/x.com\/marketaylor"],"url":"https:\/\/marketaylor.synology.me\/?author=1"}]}},"jetpack_featured_media_url":"https:\/\/marketaylor.synology.me\/wp-content\/uploads\/2024\/02\/opentelemetrylogo-1.png","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/marketaylor.synology.me\/index.php?rest_route=\/wp\/v2\/posts\/1564","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/marketaylor.synology.me\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/marketaylor.synology.me\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/marketaylor.synology.me\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/marketaylor.synology.me\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=1564"}],"version-history":[{"count":13,"href":"https:\/\/marketaylor.synology.me\/index.php?rest_route=\/wp\/v2\/posts\/1564\/revisions"}],"predecessor-version":[{"id":1585,"href":"https:\/\/marketaylor.synology.me\/index.php?rest_route=\/wp\/v2\/posts\/1564\/revisions\/1585"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/marketaylor.synology.me\/index.php?rest_route=\/wp\/v2\/media\/1546"}],"wp:attachment":[{"href":"https:\/\/marketaylor.synology.me\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=1564"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/marketaylor.synology.me\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=1564"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/marketaylor.synology.me\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=1564"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}