---
title: "HTTP instrumentation for Pyroscope | Grafana k6 documentation"
description: "k6 Pyroscope instrumentation API"
---

# HTTP instrumentation for Pyroscope

> Note
> 
> The source code for this library can be found in the [grafana/jslib.k6.io](https://github.com/grafana/jslib.k6.io/tree/main/lib/http-instrumentation-pyroscope) GitHub repository.

The `http-instrumentation-pyroscope` module allows you to *instrument* HTTP requests in a way that lets you tag Grafana Cloud Profiles with relevant information generated from k6 tests.

## About baggage header

The *baggage header* is a standardized HTTP header used to propagate distributed context. The [W3C specification](https://www.w3.org/TR/baggage/) goes into more detail on the specifics, but like many other headers, the baggage header is a list of key-value pairs.

This module, by default, adds three key-value pairs:

1. Scenario name
2. Name of the request (URL if not set)
3. Value of `__ENV.K6_CLOUDRUN_TEST_RUN_ID`, which is set automatically in Grafana Cloud k6.

## API

Expand table

| Class/Function                                                                                        | Description                                                    |
|-------------------------------------------------------------------------------------------------------|----------------------------------------------------------------|
| [instrumentHTTP](/docs/k6/latest/javascript-api/jslib/http-instrumentation-pyroscope/instrumenthttp/) | Instruments the k6 http module with baggage header.            |
| [Client](/docs/k6/latest/javascript-api/jslib/http-instrumentation-pyroscope/client/)                 | Configurable Client that exposes instrumented HTTP operations. |

## Example

This example demonstrates how to use the this library to instrument every HTTP request made in a script with the `baggage` header.

JavaScript ![Copy code to clipboard](/media/images/icons/icon-copy-small-2.svg) Copy

```javascript
import { check } from 'k6';
import pyroscope from 'https://jslib.k6.io/http-instrumentation-pyroscope/1.0.2/index.js';
import http from 'k6/http';

// instrumentHTTP will ensure that all requests made by the http module
// from this point forward will have a baggage context attached.
pyroscope.instrumentHTTP();

export default () => {
  // the instrumentHTTP call in the init context replaced
  // the http module with a version that will automatically
  // attach a baggage header to every request.
  const res = http.get('http://httpbin.org/get', {
    headers: {
      'X-Example-Header': 'instrumented/get',
    },
  });
};
```
