</code></pre></div></p><p>To enable or disable instrumentation for a single Ingress, use the <code>enable-opentelemetry</code> annotation: <divclass=highlight><pre><span></span><code><spanclass=nt>kind</span><spanclass=p>:</span><spanclass=w></span><spanclass="l l-Scalar l-Scalar-Plain">Ingress</span>
</code></pre></div></p><p>We must also set the host to use when uploading traces:</p><p><divclass=highlight><pre><span></span><code><spanclass=nt>otlp-collector-host</span><spanclass=p>:</span><spanclass=w></span><spanclass=s>"otel-coll-collector.otel.svc"</span>
</code></pre></div> NOTE: While the option is called <code>otlp-collector-host</code>, you will need to point this to any backend that receives otlp-grpc.</p><p>Next you will need to deploy a distributed telemetry system which uses OpenTelemetry. <ahref=https://github.com/open-telemetry/opentelemetry-collector>opentelemetry-collector</a>, <ahref=https://www.jaegertracing.io/>Jaeger</a><ahref=https://github.com/grafana/tempo>Tempo</a>, and <ahref=https://zipkin.io/>zipkin</a> have been tested.</p><p>Other optional configuration options: <divclass=highlight><pre><span></span><code><spanclass=c1># specifies the name to use for the server span</span>
<spanclass="l l-Scalar l-Scalar-Plain"># specifies the port to use when uploading traces, Default</span><spanclass="p p-Indicator">:</span><spanclass=w></span><spanclass="l l-Scalar l-Scalar-Plain">4317</span>
</code></pre></div></p><p>Note that you can also set whether to trust incoming spans (global default is true) per-location using annotations like the following: <divclass=highlight><pre><span></span><code><spanclass=nt>kind</span><spanclass=p>:</span><spanclass=w></span><spanclass="l l-Scalar l-Scalar-Plain">Ingress</span>
</code></pre></div></p><h2id=examples>Examples<aclass=headerlinkhref=#examplestitle="Permanent link"> ¶</a></h2><p>The following examples show how to deploy and test different distributed telemetry systems. These example can be performed using Docker Desktop.</p><p>In the <ahref=https://github.com/esigo/nginx-example>esigo/nginx-example</a> GitHub repository is an example of a simple hello service:</p><preclass=mermaid><code>graph TB
end</code></pre><p>To install the example and collectors run:</p><ol><li><p>Enable OpenTelemetry and set the otlp-collector-host:</p><divclass=highlight><pre><span></span><code><spanclass="l l-Scalar l-Scalar-Plain">$ echo '</span>
</code></pre></div></li><li><p>Deploy otel-collector, grafana and Jaeger backend:</p><divclass=highlight><pre><span></span><code><spanclass=c1># add helm charts needed for grafana and OpenTelemetry collector</span>
</code></pre></div></li><li><p>Make a few requests to the Service:</p><divclass=highlight><pre><span></span><code>kubectl<spanclass=w></span>port-forward<spanclass=w></span>--namespace<spanclass=o>=</span>ingress-nginx<spanclass=w></span>service/ingress-nginx-controller<spanclass=w></span><spanclass=m>8090</span>:80
</code></pre></div></li><li><p>View the Grafana UI:</p><p><divclass=highlight><pre><span></span><code>kubectl<spanclass=w></span>port-forward<spanclass=w></span>--namespace<spanclass=o>=</span>observability<spanclass=w></span>service/grafana<spanclass=w></span><spanclass=m>3000</span>:80
</code></pre></div> In the Grafana interface we can see the details: <imgalt="grafana screenshot"src=../../../images/otel-grafana-demo.pngtitle="grafana screenshot"></p></li><li><p>View the Jaeger UI:</p><p><divclass=highlight><pre><span></span><code>kubectl<spanclass=w></span>port-forward<spanclass=w></span>--namespace<spanclass=o>=</span>observability<spanclass=w></span>service/jaeger-all-in-one-query<spanclass=w></span><spanclass=m>16686</span>:16686
</code></pre></div> In the Jaeger interface we can see the details: <imgalt="Jaeger screenshot"src=../../../images/otel-jaeger-demo.pngtitle="Jaeger screenshot"></p></li><li><p>View the Zipkin UI:</p><p><divclass=highlight><pre><span></span><code>kubectl<spanclass=w></span>port-forward<spanclass=w></span>--namespace<spanclass=o>=</span>observability<spanclass=w></span>service/zipkin<spanclass=w></span><spanclass=m>9411</span>:9411
</code></pre></div> In the Zipkin interface we can see the details: <imgalt="zipkin screenshot"src=../../../images/otel-zipkin-demo.pngtitle="zipkin screenshot"></p></li></ol><h2id=migration-from-opentracing-jaeger-zipkin-and-datadog>Migration from OpenTracing, Jaeger, Zipkin and Datadog<aclass=headerlinkhref=#migration-from-opentracing-jaeger-zipkin-and-datadogtitle="Permanent link"> ¶</a></h2><p>If you are migrating from OpenTracing, Jaeger, Zipkin, or Datadog to OpenTelemetry, you may need to update various annotations and configurations. Here are the mappings for common annotations and configurations:</p><h3id=annotations>Annotations<aclass=headerlinkhref=#annotationstitle="Permanent link"> ¶</a></h3><table><thead><tr><th>Legacy</th><th>OpenTelemetry</th></tr></thead><tbody><tr><td><code>nginx.ingress.kubernetes.io/enable-opentracing</code></td><td><code>nginx.ingress.kubernetes.io/enable-opentelemetry</code></td></tr><tr><td><code>nginx.ingress.kubernetes.io/opentracing-trust-incoming-span</code></td><td><code>nginx.ingress.kubernetes.io/opentelemetry-trust-incoming-span</code></td></tr></tbody></table><h3id=configs>Configs<aclass=headerlinkhref=#configstitle="Permanent link"> ¶</a></h3><table><thead><tr><th>Legacy</th><th>OpenTelemetry</th></tr></thead><tbody><tr><td><code>opentracing-operation-name</code></td><td><code>opentelemetry-operation-name</code></td></tr><tr><td><code>opentracing-location-operation-name</code></td><td><code>opentelemetry-operation-name</code></td></tr><tr><td><code>opentracing-trust-incoming-span</code></td><td><code>opentelemetry-trust-incoming-span</code></td></tr><tr><td><code>zipkin-collector-port</code></td><td><code>otlp-collector-port</code></td></tr><tr><td><code>zipkin-service-name</code></td><td><code>otel-service-name</code></td></tr><tr><td><code>zipkin-sample-rate</code></td><td><code>otel-sampler-ratio</code></td></tr><tr><td><code>jaeger-collector-port</code></td><td><code>otlp-collector-port</code></td></tr><tr><td><code>jaeger-endpoint</code></td><td><code>otlp-collector-port</code>, <code>otlp-collector-host</code></td></tr><tr><td><code>jaeger-service-name</code></td><td><code>otel-service-name</code></td></tr><tr><td><code>jaeger-propagation-format</code></td><td><code>N/A</code></td></tr><tr><td><code>jaeger-sampler-type</code></td><td><code>otel-sampler</code></td></tr><tr><td><code>jaeger-sampler-param</code></td><td><code>otel-sampler</code></td></tr><tr><td><code>jaeger-sampler-host</code></td><td><code>N/A</code></td></tr><tr><td><code>jaeger-sampler-port</code></td><td><code>N/A</code></td></tr><tr><td><code>jaeger-trace-context-header-name</code></td><td><code>N/A</code></td></tr><tr><td><code>jaeger-debug-header</code></td><td><code>N/A</code></td></tr><tr><td><code>jaeger-baggage-header</code></td><td><code>N/A</code></td></tr><tr><td><code>jaeger-tracer-baggage-header-prefix</code></td><td><code>N/A</code></td></tr><tr><td><code>datadog-collector-port</code></td><td><code>otlp-collector-port</code></td></tr><tr><td><code>datadog-service-name</code></td><td><code>otel-service-name</code></td></tr><tr><td><code>datadog-environment</code></td><td><code>N/A</code></td></tr><tr><td><code>datadog-operation-name-override</code></td><td><code>N/A</code></td></tr><tr><td><code>datadog-priority-sampling</code></td><td><code>otel-sampler</code></td></tr><tr><td><code>datadog-sample-rate</code></td><td><code>otel-sampler-ratio</code></td></tr></tbody></table></article></div></div></main><footerclass=md-footer><divclass="md-footer-meta md-typeset"><divclass="md-footer-meta__inner md-grid"><divclass=md-copyright> Made with <ahref=https://squidfunk.github.io/mkdocs-material/target=_blankrel=noopener> Material for MkDocs </a></div></div></div></footer></div><divclass=md-dialogdata-md-component=dialog><divclass="md-dialog__inner md-typeset"></div></div><scriptid=__configtype=application/json>{"base":