# Set Up Metrics | Sentry for React Native

With Sentry Metrics, you can send counters, gauges, and distributions from your applications to Sentry. Once in Sentry, these metrics can be viewed alongside relevant errors, and searched using their individual attributes.

This feature is currently in open beta.

## [Requirements](https://docs.sentry.io/platforms/react-native/metrics.md#requirements)

##### Version requirement

Metrics for React Native<!-- --> requires <!-- -->Sentry React Native SDK<!-- --> version `7.8.0` or newer.

## [Usage](https://docs.sentry.io/platforms/react-native/metrics.md#usage)

### [Metric Types](https://docs.sentry.io/platforms/react-native/metrics.md#metric-types)

| Type           | Use For                                      |
| -------------- | -------------------------------------------- |
| `count`        | Events (orders, clicks, API calls)           |
| `gauge`        | Current values (queue depth, connections)    |
| `distribution` | Value ranges (response times, payload sizes) |

No setup required beyond SDK initialization.

```javascript
import * as Sentry from "@sentry/browser";

// Count occurrences
Sentry.metrics.count("orders_created", 1);

// Track current values
Sentry.metrics.gauge("active_connections", 42);

// Track distributions
Sentry.metrics.distribution("api_latency", 187, {
  unit: "millisecond",
});
```

### [Attributes](https://docs.sentry.io/platforms/react-native/metrics.md#attributes)

#### [Filtering and Grouping](https://docs.sentry.io/platforms/react-native/metrics.md#filtering-and-grouping)

Attributes let you filter and group metrics in Sentry. Use them for:

* Environment segmentation
* Feature flag tracking
* User tier analysis

Each metric has a **2KB size limit**. If you exceed this, the metric will be dropped.

```javascript
Sentry.metrics.count("api_calls", 1, {
  attributes: {
    endpoint: "/api/orders",
    user_tier: "pro",
    region: "us-west",
    user_id: user.id,
    order_id: order.id,
  },
});
```

#### [Scope Attributes](https://docs.sentry.io/platforms/react-native/metrics.md#scope-attributes)

With version `10.33.0`+, use scope APIs to set attributes that apply to all metrics while the scope is active.

Supported types: `string`, `number`, `boolean`

```javascript
Sentry.getGlobalScope().setAttributes({
  is_admin: true,
  auth_provider: "google",
});

Sentry.withScope((scope) => {
  scope.setAttribute("step", "authentication");

  // All scope attributes are added
  Sentry.metrics.count("clicks", 1);
  Sentry.metrics.gauge("time_since_refresh", 4, { unit: "hour" });
});
```

#### [Units](https://docs.sentry.io/platforms/react-native/metrics.md#units)

For `gauge` and `distribution` metrics, specify a unit to help Sentry display values in a human-readable format.

Common units: `millisecond`, `second`, `byte`, `kilobyte`, `megabyte`. See [supported units](https://develop.sentry.dev/sdk/telemetry/attributes/#units) for the full list.

```javascript
Sentry.metrics.distribution("response_time", 187.5, {
  unit: "millisecond",
});

Sentry.metrics.gauge("memory_usage", 1024, {
  unit: "byte",
});
```

## [Options](https://docs.sentry.io/platforms/react-native/metrics.md#options)

### [beforeSendMetric](https://docs.sentry.io/platforms/react-native/metrics.md#beforesendmetric)

Filter or modify metrics before sending. Return `null` to drop a metric.

```javascript
Sentry.init({
  dsn: "___PUBLIC_DSN___",
  beforeSendMetric: (metric) => {
    // Drop specific metrics
    if (metric.name === "debug_metric") {
      return null;
    }

    // Add attributes
    metric.attributes = {
      ...metric.attributes,
      processed: true,
    };

    return metric;
  },
});
```

### [Disable Metrics](https://docs.sentry.io/platforms/react-native/metrics.md#disable-metrics)

Set `enableMetrics: false` to disable metrics collection entirely.

### [Flush Metrics](https://docs.sentry.io/platforms/react-native/metrics.md#flush-metrics)

Metrics are buffered and sent periodically. Use this snippet to flush immediately:

```javascript
// Disable metrics
Sentry.init({
  dsn: "___PUBLIC_DSN___",
  enableMetrics: false,
});

// Flush all pending metrics
await Sentry.flush();
```

## [Default Attributes](https://docs.sentry.io/platforms/react-native/metrics.md#default-attributes)

Sentry automatically attaches these attributes to every metric:

| Attribute                            | Description                     | Context     |
| ------------------------------------ | ------------------------------- | ----------- |
| `sentry.environment`                 | Environment from SDK config     | Always      |
| `sentry.release`                     | Release version from SDK config | Always      |
| `sentry.sdk.name`                    | SDK name                        | Always      |
| `sentry.sdk.version`                 | SDK version                     | Always      |
| `user.id`, `user.name`, `user.email` | User identifiers                | If user set |
| `browser.name`, `browser.version`    | Browser info                    | Client-side |
| `sentry.replay_id`                   | Session replay ID               | Client-side |
| `server.address`                     | Server hostname                 | Server-side |
