import { Prerequisites, TypeList } from "docs-ui"
export const metadata = {
title: `${pageNumber} Configure Instrumentation`,
}
# {metadata.title}
In this chapter, you'll learn about observability in Medusa and how to configure instrumentation with OpenTelemetry.
## Observability with OpenTelemtry
Medusa uses [OpenTelemetry](https://opentelemetry.io/) for instrumentation and reporting. When configured, it reports traces for:
- HTTP requests
- Workflow executions
- Query usages
- Database queries and operations
---
## How to Configure Instrumentation in Medusa?
### Install Dependencies
Start by installing the following OpenTelemetry dependencies in your Medusa project:
```bash npm2yarn
npm install @opentelemetry/sdk-node @opentelemetry/resources @opentelemetry/sdk-trace-node @opentelemetry/instrumentation-pg
```
Also, install the dependencies relevant for the exporter you use. If you're using Zipkin, install the following dependencies:
```bash npm2yarn
npm install @opentelemetry/exporter-zipkin
```
### Add instrumentation.ts
Next, create the file `instrumentation.ts` with the following content:
```ts title="instrumentation.ts"
import { registerOtel } from "@medusajs/medusa"
import { ZipkinExporter } from "@opentelemetry/exporter-zipkin"
// If using an exporter other than Zipkin, initialize it here.
const exporter = new ZipkinExporter({
serviceName: "my-medusa-project",
})
export function register() {
registerOtel({
serviceName: "medusajs",
// pass exporter
exporter,
instrument: {
http: true,
workflows: true,
query: true,
},
})
}
```
In the `instrumentation.ts` file, you export a `register` function that uses Medusa's `registerOtel` utility function. You also initialize an instance of the exporter, such as Zipkin, and pass it to the `registerOtel` function.
`registerOtel` accepts an object where you can pass any [NodeSDKConfiguration](https://open-telemetry.github.io/opentelemetry-js/interfaces/_opentelemetry_sdk_node.NodeSDKConfiguration.html) property along with the following properties:
The `NodeSDKConfiguration` properties are accepted since Medusa v2.5.1.
---
## Test it Out
To test it out, start your exporter, such as Zipkin.
Then, start your Medusa application:
```bash npm2yarn
npm run dev
```
Try to open the Medusa Admin or send a request to an API route.
If you check traces in your exporter, you'll find new traces reported.
### Trace Span Names
Trace span names start with the following keywords based on what it's reporting:
- `{methodName} {URL}` when reporting HTTP requests, where `{methodName}` is the HTTP method, and `{URL}` is the URL the request is sent to.
- `route:` when reporting route handlers running on an HTTP request.
- `middleware:` when reporting a middleware running on an HTTP request.
- `workflow:` when reporting a workflow execution.
- `step:` when reporting a step in a workflow execution.
- `query.graph:` when reporting Query usages.
- `pg.query:` when reporting database queries and operations.