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.
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)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)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)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")
)
)
)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.
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
)