Houdbaarheidsdatum SQL Server verstreken? Tijd voor grip
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.
Tools zoals Redgate, Idera 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:
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.
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.
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.
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;
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.
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
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.
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.
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.