---
title: APM: Monitor apps and services with OpenTelemetry
source: https://docs.newrelic.com/docs/opentelemetry/get-started/apm-monitoring/opentelemetry-apm-intro
---

OpenTelemetry provides general purpose APIs and SDKs for collecting, processing,
and exporting observability data. One of the most popular use cases for these
APIs and SDKs is APM monitoring, where instrumentation is installed to monitor
an app or service.

This page describes common set up steps for OpenTelemetry based APM monitoring
with New Relic.

## Before you start [#prereqs]

-   [Sign up](https://newrelic.com/signup) for a New Relic account.
-   Get the [license key](https://one.newrelic.com/launcher/api-keys-ui.launcher)
    for the New Relic account to which you want to report data.

## Instrument your app or service with OpenTelemetry [#instrument]

OpenTelemetry provides
[language-specific APIs and SDKs](https://opentelemetry.io/docs/languages/)
for instrumenting applications. Most languages provide a rich set of
[instrumentation](https://opentelemetry.io/docs/concepts/instrumentation/)
for popular libraries and frameworks.

To help you get started, we offer a simple example application in a variety of
languages. For each language, the application is built using web framework popular
to that language. The examples below demonstrate how to configure:

-   The service name which will display in New Relic.
-   The OpenTelemetry Protocol (OTLP) exporter to send data to the
    [New Relic OTLP endpoint](https://docs.newrelic.com/docs/opentelemetry/best-practices/opentelemetry-otlp).
-   Additional recommended settings to optimize OpenTelemetry for the best New
    Relic experience.

    -   [Go agent](https://github.com/newrelic/newrelic-opentelemetry-examples/tree/main/getting-started-guides/go)

    -   [Java](https://github.com/newrelic/newrelic-opentelemetry-examples/tree/main/getting-started-guides/java)

    -   [.NET](https://github.com/newrelic/newrelic-opentelemetry-examples/tree/main/getting-started-guides/dotnet)

    -   [Node.js](https://github.com/newrelic/newrelic-opentelemetry-examples/tree/main/getting-started-guides/javascript)

    -   [Python](https://github.com/newrelic/newrelic-opentelemetry-examples/tree/main/getting-started-guides/python)

    -   [Ruby](https://github.com/newrelic/newrelic-opentelemetry-examples/tree/main/getting-started-guides/ruby)

    For more information about what instrumentation is available and more advanced
    scenarios, see the relevant
    [OpenTelemetry language documentation](https://opentelemetry.io/docs/languages/).

    > #### ⚠️ IMPORTANT
    >
    > You can use any language that OpenTelemetry supports to send data to New Relic. However, the examples above reflect only a subset of the supported languages.
    >
    > Missing your language? Request an example by [opening an issue on GitHub](https://github.com/newrelic/newrelic-opentelemetry-examples/issues/new?assignees=&labels=enhancement%2C+needs-triage&projects=&template=enhancement.md&title=)!

## View your data in the New Relic UI [#view-data]

Once your app is instrumented and configured to export data to New Relic, you should be able to find your data in the New Relic UI:

-   Find your entity at **All entities > Services - OpenTelemetry**. The entity name is set to the value of the app's `service.name` resource attribute. For more information on how New Relic service entities are derived from OpenTelemetry resource attributes, see [Services](https://docs.newrelic.com/docs/opentelemetry/best-practices/opentelemetry-best-practices-resources/#services).
-   Use [NRQL](https://docs.newrelic.com/docs/nrql/get-started/introduction-nrql-new-relics-query-language/) to query directly for [traces](https://one.newrelic.com/launcher/nr1-core.explorer?overlay=eyJuZXJkbGV0SWQiOiJkYXRhLWV4cGxvcmF0aW9uLnF1ZXJ5LWJ1aWxkZXIiLCJpbml0aWFsQWN0aXZlSW50ZXJmYWNlIjoibnJxbEVkaXRvciIsImluaXRpYWxOcnFsVmFsdWUiOiIiLCJpbml0aWFsUXVlcmllcyI6W3sibnJxbCI6IkZST00gU3BhbiBTRUxFQ1QgY291bnQoKikgd2hlcmUgbmV3cmVsaWMuc291cmNlPSclb3RscCUnIFRJTUVTRVJJRVMifV0sImluaXRpYWxDaGFydFNldHRpbmdzIjp7ImNoYXJ0VHlwZSI6IkNIQVJUX0xJTkUiLCJsaW1pdCI6NzU0MiwibGlua2VkRW50aXR5R3VpZCI6bnVsbCwibGlua2VkRGFzaGJvYXJkSWQiOm51bGwsInlTY2FsZSI6eyJzdGF0aWMiOmZhbHNlLCJkb21haW4iOltudWxsLG51bGxdfSwieVplcm8iOnRydWV9fQo=), [metrics](https://one.newrelic.com/launcher/nr1-core.explorer?overlay=eyJuZXJkbGV0SWQiOiJkYXRhLWV4cGxvcmF0aW9uLnF1ZXJ5LWJ1aWxkZXIiLCJpbml0aWFsQWN0aXZlSW50ZXJmYWNlIjoibnJxbEVkaXRvciIsImluaXRpYWxOcnFsVmFsdWUiOiIiLCJpbml0aWFsUXVlcmllcyI6W3sibnJxbCI6IkZST00gTWV0cmljIFNFTEVDVCBjb3VudCgqKSB3aGVyZSBuZXdyZWxpYy5zb3VyY2UgTElLRSAnJW90bHAlJyBUSU1FU0VSSUVTIn1dLCJpbml0aWFsQ2hhcnRTZXR0aW5ncyI6eyJjaGFydFR5cGUiOiJDSEFSVF9MSU5FIiwibGltaXQiOjc1NDIsImxpbmtlZEVudGl0eUd1aWQiOm51bGwsImxpbmtlZERhc2hib2FyZElkIjpudWxsLCJ5U2NhbGUiOnsic3RhdGljIjpmYWxzZSwiZG9tYWluIjpbbnVsbCxudWxsXX0sInlaZXJvIjp0cnVlfX0K), and [logs](https://one.newrelic.com/launcher/nr1-core.explorer?overlay=eyJuZXJkbGV0SWQiOiJkYXRhLWV4cGxvcmF0aW9uLnF1ZXJ5LWJ1aWxkZXIiLCJpbml0aWFsQWN0aXZlSW50ZXJmYWNlIjoibnJxbEVkaXRvciIsImluaXRpYWxOcnFsVmFsdWUiOiIiLCJpbml0aWFsUXVlcmllcyI6W3sibnJxbCI6IkZST00gTG9nIFNFTEVDVCBjb3VudCgqKSB3aGVyZSBuZXdyZWxpYy5zb3VyY2U9JyVvdGxwJScgVElNRVNFUklFUyJ9XSwiaW5pdGlhbENoYXJ0U2V0dGluZ3MiOnsiY2hhcnRUeXBlIjoiQ0hBUlRfTElORSIsImxpbWl0Ijo3NTQyLCJsaW5rZWRFbnRpdHlHdWlkIjpudWxsLCJsaW5rZWREYXNoYm9hcmRJZCI6bnVsbCwieVNjYWxlIjp7InN0YXRpYyI6ZmFsc2UsImRvbWFpbiI6W251bGwsbnVsbF19LCJ5WmVybyI6dHJ1ZX19Cg==).
-   See [OpenTelemetry APM UI](https://docs.newrelic.com/docs/opentelemetry/get-started/apm-monitoring/opentelemetry-apm-ui) for more information.

    If you can't find your entity and don't see your data with NRQL, see [OTLP troubleshooting](https://docs.newrelic.com/docs/opentelemetry/best-practices/opentelemetry-otlp-troubleshooting).

## Running New Relic agents and OpenTelemetry tooling in the same process [#apm-agents]

New Relic agents and OpenTelemetry tooling (SDKs, agents, etc.) are among
many APM products on the market.

For a given language, nearly all APM products operate by using the same
low-level language and runtime hooks available–most of which alter the
behavior of your code at run time. Depending on your language's architecture,
this is often achieved via techniques like byte-code manipulation or monkey
patching.

Due to the complex ways in which APM products alter your running code,
there can be no guarantees that one product will be compatible with another
product running in the same process. At best, they’ll live side by side
unbeknownst to the other and independently generate telemetry from your
application. At worst, they’ll stomp on each other leading to unpredictable
behavior.

New Relic cannot make any assurances that our APM agents are compatible with
a different APM product running in the same process. We recommend you pick the
one (and only one) product that best fits your needs.
