← Terug naar projects
7 min
SendScope: monitoring en alerting voor AWS SES

SendScope: monitoring en alerting voor AWS SES

Een all-in-one platform om AWS SES deliverability te monitoren en automatische alerts te ontvangen als er iets opvallends gebeurt. Gebouwd nadat een gelekte AWS key ons SES-account op suspended zette en alle transactionele e-mails blokkeerde, omdat AWS zelf geen bruikbare oplossing biedt voor proactieve monitoring.
  • .NET
  • C#
  • React
  • TypeScript
  • AWS

Inhoudsopgave

  1. AWS Virtual Deliverability Manager: dashboards zonder actie
  2. Wat SendScope is
  3. Realtime monitoring
  4. Smart alerting
  5. Suppression-lijstbeheer
  6. Verzend-insights
  7. DNS-authenticatiechecks
  8. Digest-rapporten
  9. De technische kant
  10. Waarom ik het zelf heb gebouwd
  11. Huidige status

Ik heb eens meegemaakt dat een AWS key gelekt was. We kwamen erachter toen AWS het SES-account op suspended zette, waardoor al onze transactionele e-mails in alle software die we draaiden geblokkeerd werden. Dat is iets waar je niet op zit te wachten, zeker niet ‘s nachts of in het weekend.

Nadat het incident was opgelost door alle keys te roteren en een verzoek naar AWS om weer toegang te krijgen, ging ik op zoek naar een goede oplossing om dit in de toekomst te voorkomen.

AWS Virtual Deliverability Manager: dashboards zonder actie

Ik kwam erachter dat AWS hier eigenlijk niet echt een oplossing voor heeft. In november 2022 hebben ze AWS Virtual Deliverability Manager (VDM) gelanceerd. Daarin is het mogelijk om verschillende statistieken te zien en adviezen te krijgen om de deliverability te verbeteren. Maar dit zijn alleen maar read-only statistieken. Je begrijpt natuurlijk wel dat ik hier niet elk uur ga kijken, en natuurlijk precies als je niet kijkt gebeurt er een incident.

Toen ik op internet zocht kon ik eigenlijk geen kant-en-klare oplossingen vinden. Wel wat artikelen over hoe je zelf wat kunt knutselen met SNS topics waarop events binnenkomen waar je dan wat mee kan doen, en CloudWatch instellen, maar om dat voor elk AWS-account te doen, en daar speciaal een AWS Lambda-functie of iets dergelijks voor te schrijven is iets te gortig. Daarnaast is dat ook niet zo betrouwbaar. Er is een robuuste setup vereist om betrouwbaar ingelicht te worden als er iets met je AWS SES-setup aan de hand is.

Daarom heb ik SendScope gebouwd.

Wat SendScope is

SendScope is het all-in-one platform om AWS SES deliverability en metrics te monitoren en automatische alerts te ontvangen als er iets opvallends aan de hand is. Het vult het gat dat VDM openlaat: waar VDM dashboards toont maar niets doet als er iets misgaat, waarschuwt SendScope je proactief voordat problemen escaleren tot een account-suspensie.

Het SendScope-dashboard met realtime bounce-, complaint- en delivery-rates

Het monitoring-dashboard: bounce rate, complaint rate en delivery rate in realtime, met de AWS-limieten als referentie.

Realtime monitoring

Het dashboard toont in realtime je bounce rate, complaint rate en delivery rate, met de AWS-limieten er duidelijk naast. Je ziet per sender identity (domein en e-mailadres) hoe het ervoor staat, kunt historische trends bekijken over periodes van 24 uur tot 2 jaar, en hebt een multi-account overzicht als je meerdere AWS-accounts beheert. Daarnaast controleert SendScope ook of de DKIM-, SPF- en DMARC-configuratie van je domeinen correct is en waarschuwt als er iets verandert.

Het multi-account dashboard met gezondheidsoverzicht per account

Het multi-account dashboard: events, deliveries, bounce en complaint rates, met per-account gezondheids-badges.

Smart alerting

Dit is het hart van SendScope. Er zijn tien soorten alertcondities beschikbaar:

  • Rate thresholds: waarschuwingen als bounce of complaint rate een drempel bereikt.
  • Reputation danger: detectie als je reputatie in gevaar komt.
  • Quota usage: melding als je de dagelijkse verzendquota bijna bereikt.
  • Volume spikes: detectie van plotselinge pieken in verzendvolume die afwijken van het normale patroon.
  • Sending silence: alert als er onverwacht helemaal geen e-mails meer worden verzonden.
  • Engagement drops: detectie als open- of click-rates significant dalen.
  • Bounce subtype surges: waarschuwing bij een plotselinge toename van een specifiek type bounce.
  • Suppression growth: melding als de suppression list ongewoon snel groeit.
  • Authentication degradation: alert als DKIM, SPF of DMARC authenticatie verslechtert.
  • Account health: melding bij veranderingen in de accountstatus.

Ik wilde het mogelijk maken om notificaties te ontvangen op de plaatsen waar je zelf online bent: e-mail, Slack en Discord. Daarnaast wordt ook Apprise ondersteund, die op zichzelf weer een gigantische lijst van providers kan bereiken. Als dat allemaal nog niet genoeg is, kun je ook kiezen voor een custom webhook, waarbij je je eigen URL, payload en custom headers (dus ook auth) mee kunt geven (met SSRF-preventie uiteraard).

Elke alert rule kun je testen voordat hij live gaat, en er zit een cooldown-mechanisme op om te voorkomen dat je overspoeld wordt met meldingen.

Suppression-lijstbeheer

De suppression list met zoek- en filteropties

Suppression-lijstbeheer: zoeken, filteren, bulk verwijderen en CSV-export, met bidirectionele sync naar AWS SES.

Hard bounces en complaints worden automatisch onderdrukt zodra ze binnenkomen. Het bijzondere is de bidirectionele sync met de AWS SES suppression list: je lokale lijst en de lijst in AWS blijven automatisch synchroon, zodat elk systeem het erover eens is naar wie je niet meer moet mailen. Daarnaast ondersteunt het tijdelijke suppressions met een instelbare vervaltijd, voor gevallen waarin je een adres tijdelijk wilt blokkeren.

Verzend-insights

Deliverability funnel en verzendpatronen

Verzend-insights: de deliverability funnel van verzonden tot aangeklikt, verzend-heatmaps en domein-breakdown.

SendScope toont de volledige reis van een e-mail: van verzonden naar afgeleverd, geopend en aangeklikt, als een visuele funnel. Verzend-heatmaps laten zien op welke dagen en uren het meeste wordt verstuurd, een domein-breakdown toont de rates per ontvangerdomein, en bounce-redenen worden gecategoriseerd in permanent versus tijdelijk met subtypes. Volume-anomaliedetectie pikt ongewone patronen automatisch op.

DNS-authenticatiechecks

DKIM, SPF en DMARC authenticatiestatus

Domein-authenticatie: DKIM, SPF en DMARC status per identity, met drifthistorie.

SendScope controleert doorlopend of de DNS-authenticatie van je verzendende domeinen correct is ingesteld. Als er iets verandert aan je DKIM-, SPF- of DMARC-configuratie (bijvoorbeeld door een DNS-wijziging die per ongeluk een record overschrijft) krijg je daar een melding van, voordat het je deliverability beïnvloedt.

Digest-rapporten

Naast realtime alerts kun je ook periodieke samenvattingen ontvangen per e-mail: dagelijks, wekelijks of maandelijks. Elke digest bevat je bounce en complaint rates, volumetrends, topdonordomainen, recente suppressions en alerthistorie, met een vergelijking ten opzichte van de voorgaande periode zodat je trends vroeg kunt spotten.

De technische kant

SendScope is gebouwd op dezelfde stack als Slicekit: een event-driven .NET 10 API met vertical slices, een React 19 SPA, en een Astro-marketingsite. SES-events komen binnen via SNS webhooks, en de app configureert SNS topics en subscriptions automatisch zodra je je AWS-account koppelt. De monitoring-data wordt verwerkt via Wolverine CQRS en opgeslagen in PostgreSQL, met Redis als cachelaag.

Waarom ik het zelf heb gebouwd

De directe aanleiding was dat incident met de gelekte key. Maar de onderliggende reden is dat er simpelweg geen goede oplossing bestond. VDM toont statistieken maar doet er niets mee. De zelf-geknutselde combinatie van SNS, CloudWatch en Lambda is fragiel, lastig te onderhouden over meerdere accounts, en al helemaal niet betrouwbaar genoeg om op te vertrouwen voor kritieke e-mailinfrastructuur.

Ik wilde iets dat ik kon instellen, dat betrouwbaar waakt, en dat me op de juiste plek waarschuwt voordat AWS ingrijpt. SendScope is dat geworden.

Huidige status

SendScope is live en beschikbaar in drie tiers: een gratis Starter-plan (1 SES-account, basisalerts via e-mail), Pro voor €29 per maand (tot 5 accounts, alle alerttypes, Slack, Discord en digest-mails) en Business voor €79 per maand (onbeperkt accounts en geavanceerde anomaliedetectie). Alle betaalde plannen hebben een gratis proefperiode van 7 dagen zonder creditcard.

Heb je vragen of feedback? Neem gerust contact op!