Direct naar content

Zo bouw je een betaalbare monitoring met SQL Server Alerts

Monitoringtools kunnen nogal aan de prijs zijn, maar wist je dat SQL Server al een ingebouwd alarmsysteem heeft dat je omgeving in de gaten kan houden? SQL Server Alerts waarschuwen je voordat kleine issues uitgroeien tot grote hoofdpijn. In deze blog vertelt Mark van der Haar hoe je met SQL Server Alerts een solide monitoring opbouwt zonder grote investering.

Mark van der Haar

DBA Consultant en Senior Database Reliability Engineer
Mark van der Haar
Zo bouw je een betaalbare monitoring met SQL Server Alerts

Je dure monitoringtool kun je laten voor wat het is

Tools zoals RedgateIdera en Quest bieden uitgebreide monitoringmogelijkheden, maar hun prijskaartje past niet in ieders budget. Niet getreurd, met SQL Server Alerts kom je al een heel eind.

Alerts hebben wel beperkingen: je kunt geen historie bijhouden voor onderzoek naar workload-trends. Maar ze bieden ook iets unieks: naast gewone health- en performance-monitoring kun je ook beveiligingsincidenten en compliance-controles opzetten. Dat vind je zelden in betaalde tools.

De alertfunctionaliteit vind je onder de SQL Server Agent tab in Management Studio. Volgens Microsoft’s officiële documentatie heb je vier verschillende soorten alerts tot je beschikking:

  • SQL Server event alerts op basis van Severity – reageren op de ernst van foutmeldingen
  • Alerts op Error Number – triggeren bij specifieke foutcodes
  • SQL Server performance condition alerts – monitoren prestatiemetrieken
  • WMI event alerts – bieden de meeste flexibiliteit voor geavanceerde scenarios

Severity events vang je slim af

Microsoft’s severity levels lopen van 1 tot 25, waarbij hogere nummers ernstigere problemen aangeven. Je wilt niet alle meldingen afvangen – dat zorgt voor een lawine aan onnodige waarschuwingen. Begin met level 16, dat geeft je de balans tussen belangrijke problemen en beheersbare alertvolumes.

Een alert aanmaken doe je door rechts te klikken op ‘Alerts’ in de SQL Server Agent tab, dan ‘New Alert…’ te kiezen. Geef een naam, zet ‘Enable’ aan en selecteer ‘SQL Server event alert’ als type. Kies ‘Severity’ en selecteer level 16. Op andere tabbladen stel je in dat er een mail wordt verzonden – hiervoor configureer je eerst een operator.

Met een script regel je dit sneller:

EXEC msdb.dbo.sp_add_alert @name = N'Severity level 16', @message_id = 0, @severity = 16, @enabled = 1,

       @delay_between_responses = 600, @include_event_description_in = 1;

EXEC msdb.dbo.sp_add_notification @alert_name = N'Severity level 16', @operator_name = N'DBAs',

@notification_method = 1;

Bij elke event met severity 16 krijgt je DBA-team nu automatisch een mail. De operator- en mailfunctionaliteit moeten wel geconfigureerd worden.

Specifieke errors pak je met error number alerts aan

Error 708 bijvoorbeeld waarschuwt dat je server weinig virtueel geheugen heeft – precies het soort probleem waar je snel op wilt acteren. Je vindt een complete lijst van SQL Server error messages in Microsoft’s sysmessages documentatie.

Het script voor deze alert:

EXEC msdb.dbo.sp_add_alert @name = N'Error 00708', @message_id = 708, @severity = 0, @enabled = 1,

  @delay_between_responses = 600, @include_event_description_in = 1,

  @notification_message = 'Template van error 708: Server is running low on virtual address space or machine 
is running low on virtual memory. Reserved memory used %d times since startup. 
Cancel query and re-run, decrease server load, or cancel other applications.';

EXEC msdb.dbo.sp_add_notification @alert_name = N'Error 00708', @operator_name = N'Database Administrators',

@notification_method = 1;

Performance condition alerts houden je prestaties in de gaten

Na ‘New Alert…’ kies je ‘SQL Server performance condition alert’. Vervolgens vul je Object, Counter en Instance in, plus de conditie en waarde. SQL Server performance counters bieden inzicht in verschillende aspecten van je database-prestaties.

Een Page Life Expectancy alert ziet er zo uit:

EXEC msdb.dbo.sp_add_alert @name=N'PLE', @enabled=1, @delay_between_responses=0,

@notification_message=N'page life expectancy below 100',

@performance_condition=N'Buffer Manager|Page life expectancy||<|100';

Let op: deze alerts testen elke 20 seconden. Bij intensieve queries die je cache verversen krijg je meerdere mails. Start liever een job vanuit de alert die gegevens verzamelt, of verhoog de @delay_between_responses

WMI event alerts bieden uitgebreide mogelijkheden

Een interessante toepassing is Security Incident and Event Monitoring (SIEM). Je kunt alerts maken die kijken naar logins die aan rollen worden toegevoegd. Microsoft’s WMI classes voor SQL Server bieden uitgebreide mogelijkheden voor event monitoring.

EXEC msdb.dbo.sp_add_alert @name=N'Alert - Add login to server role', @enabled=1, @include_event_description_in=0,

@wmi_namespace=N'\\.\root\Microsoft\SqlServer\ServerEvents\MSSQLSERVER',

@wmi_query=N'select * from AUDIT_ADD_LOGIN_TO_SERVER_ROLE_EVENT', @job_name=N'Mail WMI add Login to Role'

In de gekoppelde job gebruik je tokens zoals $(ESCAPE_SQUOTE(WMI(RoleName))) en $(ESCAPE_SQUOTE(WMI(TargetLoginName))). Zet in SQL Server Agent properties bij ‘Alert System’ de optie ‘Replace tokens for all job responses to alerts’ aan:

EXEC msdb.dbo.sp_set_sqlagent_properties@alert_replace_runtime_tokens=1

WMI queries zijn complex, maar het Windows-programma wbemtest helpt je daarbij.

Meer controle over je SQL Server-omgeving

Met SQL Server Alerts monitor je je database-omgeving zonder de kosten van externe tools. Het is een prima standalone oplossing voor kleinere omgevingen, maar ook als extra beveiligingslaag naast bestaande monitoringtools. Het belangrijkste voordeel? Je vangt problemen af in een vroeg stadium, voordat ze impact hebben op je gebruikers of bedrijfsprocessen.

Meer weten?

Wil je SQL Server Alerts optimaal inzetten voor jouw omgeving? Bij OptimaData helpen we je graag om je monitoring slim en kosteneffectief in te richten. Neem contact op voor een adviesgesprek over jouw monitoringstrategie.