diff --git a/src/sentry/api/urls.py b/src/sentry/api/urls.py index 025e21db8b9194..f870428afb86fa 100644 --- a/src/sentry/api/urls.py +++ b/src/sentry/api/urls.py @@ -452,7 +452,11 @@ GroupingLevelNewIssuesEndpoint.as_view(), ), url(r"^(?P[^\/]+)/hashes/split/$", GroupHashesSplitEndpoint.as_view()), - url(r"^(?P[^\/]+)/reprocessing/$", GroupReprocessingEndpoint.as_view()), + url( + r"^(?P[^\/]+)/reprocessing/$", + GroupReprocessingEndpoint.as_view(), + name="sentry-api-0-issues-reprocessing", + ), url(r"^(?P[^\/]+)/stats/$", GroupStatsEndpoint.as_view()), url(r"^(?P[^\/]+)/tags/$", GroupTagsEndpoint.as_view()), url(r"^(?P[^\/]+)/tags/(?P[^/]+)/$", GroupTagKeyDetailsEndpoint.as_view()), diff --git a/src/sentry/conf/server.py b/src/sentry/conf/server.py index 6206dccd35bb34..4ce828319aebe3 100644 --- a/src/sentry/conf/server.py +++ b/src/sentry/conf/server.py @@ -1199,6 +1199,9 @@ def create_partitioned_queues(name): # sample rate for post_process_group task SENTRY_POST_PROCESS_GROUP_APM_SAMPLING = 0 +# sample rate for all reprocessing tasks (except for the per-event ones) +SENTRY_REPROCESSING_APM_SAMPLING = 0 + # ---- # end APM config # ---- diff --git a/src/sentry/reprocessing2.py b/src/sentry/reprocessing2.py index 0cd05105189aac..ba19da8dd63e5f 100644 --- a/src/sentry/reprocessing2.py +++ b/src/sentry/reprocessing2.py @@ -514,6 +514,8 @@ def start_group_reprocessing( referrer="reprocessing2.start_group_reprocessing", )["data"][0]["times_seen"] + sentry_sdk.set_extra("event_count", event_count) + if max_events is not None: event_count = min(max_events, event_count) diff --git a/src/sentry/tasks/reprocessing2.py b/src/sentry/tasks/reprocessing2.py index 9d47ddcecc9df0..4c8b97e4a1eb80 100644 --- a/src/sentry/tasks/reprocessing2.py +++ b/src/sentry/tasks/reprocessing2.py @@ -7,6 +7,7 @@ from sentry import eventstore, eventstream, nodestore from sentry.eventstore.models import Event from sentry.tasks.base import instrumented_task, retry +from sentry.utils import metrics from sentry.utils.query import celery_run_batch_query @@ -27,6 +28,8 @@ def reprocess_group( acting_user_id=None, ): sentry_sdk.set_tag("project", project_id) + sentry_sdk.set_tag("group_id", group_id) + from sentry.reprocessing2 import ( CannotReprocess, buffered_handle_remaining_events, @@ -35,9 +38,13 @@ def reprocess_group( start_group_reprocessing, ) + sentry_sdk.set_tag("is_start", "false") + if start_time is None: assert new_group_id is None start_time = time.time() + metrics.incr("events.reprocessing.start_group_reprocessing", sample_rate=1.0) + sentry_sdk.set_tag("is_start", "true") new_group_id = start_group_reprocessing( project_id, group_id, @@ -154,6 +161,12 @@ def handle_remaining_events( event_ids_redis_key ) + metrics.timing( + "events.reprocessing.handle_remaining_events.batch_size", + len(event_ids), + sample_rate=1.0, + ) + assert remaining_events in ("delete", "keep") if remaining_events == "delete": diff --git a/src/sentry/utils/sdk.py b/src/sentry/utils/sdk.py index 167330f34fd20a..3f7374aee52b28 100644 --- a/src/sentry/utils/sdk.py +++ b/src/sentry/utils/sdk.py @@ -69,6 +69,8 @@ "sentry-logout": 0.1, "sentry-register": settings.SAMPLED_DEFAULT_RATE, "sentry-2fa-dialog": settings.SAMPLED_DEFAULT_RATE, + # reprocessing + "sentry-api-0-issues-reprocessing": settings.SENTRY_REPROCESSING_APM_SAMPLING, } if settings.ADDITIONAL_SAMPLED_URLS: SAMPLED_URL_NAMES.update(settings.ADDITIONAL_SAMPLED_URLS) @@ -84,6 +86,9 @@ "sentry.tasks.app_store_connect.refresh_all_builds": settings.SENTRY_APPCONNECT_APM_SAMPLING, "sentry.tasks.process_suspect_commits": settings.SENTRY_SUSPECT_COMMITS_APM_SAMPLING, "sentry.tasks.post_process.post_process_group": settings.SENTRY_POST_PROCESS_GROUP_APM_SAMPLING, + "sentry.tasks.reprocessing2.handle_remaining_events": settings.SENTRY_REPROCESSING_APM_SAMPLING, + "sentry.tasks.reprocessing2.reprocess_group": settings.SENTRY_REPROCESSING_APM_SAMPLING, + "sentry.tasks.reprocessing2.finish_reprocessing": settings.SENTRY_REPROCESSING_APM_SAMPLING, }