Skip to content

Latest commit

 

History

History
212 lines (164 loc) · 5.56 KB

File metadata and controls

212 lines (164 loc) · 5.56 KB

Once the SDK is initialized, you can send metrics using the Sentry.metrics() APIs.

The metrics namespace exposes methods that you can use to capture different types of metric information: count, gauge and distribution.

Counter

Use count to track an incrementing value, such as the number of times a button was clicked or a function was called.

import io.sentry.Sentry;

Sentry.metrics().count("button_click", 1.0);
import io.sentry.Sentry

Sentry.metrics().count("button_click", 1.0)

Gauge

Use gauge to track a value that can go up and down, such as the current memory usage or the number of items in a queue.

import io.sentry.Sentry;

Sentry.metrics().gauge("queue_depth", 42.0);
import io.sentry.Sentry

Sentry.metrics().gauge("queue_depth", 42.0)

Distribution

Use distribution to track the distribution of a value, such as the response time of a request.

import io.sentry.Sentry;

Sentry.metrics().distribution("response_time", 187.5);
import io.sentry.Sentry

Sentry.metrics().distribution("response_time", 187.5)

Adding Attributes

You can also pass additional attributes to any of the metric methods via SentryMetricsParameters. Attributes allow you to filter and group metrics.

import java.util.Map;

import io.sentry.Sentry;
import io.sentry.SentryAttribute;
import io.sentry.SentryAttributes;
import io.sentry.metrics.MetricsUnit;
import io.sentry.metrics.SentryMetricsParameters;

Sentry.metrics().distribution(
  "page_load",
  1.0,
  MetricsUnit.Duration.MILLISECOND,
  SentryMetricsParameters.create(
    Map.of("browser", "Firefox")
  )
);

Sentry.metrics().distribution(
  "response_time",
  1.0,
  MetricsUnit.Duration.MILLISECOND,
  SentryMetricsParameters.create(
    SentryAttributes.of(
      SentryAttribute.stringAttribute("browser", "Firefox")
    )
  )
);
import io.sentry.Sentry
import io.sentry.SentryAttribute
import io.sentry.SentryAttributes
import io.sentry.metrics.MetricsUnit
import io.sentry.metrics.SentryMetricsParameters

Sentry.metrics().distribution(
  "page_load",
  1.0,
  MetricsUnit.Duration.MILLISECOND,
  SentryMetricsParameters.create(
    mapOf("browser" to "Firefox")
  )
)

Sentry.metrics().distribution(
  "response_time",
  1.0,
  MetricsUnit.Duration.MILLISECOND,
  SentryMetricsParameters.create(
    SentryAttributes.of(
      SentryAttribute.stringAttribute("browser", "Firefox")
    )
  )
)

Scope Attributes

You can set attributes on the scope that will be automatically included in all metrics captured within that scope. This is useful for attaching contextual information that should appear on every metric.

import io.sentry.Sentry;
import io.sentry.ScopeType;
import io.sentry.SentryAttribute;
import io.sentry.SentryAttributes;

// Set an attribute on the global scope so it applies to all metrics
Sentry.configureScope(ScopeType.GLOBAL, scope -> {
    scope.setAttribute("region", "us-east-1");
});

// Set a single attribute with automatic type inference
Sentry.setAttribute("request.id", "abc-123");

// Or use a factory method to set the type explicitly
Sentry.setAttribute(SentryAttribute.integerAttribute("request.duration_ms", 150));

// Set multiple attributes at once
Sentry.setAttributes(SentryAttributes.of(
    SentryAttribute.stringAttribute("service", "checkout"),
    SentryAttribute.booleanAttribute("canary", false)
));

// All subsequent metrics will include these attributes
Sentry.metrics().count("order_placed", 1.0);

// Remove an attribute when it's no longer relevant
Sentry.removeAttribute("canary");
import io.sentry.Sentry
import io.sentry.ScopeType
import io.sentry.SentryAttribute
import io.sentry.SentryAttributes

// Set an attribute on the global scope so it applies to all metrics
Sentry.configureScope(ScopeType.GLOBAL) { scope ->
    scope.setAttribute("region", "us-east-1")
}

// Set a single attribute with automatic type inference
Sentry.setAttribute("request.id", "abc-123")

// Or use a factory method to set the type explicitly
Sentry.setAttribute(SentryAttribute.integerAttribute("request.duration_ms", 150))

// Set multiple attributes at once
Sentry.setAttributes(SentryAttributes.of(
    SentryAttribute.stringAttribute("service", "checkout"),
    SentryAttribute.booleanAttribute("canary", false)
))

// All subsequent metrics will include these attributes
Sentry.metrics().count("order_placed", 1.0)

// Remove an attribute when it's no longer relevant
Sentry.removeAttribute("canary")

Attributes passed directly to a metric call override scope attributes with the same key.

Specifying Units

For gauge and distribution metrics, you can specify a unit using the unit option. This helps Sentry display the metric value in a human-readable format. MetricsUnit offers constants for units supported by Sentry. Sending in custom units is not supported.

import io.sentry.Sentry;
import io.sentry.metrics.MetricsUnit;

Sentry.metrics().distribution(
  "response_time",
  187.5,
  MetricsUnit.Duration.MILLISECOND
);

Sentry.metrics().gauge(
  "memory_usage",
  1024.0,
  MetricsUnit.Information.BYTE
);
import io.sentry.Sentry
import io.sentry.metrics.MetricsUnit

Sentry.metrics().distribution(
  "response_time",
  187.5,
  MetricsUnit.Duration.MILLISECOND
)

Sentry.metrics().gauge(
  "memory_usage",
  1024.0,
  MetricsUnit.Information.BYTE
)