{"id":1802,"date":"2026-02-06T14:11:25","date_gmt":"2026-02-06T14:11:25","guid":{"rendered":"https:\/\/marketaylor.synology.me\/?p=1802"},"modified":"2026-02-06T14:11:28","modified_gmt":"2026-02-06T14:11:28","slug":"otel-context-propagation-for-mq-applications-part-4-python","status":"publish","type":"post","link":"https:\/\/marketaylor.synology.me\/?p=1802","title":{"rendered":"OTel Context Propagation for MQ Applications: part 4 \u2013 Python"},"content":{"rendered":"\n<p>Previous articles in this series have shown OpenTelemetry (OTel) Context propagation for Node.js, Go, Java and C\/C++ MQ applications. You should read the <a href=\"https:\/\/marketaylor.synology.me\/?p=1626\" target=\"_blank\" rel=\"noreferrer noopener\">first article<\/a> for an introduction and explanation of the scenarios and problems that need solutions.<\/p>\n\n\n\n<p>This entry discusses <a href=\"https:\/\/pypi.org\/project\/ibmmq\/\" target=\"_blank\" rel=\"noreferrer noopener\">Python<\/a> MQ applications.<\/p>\n\n\n\n<!--more-->\n\n\n\n<h2 class=\"wp-block-heading\">Background<\/h2>\n\n\n\n<p>Towards the end of 2025, we released an updated <a href=\"https:\/\/github.com\/ibm-messaging\/mq-mqi-python\" target=\"_blank\" rel=\"noreferrer noopener\">implementation<\/a> of the Python MQI library. I didn&#8217;t write about it at the time, as<a href=\"https:\/\/community.ibm.com\/community\/user\/blogs\/dylan-goode\/2025\/10\/16\/new-python-binding-for-ibm-mq\" target=\"_blank\" rel=\"noreferrer noopener\"> this article<\/a> covered the main points. And documents within the source tree had lots more details about the changes, the new designs, and the rationales for choices made.<\/p>\n\n\n\n<p>But one thing missing from the library which would give it effective parity to the Go and Node.js language bindings was support for OTel trace context propagation. That feature is now available in version 2.0.2 of the <code>ibmmq<\/code> library, released alongside MQ 9.4.5.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Automatic Tracing<\/h2>\n\n\n\n<p>The OTel SDK developers provide automatic tracing capability for several languages and several standard (or commonly-used) packages. We take advantage of the Python libraries here.<\/p>\n\n\n\n<p>If you only use libraries that are already known by the automatic instrumentation system, then no additional work is required in your application code to take advantage of this. The only change is how you start the application. <\/p>\n\n\n\n<p>You can of course also explicitly instrument Python applications with your own calls to the OTel API.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">The MQ component<\/h3>\n\n\n\n<p>The implementation in the <code>ibmmq<\/code> Python library is also automatic. If it can access the OTel libraries via an <code>import<\/code>, it tries to use them. If the libraries are not available, then no OTel work will be attempted. There is also an <code>MQIPY_NOOTEL<\/code> environment variable to disable the MQ interception and processing even if the OTel libraries are available.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Example<\/h2>\n\n\n\n<p>As with the other languages discussed in this series, I started with the dice-rolling application described <a href=\"https:\/\/opentelemetry.io\/docs\/languages\/python\/getting-started\/\" target=\"_blank\" rel=\"noreferrer noopener\">here<\/a>. <\/p>\n\n\n\n<p>To get the OTel libraries, it&#8217;s essentially a matter of running <code>pip install opentelemetry-distro<\/code> for the packages, and then <code>opentelemetry-bootstrap -a install<\/code>to configure the environment. As always with Python, you should use a virtual environment to isolate your installed packages.<\/p>\n\n\n\n<p>And then I replaced the work in the sample application with MQ operations. In this case, it was to make Python calls to send or receive messages through an MQ network.<\/p>\n\n\n\n<h4 class=\"wp-block-heading\">Application Startup<\/h4>\n\n\n\n<p>There was no code change for instrumenting this application. Just configuration and startup options:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">export OTEL_EXPORTER_OTLP_ENDPOINT=\"http:\/\/localhost:4318\"<br>export OTEL_PYTHON_LOGGING_AUTO_INSTRUMENTATION_ENABLED=true<br>opentelemetry-instrument \\<br>    --traces_exporter otlp \\<br>    --metrics_exporter none \\<br>    --logs_exporter none \\<br>    --service_name python \\<br>    flask run -p 4000 &amp;<\/pre>\n\n\n\n<p>Using the <code>opentelemetry-instrument<\/code>command causes the Python execution to insert calls around any of the APIs it recognises, to emit the OTel traces and spans. In this case, it knows about <code>flask<\/code> and its HTTP operations.<\/p>\n\n\n\n<p>The configuration options tell the OTel instrumentation module what kind of information it should emit, and how. I&#8217;ve requested just the tracing data, to use the OTLP\/gRPC protocol.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Results<\/h3>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"307\" src=\"https:\/\/marketaylor.synology.me\/wp-content\/uploads\/2026\/01\/otel_python-1024x307.png\" alt=\"\" class=\"wp-image-1804\" srcset=\"https:\/\/marketaylor.synology.me\/wp-content\/uploads\/2026\/01\/otel_python-1024x307.png 1024w, https:\/\/marketaylor.synology.me\/wp-content\/uploads\/2026\/01\/otel_python-300x90.png 300w, https:\/\/marketaylor.synology.me\/wp-content\/uploads\/2026\/01\/otel_python-768x230.png 768w, https:\/\/marketaylor.synology.me\/wp-content\/uploads\/2026\/01\/otel_python-1200x359.png 1200w, https:\/\/marketaylor.synology.me\/wp-content\/uploads\/2026\/01\/otel_python.png 1373w\" sizes=\"auto, (max-width: 709px) 85vw, (max-width: 909px) 67vw, (max-width: 1362px) 62vw, 840px\" \/><\/figure>\n\n\n\n<p>Just as in the previous examples for Go and Node, we can see Traces being linked all the way from an HTTP request through the MQ network.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"267\" src=\"https:\/\/marketaylor.synology.me\/wp-content\/uploads\/2026\/01\/otel_python_2-1024x267.png\" alt=\"\" class=\"wp-image-1805\" srcset=\"https:\/\/marketaylor.synology.me\/wp-content\/uploads\/2026\/01\/otel_python_2-1024x267.png 1024w, https:\/\/marketaylor.synology.me\/wp-content\/uploads\/2026\/01\/otel_python_2-300x78.png 300w, https:\/\/marketaylor.synology.me\/wp-content\/uploads\/2026\/01\/otel_python_2-768x200.png 768w, https:\/\/marketaylor.synology.me\/wp-content\/uploads\/2026\/01\/otel_python_2-1200x313.png 1200w, https:\/\/marketaylor.synology.me\/wp-content\/uploads\/2026\/01\/otel_python_2.png 1429w\" sizes=\"auto, (max-width: 709px) 85vw, (max-width: 909px) 67vw, (max-width: 1362px) 62vw, 840px\" \/><\/figure>\n\n\n\n<p>And when the message is taken from a queue, the trace associated with the HTTP request is linked to the original trace.<\/p>\n\n\n\n<h5 class=\"wp-block-heading\">The RemoveRFH2 option<\/h5>\n\n\n\n<p>Again, just as in the Go and Node propagators there is a need to allow applications to get messages without any unexpected RFH2 element at the front.  The way I&#8217;ve allowed this in the Python MQI library is to give an optional extra element on the <code>Queue.get<\/code> method. Instead of <\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">message = queue.get(None, md, gmo)<\/pre>\n\n\n\n<p>we create a new object and use a keyword to pass that in:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">otel_options = ibmmq.OTelOptions(remove_rfh2=True}<br>message = queue.get(None, md, gmo, otel_options=otel_options)<\/pre>\n\n\n\n<p>The <code>Queue.get<\/code> method (and its relatives) and the <code>QueueManager.cb<\/code> method are the only places this optional object can be used.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Conclusion<\/h2>\n\n\n\n<p>This new feature brings the Python MQI bindings into parity with several other language bindings. It fills a gap that is not being addressed by the core OpenTelemetry toolkits, and will allow better insight into the behaviour of your MQ applications.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Previous articles in this series have shown OpenTelemetry (OTel) Context propagation for Node.js, Go, Java and C\/C++ MQ applications. You should read the first article for an introduction and explanation of the scenarios and problems that need solutions. This entry discusses Python MQ applications.<\/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":[35,137,20,131,135,146],"class_list":["post-1802","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-mq","tag-ibmmq","tag-jaeger","tag-mqseries","tag-opentelemetry","tag-otel","tag-python"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.5 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>OTel Context Propagation for MQ Applications: part 4 \u2013 Python - Mark Taylor&#039;s Blog<\/title>\n<meta name=\"description\" content=\"This article discusses OTel context propagation for Python apps using IBM MQ. It&#039;s a sequel to articles covering other language bindings.\" \/>\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=1802\" \/>\n<meta property=\"og:locale\" content=\"en_GB\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"OTel Context Propagation for MQ Applications: part 4 \u2013 Python - Mark Taylor&#039;s Blog\" \/>\n<meta property=\"og:description\" content=\"This article discusses OTel context propagation for Python apps using IBM MQ. It&#039;s a sequel to articles covering other language bindings.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/marketaylor.synology.me\/?p=1802\" \/>\n<meta property=\"og:site_name\" content=\"Mark Taylor&#039;s Blog\" \/>\n<meta property=\"article:published_time\" content=\"2026-02-06T14:11:25+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2026-02-06T14:11:28+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=\"3 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/marketaylor.synology.me\\\/?p=1802#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/marketaylor.synology.me\\\/?p=1802\"},\"author\":{\"name\":\"Mark\",\"@id\":\"https:\\\/\\\/marketaylor.synology.me\\\/#\\\/schema\\\/person\\\/2d6f4113ff54187023e20c20186bbb3c\"},\"headline\":\"OTel Context Propagation for MQ Applications: part 4 \u2013 Python\",\"datePublished\":\"2026-02-06T14:11:25+00:00\",\"dateModified\":\"2026-02-06T14:11:28+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/marketaylor.synology.me\\\/?p=1802\"},\"wordCount\":630,\"commentCount\":1,\"image\":{\"@id\":\"https:\\\/\\\/marketaylor.synology.me\\\/?p=1802#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/marketaylor.synology.me\\\/wp-content\\\/uploads\\\/2024\\\/02\\\/opentelemetrylogo-1.png\",\"keywords\":[\"ibmmq\",\"jaeger\",\"mqseries\",\"opentelemetry\",\"otel\",\"python\"],\"articleSection\":[\"IBM MQ\"],\"inLanguage\":\"en-GB\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/marketaylor.synology.me\\\/?p=1802#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/marketaylor.synology.me\\\/?p=1802\",\"url\":\"https:\\\/\\\/marketaylor.synology.me\\\/?p=1802\",\"name\":\"OTel Context Propagation for MQ Applications: part 4 \u2013 Python - Mark Taylor&#039;s Blog\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/marketaylor.synology.me\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/marketaylor.synology.me\\\/?p=1802#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/marketaylor.synology.me\\\/?p=1802#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/marketaylor.synology.me\\\/wp-content\\\/uploads\\\/2024\\\/02\\\/opentelemetrylogo-1.png\",\"datePublished\":\"2026-02-06T14:11:25+00:00\",\"dateModified\":\"2026-02-06T14:11:28+00:00\",\"author\":{\"@id\":\"https:\\\/\\\/marketaylor.synology.me\\\/#\\\/schema\\\/person\\\/2d6f4113ff54187023e20c20186bbb3c\"},\"description\":\"This article discusses OTel context propagation for Python apps using IBM MQ. It's a sequel to articles covering other language bindings.\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/marketaylor.synology.me\\\/?p=1802#breadcrumb\"},\"inLanguage\":\"en-GB\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/marketaylor.synology.me\\\/?p=1802\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-GB\",\"@id\":\"https:\\\/\\\/marketaylor.synology.me\\\/?p=1802#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=1802#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/marketaylor.synology.me\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"OTel Context Propagation for MQ Applications: part 4 \u2013 Python\"}]},{\"@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":"OTel Context Propagation for MQ Applications: part 4 \u2013 Python - Mark Taylor&#039;s Blog","description":"This article discusses OTel context propagation for Python apps using IBM MQ. It's a sequel to articles covering other language bindings.","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=1802","og_locale":"en_GB","og_type":"article","og_title":"OTel Context Propagation for MQ Applications: part 4 \u2013 Python - Mark Taylor&#039;s Blog","og_description":"This article discusses OTel context propagation for Python apps using IBM MQ. It's a sequel to articles covering other language bindings.","og_url":"https:\/\/marketaylor.synology.me\/?p=1802","og_site_name":"Mark Taylor&#039;s Blog","article_published_time":"2026-02-06T14:11:25+00:00","article_modified_time":"2026-02-06T14:11:28+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":"3 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/marketaylor.synology.me\/?p=1802#article","isPartOf":{"@id":"https:\/\/marketaylor.synology.me\/?p=1802"},"author":{"name":"Mark","@id":"https:\/\/marketaylor.synology.me\/#\/schema\/person\/2d6f4113ff54187023e20c20186bbb3c"},"headline":"OTel Context Propagation for MQ Applications: part 4 \u2013 Python","datePublished":"2026-02-06T14:11:25+00:00","dateModified":"2026-02-06T14:11:28+00:00","mainEntityOfPage":{"@id":"https:\/\/marketaylor.synology.me\/?p=1802"},"wordCount":630,"commentCount":1,"image":{"@id":"https:\/\/marketaylor.synology.me\/?p=1802#primaryimage"},"thumbnailUrl":"https:\/\/marketaylor.synology.me\/wp-content\/uploads\/2024\/02\/opentelemetrylogo-1.png","keywords":["ibmmq","jaeger","mqseries","opentelemetry","otel","python"],"articleSection":["IBM MQ"],"inLanguage":"en-GB","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/marketaylor.synology.me\/?p=1802#respond"]}]},{"@type":"WebPage","@id":"https:\/\/marketaylor.synology.me\/?p=1802","url":"https:\/\/marketaylor.synology.me\/?p=1802","name":"OTel Context Propagation for MQ Applications: part 4 \u2013 Python - Mark Taylor&#039;s Blog","isPartOf":{"@id":"https:\/\/marketaylor.synology.me\/#website"},"primaryImageOfPage":{"@id":"https:\/\/marketaylor.synology.me\/?p=1802#primaryimage"},"image":{"@id":"https:\/\/marketaylor.synology.me\/?p=1802#primaryimage"},"thumbnailUrl":"https:\/\/marketaylor.synology.me\/wp-content\/uploads\/2024\/02\/opentelemetrylogo-1.png","datePublished":"2026-02-06T14:11:25+00:00","dateModified":"2026-02-06T14:11:28+00:00","author":{"@id":"https:\/\/marketaylor.synology.me\/#\/schema\/person\/2d6f4113ff54187023e20c20186bbb3c"},"description":"This article discusses OTel context propagation for Python apps using IBM MQ. It's a sequel to articles covering other language bindings.","breadcrumb":{"@id":"https:\/\/marketaylor.synology.me\/?p=1802#breadcrumb"},"inLanguage":"en-GB","potentialAction":[{"@type":"ReadAction","target":["https:\/\/marketaylor.synology.me\/?p=1802"]}]},{"@type":"ImageObject","inLanguage":"en-GB","@id":"https:\/\/marketaylor.synology.me\/?p=1802#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=1802#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/marketaylor.synology.me\/"},{"@type":"ListItem","position":2,"name":"OTel Context Propagation for MQ Applications: part 4 \u2013 Python"}]},{"@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\/1802","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=1802"}],"version-history":[{"count":5,"href":"https:\/\/marketaylor.synology.me\/index.php?rest_route=\/wp\/v2\/posts\/1802\/revisions"}],"predecessor-version":[{"id":1809,"href":"https:\/\/marketaylor.synology.me\/index.php?rest_route=\/wp\/v2\/posts\/1802\/revisions\/1809"}],"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=1802"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/marketaylor.synology.me\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=1802"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/marketaylor.synology.me\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=1802"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}