{"id":1542,"date":"2024-02-10T18:22:52","date_gmt":"2024-02-10T18:22:52","guid":{"rendered":"https:\/\/marketaylor.synology.me\/?p=1542"},"modified":"2024-03-14T18:47:03","modified_gmt":"2024-03-14T18:47:03","slug":"handling-mq-logs-and-events-with-opentelemetry","status":"publish","type":"post","link":"https:\/\/marketaylor.synology.me\/?p=1542","title":{"rendered":"Handling MQ logs and events with OpenTelemetry"},"content":{"rendered":"\n<p>One recent addition to the plethora of observability tools is <a href=\"https:\/\/opentelemetry.io\/docs\/what-is-opentelemetry\/\" target=\"_blank\" rel=\"noreferrer noopener\">OpenTelemetry<\/a>. It attempts to provide a vendor-agnostic set of common APIs, components, interfaces and protocols that enable interoperability between a range of other tools. It deals with three major pillars of telemetry data, the things you often need to look at when monitoring systems: traces (by which it means application-level data flows), metrics, and logs.<\/p>\n\n\n\n<p>There are already <a href=\"https:\/\/www.ibm.com\/docs\/en\/instana-observability\/current?topic=mq-tracing\" target=\"_blank\" rel=\"noreferrer noopener\">ways of tracking messages<\/a> through an MQ network and beyond, reporting via OpenTelemetry. And I will soon be talking a lot more about MQ metrics and OpenTelemetry. But as an appetiser, this post shows the third piece of the story: logs.<\/p>\n\n\n\n<!--more-->\n\n\n\n<h3 class=\"wp-block-heading\">Earlier articles on event processing<\/h3>\n\n\n\n<p>I have <a href=\"https:\/\/marketaylor.synology.me\/?p=838\" target=\"_blank\" rel=\"noreferrer noopener\">written previously<\/a> about sending MQ event messages to Loki, another &#8220;log processing&#8221; tool. That article is essentially identical for how we would make events available through OpenTelemetry. The <a href=\"https:\/\/marketaylor.synology.me\/?p=959\" target=\"_blank\" rel=\"noreferrer noopener\">enhancements to the amqsevt sample<\/a> in MQ 9.2.4 simplify a couple of the intermediate steps, but it&#8217;s still essentially the same: use <strong>amqsevt <\/strong>to format the events as JSON and write them to somewhere that can be picked up by the processor.<\/p>\n\n\n\n<p>So this time round, I&#8217;ll start by showing how to work with the MQ logs.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">MQ Error Logs<\/h3>\n\n\n\n<p>First, you need to configure the queue manager to produce the error logs as JSON. In the queue manager&#8217;s <em>qm.ini <\/em>file, we have<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">DiagnosticMessages:\n   Service = File\n   Name = JSONLogs\n   Format = json\n   FilePrefix = AMQERR\n<\/pre>\n\n\n\n<p>After a queue manager restart, you can see both the JSON and text version of these logs in <em>\/var\/mqm\/qmgrs\/QM1\/errors<\/em>.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">OpenTelemetry Collector<\/h3>\n\n\n\n<p>One key component from the OTel project is the <a href=\"https:\/\/opentelemetry.io\/docs\/collector\/\" target=\"_blank\" rel=\"noreferrer noopener\">Collector<\/a>. It acts as a proxy &#8211; receiving data from a monitored system, potentially doing some work on that data, and then exporting the results on to other tools. It provides a framework for configuring workflows, with a variety of plugins that connect the OTel model to other external systems or process the data.<\/p>\n\n\n\n<p>This proxy is what we will use to read and parse the MQ error logs. One of the input paths (known as a <strong>receiver<\/strong>) to the Collector is the <code>filelogreceiver<\/code>.  There is more documentation on this component <a href=\"https:\/\/github.com\/open-telemetry\/opentelemetry-collector-contrib\/blob\/main\/receiver\/filelogreceiver\/README.md\" target=\"_blank\" rel=\"noreferrer noopener\">here<\/a>, but we can get things working with some very basic configuration.<\/p>\n\n\n\n<p>We have to declare that a particular receiver is going to be used, what its configuration is, and where it fits in a workflow. In the Collector&#8217;s <em>config.yaml<\/em> file we have separate blocks for this. First, the declaration and configuration of the receiver:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">receivers:\n  filelog:\n    include:\n    - \/var\/mqm\/qmgrs\/QM1\/errors\/AMQERR01.json\n    operators:\n      - type: json_parser\n        timestamp:\n          parse_from: attributes.ibm_datetime\n          layout: \"%Y-%m-%dT%H:%M:%S.%LZ\"\n        severity:\n          parse_from: attributes.loglevel<\/pre>\n\n\n\n<p>We only need to name a single input file here. Though if monitoring multiple queue manager with the same Collector, you could replace the queue manager name with a wildcard. The receiver program handles renaming and truncation of the log file, so it should never need to look at AMQERR02 or AMQERR03. The <code>timestamp<\/code>option here defines how to parse the field in the MQ logs that has the time of the entry. Similarly, we can pull the <code>severity<\/code> from standard fields in the entry.<\/p>\n\n\n\n<p>Some interesting options to the receiver that I&#8217;ve not put in here include the ability to stash the current offset, so if the Collector has to restart, it should not process the same log entry twice.<\/p>\n\n\n\n<p>We then need to put this receiver into a workflow:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">service:\n  pipelines:\n    logs:\n      receivers: [filelog]\n      exporters: [debug]<\/pre>\n\n\n\n<p>You would probably want to add more <em>exporters <\/em>to the list here, depending on where you want to send the log data. But this is good enough to cause the parsed entries to be displayed from the Collector.<\/p>\n\n\n\n<p>If I wanted to have multiple instances of the <code>filelogreceiver<\/code>, with different configuration options, all in the same Collector, then the syntax is to give each instance a unique qualified name. For example:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">receivers:\n  filelog\/config1:\n    include: ....\n  filelog\/config2:\n    include: ....\n\nservice:\n  pipelines:\n    logs:\n      receivers: [filelog\/config1, filelog\/config2]<\/pre>\n\n\n\n<p>And for some configurations, perhaps where you cannot directly access the MQ log files, then you should look at other receivers. Maybe the <a href=\"https:\/\/github.com\/open-telemetry\/opentelemetry-collector-contrib\/tree\/main\/receiver\/syslogreceiver\" target=\"_blank\" rel=\"noreferrer noopener\"><code>syslogreceiver<\/code> <\/a>would be helpful.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Collector Output<\/h3>\n\n\n\n<p>Assuming that the Collector has access to the generated log files, after it starts it will process those log files. My configuration simply printed the entries to <em>stderr<\/em>. But that was sufficient to prove successful reading and parsing of those logs.<\/p>\n\n\n\n<p>I got this output (showing just the first reported entry here):<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">2024-02-09T16:08:27.620Z        info    fileconsumer\/file.go:268        Started watching file   {\"kind\": \"receiver\", \"name\": \"filelog\", \"data_type\": \"logs\", \"component\": \"fileconsumer\", \"path\": \"\/var\/mqm\/qmgrs\/QM1\/errors\/AMQERR01.json\"}\n2024-02-09T16:08:27.631Z        info    ResourceLog #0\nResource SchemaURL:\nScopeLogs #0\nScopeLogs SchemaURL:\nInstrumentationScope\nLogRecord #0\nObservedTimestamp: 2024-02-09 16:08:27.620529523 +0000 UTC\nTimestamp: 2024-01-24 07:44:33.428 +0000 UTC\nSeverityText: INFO\nSeverityNumber: Info(9)\nBody: Str({\"ibm_messageId\":\"AMQ6287I\",\"ibm_arithInsert1\":0,\"ibm_arithInsert2\":0,\"ibm_commentInsert1\":\"Linux 6.6.8-100.fc38.x86_64 (MQ Linux (x86-64 platform) 64-bit)\",\"ibm_commentInsert2\":\"\/opt\/mqm (Installation1)\",\"ibm_commentInsert3\":\"9.3.4.0 (p934-L230925.1)\",\"ibm_datetime\":\"2024-01-24T07:44:33.428Z\",\"ibm_serverName\":\"QM1\",\"type\":\"mq_log\",\"host\":\"localhost\",\"loglevel\":\"INFO\",\"module\":\"amqxeida.c:6863\",\"ibm_sequence\":\"1706082273_428121152\",\"ibm_processId\":\"3635139\",\"ibm_threadId\":\"1\",\"ibm_version\":\"9.3.4.0\",\"ibm_processName\":\"strmqm\",\"ibm_userName\":\"metaylor\",\"ibm_installationName\":\"Installation1\",\"ibm_installationDir\":\"\/opt\/mqm\",\"message\":\"AMQ6287I: IBM MQ V9.3.4.0 (p934-30925.1).\"})\nAttributes:\n     -&gt; ibm_commentInsert2: Str(\/opt\/mqm (Installation1))\n     -&gt; ibm_processName: Str(strmqm)\n     -&gt; ibm_installationDir: Str(\/opt\/mqm)\n     -&gt; ibm_datetime: Str(2024-01-24T07:44:33.428Z)\n     -&gt; ibm_serverName: Str(QM1)\n     -&gt; host: Str(localhost)\n     -&gt; ibm_sequence: Str(1706082273_428121152)\n     -&gt; ibm_processId: Str(3635139)\n     -&gt; ibm_threadId: Str(1)\n     -&gt; ibm_version: Str(9.3.4.0)\n     -&gt; ibm_commentInsert1: Str(Linux 6.6.8-100.fc38.x86_64 (MQ Linux (x86-64 platform) 64-bit))\n     -&gt; log.file.name: Str(AMQERR01.json)\n     -&gt; type: Str(mq_log)\n     -&gt; message: Str(AMQ6287I: IBM MQ V9.3.4.0 (p934-L230925.1).)\n     -&gt; ibm_arithInsert2: Double(0)\n     -&gt; ibm_userName: Str(metaylor)\n     -&gt; ibm_installationName: Str(Installation1)\n     -&gt; loglevel: Str(INFO)\n     -&gt; ibm_messageId: Str(AMQ6287I)\n     -&gt; ibm_arithInsert1: Double(0)\n     -&gt; ibm_commentInsert3: Str(9.3.4.0 (p934-L230925.1))\n     -&gt; module: Str(amqxeida.c:6863)\nTrace ID:\nSpan ID:\nFlags: 0\n<\/pre>\n\n\n\n<p>The <em>Timestamp <\/em>field shows that the error log field is successfully parsed from the JSON; the <em>ObservedTimestamp <\/em>value shows when the Collector actually read the logfile.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Event Processing<\/h3>\n\n\n\n<p>Since <strong>amqsevt <\/strong>can format MQ events in JSON format, we can use much the same approach here. <\/p>\n\n\n\n<p>One change I would recommend from the file-based processing path in the previous article, and from how I&#8217;ve processed the log files here,  is to use the OpenTelemetry Collector&#8217;s <code>namedpipe<\/code> receiver (available from version 0.94.0 of the <em>collector-contrib<\/em> build),  as that simplifies handling the output from <strong>amqsevt<\/strong>. It removes any need to deal with log rotation. The data now goes directly into the Collector. Use the <code>mkfifo<\/code> command to create a named pipe, and then redirect the <strong>amqsevt <\/strong>output into it. And the newer <code>-o json_compact<\/code> option helps the processing too. <\/p>\n\n\n\n<p>Here&#8217;s an event message, dumped in the same way.<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">LogRecord #83\nObservedTimestamp: 2024-02-11 09:25:08.003819814 +0000 UTC\nTimestamp: 2024-02-11 07:56:50 +0000 UTC\nSeverityText: \nSeverityNumber: Unspecified(0)\nBody: Str({ \"eventSource\" : { \"objectName\": \"SYSTEM.ADMIN.PERFM.EVENT\",                   \"objectType\" : \"Queue\",                   \"queueMgr\" : \"QM1\"}, \"eventType\" : {     \"name\" : \"Perfm Event\",     \"value\" : 45   }, \"eventReason\" : {     \"name\" : \"Queue Depth Low\",     \"value\" : 2225   }, \"eventCreation\" : {     \"timeStamp\"  : \"2024-02-11T07:56:50Z\",     \"epoch\"      : 1707638210   }, \"eventData\" : {   \"queueMgrName\" : \"QM1\",   \"baseObjectName\" : \"APP.0\",   \"timeSinceReset\" : 11,   \"highQueueDepth\" : 198,   \"msgEnqCount\" : 38,   \"msgDeqCount\" : 158 } })\nAttributes:\n     -&gt; eventSource: Map({\"objectName\":\"SYSTEM.ADMIN.PERFM.EVENT\",\"objectType\":\"Queue\",\"queueMgr\":\"QM1\"})\n     -&gt; eventType: Map({\"name\":\"Perfm Event\",\"value\":45})\n     -&gt; eventReason: Map({\"name\":\"Queue Depth Low\",\"value\":2225})\n     -&gt; eventCreation: Map({\"epoch\":1707638210,\"timeStamp\":\"2024-02-11T07:56:50Z\"})\n     -&gt; eventData: Map({\"baseObjectName\":\"APP.0\",\"highQueueDepth\":198,\"msgDeqCount\":158,\"msgEnqCount\":38,\"queueMgrName\":\"QM1\",\"timeSinceReset\":11})\nTrace ID: \nSpan ID: \nFlags: 0\n\t{\"kind\": \"exporter\", \"data_type\": \"logs\", \"name\": \"debug\"}\n<\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">Summary<\/h3>\n\n\n\n<p>For the error log information, no additional coding was needed. Just configuration files and ensuring that the OpenTelemetry Collector program had access to the error logs. This is exactly how OTel is meant to work, consuming common formats and exporting them onwards to a variety of backends.<\/p>\n\n\n\n<p>I hope that helps you understand how one of the OpenTelemetry pillars can be integrated with MQ. Join me again soon, when we&#8217;ll talk more about Metrics.<\/p>\n<p class=\"last-modified\" style=\"border:1px solid;padding: 10px;\">This post was last updated on March 14th, 2024 at 06:47 pm<\/p>","protected":false},"excerpt":{"rendered":"<p>One recent addition to the plethora of observability tools is OpenTelemetry. It attempts to provide a vendor-agnostic set of common APIs, components, interfaces and protocols that enable interoperability between a range of other tools. It deals with three major pillars of telemetry data, the things you often need to look at when monitoring systems: traces &hellip; <a href=\"https:\/\/marketaylor.synology.me\/?p=1542\" class=\"more-link\">Continue reading<span class=\"screen-reader-text\"> &#8220;Handling MQ logs and events with OpenTelemetry&#8221;<\/span><\/a><\/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,20,131],"class_list":["post-1542","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-mq","tag-ibmmq","tag-mqseries","tag-opentelemetry"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.5 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Handling MQ logs and events with OpenTelemetry - Mark Taylor&#039;s Blog<\/title>\n<meta name=\"description\" content=\"This post deals with handling MQ log files and events through an OpenTelemetry pipeline. We show a simple configuration.\" \/>\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=1542\" \/>\n<meta property=\"og:locale\" content=\"en_GB\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Handling MQ logs and events with OpenTelemetry - Mark Taylor&#039;s Blog\" \/>\n<meta property=\"og:description\" content=\"This post deals with handling MQ log files and events through an OpenTelemetry pipeline. We show a simple configuration.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/marketaylor.synology.me\/?p=1542\" \/>\n<meta property=\"og:site_name\" content=\"Mark Taylor&#039;s Blog\" \/>\n<meta property=\"article:published_time\" content=\"2024-02-10T18:22:52+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2024-03-14T18:47:03+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=\"7 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/marketaylor.synology.me\\\/?p=1542#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/marketaylor.synology.me\\\/?p=1542\"},\"author\":{\"name\":\"Mark\",\"@id\":\"https:\\\/\\\/marketaylor.synology.me\\\/#\\\/schema\\\/person\\\/2d6f4113ff54187023e20c20186bbb3c\"},\"headline\":\"Handling MQ logs and events with OpenTelemetry\",\"datePublished\":\"2024-02-10T18:22:52+00:00\",\"dateModified\":\"2024-03-14T18:47:03+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/marketaylor.synology.me\\\/?p=1542\"},\"wordCount\":917,\"commentCount\":1,\"image\":{\"@id\":\"https:\\\/\\\/marketaylor.synology.me\\\/?p=1542#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/marketaylor.synology.me\\\/wp-content\\\/uploads\\\/2024\\\/02\\\/opentelemetrylogo-1.png\",\"keywords\":[\"ibmmq\",\"mqseries\",\"opentelemetry\"],\"articleSection\":[\"IBM MQ\"],\"inLanguage\":\"en-GB\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/marketaylor.synology.me\\\/?p=1542#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/marketaylor.synology.me\\\/?p=1542\",\"url\":\"https:\\\/\\\/marketaylor.synology.me\\\/?p=1542\",\"name\":\"Handling MQ logs and events with OpenTelemetry - Mark Taylor&#039;s Blog\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/marketaylor.synology.me\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/marketaylor.synology.me\\\/?p=1542#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/marketaylor.synology.me\\\/?p=1542#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/marketaylor.synology.me\\\/wp-content\\\/uploads\\\/2024\\\/02\\\/opentelemetrylogo-1.png\",\"datePublished\":\"2024-02-10T18:22:52+00:00\",\"dateModified\":\"2024-03-14T18:47:03+00:00\",\"author\":{\"@id\":\"https:\\\/\\\/marketaylor.synology.me\\\/#\\\/schema\\\/person\\\/2d6f4113ff54187023e20c20186bbb3c\"},\"description\":\"This post deals with handling MQ log files and events through an OpenTelemetry pipeline. We show a simple configuration.\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/marketaylor.synology.me\\\/?p=1542#breadcrumb\"},\"inLanguage\":\"en-GB\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/marketaylor.synology.me\\\/?p=1542\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-GB\",\"@id\":\"https:\\\/\\\/marketaylor.synology.me\\\/?p=1542#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=1542#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/marketaylor.synology.me\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Handling MQ logs and events 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":"Handling MQ logs and events with OpenTelemetry - Mark Taylor&#039;s Blog","description":"This post deals with handling MQ log files and events through an OpenTelemetry pipeline. We show a simple configuration.","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=1542","og_locale":"en_GB","og_type":"article","og_title":"Handling MQ logs and events with OpenTelemetry - Mark Taylor&#039;s Blog","og_description":"This post deals with handling MQ log files and events through an OpenTelemetry pipeline. We show a simple configuration.","og_url":"https:\/\/marketaylor.synology.me\/?p=1542","og_site_name":"Mark Taylor&#039;s Blog","article_published_time":"2024-02-10T18:22:52+00:00","article_modified_time":"2024-03-14T18:47:03+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":"7 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/marketaylor.synology.me\/?p=1542#article","isPartOf":{"@id":"https:\/\/marketaylor.synology.me\/?p=1542"},"author":{"name":"Mark","@id":"https:\/\/marketaylor.synology.me\/#\/schema\/person\/2d6f4113ff54187023e20c20186bbb3c"},"headline":"Handling MQ logs and events with OpenTelemetry","datePublished":"2024-02-10T18:22:52+00:00","dateModified":"2024-03-14T18:47:03+00:00","mainEntityOfPage":{"@id":"https:\/\/marketaylor.synology.me\/?p=1542"},"wordCount":917,"commentCount":1,"image":{"@id":"https:\/\/marketaylor.synology.me\/?p=1542#primaryimage"},"thumbnailUrl":"https:\/\/marketaylor.synology.me\/wp-content\/uploads\/2024\/02\/opentelemetrylogo-1.png","keywords":["ibmmq","mqseries","opentelemetry"],"articleSection":["IBM MQ"],"inLanguage":"en-GB","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/marketaylor.synology.me\/?p=1542#respond"]}]},{"@type":"WebPage","@id":"https:\/\/marketaylor.synology.me\/?p=1542","url":"https:\/\/marketaylor.synology.me\/?p=1542","name":"Handling MQ logs and events with OpenTelemetry - Mark Taylor&#039;s Blog","isPartOf":{"@id":"https:\/\/marketaylor.synology.me\/#website"},"primaryImageOfPage":{"@id":"https:\/\/marketaylor.synology.me\/?p=1542#primaryimage"},"image":{"@id":"https:\/\/marketaylor.synology.me\/?p=1542#primaryimage"},"thumbnailUrl":"https:\/\/marketaylor.synology.me\/wp-content\/uploads\/2024\/02\/opentelemetrylogo-1.png","datePublished":"2024-02-10T18:22:52+00:00","dateModified":"2024-03-14T18:47:03+00:00","author":{"@id":"https:\/\/marketaylor.synology.me\/#\/schema\/person\/2d6f4113ff54187023e20c20186bbb3c"},"description":"This post deals with handling MQ log files and events through an OpenTelemetry pipeline. We show a simple configuration.","breadcrumb":{"@id":"https:\/\/marketaylor.synology.me\/?p=1542#breadcrumb"},"inLanguage":"en-GB","potentialAction":[{"@type":"ReadAction","target":["https:\/\/marketaylor.synology.me\/?p=1542"]}]},{"@type":"ImageObject","inLanguage":"en-GB","@id":"https:\/\/marketaylor.synology.me\/?p=1542#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=1542#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/marketaylor.synology.me\/"},{"@type":"ListItem","position":2,"name":"Handling MQ logs and events 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\/1542","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=1542"}],"version-history":[{"count":16,"href":"https:\/\/marketaylor.synology.me\/index.php?rest_route=\/wp\/v2\/posts\/1542\/revisions"}],"predecessor-version":[{"id":1586,"href":"https:\/\/marketaylor.synology.me\/index.php?rest_route=\/wp\/v2\/posts\/1542\/revisions\/1586"}],"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=1542"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/marketaylor.synology.me\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=1542"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/marketaylor.synology.me\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=1542"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}