KB Flooris Sentry - Herstel event queue via Redis reset¶
Context¶
Onze self-hosted Sentry instantie draait op sentry.flooris.dev.
Bij een overvloed aan inkomende Sentry events kan de verwerkingswachtrij (opgeslagen in Redis) zo groot worden dat de server overbelast raakt en Sentry workers vastlopen. In dat geval kan het noodzakelijk zijn om de volledige Redis database te verwijderen om de server te herstellen.
Destructieve actie — alle niet-verwerkte events gaan verloren
Deze procedure verwijdert de volledige Redis database. Alle events die op dat moment nog in de wachtrij staan worden permanent verwijderd en kunnen niet worden teruggehaald.
Gebruik deze procedure alleen als noodmaatregel wanneer de server aantoonbaar overbelast is en andere maatregelen (zoals de Cloudflare WAF-blokkade) onvoldoende zijn gebleken.
Stap 1 – Ga naar de juiste werkdirectory¶
cd ~/docker-configurations/current-host/sentry
Stap 2 – Consumer log controleren¶
Controleer de huidige staat van de Kafka consumer groups om te zien hoeveel events er in de wachtrij staan en hoe ver de consumers achterlopen.
docker compose exec kafka kafka-consumer-groups \
--bootstrap-server localhost:9092 \
--describe --all-groups | grep -E 'ingest-events|ingest-transactions|ingest-replay|ingest-profiles|generic-metrics|attachments'
De kolom LAG geeft per partition aan hoeveel berichten nog niet verwerkt zijn. Een hoge LAG-waarde is een indicatie dat de wachtrij te groot is geworden om bij te houden.
Stap 3 – Sentry workers stoppen¶
Stop alle Sentry workers en consumers zodat er geen nieuwe berichten worden verwerkt of toegevoegd terwijl de Redis database wordt gewist.
docker compose stop \
worker \
ingest-consumer \
ingest-monitors \
ingest-replay-recordings \
ingest-occurrences \
post-process-forwarder-errors \
post-process-forwarder-transactions \
subscription-consumer-events \
subscription-consumer-transactions
docker stop \
sentry-self-hosted-attachments-consumer-1 \
sentry-self-hosted-events-consumer-1 \
sentry-self-hosted-transactions-consumer-1
Stap 4 – Kafka offsets resetten naar latest¶
Reset de Kafka consumer offsets voor de ingest-consumer group naar de meest recente positie. Hierdoor worden alle berichten die momenteel in de queue staan overgeslagen zodra de workers weer opstarten.
docker compose exec kafka kafka-consumer-groups \
--bootstrap-server localhost:9092 \
--group ingest-consumer \
--topic ingest-events \
--reset-offsets \
--to-latest \
--execute
Stap 5 – Alles opnieuw opstarten¶
Start alle services opnieuw op. Docker Compose start ook de eerder gestopte workers en consumers weer.
docker compose up -d
Stap 6 – Verifiëren¶
Controleer na het opstarten of de LAG-waarden dalen en de workers normaal verwerken:
docker compose exec kafka kafka-consumer-groups \
--bootstrap-server localhost:9092 \
--describe --all-groups | grep -E 'ingest-events|ingest-transactions|ingest-replay|ingest-profiles|generic-metrics|attachments'
Controleer ook de worker logs op fouten:
docker compose logs --tail=50 worker
Na het herstel
Stel na het herstellen van de server alsnog een onderzoek in naar de oorzaak van de event-storm. Denk aan een foutief script, een kapotte integratie of een misconfiguratie bij een klant.
Overweeg ook de Cloudflare WAF-blokkade in te schakelen als voorzorgsmaatregel terwijl je de oorzaak onderzoekt.