{"id":58452,"date":"2021-05-26T12:20:09","date_gmt":"2021-05-26T19:20:09","guid":{"rendered":"https:\/\/github.blog\/?p=58452"},"modified":"2021-09-22T09:02:40","modified_gmt":"2021-09-22T16:02:40","slug":"why-and-how-github-is-adopting-opentelemetry","status":"publish","type":"post","link":"https:\/\/github.blog\/engineering\/infrastructure\/why-and-how-github-is-adopting-opentelemetry\/","title":{"rendered":"Why (and how) GitHub is adopting OpenTelemetry"},"content":{"rendered":"<p>Over the years, GitHub engineers have developed many ways to observe how our systems behave. We mostly make use of statsd for metrics, the syslog format for plain text logs and OpenTracing for request traces. While we have somewhat standardized what we emit, we tend to solve the same problems over and over in each new system we develop.<\/p>\n<p>And, while each component serves its individual purpose well, interoperability is a challenge. For example, several pieces of GitHub\u2019s infrastructure use different statsd dialects, which means we have to special-case our telemetry code in different places &#8211; a non-trivial amount of work!<\/p>\n<p>Different components can use different vocabularies for similar observability concepts, making investigatory work difficult. For example, there\u2019s quite a bit of complexity around following a GitHub.com request across various telemetry signals, which can include metrics, traces, logs, errors and exceptions. While we emit a lot of telemetry data, it can still be difficult to use in practice.<\/p>\n<p>We needed a solution that would allow us to standardize telemetry usage at GitHub, while making it easy for developers around the organization to instrument their code. The <a href=\"https:\/\/opentelemetry.io\" rel=\"noopener\" target=\"_blank\">OpenTelemetry<\/a> project provided us with exactly that!<\/p>\n<h2 id=\"introducing-opentelemetry\"><a class=\"heading-link\" href=\"#introducing-opentelemetry\">Introducing OpenTelemetry<span class=\"heading-hash pl-2 text-italic text-bold\" aria-hidden=\"true\"><\/span><\/a><\/h2>\n<p>OpenTelemetry introduces a common, vendor-neutral format for telemetry signals: OTLP. It also enables telemetry signals to be easily correlated with each other.<\/p>\n<p>Moreover, we can reduce manual work for our engineers by adopting the OpenTelemetry SDKs &#8211; their inherent extensibility allows engineers to avoid re-instrumenting their applications if we need to change our telemetry collection backend, and with only one client SDK per-language we can easily propagate best practices among codebases.<\/p>\n<p>OpenTelemetry empowers us to build integrated and opinionated solutions for our engineers. Designing for observability can be at the forefront of our application engineer\u2019s minds, because we can make it so rewarding.<\/p>\n<h2 id=\"what-were-working-on-and-why\"><a class=\"heading-link\" href=\"#what-were-working-on-and-why\">What we\u2019re working on, and why<span class=\"heading-hash pl-2 text-italic text-bold\" aria-hidden=\"true\"><\/span><\/a><\/h2>\n<p>At the moment, we\u2019re focusing on building out excellent support for the OpenTelemetry tracing signal. We believe that tracing your application should be the main entry point to observability, because we live in a distributed-systems world and tracing illuminates this in a way that\u2019s almost magical.<\/p>\n<p>We believe that tracing allows us to naturally and easily add\/derive additional signals once it&#8217;s in place: many metrics, for example, can be calculated by backends automatically, tracing events can be converted to detailed logs automatically, and exceptions can automatically be reported to our tracking systems.<\/p>\n<p>We\u2019re building opinionated internal helper libraries for OpenTelemetry, so that engineers can add tracing to their systems quickly, rather than spending hours re-inventing the wheel for unsatisfying results. For example, our helper libraries automatically make sure you\u2019re not emitting traces during your tests, to keep your test suites running smoothly:<\/p>\n<pre><code class=\"language-ruby\"># in an initializer, or config\/application.rb\nOpenTelemetry::SDK.configure do |c|\n  if Rails.env.test?\n    c.add_span_processor(\n      # In production, you almost certainly want BatchSpanProcessor!\n      OpenTelemetry::SDK::Trace::Export::SimpleSpanProcessornew(\n        OpenTelemetry::SDK::Trace::Export::NoopSpanExporter.new\n      )\n    )\n  end\nend\n<\/code><\/pre>\n<p>The OpenTelemetry community has started writing libraries that automatically add distributed tracing capabilities to other libraries we rely on &#8211; such as the Ruby Postgres adapter, for example. We believe that careful application of auto-instrumentation can yield powerful results that encourage developers to customize tracing to meet their specific needs. Here, in a Rails application that did not previously have any tracing, the following auto-instrumentation was enough for useful, actionable insights:<\/p>\n<pre><code class=\"language-ruby\"># in an initializer, or config\/application.rb\nOpenTelemetry::SDK.configure do |c|\n  c.use 'OpenTelemetry::Instrumentation::Rails'\n  c.use 'OpenTelemetry::Instrumentation::PG', enable_sql_obfuscation: true\n  c.use 'OpenTelemetry::Instrumentation::ActiveJob'\n  # This application makes a variety of outbound HTTP calls, with a variety of underlying\n  # HTTP client libraries - you may not need this many!\n  c.use 'OpenTelemetry::Instrumentation::Faraday'\n  c.use 'OpenTelemetry::Instrumentation::Net::HTTP'\n  c.use 'OpenTelemetry::Instrumentation::RestClient'\nend\n<\/code><\/pre>\n<p>This short sample is the standard way to configure the OpenTelemetry SDK\u2014and each <code>c.use<\/code> line tells the SDK to load and initialize a certain set of auto-instrumentation for us. After that\u2019s happened, we can immediately gain insight into a poorly performing page! This request tracing view below demonstrates a full, crystal-clear trace of database operations from auto-instrumentation alone:<\/p>\n<p><img data-recalc-dims=\"1\" decoding=\"async\" loading=\"lazy\" class=\"aligncenter size-large wp-image-58455\" src=\"https:\/\/github.blog\/wp-content\/uploads\/2021\/05\/GitHub-open-telemetry-fig-1.png?w=1024&#038;resize=1024%2C911\" alt=\"Screenshot of OpenTelemetry tracing to identify poor page performance \" width=\"1024\" height=\"911\" srcset=\"https:\/\/github.blog\/wp-content\/uploads\/2021\/05\/GitHub-open-telemetry-fig-1.png?w=1600 1600w, https:\/\/github.blog\/wp-content\/uploads\/2021\/05\/GitHub-open-telemetry-fig-1.png?w=300 300w, https:\/\/github.blog\/wp-content\/uploads\/2021\/05\/GitHub-open-telemetry-fig-1.png?w=768 768w, https:\/\/github.blog\/wp-content\/uploads\/2021\/05\/GitHub-open-telemetry-fig-1.png?w=1024 1024w, https:\/\/github.blog\/wp-content\/uploads\/2021\/05\/GitHub-open-telemetry-fig-1.png?w=1536 1536w\" sizes=\"auto, (max-width: 1000px) 100vw, 1000px\" \/><\/p>\n<p>We\u2019re building intelligent automatic correlation of the signals that we have today, with OpenTelemetry tracing as the root. By adding trace identifiers into log lines automatically we can connect request traces to logs for example. We have exciting plans about automatically building useful and relevant dashboards, alerts and tools for teams based on these signals. As our OpenTelemetry efforts progress, we\u2019ll shift our focus towards our logging and metrics systems, for the times when tracing isn\u2019t enough. And we\u2019re contributing as much as we can back to the OpenTelemetry project, for everyone to use!<\/p>\n<h2 id=\"why-should-you-be-excited-and-how-should-you-get-involved\"><a class=\"heading-link\" href=\"#why-should-you-be-excited-and-how-should-you-get-involved\">Why should you be excited and how should you get involved?<span class=\"heading-hash pl-2 text-italic text-bold\" aria-hidden=\"true\"><\/span><\/a><\/h2>\n<p><a href=\"https:\/\/opentelemetry.io\/\" target=\"_blank\" rel=\"noopener\">OpenTelemetry<\/a> is a <a href=\"https:\/\/www.cncf.io\/\" target=\"_blank\" rel=\"noopener\">CNCF<\/a> project and it\u2019s been up and running for quite some time. It\u2019s a project with an incredibly wide scope, and one that we believe has real potential to transform how our entire industry approaches one of the most necessary aspects of our work\u2014how to observe and understand our systems. That\u2019s why we\u2019re so excited about it, and why we\u2019re introducing it to our engineers.<\/p>\n<p>Better, more observable distributed systems are possible, and together we have the opportunity to shape them. If it\u2019s interesting to you, we invite you to join the <a href=\"https:\/\/opentelemetry.io\/community\/\" target=\"_blank\" rel=\"noopener\">OpenTelemetry community<\/a> in improving observability for everyone. And if you want to help us make our internal developer experience better, we invite you to <a href=\"https:\/\/boards.greenhouse.io\/github\" target=\"_blank\" rel=\"noopener\">join us<\/a>!<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Over the years, GitHub engineers have developed many ways to observe how our systems behave. We mostly make use of statsd for metrics, the syslog format for plain text logs&hellip;<\/p>\n","protected":false},"author":1893,"featured_media":57452,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_gh_post_show_toc":"","_gh_post_is_no_robots":"","_gh_post_is_featured":"","_gh_post_is_excluded":"","_gh_post_is_unlisted":"","_gh_post_related_link_1":"","_gh_post_related_link_2":"","_gh_post_related_link_3":"","_gh_post_sq_img":"","_gh_post_sq_img_id":"","_gh_post_cta_title":"","_gh_post_cta_text":"","_gh_post_cta_link":"","_gh_post_cta_button":"","_gh_post_recirc_hide":"","_gh_post_recirc_col_1":"","_gh_post_recirc_col_2":"","_gh_post_recirc_col_3":"","_gh_post_recirc_col_4":"","_featured_video":"","_gh_post_additional_query_params":"","_jetpack_memberships_contains_paid_content":false,"footnotes":"","jetpack_publicize_message":"","jetpack_publicize_feature_enabled":true,"jetpack_social_post_already_shared":true,"jetpack_social_options":{"image_generator_settings":{"template":"highway","default_image_id":0,"font":"","enabled":false},"version":2},"_wpas_customize_per_network":false,"_links_to":"","_links_to_target":""},"categories":[72,3309],"tags":[],"coauthors":[1979,1974],"class_list":["post-58452","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-engineering","category-infrastructure"],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v27.3 (Yoast SEO v27.3) - https:\/\/yoast.com\/product\/yoast-seo-premium-wordpress\/ -->\n<title>Why (and how) GitHub is adopting OpenTelemetry - The GitHub Blog<\/title>\n<meta name=\"description\" content=\"Building on top of OpenTelemetry empowers us to provide integrated and opinionated observability solutions for our application engineers.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/github.blog\/engineering\/infrastructure\/why-and-how-github-is-adopting-opentelemetry\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Why (and how) GitHub is adopting OpenTelemetry\" \/>\n<meta property=\"og:description\" content=\"Building on top of OpenTelemetry empowers us to provide integrated and opinionated observability solutions for our application engineers.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/github.blog\/engineering\/infrastructure\/why-and-how-github-is-adopting-opentelemetry\/\" \/>\n<meta property=\"og:site_name\" content=\"The GitHub Blog\" \/>\n<meta property=\"article:published_time\" content=\"2021-05-26T19:20:09+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2021-09-22T16:02:40+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/github.blog\/wp-content\/uploads\/2021\/05\/GitHub-open-telemetry_social.png?fit=1200%2C630\" \/>\n\t<meta property=\"og:image:width\" content=\"1200\" \/>\n\t<meta property=\"og:image:height\" content=\"630\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"Wolfgang Hennerbichler, Andrew Hayworth\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:image\" content=\"https:\/\/github.blog\/wp-content\/uploads\/2021\/05\/GitHub-open-telemetry_social.png?fit=1200%2C630\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Wolfgang Hennerbichler, Andrew Hayworth\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. 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:\\\/\\\/github.blog\\\/engineering\\\/infrastructure\\\/why-and-how-github-is-adopting-opentelemetry\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/github.blog\\\/engineering\\\/infrastructure\\\/why-and-how-github-is-adopting-opentelemetry\\\/\"},\"author\":{\"name\":\"Wolfgang Hennerbichler\",\"@id\":\"https:\\\/\\\/github.blog\\\/#\\\/schema\\\/person\\\/1ee4c0a7057c9a44f38ee92ec9e12a28\"},\"headline\":\"Why (and how) GitHub is adopting OpenTelemetry\",\"datePublished\":\"2021-05-26T19:20:09+00:00\",\"dateModified\":\"2021-09-22T16:02:40+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/github.blog\\\/engineering\\\/infrastructure\\\/why-and-how-github-is-adopting-opentelemetry\\\/\"},\"wordCount\":831,\"image\":{\"@id\":\"https:\\\/\\\/github.blog\\\/engineering\\\/infrastructure\\\/why-and-how-github-is-adopting-opentelemetry\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/github.blog\\\/wp-content\\\/uploads\\\/2021\\\/04\\\/Blog_ENGINEERING_for-social.png?fit=1200%2C630\",\"articleSection\":[\"Engineering\",\"Infrastructure\"],\"inLanguage\":\"en-US\"},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/github.blog\\\/engineering\\\/infrastructure\\\/why-and-how-github-is-adopting-opentelemetry\\\/\",\"url\":\"https:\\\/\\\/github.blog\\\/engineering\\\/infrastructure\\\/why-and-how-github-is-adopting-opentelemetry\\\/\",\"name\":\"Why (and how) GitHub is adopting OpenTelemetry - The GitHub Blog\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/github.blog\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/github.blog\\\/engineering\\\/infrastructure\\\/why-and-how-github-is-adopting-opentelemetry\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/github.blog\\\/engineering\\\/infrastructure\\\/why-and-how-github-is-adopting-opentelemetry\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/github.blog\\\/wp-content\\\/uploads\\\/2021\\\/04\\\/Blog_ENGINEERING_for-social.png?fit=1200%2C630\",\"datePublished\":\"2021-05-26T19:20:09+00:00\",\"dateModified\":\"2021-09-22T16:02:40+00:00\",\"author\":{\"@id\":\"https:\\\/\\\/github.blog\\\/#\\\/schema\\\/person\\\/1ee4c0a7057c9a44f38ee92ec9e12a28\"},\"description\":\"Building on top of OpenTelemetry empowers us to provide integrated and opinionated observability solutions for our application engineers.\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/github.blog\\\/engineering\\\/infrastructure\\\/why-and-how-github-is-adopting-opentelemetry\\\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/github.blog\\\/engineering\\\/infrastructure\\\/why-and-how-github-is-adopting-opentelemetry\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/github.blog\\\/engineering\\\/infrastructure\\\/why-and-how-github-is-adopting-opentelemetry\\\/#primaryimage\",\"url\":\"https:\\\/\\\/github.blog\\\/wp-content\\\/uploads\\\/2021\\\/04\\\/Blog_ENGINEERING_for-social.png?fit=1200%2C630\",\"contentUrl\":\"https:\\\/\\\/github.blog\\\/wp-content\\\/uploads\\\/2021\\\/04\\\/Blog_ENGINEERING_for-social.png?fit=1200%2C630\",\"width\":1200,\"height\":630},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/github.blog\\\/engineering\\\/infrastructure\\\/why-and-how-github-is-adopting-opentelemetry\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/github.blog\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Engineering\",\"item\":\"https:\\\/\\\/github.blog\\\/engineering\\\/\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"Infrastructure\",\"item\":\"https:\\\/\\\/github.blog\\\/engineering\\\/infrastructure\\\/\"},{\"@type\":\"ListItem\",\"position\":4,\"name\":\"Why (and how) GitHub is adopting OpenTelemetry\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/github.blog\\\/#website\",\"url\":\"https:\\\/\\\/github.blog\\\/\",\"name\":\"The GitHub Blog\",\"description\":\"Updates, ideas, and inspiration from GitHub to help developers build and design software.\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/github.blog\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/github.blog\\\/#\\\/schema\\\/person\\\/1ee4c0a7057c9a44f38ee92ec9e12a28\",\"name\":\"Wolfgang Hennerbichler\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/73a92cde4596350200d3b25f7b17cddef28753efcb127c54590313214f837895?s=96&d=mm&r=g8619c51d7d1ab9b68d96d9ab9525a3c4\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/73a92cde4596350200d3b25f7b17cddef28753efcb127c54590313214f837895?s=96&d=mm&r=g\",\"contentUrl\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/73a92cde4596350200d3b25f7b17cddef28753efcb127c54590313214f837895?s=96&d=mm&r=g\",\"caption\":\"Wolfgang Hennerbichler\"},\"url\":\"https:\\\/\\\/github.blog\\\/author\\\/wogri\\\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Why (and how) GitHub is adopting OpenTelemetry - The GitHub Blog","description":"Building on top of OpenTelemetry empowers us to provide integrated and opinionated observability solutions for our application engineers.","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:\/\/github.blog\/engineering\/infrastructure\/why-and-how-github-is-adopting-opentelemetry\/","og_locale":"en_US","og_type":"article","og_title":"Why (and how) GitHub is adopting OpenTelemetry","og_description":"Building on top of OpenTelemetry empowers us to provide integrated and opinionated observability solutions for our application engineers.","og_url":"https:\/\/github.blog\/engineering\/infrastructure\/why-and-how-github-is-adopting-opentelemetry\/","og_site_name":"The GitHub Blog","article_published_time":"2021-05-26T19:20:09+00:00","article_modified_time":"2021-09-22T16:02:40+00:00","og_image":[{"width":1200,"height":630,"url":"https:\/\/github.blog\/wp-content\/uploads\/2021\/05\/GitHub-open-telemetry_social.png?fit=1200%2C630","type":"image\/png"}],"author":"Wolfgang Hennerbichler, Andrew Hayworth","twitter_card":"summary_large_image","twitter_image":"https:\/\/github.blog\/wp-content\/uploads\/2021\/05\/GitHub-open-telemetry_social.png?fit=1200%2C630","twitter_misc":{"Written by":"Wolfgang Hennerbichler, Andrew Hayworth","Est. reading time":"5 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/github.blog\/engineering\/infrastructure\/why-and-how-github-is-adopting-opentelemetry\/#article","isPartOf":{"@id":"https:\/\/github.blog\/engineering\/infrastructure\/why-and-how-github-is-adopting-opentelemetry\/"},"author":{"name":"Wolfgang Hennerbichler","@id":"https:\/\/github.blog\/#\/schema\/person\/1ee4c0a7057c9a44f38ee92ec9e12a28"},"headline":"Why (and how) GitHub is adopting OpenTelemetry","datePublished":"2021-05-26T19:20:09+00:00","dateModified":"2021-09-22T16:02:40+00:00","mainEntityOfPage":{"@id":"https:\/\/github.blog\/engineering\/infrastructure\/why-and-how-github-is-adopting-opentelemetry\/"},"wordCount":831,"image":{"@id":"https:\/\/github.blog\/engineering\/infrastructure\/why-and-how-github-is-adopting-opentelemetry\/#primaryimage"},"thumbnailUrl":"https:\/\/github.blog\/wp-content\/uploads\/2021\/04\/Blog_ENGINEERING_for-social.png?fit=1200%2C630","articleSection":["Engineering","Infrastructure"],"inLanguage":"en-US"},{"@type":"WebPage","@id":"https:\/\/github.blog\/engineering\/infrastructure\/why-and-how-github-is-adopting-opentelemetry\/","url":"https:\/\/github.blog\/engineering\/infrastructure\/why-and-how-github-is-adopting-opentelemetry\/","name":"Why (and how) GitHub is adopting OpenTelemetry - The GitHub Blog","isPartOf":{"@id":"https:\/\/github.blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/github.blog\/engineering\/infrastructure\/why-and-how-github-is-adopting-opentelemetry\/#primaryimage"},"image":{"@id":"https:\/\/github.blog\/engineering\/infrastructure\/why-and-how-github-is-adopting-opentelemetry\/#primaryimage"},"thumbnailUrl":"https:\/\/github.blog\/wp-content\/uploads\/2021\/04\/Blog_ENGINEERING_for-social.png?fit=1200%2C630","datePublished":"2021-05-26T19:20:09+00:00","dateModified":"2021-09-22T16:02:40+00:00","author":{"@id":"https:\/\/github.blog\/#\/schema\/person\/1ee4c0a7057c9a44f38ee92ec9e12a28"},"description":"Building on top of OpenTelemetry empowers us to provide integrated and opinionated observability solutions for our application engineers.","breadcrumb":{"@id":"https:\/\/github.blog\/engineering\/infrastructure\/why-and-how-github-is-adopting-opentelemetry\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/github.blog\/engineering\/infrastructure\/why-and-how-github-is-adopting-opentelemetry\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/github.blog\/engineering\/infrastructure\/why-and-how-github-is-adopting-opentelemetry\/#primaryimage","url":"https:\/\/github.blog\/wp-content\/uploads\/2021\/04\/Blog_ENGINEERING_for-social.png?fit=1200%2C630","contentUrl":"https:\/\/github.blog\/wp-content\/uploads\/2021\/04\/Blog_ENGINEERING_for-social.png?fit=1200%2C630","width":1200,"height":630},{"@type":"BreadcrumbList","@id":"https:\/\/github.blog\/engineering\/infrastructure\/why-and-how-github-is-adopting-opentelemetry\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/github.blog\/"},{"@type":"ListItem","position":2,"name":"Engineering","item":"https:\/\/github.blog\/engineering\/"},{"@type":"ListItem","position":3,"name":"Infrastructure","item":"https:\/\/github.blog\/engineering\/infrastructure\/"},{"@type":"ListItem","position":4,"name":"Why (and how) GitHub is adopting OpenTelemetry"}]},{"@type":"WebSite","@id":"https:\/\/github.blog\/#website","url":"https:\/\/github.blog\/","name":"The GitHub Blog","description":"Updates, ideas, and inspiration from GitHub to help developers build and design software.","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/github.blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Person","@id":"https:\/\/github.blog\/#\/schema\/person\/1ee4c0a7057c9a44f38ee92ec9e12a28","name":"Wolfgang Hennerbichler","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/secure.gravatar.com\/avatar\/73a92cde4596350200d3b25f7b17cddef28753efcb127c54590313214f837895?s=96&d=mm&r=g8619c51d7d1ab9b68d96d9ab9525a3c4","url":"https:\/\/secure.gravatar.com\/avatar\/73a92cde4596350200d3b25f7b17cddef28753efcb127c54590313214f837895?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/73a92cde4596350200d3b25f7b17cddef28753efcb127c54590313214f837895?s=96&d=mm&r=g","caption":"Wolfgang Hennerbichler"},"url":"https:\/\/github.blog\/author\/wogri\/"}]}},"jetpack_publicize_connections":[],"jetpack_featured_media_url":"https:\/\/github.blog\/wp-content\/uploads\/2021\/04\/Blog_ENGINEERING_for-social.png?fit=1200%2C630","jetpack_shortlink":"https:\/\/wp.me\/pamS32-fcM","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/github.blog\/wp-json\/wp\/v2\/posts\/58452","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/github.blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/github.blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/github.blog\/wp-json\/wp\/v2\/users\/1893"}],"replies":[{"embeddable":true,"href":"https:\/\/github.blog\/wp-json\/wp\/v2\/comments?post=58452"}],"version-history":[{"count":19,"href":"https:\/\/github.blog\/wp-json\/wp\/v2\/posts\/58452\/revisions"}],"predecessor-version":[{"id":60326,"href":"https:\/\/github.blog\/wp-json\/wp\/v2\/posts\/58452\/revisions\/60326"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/github.blog\/wp-json\/wp\/v2\/media\/57452"}],"wp:attachment":[{"href":"https:\/\/github.blog\/wp-json\/wp\/v2\/media?parent=58452"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/github.blog\/wp-json\/wp\/v2\/categories?post=58452"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/github.blog\/wp-json\/wp\/v2\/tags?post=58452"},{"taxonomy":"author","embeddable":true,"href":"https:\/\/github.blog\/wp-json\/wp\/v2\/coauthors?post=58452"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}