<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/">
    <channel>
        <title>Elastic Observability Labs - Articles by Frederic Maussion</title>
        <link>https://www.elastic.co/observability-labs</link>
        <description>Trusted security news &amp; research from the team at Elastic.</description>
        <lastBuildDate>Thu, 06 Aug 2026 15:36:18 GMT</lastBuildDate>
        <docs>https://validator.w3.org/feed/docs/rss2.html</docs>
        <generator>https://github.com/jpmonette/feed</generator>
        <image>
            <title>Elastic Observability Labs - Articles by Frederic Maussion</title>
            <url>https://www.elastic.co/observability-labs/assets/observability-labs-thumbnail.png</url>
            <link>https://www.elastic.co/observability-labs</link>
        </image>
        <copyright>© 2026. Elasticsearch B.V. All Rights Reserved</copyright>
        <item>
            <title><![CDATA[Accelerate Otel Adoption with Elastic Agent Hybrid Ingestion]]></title>
            <link>https://www.elastic.co/observability-labs/blog/hybrid-elastic-agent-opentelemetry-integration</link>
            <guid isPermaLink="false">hybrid-elastic-agent-opentelemetry-integration</guid>
            <pubDate>Fri, 09 Jan 2026 00:00:00 GMT</pubDate>
            <description><![CDATA[Elastic Agent 9.2 brings hybrid ingestion to Elastic Observability, unifying native integrations and OpenTelemetry receivers to simplify large-scale OTel adoption without disruption.]]></description>
            <content:encoded><![CDATA[<h2>Hybrid Elastic Agent: The Most Practical Path to OpenTelemetry Adoption</h2>
<p>OpenTelemetry is quickly becoming the standard foundation for modern observability. Organizations want its open ecosystem, unified model, and vendor-neutral instrumentation—but moving a mature production environment to OTel is rarely straightforward.</p>
<p>Most teams already rely on battle-tested pipelines for logs, metrics, and security signals. They have dashboards tuned over years, operational practices built around existing data flows, and mission-critical systems where disruption simply isn’t an option.</p>
<p>This means the question isn’t &quot;Why OpenTelemetry?&quot;
It’s &quot;How do we get there without breaking what already works?&quot;</p>
<p>Elastic Observability introduces a way to ingest telemetry without disrupting existing data and dashboards with Hybrid ingestion. Released in Elastic 9.2, its a low-friction way to adopt OTel receivers alongside existing native Elastic integrations-managed centrally through Fleet.</p>
<p>This hybrid approach offers one of the most pragmatic and operationally safe routes to OTel adoption available today.</p>
<h3>The Challenge: Adopting OTel Without Disrupting the Present</h3>
<p>For many organizations, the path to OTel adoption is complicated by realities such as:</p>
<ul>
<li>Established log pipelines powering critical alerting</li>
<li>Legacy infrastructure that isn’t easily re-instrumented</li>
<li>Existing dashboards and visualizations built on Elastic-native datasets</li>
<li>Teams with different levels of OTel experience</li>
<li>Risk constraints that make large changes difficult to roll out</li>
</ul>
<p>Standardizing on OTel is the right long-term direction, but replacing everything at once is neither realistic nor desirable.</p>
<p>Teams need a way to bring OTel into their environment incrementally, while preserving continuity, reliability, and central governance.</p>
<h3>Elastic Agent 9.2+: Hybrid Ingestion as a Bridge to the Future</h3>
<p>Elastic Agent now supports two fully supported ingestion paths, both running inside the same unified agent:</p>
<ol>
<li>Elastic-native integrations</li>
</ol>
<p>Perfect for logs and host-level telemetry, with mature dashboards, alerts, and ECS mappings.</p>
<ol start="2">
<li>OpenTelemetry input integrations (OTel receivers)</li>
</ol>
<p>Powered by upstream OTel Collector components, managed directly from Fleet.</p>
<p>And crucially:</p>
<p>You can use both, simultaneously, on the same agent.</p>
<p>This hybrid ingestion model allows teams to:</p>
<ul>
<li>Continue collecting logs using native Elastic integrations</li>
<li>Begin collecting metrics or traces via OTel receivers</li>
<li>Maintain full control through Fleet</li>
<li>Introduce OTel exactly where and when it makes sense</li>
<li>Avoid running parallel agents or duplicate pipelines</li>
</ul>
<p>It’s a way to evolve—not replace—your observability strategy.</p>
<h3>A Practical Example: Adding OTel Inputs While Keeping Your Existing Pipelines</h3>
<p>Imagine a system where NGINX logs are already handled via Elastic-native integrations. These pipelines drive dashboards, audits, and critical alerts. Interrupting them isn’t an option.</p>
<p>At the same time, your platform team wants to standardize metrics and service telemetry using OpenTelemetry.</p>
<p>With Elastic Agent hybrid ingestion, both goals align:</p>
<ol>
<li>Keep your existing log integration in Fleet</li>
<li>Add an OTel input integration (e.g., OTel <a href="https://github.com/open-telemetry/opentelemetry-collector-contrib/tree/main/receiver/nginxreceiver">nginxreceiver</a>)</li>
<li>Fleet deploys both inside the same Elastic Agent</li>
<li>Deployment is done at scale across your infrastructure from a single management console</li>
<li>Logs and OTel metrics flow into Elasticsearch side-by-side</li>
</ol>
<p>No re-instrumentation.
No duplicate agents.
No loss of historical visibility.
No new tooling for operations.
No external deployment tool.</p>
<p>Whether the component is a web server, reverse proxy, database, JVM runtime, or custom service already instrumented in OTel, the workflow is the same.</p>
<h3>Why This Hybrid Approach Matters Strategically</h3>
<p>Hybrid ingestion is not simply a technical capability—it’s an organizational enabler for OpenTelemetry transformation.</p>
<p><strong>Incremental migration without downtime</strong></p>
<p>Teams can begin adopting OTel at the exact pace they’re comfortable with.
Existing collection signals remain stable. OTel metrics or logs are added progressively.</p>
<p><strong>Fleet remains your single control plane</strong></p>
<p>Fleet continues to manage:</p>
<ul>
<li>agent lifecycle</li>
<li>policy management</li>
<li>version upgrades</li>
<li>diagnostics and monitoring</li>
</ul>
<p>Even as OTel becomes part of your ingestion strategy.</p>
<p><strong>Consistent semantics across teams</strong></p>
<p>Adopting OTel receivers through <a href="https://www.elastic.co/docs/reference/edot-collector">EDOT</a> helps harmonize telemetry models across microservices, infrastructure, and applications.</p>
<p>OTel becomes the shared language—Elastic becomes the scalable backend.</p>
<p><strong>Future-proof flexibility</strong></p>
<p>When the day comes that a team needs advanced OTel features, custom pipelines, custom processors, or additional exporters, they can build their own <a href="https://www.elastic.co/docs/reference/edot-collector/custom-collector">EDOT custom collector</a> flavor and use it in their elastic-agent in hybrid mode.</p>
<p>This allows deep customization without abandoning the Elastic Agent runtime.</p>
<p><strong>No vendor lock-in—full ecosystem alignment</strong></p>
<p>Hybrid ingestion leverages upstream OpenTelemetry components directly.
This reinforces the open, vendor-neutral ecosystem organizations prefer when standardizing observability across teams while being supported by Elastic.</p>
<h3>What About Standalone Mode? (Advanced Use Cases)</h3>
<p>While Fleet-managed hybrid ingestion will meet the needs of most users, Elastic Agent in hybrid mode also support standalone deployment with the same functions as the managed version.</p>
<ul>
<li>native integrations support</li>
<li>full control over Otel receivers, processors, and exporters</li>
<li>Elasticsearch output as the backend</li>
</ul>
<p>This is particularly useful for platform teams testing advanced OTel deployments or building custom telemetry strategies.</p>
<p>But it remains optional—the managed experience is still the default path.</p>
<h3>Conclusion: A Modern, Flexible Path Toward OpenTelemetry</h3>
<p>Migrating to OpenTelemetry is a journey, not a switch. With hybrid ingestion, Elastic provides a realistic, scalable, and low-risk pathway for organizations that want to adopt OTel gradually while maintaining operational continuity.</p>
<p>Elastic Agent 9.2+ enables teams to:</p>
<ul>
<li>retain reliable log integrations</li>
<li>introduce OTel inputs seamlessly</li>
<li>manage everything from Fleet</li>
<li>reduce complexity and operational overhead</li>
<li>expand into OTel at the right pace</li>
<li>stay aligned with open standards and best practices</li>
</ul>
<p>It brings the best of both worlds—Elastic-native richness and OTel-standard flexibility—into a single agent and a unified operational model.</p>
<p>Hybrid isn’t a workaround.
It’s the strategic bridge between where your observability platform is today and where it needs to go next.</p>
<h2>Technical Walkthrough: Deploying Hybrid Elastic Agent + EDOT in Fleet</h2>
<p>Before we close, let’s look at what this actually looks like in practice.
Conceptual advantages are important, but many teams want to see how hybrid ingestion works when deployed through Fleet.</p>
<p>The example below walks through a simple, production-ready setup using Elastic Agent 9.2, combining a native integration and an OTel input integration inside a single agent,  the same approach you can apply to any service across your environment.</p>
<p>Here is a step-by-step guide showing how to deploy Elastic Agent 9.2 in <strong>Fleet-managed hybrid mode</strong>, using the OTel nginxreceiver as one concrete example.
This applies to any service with an OTel receiver (Redis, HAProxy, Kafka, JVM, etc.).</p>
<h3>Requirements</h3>
<ul>
<li>Elastic Stack <strong>9.2+</strong></li>
<li>Elastic Agent <strong>9.2+</strong></li>
<li>Fleet configured in Kibana</li>
<li>A host running your workload (NGINX in this example)</li>
<li>NGINX <code>stub_status</code> endpoint or any equivalent OTel metrics endpoint</li>
<li>API key with ingest privileges</li>
</ul>
<h2>1. Create or Select an Agent Policy</h2>
<ol>
<li>In Kibana → <strong>Management → Fleet → Agent policies</strong></li>
<li>Create a new policy: <code>nginx-o11y</code></li>
<li>Enable system monitoring (recommended)</li>
<li>Save</li>
</ol>
<h2>2. Enroll Elastic Agent into the Policy</h2>
<p>From the policy page:</p>
<ol>
<li>Click <strong>Add agent</strong></li>
<li>Choose your OS</li>
<li>Copy the installation command</li>
<li>Run:</li>
</ol>
<pre><code class="language-bash">sudo elastic-agent install \
  --url=&lt;FLEET_URL&gt; \
  --enrollment-token=&lt;ENROLLMENT_TOKEN&gt;
</code></pre>
<p>You should soon see the agent appear as Healthy in Fleet.</p>
<p><img src="https://www.elastic.co/observability-labs/assets/images/hybrid-elastic-agent-opentelemetry-integration/image1.png" alt="" /></p>
<h2>3. Add the Native Integration (Logs)</h2>
<ol>
<li>In Fleet, go to Integrations.</li>
<li>Search for NGINX.</li>
<li>Click Add NGINX.</li>
<li>Select your <code>nginx-o11y</code> policy.</li>
<li>Only enable log collection (access + error logs).</li>
<li>Save and deploy.</li>
</ol>
<p><img src="https://www.elastic.co/observability-labs/assets/images/hybrid-elastic-agent-opentelemetry-integration/image2.png" alt="" /></p>
<h2>4. Validate Log Collection</h2>
<ol>
<li>In Kibana, go to Analytics → Discover and search for:</li>
</ol>
<pre><code class="language-bash">data_stream.dataset : &quot;nginx.access&quot; or &quot;nginx.error&quot;
</code></pre>
<ol start="2">
<li>Or open the built-in dashboard:</li>
</ol>
<pre><code class="language-bash">Analytics → Dashboards → [Logs Nginx] Access and error logs
</code></pre>
<p><img src="https://www.elastic.co/observability-labs/assets/images/hybrid-elastic-agent-opentelemetry-integration/image3.png" alt="" /></p>
<h3>5. Collecting NGINX Metrics via the OTel NGINX Receiver</h3>
<p>Elastic Agent 9.2+ allows Fleet to deploy OTel input integrations.<br />
This scenario uses the OpenTelemetry <code>nginxreceiver</code> through a Fleet-managed integration.</p>
<h4>5.1. Install the NGINX OpenTelemetry Integration Content</h4>
<ol>
<li>In Kibana, go to Management → Fleet → Integrations.</li>
<li>Search for NGINX OpenTelemetry Assets.</li>
<li>Click Add Integration.</li>
</ol>
<h4>5.2. Install the NGINX OpenTelemetry Input Integration</h4>
<ol>
<li>In Kibana, go to Management → Fleet → Integrations.</li>
<li>Search for NGINX OpenTelemetry Input Package.</li>
<li>Click Add Integration.</li>
<li>Assign it to your agent <code>nginx-o11y</code> policy.</li>
</ol>
<p>Provide the endpoint for the NGINX status page:</p>
<ul>
<li><strong>Endpoint</strong>: <code>http://localhost/status</code></li>
<li><strong>Collection interval</strong>: <code>10s</code></li>
</ul>
<p>Click <strong>Add integration</strong>.</p>
<p><img src="https://www.elastic.co/observability-labs/assets/images/hybrid-elastic-agent-opentelemetry-integration/image4.png" alt="" /></p>
<h3>6. Validate OTel Metrics</h3>
<ol>
<li>Go to <strong>Analytics → Dashboards</strong>.</li>
<li>Open: <strong>[Metrics Nginx OTEL Overview]</strong> Dashboard</li>
</ol>
<p>You should see metrics such as active connections, writes, reads, waiting, and request counts.</p>
<p><img src="https://www.elastic.co/observability-labs/assets/images/hybrid-elastic-agent-opentelemetry-integration/image5.png" alt="" /></p>
<h3>7. Closing thoughts</h3>
<p>This example highlights how straightforward hybrid ingestion becomes with Elastic Agent 9.2. By combining native integrations and OTel receivers within a single, centrally managed policy, you gain the flexibility to adopt OpenTelemetry where it adds the most value without disrupting existing pipelines or introducing operational overhead.</p>
<p>Whether you extend this pattern to additional services, experiment with other OTel receivers, or scale it across your fleet, the deployment model remains consistent, repeatable, and production-ready.</p>
<p>For more information and other innovations Elastic Observability has made check out:</p>
<ul>
<li>
<p><a href="https://www.elastic.co/observability-labs/blog/elastic-agent-pivot-opentelemetry">Discover how Elastic is evolving data ingestion with OpenTelemetry</a></p>
</li>
<li>
<p><a href="https://www.elastic.co/observability-labs/blog/elastic-distribution-opentelemetry-sdk-central-configuration-opamp">Learn how OpAMP enables centralized configuration of OpenTelemetry SDKs</a></p>
</li>
<li>
<p><a href="https://www.elastic.co/observability-labs/blog/elastic-observability-streams-ai-logs-investigations">Explore how Streams reshape AI-driven log investigation workflows</a></p>
</li>
</ul>
]]></content:encoded>
            <category>observability-labs</category>
            <enclosure url="https://www.elastic.co/observability-labs/assets/images/hybrid-elastic-agent-opentelemetry-integration/feature-image.png" length="0" type="image/png"/>
        </item>
        <item>
            <title><![CDATA[A Practical Guide to end-to-end distributed tracing for Nginx with OpenTelemetry in Elastic]]></title>
            <link>https://www.elastic.co/observability-labs/blog/nginx-opentelemetry-end-to-end-tracing</link>
            <guid isPermaLink="false">nginx-opentelemetry-end-to-end-tracing</guid>
            <pubDate>Tue, 13 Jan 2026 00:00:00 GMT</pubDate>
            <description><![CDATA[Instrument Nginx with the OpenTelemetry tracing module and export spans to Elastic Observability's APM for full end-to-end distributed tracing.]]></description>
            <content:encoded><![CDATA[<h1>End-to-End Observability with Nginx and OpenTelemetry</h1>
<p>Nginx sits at the very front of most modern architectures: handling SSL, routing, load balancing, authentication, and more. Yet, despite its central role, it is often absent from distributed traces.<br />
That gap creates blind spots that impact performance debugging, user experience analysis, and system reliability.</p>
<p>This article explains <strong>why Nginx tracing is important</strong> in an application context, and provides a <strong>practical guide</strong> to enable the Nginx <a href="https://nginx.org/en/docs/ngx_otel_module.html">Otel</a> tracing module exporting spans directly to <a href="https://www.elastic.co/docs/solutions/observability/apm">Elastic APM</a>.</p>
<h2>Why Nginx Tracing Matters for Modern Observability</h2>
<p>Instrumenting only backend services gives you only half the picture.<br />
Nginx sees:</p>
<ul>
<li>every incoming request</li>
<li>client trace context</li>
<li>TLS negotiation</li>
<li>upstream errors (502, 504)</li>
<li>edge-layer latency</li>
<li>routing decisions</li>
</ul>
<p>If Nginx is not in your traces, your distributed trace is incomplete.</p>
<p>By adding OpenTelemetry tracing at this ingress layer, you unlock:</p>
<p><em>1. Full trace continuity</em> : From browser → Nginx → backend → database.
<img src="https://www.elastic.co/observability-labs/assets/images/nginx-opentelemetry-end-to-end-tracing/document_elastic_nginx_otel_instrumentation_1.png" alt="Nginx Trace Continuity" /></p>
<p><em>2. Accurate latency attribution</em> : Edge delays vs. backend delays are clearly separated which unlock Elastic <a href="https://www.elastic.co/docs/solutions/observability/apm/machine-learning">APM Latency</a> anomaly detection for proactive detection.
<img src="https://www.elastic.co/observability-labs/assets/images/nginx-opentelemetry-end-to-end-tracing/document_elastic_nginx_otel_instrumentation_2.png" alt="Nginx Latency Detection" /></p>
<p><em>3. Error root-cause clarity</em> : Nginx errors appear as spans instead of backend “mystery gaps”.</p>
<p><em>4. Complete service topology</em> : Your APM service map finally shows the real architecture.
<img src="https://www.elastic.co/observability-labs/assets/images/nginx-opentelemetry-end-to-end-tracing/document_elastic_nginx_otel_instrumentation_4.png" alt="Nginx APM Service Map" /></p>
<h2>Integrating Nginx with OpenTelemetry on Debian</h2>
<p>This guide provides a comprehensive overview of why, how to install and configure the Nginx OpenTelemetry module on a Debian-based system. The configuration examples are tailored to send telemetry data directly to an Elastic APM endpoint whether it's an <a href="https://www.elastic.co/docs/reference/opentelemetry">EDOT</a> Collector or <a href="https://www.elastic.co/observability-labs/blog/elastic-managed-otlp-endpoint-for-opentelemetry">mOtel</a> in case of our serverless, enabling end-to-end distributed tracing.</p>
<h2>Installation on Debian</h2>
<p>The Nginx OTEL module is not included in the standard Nginx packages. It must be installed along with a working nginx configuration.</p>
<h3>Prerequisites</h3>
<p>First, install the necessary tools for compiling software and the Nginx development dependencies.</p>
<pre><code class="language-bash">sudo apt update
sudo apt install -y apt install nginx-module-otel
</code></pre>
<h3>Load the Module in Nginx</h3>
<p>Edit your main <code>/etc/nginx/nginx.conf</code> file to load the new module. This directive must be at the top level, before the <code>http</code> block.</p>
<pre><code class="language-nginx"># /etc/nginx/nginx.conf

load_module modules/ngx_otel_module.so;

events {
    # ...
}

http {
    # ...
}
</code></pre>
<p>Now, test your configuration and restart Nginx.</p>
<pre><code class="language-bash">sudo nginx -t
sudo systemctl restart nginx
</code></pre>
<h2>Configuration</h2>
<p>Configuration is split between the main <code>nginx.conf</code> file (for global settings) and your site-specific server block files.</p>
<h3>Global Configuration (<code>/etc/nginx/nginx.conf</code>)</h3>
<p>This configuration sets up the destination for your telemetry data and defines global variables used for CORS and tracing. These settings are placed inside the <code>http</code> block.</p>
<pre><code class="language-nginx">http {
    ...

    # --- OpenTelemetry Exporter Configuration ---
    # Defines where Nginx will send its telemetry data directly to Elastic APM or EDOT.
    otel_exporter {
        endpoint https://&lt;ELASTIC_URL&gt;:443;
        header Authorization &quot;Bearer &lt;TOKEN&gt;&quot;;
    }

    # --- OpenTelemetry Service Metadata ---
    # These attributes identify Nginx as a unique service in the APM UI.
    otel_service_name nginx;
    otel_resource_attr service.version 1.28.0;
    otel_resource_attr deployment.environment production;
    otel_trace_context propagate; # Needed to propagate the RUM traces to the backend

    # --- Helper Variables for Tracing and CORS ---
    # Creates the $trace_flags variable needed to build the outgoing traceparent header.
    map $otel_parent_sampled $trace_flags {
        default &quot;00&quot;; # Not sampled
        &quot;1&quot;     &quot;01&quot;; # Sampled
    }

    # Creates the $cors_origin variable for secure, multi-origin CORS handling.
    map $http_origin $cors_origin {
        default &quot;&quot;;
        &quot;http://&lt;URL_ORIGIN_1&gt;/&quot; $http_origin; # Add your Origin here to allow CORS
        &quot;https://&lt;URL_ORIGIN_2&gt;/&quot; $http_origin; # Add your others Origin here to allow CORS
    }
...
}
</code></pre>
<h3>Server Block Configuration (<code>/etc/nginx/conf.d/site.conf</code>)</h3>
<p>This configuration enables tracing for a specific site, handles CORS preflight requests, and propagates the trace context to the backend service.</p>
<pre><code class="language-nginx">server {
    listen 443 ssl;
    server_name &lt;WEBSITE_URL&gt;;

    # --- OpenTelemetry Module Activation ---
    # Enable tracing for this server block.
    otel_trace on;
    otel_trace_context propagate;

    location / {
        # --- CORS Preflight (OPTIONS) Handling ---
        # Intercepts preflight requests and returns the correct CORS headers,
        # allowing the browser to proceed with the actual request.
        if ($request_method = 'OPTIONS') {
            add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS' always;
            add_header 'Access-Control-Allow-Headers' 'Content-Type, traceparent, tracestate' always;
            add_header 'Access-Control-Max-Age' 86400;
            add_header 'Access-Control-Allow-Origin' &quot;$cors_origin&quot; always;
            return 204;
        }

        # --- OpenTelemetry Trace Context Propagation ---
        # Manually constructs the W3C traceparent header and passes the tracestate
        # header to the backend, linking this trace to the upstream service.
        proxy_set_header traceparent      &quot;00-$otel_trace_id-$otel_span_id-$trace_flags&quot;;
        proxy_set_header tracestate       $http_tracestate;

        # --- Standard Proxy Headers ---
        proxy_set_header Host             $host;
        proxy_set_header X-Real-IP        $remote_addr;
        proxy_set_header X-Forwarded-For  $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;

        # --- Forward to Backend ---
        # Passes the request to the actual application (eg. localhost in this example).
        proxy_pass http://&lt;BACKEND_URL&gt;:8080;
    }
}
</code></pre>
<p>Test your configuration and restart Nginx.</p>
<pre><code class="language-bash">sudo nginx -t
sudo systemctl restart nginx
</code></pre>
<h2>Conclusion: Turning Nginx into a First-Class Observability Signal</h2>
<p>By enabling OpenTelemetry tracing directly in Nginx and exporting spans to Elastic APM (via EDOT or Elastic’s managed OTLP endpoint), you bring your ingress layer into the same observability model as the rest of your stack. The result is:</p>
<ul>
<li>true end-to-end trace continuity from the browser to backend services</li>
<li>clear separation between edge latency and application latency</li>
<li>immediate visibility into gateway-level failures and retries</li>
<li>accurate service maps that reflect real production traffic</li>
</ul>
<p>Most importantly, this approach aligns Nginx with modern observability standards. It avoids proprietary instrumentation, fits naturally into OpenTelemetry-based architectures, and scales consistently across hybrid and cloud-native environments.</p>
<h2>Try it out!</h2>
<p>Once Nginx tracing is in place, several natural extensions can further improve your observability posture:</p>
<ul>
<li>correlate Nginx traces with application <a href="https://www.elastic.co/docs/reference/apm/agents/go/log-correlation">logs and metrics using</a> Elastic’s unified observability</li>
<li>add Real User Monitoring (<a href="https://www.elastic.co/docs/solutions/observability/apm/apm-agents/real-user-monitoring-rum">RUM</a>) to close the loop from frontend to backend</li>
<li>introduce <a href="https://www.elastic.co/docs/solutions/observability/apm/transaction-sampling">sampling and tail-based</a> decisions at the collector level for cost control</li>
<li>use Elastic <a href="https://www.elastic.co/docs/solutions/observability/apm/service-map">APM service maps</a> and <a href="https://www.elastic.co/docs/reference/machine-learning/ootb-ml-jobs-apm">anomaly detection</a> to proactively detect edge-related issues</li>
</ul>
<p>Instrumenting Nginx is often the missing link in distributed tracing strategies. With OpenTelemetry and Elastic, that gap can now be closed in a clean, standards-based, and production-ready way.</p>
<p>If you want to experiment with this setup quickly, Elastic Serverless provides the fastest way to get started.
Sign up and try it out in just a few minutes using our trial environment available at <a href="https://cloud.elastic.co/">https://cloud.elastic.co/</a> .</p>]]></content:encoded>
            <category>observability-labs</category>
            <enclosure url="https://www.elastic.co/observability-labs/assets/images/nginx-opentelemetry-end-to-end-tracing/document_elastic_nginx_otel_instrumentation_4.png" length="0" type="image/png"/>
        </item>
    </channel>
</rss>