EXAMENSARBETE Övervakning av databaser i virtuella miljöer Marcus Pesula Mattias Rönnberg 2015 Högskoleexamen Datornätverk Luleå tekniska universitet Institutionen för system- och rymdteknik Övervakning av databaser i virtuella miljöer Examensarbete - D0032D Luleå Tekniska Universitet Institutionen för system- och rymdteknik Marcus Pesula Mattias Rönnberg Förord Detta examensarbete utfördes under fem veckor på företaget Data Ductus kontor i Uppsala och är slutuppgiften för högskoleexamen i Datornätverk på Luleå tekniska universitet. Inledningsvis vill vi tacka Oualid Burström som gav oss rekommendationer till examensarbetet och Karl Andersson, utbildningsledare. Ett stort tack går även ut till Data Ductus samt Erik Ohlsson, Pelle Elfström, Gustaf Palmqvist och övriga medarbetare som assisterade oss under arbetets gång. Vi hoppas att det arbete som vi utfört kommer att vara till nytta i framtiden. Uppsala, maj 2015 Marcus Pesula och Mattias Rönnberg Sammanfattning Virtualisering och övervakning är två snabbt växande områden inom IT-branschen. Denna rapport behandlar övervakningen av databas-servrar med hjälp av två olika verktyg, op5 monitor samt VMware vCenter. Det svenska företaget op5 AB har utvecklat op5 monitor och detta verktyg används idag av flera stora företag för att övervaka deras nätverkselement, Data Ductus är ett av dem. Ductus ligger i framkant när det kommer till systemövervakning men är i behov att utöka sin övervakning på databas-servrar. Uppdraget antogs därför av oss att hitta en lösning som ska kunna implementeras i deras produktionsmiljö. Beskrivningar presenteras av de teoretiska delar som ingår i övervakning och virtualisering med VMware ESXi. En lösning för att övervaka Microsofts databasserver i op5 tas fram och testas, lösningen görs så generell som möjligt för att den lätt ska kunna tas i bruk. Även en jämförelse mellan fysisk och virtuell övervakning granskas och perl-programmet check mssql health används som mall för att skapa checkar av intressanta mätvärden att övervaka hos en databas-server. Felkällor och förbättringar samt framtida arbete diskuteras och slutsatsen dras att op5 är det överlägsna övervakningsverktyget på grund av dess flexibilitet. Abstract Virtualization and monitoring are two rapidly growing areas in the IT industry. This report deals with the monitoring of database servers using two different tools, op5 Monitor and VMware vCenter. The Swedish company op5 AB has developed op5 Monitor. This tool is now used by several major companies to monitor their network elements, Data Ductus is one of them. Ductus is at the forefront when it comes to system monitoring but are in need to expand the monitoring of their database servers. The task to find a solution that can be implemented in their production environment was therefore adopted by us. A thorough overview is composed of the theoretical parts involved in the monitoring and virtualization with VMware ESXi. A solution to monitor Microsofts database server in op5 is developed and tested, the solution is made as general as possible in order for it to easily be implemented in a production environment. A comparison between physical and virtual monitoring is reviewed and the perl program check mssql health is used to monitor interesting metrics in a database server. Sources of errors, improvements and future work are discussed and it is concluded that op5 is the superior surveillance tool compared to VMware vCenter. Innehåll 1. Introduktion 1.1 1.2 1.3 2. Bakgrund . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Syfte . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Frågeställningar . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Teori 2.1 2.2 2.3 2.4 2.5 3. 6 8 ESXi . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2.1.1 vSphere Client, vCenter & VMware Workstation 2.1.2 Virtualiserat nätverk . . . . . . . . . . . . . . . 2.1.3 SAN & HP 3PAR . . . . . . . . . . . . . . . . . Microsoft SQL Server . . . . . . . . . . . . . . . . . . . 2.2.1 Instanser . . . . . . . . . . . . . . . . . . . . . . 2.2.2 Metrics & Counters . . . . . . . . . . . . . . . . Nagios & op5 monitor . . . . . . . . . . . . . . . . . . . 2.3.1 NRPE, NSClient++ & WMI . . . . . . . . . . . JSON & Perl . . . . . . . . . . . . . . . . . . . . . . . . check mssql health . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Genomförande 3.1 3.2 3.3 3.4 Metod . . . . . . . . . . . Förundersökning . . . . . Tester av op5 och MSSQL Implementering . . . . . . 6 7 7 8 8 9 9 10 10 10 11 11 12 12 13 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13 13 15 16 4. Resultat 22 5. Diskussion & Analys 24 Förkortningar och förklaringar 26 Bilagor 27 Bilaga 1 - MSSQL Counters . . . . . . . . . . . . . . . . . . . . . . . . . . . . Bilaga 2 - Management Pack . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28 31 Övervakning av databaser i virtuella miljöer Del 1. Introduktion Virtualisering av hårdvara blir allt mer en de facto standard inom enterprise-sektorn. Nätverkselement, servrar och arbetsstationer virtualiseras för att bland annat öka redundans, tillföra skalbarhet och underlätta underhållsarbete. Både små och stora företag kan dra nytta av att virtualisera sina IT-miljöer och nästa steg är att sätta upp en central enhet vars syfte är att övervaka noderna i företagsnätverket. Detta är två metoder som kan användas för att skapa en bättre IT-plattform och ett förbättrat arbetssätt för att spara både tid och pengar. 1.1 Bakgrund Det arbete som ligger som grund för denna rapport utfördes bland annat i Data Ductus produktionsmiljö. Data Ductus är ett konsultföretag med expertis inom IT. Divisionen i Uppsala arbetar med Svenska kyrkan och har hand om deras IT-miljö. Denna består av ett kluster i Uppsala med ungefär 500 virtuella maskiner som drivs av 16 fysiska Blade servrar och HP’s lagringslösning 3PAR. Miljön består även av ett kluster i Luleå som innehåller närmare 100 virtuella maskiner och 5 fysiska servrar. Tillsammans klarar de båda att leverera 700 GHz processorkraft, 6 TB RAM minne och 150 TB lagring för virtualisering. Data Ductus ligger i framkant när det kommer till övervakning av servrar i produktionsmiljö. De använder så kallad pollning då en centraliserad enhet skickar förfrågningar till noderna i nätverket för att försäkra sig om att de fungerar som de ska. Den mjukvara som används för att möjliggöra denna övervakning är op5 med dess webgränssnitt och funktioner för att uppmärksamma larm och varningar som sedan visas på bildskärmar i kontoret och i vissa fall skickas som SMS till deras drifttekniker. De dedikerade övervakningsservrarna på Data Ductus har växt snabbt det senaste åren. Från att vara en virtuell enhet med 13 GB lagring och 1 GB RAM minne med CentOS 5 som grund till att utökas och nu används en fysiskt server med 4 GB RAM med 300 GB diskutrymme som kör operativsystemet Red Hat 6.6. Redundans garanteras även med en masterserver i Uppsala samt två slaves som hålls uppdaterade i Luleå och Göteborg. 6 Övervakning av databaser i virtuella miljöer 1.2 Syfte Syftet med denna rapport är att ge en grundlig uppfattning om övervakning av MSSQL i en virtuell miljö samt en jämförelse mellan op5’s övervakningslösning och den som är integrerad i VMware. Det åtagna uppdraget är att ta fram en lösning för att utöka den övervakning som Data Ductus redan har på sina MSSQL servrar samt undersöka övervakning i virtuella miljöer. Detta för att skapa en mer grundlig övervakning på databaserna. 1.3 Frågeställningar Innan arbetet påbörjades togs några frågeställningar fram för att hållå kvar fokus på uppgiften samt för att underlätta det fortgående arbetet. De frågeställningar som ställdes var: • Är det någon skillnad mellan övervakning i fysiska/virtuella miljöer? • Hur ser Data Ductus nuvarande övervakning av MSSQL ut? • Vad kan förbättras i övervakningssyfte? • Vilka metrics och counters är intressanta att övervaka på en MSSQL server? 7 Övervakning av databaser i virtuella miljöer Del 2. Teori 2.1 ESXi ESX eller Elastic Sky X som var utvecklingsnamnet för den hypervisor från VMware som installeras direkt på fysiska servrar, utan något operativsystem och som möjliggör partitionering av resurser till virtuella enheter. ESXi innehåller en kärna som används för att initiera virtualiseringsprocesser och sköta om hanteringen av resurser som minne och processorkraft. Tidiga versioner av ESX hade en Linuxbaserad kärna och fungerade som ett gränssnitt mellan serveradministratören och operativsystemet. Denna Linuxkärna är i senare versioner borttagen och ersatt med en så kallad VMkernel då den allokerade resurser i onödan. [1] ESXi används som grund i de flesta av VMware’s virtuella miljöer och uppdateras kontinuerligt för att hålla sig i fas med hårdvaruutvecklingen. VMware’s infrastruktur har även stöd för virtualisering av nätverk och nätverkselement som sedan integreras i deras lösningar. 2.1.1 vSphere Client, vCenter & VMware Workstation VMware Workstation är en hypervisor av typ två vilket innebär att den körs ovanpå ett annat operativsystem. Den är gratis att prova och tillåter användaren att skapa virtuella maskiner på en fysisk enhet. Man kan etablera en fjärranslutning till en ESXi server med hjälp av vSphere Client och från gränssnittet bland annat skapa, editera och styra virtuella maskiner och dess funktioner. vSphere Client installeras på klientdatorn och kan även användas för att fjärransluta till en vCenter-server som i sin tur är installerad på en Windows-server och administrerar ESXi-servern centralt. En vCenter-server har mer kraft och kan utföra avancerade uppgifter så som att kontrollera realtids-migrering med vMotion och lastbalansering med DRS. [2] 8 Övervakning av databaser i virtuella miljöer 2.1.2 Virtualiserat nätverk Virtuella nätverk har samma funktion som ett fysiskt nätverk och virtuella switchar möjliggör kommunikation mellan enheter via samma protokoll som fysiska switchar utan att behöva köpa in överflödig hårdvara. Switcharna som används i ett virtuellt nätverk har även stöd för VLAN och kan användas i symbios med de flesta standardiserade hårdvarutillverkarnas enheter. I Figur 1 demonstreras exempel på ett virtuellt nätverk vars NIC är kopplade till ett fysiskt core-nät. Det finns möjligheter att bygga enorma virtuella nät med hjälp av en ESXi server, version 3 av ESXi kan innehålla 248 vSwitchar på en enda fysisk server. Eftersom det inte går att koppla ihop flera virtuella switchar med varandra så är det nästintill omöjligt att skapa en loop i nätverket och således behövs inte STP användas för att motverka dessa. Detta sparar på resurser som kan användas till annat, till exempel att ta emot förfrågningar av en administrationsklient. [3] Figur 1: Illustration av ett virtuellt nätverk 2.1.3 SAN & HP 3PAR Storage Area Network är ett kluster av lagringsenheter, ofta med olika hastigheter och storlek, som kopplas samman via ett höghastighetsnätverk för att agera som primär lagring för bland annat servrar och andra enheter. Ett SAN används ofta i virtuella miljöer för att dela ut resurser till VMs. 3PAR är en lagringslösning från HP som är optimerad för användning i virtuella och molnmiljöer. Lösningen erbjuder automerad redundant lagring i form av diverse RAIDkonfigurationer och möjligheten att använda olika sorters lagringsmedium så som SSD och mekaniska diskar. Diskar kan gå sönder och bytas ut utan att den data som lagras på dem går förlorad eller att någon tjänst som behandlar lagringsutrymmet inte fungerar som den ska. [4] 9 Övervakning av databaser i virtuella miljöer 2.2 Microsoft SQL Server Microsoft SQL Server är en databashanterare för relationsdatabaser utvecklad av Microsoft. Information i en relationsdatabas lagras i tabeller där varje kolumn har en bestämd datatyp. Varje kolumn innehåller data, ofta med en primärnyckel som gör den unik. Hämtning av data utförs genom att göra förfrågningar mot SQL-servern utformade för att hämta den data man vill ha. Svaret på en SQL-förfrågan returneras som en tabell. SQL är ett programspråk som används för att hämta, modifiera och lägga till data i en databas av relationstyp. SQL togs fram kring 1974 och anpassades till en standard år 1986 av American National Standards Institute (ANSI) och 1987 av International Organization for Standardization (ISO). [5] Eftersom en SQL-server är resursintensiv behövs speciella åtgärder tas vid implementation och övervakning så att till exempel minne och processorkraft kan anpassas vid behov. Microsofts egna grafiska verktyg för att hantera databaser heter Microsoft SQL Server Management Studio. 2.2.1 Instanser Vid installation av MSSQL så skapas en instans av databasmotorn som körs som en tjänst på operativsystemet. Denna instans binder sig till en port och lyssnar sedan efter anrop. För att ansluta till en instans så specificeras portnummer eller instansnamn efter hostnamnet. Fler än en instans kan förekomma per maskin, men två instanser kan inte dela samma port. 2.2.2 Metrics & Counters I MSSQL finns ett antal mätvärden som presenteras genom statistiska grafer i ett program som heter performance monitor. Administratören väljer själv vilka mätvärden som aktivt ska samlas och dessa kan sedan hämtas ut av externa nätverkshanteringssystem. Detta sker via en agent på den övervakade servern för att bli centralt tillgängliga. 10 Övervakning av databaser i virtuella miljöer 2.3 Nagios & op5 monitor Nagios är ett öppet övervakningssystem som använder sig av lokala kommandon för att hämta olika variabler och mätvärden. Det stödjer kommandon från många olika språk, så länge det kan köra dem med en lokal användare som finns på servern som hanterar anropen. Nagios är en så kallad network manager, och ansluter till olika nätverkselement via dess agenter. op5 Monitor är en produkt för nätverksövervakning baserat på det öppna övervakningssystemet Nagios men vidareutvecklat av företaget op5 AB. För att övervaka ett objekt i op5 monitor så används webbgränssnittet för att lägga till en host. På varje host kan det appliceras specificerade kommandon för att hämta variabler, dessa kallas i op5 för service, och varje hostobjekt kan innehålla flera av dessa. 2.3.1 NRPE, NSClient++ & WMI NRPE, eller Nagios Remote Plugin Executor är en agent som låter ett NMS exekvera skript för att övervaka lokala resurser på ett fjärrstyrt system. Observera att Nagios inte är ett krav för att använda agenten. NRPE kan köras självständigt och check-kommandona kan exekveras via kommandoraden istället för att låta Nagios sköta den delen. [6] NSClient++ är en agent för att övervaka Windowsbaserade system, ett kommando körs på övervakningssystemet för att hämta information om de lokala resurserna, precis som NRPE. WMI (Windows Management Instrumentation) är ett gränssnitt för interaktion med Windows för hämtning av underhållsinformation i en enterprise miljö. WMI låter ett NMS hämta information och exekvera script på en fjärrdator för att schemalägga aktiviteter. 11 Övervakning av databaser i virtuella miljöer 2.4 JSON & Perl JavaScript Object Notation (JSON) är en öppen standard för att utbyta dataobjekt som består av attribut och värden i par. JSON används ofta för att skicka data mellan klient och server i ett format som är lätt att tolka både av program och människor. JSON är trots sitt namn inte bundet till JavaScript utan kan användas av alla programmeringsspråk som har en JSON tolk. [7] Perl är ett skriptspråk som ofta används för att hämta och sammanställa information från en server och formatera det på ett bra sätt. Perl används ofta i övervakningssyfte för att sammanställa information som sedan införs i ett NMS. [8] 2.5 check mssql health Check mssql health är en plugin till Nagios som tar ett antal argument för övervakning av MSSQL servrar. Pluginen använder Perl-modulen DBD::Sybase för att skapa anslutningar mot en databas och kör med hjälp av SQL förfrågningar för att hämta olika värden. [9] Vid användning av kommandot kan man även ange tröskelgränser för alarm och varningar som sedan visas i Nagios med respektive allvarlighetsgrad. 12 Övervakning av databaser i virtuella miljöer Del 3. Genomförande 3.1 Metod Arbetet inleddes med att undersöka den goda praxis som används vid installationer av MSSQL i en virtuell miljö. [10] Till en början så begränsades omfånget med tanke på de frågeställningar som tidigare tagits fram. Vår uppgift blev att hitta de viktigaste metoderna att ta i beaktande vid implementering av MSSQL i en virtuell miljö. För att göra detta konsulterades de anställda i driftenheten på Data Ductus för att använda deras metoder som referens. En utförlig genomgång av Data Ductus system och deras VMware-baserade miljö gav oss en bättre uppfattning av den best practice som idag används inom företaget och hur miljön ser ut. Huvudfokuset skiftade dock snabbt till övervakningsdelen då vi fick reda på hur snabb tillväxt systemövervakning undergår. Uppdraget blev att ta fram en övervakningslösning för MSSQL i Data Ductus produktionsmiljö. 3.2 Förundersökning Första steget var att få en inblick i hur Data Ductus idag sköter sin övervakning och bilda oss en uppfattning om hur övervakningen på deras databaser skulle kunna utvidgas och förbättras. Vi började med att bekanta oss med övervakningsverktyget de använder, op5. Vårat första intryck var att det har förbättrats enormt i jämförelse med Nagios Core, antalet funktioner och hanteringen av objekt är de största skillnaderna. 13 Övervakning av databaser i virtuella miljöer Figur 2 visar en illustrering av det så kallade ‘Tactical view’ i op5 där man får en grafisk överblick av de tjänster och enheter som övervakas och Figur 3 visar motsvarande funktion i Nagios. Tactical view går även att redigera precis som man vill ha den och det finns även möjligheter att utveckla egna så kallade widgets för att visa specifik information. Figur 2: Vy som visar övervakade objekt, problem och planerade driftavbrott i op5 Figur 3: Lista av övervakade objekt i Nagios 14 Övervakning av databaser i virtuella miljöer 3.3 Tester av op5 och MSSQL Härnäst valde vi att sätta upp en egen testmiljö, detta gjordes genom att använda VMware Workstation för att skapa två virtuella maskiner. På den första så installerades Windows Server 2012 och Microsoft SQL server 2012 med en instans, och den andra innehöll en virtuell appliance framtagen av op5. När testmiljön var färdigställd så började vi med att undersöka hur den mall för övervakning av MSSQL från op5 såg ut. Vi märkte direkt att denna övervakning inte stödjer instanser och eftersom Data Ductus använder sig av flera instanser på varje MSSQL server så blev detta första problemet som vi stötte på. Den mall som fanns tillgänglig i op5 innehåller som standard de mätvärden som visas nedan, dessa använder agenten NSClient++ i Windows Server och kommunicerar med hjälp av NRPE och WMI. • Avg. Disk Queue Length • Disk Read Average Latency DB-Disk • Disk Write Average Latency DB-disk • PING • Physical disk time • Services - MSSQL När vi bekantat oss med op5’s MSSQL-övervakning inleddes sökandet efter mer specifika mätvärden att övervaka hos en MSSQL server. Vi gjorde en lista över de som enligt oss var intressanta för övervakning, men några av de som fanns tillgängliga var svåra att förstå. Detta är ett utdrag från den lista som till en början satte ihop samt det vi trodde att kommandona(checkarna) gjorde: • connection-time - hur lång tid det tar att logga in • connected-users - antal anslutna användare • io-busy - mäter input / output i procent • transactions - antal transaktioner per sekund • database-online - kollar om databasen är online • database-free - ledigt utrymme i en databas • database-backup-age - tidsenheter sedan senaste backupen • failed-jobs - antalet jobb som inte kunnat slutföras • sql-runtime - tid det tar att exekvera ett specifikt sql statement 15 Övervakning av databaser i virtuella miljöer 3.4 Implementering Med denna information började sedan undersökningen av sätt att implementera dessa i op5. Vi hittade ett plugin till Nagios som heter check mssql health och märkte snart att detta plugin stöds av op5 och finns till förfogande vid installationer av övervakningsmjukvaran. Efter en närmare titt på check mssql health så skrev vi ihop en dokumentation om vad varje check gjorde och denna översågs av databasadministratören på Data Ductus för att bestämma vilka checkar som var relevanta för dem. Listan på alla checkar, en kort beskrivning av vad de utför samt rekommenderade tröskelvärden finns bifogad som en bilaga till denna rapport. Nästa steg var att testa de relevanta checkarna, detta gjordes till en början i kommandoraden på den virtuella maskinen som op5 konfigurerats på för att få en uppfattning om hur de fungerade. För att göra detta användes först ‘find’ funktionen i BASH (vanlig kommandotolk i UNIX-baserade operativsystem) för att lokalisera katalogen som innehåller de plugins som används av op5. find / -name check_mssql_health Det visar sig att de ligger i ‘/opt/plugins’. För att sedan få information om hur check mssql health syntaxen används så kördes plugin-modulen med -h flaggan. /opt/plugins/check_mssql_health -h Nedan visas den output som genererades exekveringen av detta kommando. Det gav oss en översikt om hur check mssql health fungerar och hur vi ska kunna använda det för att utveckla den övervakningslösning som passar våra behov. Copyright (c) 2009 Gerhard Lausser Check various parameters of MSSQL databases Usage: check_mssql_health [-v] [-t <timeout>] --hostname=<db server hostname> --username=<username> --password=<password> [--port <port>] --mode=< mode> check_mssql_health [-v] [-t <timeout>] --server=<db server> --username =<username> --password=<password> --mode=<mode> check_mssql_health [-h | --help] check_mssql_health [-V | --version] 16 Övervakning av databaser i virtuella miljöer Ytterligare tester utfördes där vi inkluderar vår andra virtuella maskin för att undersöka om op5 servern kunde kommunicera med MSSQL-databasen via check mssql health. Vi kunde från syntax-hjälpen lista ut hur kommandot skulle formuleras i CLI. Följande kommando användes för att testa om databasen är online och tar emot anslutningar, vad som programmet ska övervaka specificeras med ’–mode’ flaggan. /opt/plugins/check_mssql_health --hostname 192.168.72.100 --username ’ Administrator’ --password ’Cisco123’ --mode database-online Detta genererade ett felmeddelande som påpekar fel vid anslutningen. Efter undersökning i op5 så visar det sig att istället för att använda flaggan ’–hostname’ så ska ’–server’ användas då MSSQL-servern identifieras med en IP-adress. Detta testades men genererade som visas nedan i Figur 4 ett annat felmeddelande denna gång om autentiseringen. Figur 4: Felmeddelande vid körning av check mssql health Vi undersökte då dokumentationen för MSSQL[5] och det visade sig att man måste redigera rättigheterna på instansen för att kunna göra läsningar och skicka fjärrkommandon till servern. Det användarnamn som tillämpas är det fördefinierade administrationskontot ‘sa’, eller system admin, men det är god praxis att använda en speciellt framtagen användare för övervakning. 17 Övervakning av databaser i virtuella miljöer Nu genererade kommandot en output som påvisar att databasen är online, vi går därför vidare och lägger upp ett övervakat objekt, en så kallad host. För att skapa en host i op5 användes webbgränssnittet. MSSQL-serverns IP-adress samt två stycken variabler, användarnamn och lösenord läggs till. Dessa kommer att användas för att autentisera checkarna mot MSSQL-instansen. Figur 5 visar hur det ser ut i webbgränssnittet när man lägger till en ny host i op5. Figur 5: Webgränssnitt för skapandet av hostar 18 Övervakning av databaser i virtuella miljöer Nästa steg var att lägga till så kallade services för alla specifika övervakningscheckarna. I detta fall valde vi att utgå från listan som presenterats för Data Ductus databasadministratör och lägga till de som enligt honom var relevanta. Figur 6: Kritiska värden på check mssql health Som Figur 6 visar så är några värden kritiska, failed-jobs som påvisar att inga jobb har körts och genererar därför en kritisk varning och checkarna om backup som meddelar att det inte tagits någon backup på databasen ‘tempdb’. Vi redovisar detta för Data Ductus och får i uppgift att hitta lösningar på dessa problem. Vi får även reda på att Data Ductus tillhandahåller flera instanser per MSSQLserver och dessa representeras av olika portar på servern. Det första problemet vi tacklar är att kunna specificera vilken instans som skall övervakas, vår första idé är att använda FreeTDS för att ge varje IP-adress/port-relation ett eget alias. FreeTDS är ett programbibliotek som används för att sköta kommunikationen mellan program och MSSQL-servrar. [11] [SVR01INST01] host port = = 192.168.72.100 1433 [SVR01INST02] host port = = 192.168.72.100 1434 Detta fungerar men vi kom snabbt på att administrationsbördan blir enorm om man ska lägga till varje MSSQL-instans i FreeTDS samt att varje användare måste ha access för att ändra i FreeTDS-filen viket skapar ett stort säkerhetshål. 19 Övervakning av databaser i virtuella miljöer Data Ductus använder även dynamiska portar till några av deras MSSQL-instanser. Porten kan då ändras vid omstart av servern vilket leder till att FreeTDS pekar på fel port och relationen brister. Det finns två sätt att ansluta till en MSSQL-instans: --server <ip-adress> --port <portnummer> --server <ip-adress>\<instansnamn> I det första fallet så är portnumret bundet statiskt till den instans man vill ansluta till, och i det andra så ansluter den till SQL-serverns standardport för databasanslutningar och blir sedan vidarebefordrat till den specificerade instansen. Eftersom Data Ductus använder sig av dynamiska portar så valde vi att använda det andra alternativet och införa instansnamnet som en variabel på servicenivå. För att lösa problemet med databaser som det ej tagits någon backup på så sökte vi igenom dokumentationen av check mssql health av Gerhard Lausser [9] för att hitta ett sätt att ta bort användarspecificerade databaser och motverka att checken genererar ett larm. Databasen ‘tempdb’ används ej i backupsyfte och bör därför exkluderas ur denna check. För att lyckas med detta använde vi oss utav ett regular expression och kunde med hjälp av detta välja att endast övervaka de databaser som användaren inte angett för exkludering. En redigering av syntaxutformningen utfördes för att lyckas exkludera databasen tempdb vi lade även till ett argument($ARG6$) för möjligheten att specificera flera databaser för exkludering. $USER1$/check_mssql_health --server $HOSTADDRESS$$ARG1$ --username ’ $ARG2$’ --password ’$ARG3$’ --mode database-backup-age --warning $ARG4$ --critical $ARG5$ --name=’ˆ(?!(tempdb$ARG6$))’ --regexp 20 Övervakning av databaser i virtuella miljöer När det kommer till tjänsten failed-jobs så började vi med att kolla igenom dokumentationen av syntaxen för att se om det fanns ett sätt att inte generera ett larm då inga jobs hade körts, men på grund av bristande dokumentation så hittades inget. Vi letade sedan igenom Perl-skrivna check mssql health för ledtrådar som skulle kunna hjälpa oss, men efter en stunds letande hittades en bit källkod (Figur 7) som tydde på att det inte fanns några argument för att förhindra att ett larm genereras. Figur 7: Källkod från check mssql health pluginet Vi övervägde att skicka e-post till skaparen, men såg vid mallen för support att man borde inkludera versionen av skriptet. Detta fick oss att vända oss mot Laussers GitHub [12], där de senaste ändringarna av pluginet publicerats. Vi hittade en commit som införde den funktionalitet som eftersträvades, i Figur 8 nedan så visas de ändringar som gjorts. Denna version är dessvärre ej implementerad i op5 ännu. Figur 8: Ändring i check mssql health taget från GitHub För att kunna använda den nya syntaxen på checkarna som skapats i testmiljön med möjlighet att specificera instansnamn var vi tvungna att exportera till nya checkkommandon. De nya checkarna som skapades har samma namn som de gamla, med undantaget att de har ett prefix ’dd’ till exempel ‘dd check mssql health database-online’. 21 Övervakning av databaser i virtuella miljöer Del 4. Resultat Data Ductus nuvarande övervakning är begränsad till operativsystemet som MSSQLservern ligger på, med några enstaka undantag där processer övervakas. För att lägga till nya övervakade servrar så klonas de existerande objekten och alla services som önskas till en ny host. För att exportera arbetet från vår testmiljö används ett så kallat management pack som innehåller specialutformade checkar samt alla kommandon de använder. Detta exporteras från testmiljöns op5 i JSON format, valideras och finslipas sedan för att förbereda det för implementering i skarpa MSSQL-servrar. Management-paketet är bifogat som Bilaga 2 i denna rapport. Resultatet presenteras sedan och testas i Data Ductus produktionsmiljö för att verifiera att en eventuell implementering är möjlig. Management-paketet importeras, de tjänster och syntaxkommandon som ska användas klonas över till en övervakningsmall. Denna mall klonas i sin tur och används för att införa övervakning av nya MSSQL-servrar. Vi skriver en not till op5’s supportavdelning angående uppdatering av check mssql health plugin som sedan Data Ductus vidarebefordrar till op5 via deras kontaktpersoner. Utöver denna rapport så dokumenterades vårt arbete för att underlätta hantering och implementering av övervakningen. Där dokumenterades bland annat vilka variabler och argument som kan användas för att definiera till exempel instanser. Vi tog även fram en lista med de mest intressanta checkarna, vad de gör samt rekommenderade tröskelvärden, denna finns att läsa i Bilaga 1. 22 Övervakning av databaser i virtuella miljöer Graferna från vCenter jämfördes med motsvarande grafer ur op5-miljön. Nedan redovisas skillnaden mellan op5’s check mssql health ’CPU-busy’ (Figur 9) och vCenter servers ’CPU usage in MHz’ (Figur 10). Figur 9: Graf från op5 som beskriver processoranvändning av en SQL server Figur 10: Graf från vCenter som beskriver processoranvändning av en SQL server 23 Övervakning av databaser i virtuella miljöer Del 5. Diskussion & Analys Efter de tester som utförts i resultat-delen av rapporten så står det klart att våran lösning är redo att användas i produktionsmiljöer för en ökad övervakning på företagets MSSQLservrar. Det kvarstår fortfarande finjusteringar som att kalibrera de tröskelvärden då en check ska varna eller gå in i ett kritiskt läge. Detta kalibreras i efterhand då man fått en bättre uppfattning om standardvärden, dessa kan även skilja sig från server till server. I framtiden får vi uppmärksamma om op5 tar vårt råd och uppdaterar kommandot check mssql health i sin övervaknings-lösning. Detta skulle leda till en ökning av funktionalitet samt att problemet med att failed-jobs visas som ett kritiskt värde när inga underhållsjobb används på servern, enkelt skulle gå att lösa med hjälp av –mitigate flaggan i check-kommandot. En möjlighet för generalisering är att skapa en hostgroup för de kommandon som är generella för varje MSSQL server, det vill säga de checkar som inte tar ett instansnamn, då dessa med största sannolikhet är olika från host till host. En hostgroup innehåller en grupp med services som kan appliceras på host-objekt, men som ej går att ändra på hostnivå. Övervakning i op5 fungerar så att efter att man lagt till en service så tar man sällan bort den, och ingen mer konfiguration behöver heller utföras. Nackdelen med användningen av checkar som administreras på hostnivå är att variabler måste ändras på servicenivå för varje servicekommando, vilket innebär mycket administration med hundratals övervakade objekt. När det kommer till hostobjekt i op5 så kan säkerheten ökas genom att använda krypterade användarnamn och lösenord för lagring i variabler, då klartextlösenord (även om de endast är åtkomliga med rättigheter) är ett säkerhetshål. DBD::Sybase modulen i Perl är baserad på FreeTDS som i de tidiga versionerna skickar lösenord i klartext. Det är därför viktigt att editera filen ’freetds.conf’ och ändra versionen från 4.x till 8.0. I nuläget så använder Data Ductus kloning av ett liknande serverobjekt i op5 för att lägga till en ny host. Detta kan leda till överflödig administration på grund av att man måste ändra tröskelvärden för varningar och kritiska lägen specifikt för varje host. Istället skulle man kunna använda variabler som sedan propageras ut till nya hostar. Variabler går i op5 att specificera direkt på servicenivå eller på hostnivå för att sedan hämtas och användas i check-kommandon. För att administrera en stor mängd objekt samtidigt så kan man använda op5’s API (Application Programming Interface) och sedan skapa ett script i till exempel Python. Eftersom Data Ductus har så många objekt i deras miljö så underlättar detta enormt. Vi hade gärna laborerat med implementering av vår lösning via API men dessvärre fanns det inte tid nog för detta. 24 Övervakning av databaser i virtuella miljöer Med våra undersökningar som grund står det klart att från ett NMS-perspektiv är det inte någon skillnad mellan övervakningen av virtuella och fysiska enheter. Båda fungerar på samma sätt och använder samma lösningar för att kommunicera med övervakningsservern. Avslutningsvis kan vi dra slutsatsen att när det gäller övervakning i VMware och op5 är de väldigt annorlunda och har båda två brister och fördelar. op5 ger en mycket bra överblick och kan övervaka flertalet mer tjänster än vad VMware’s egna lösning klarar. Däremot gör VMwares övervakning betydligt bättre grafer och är mer flexibel när det gäller att skapa rapporter av dessa. VMwares lösning för övervakning ligger närmare hostobjekten än vad op5 gör och klarar endast av att övervaka hårdvara. op5 i kontrast till VMwares lösning använder sig av IP-nätverket och mjukvaruagenter för att samla information och detta gör att det blir en överlägsen lösning trots sina bristande grafer. 25 Övervakning av databaser i virtuella miljöer Förkortningar och förklaringar HP - Hewlett-Packard, amerikanskt företag som tillhandahåller tjänster, hård- och mjukvara. IP - Internet Protocol, protokoll för överföring av data över internet. MSSQL - Microsoft Structured Query Language, Microsofts version av frågespråket SQL. NIC - Networking Interface Controller, fysiskt kort för uppkoppling mot ett nätverk. NMS - Network Management Station, övervakningsenhet som hämtar information från nätverkselement RAID - Redundant Array of Independent Disks, backuplösning på hårdvarunivå. RAM - Random Access Memory, fysiskt minne som används för att lagra information under programdrift. SAN - Storage Area Network, nätverkstyp med syftet att tillhandahålla datalagring. SQL - Structured Query Language, frågespråk som används för att hämta information från databaser. SSD - Solid-State Drive, flashbaserat sekundärminne för datalagring. Virtual Appliance, grundlösning redo för implementering som kräver minimal konfiguration. VLAN - Virtual Local Area Network, virtuellt lan som används bland annat för att separera och klassificera olika trafiktyper. VM - Virtual Machine, virtuell miljö som emulerar hårdvara för att spara på resurser. 26 Referenser [1] VMware - ESXi [Online] (Läst 2015-05-18) URL: http://www.vmware.se/products/esxi-and-esx/overview.html [2] VMware - Introduction to VMware vSphere [Online] (Läst 2015-05-18) URL: http://www.vmware.se/pdf/vsphere4/r40/vsp 40 intro vs.pdf [3] VMware - Virtual Networking Concepts [Online] (Läst 2015-05-18) URL: http://www.vmware.com/files/pdf/virtual networking concepts.pdf [4] HP - 3PAR Storage [Online] (Läst 2015-05-19) URL: http://h18006.www1.hp.com/storage/pdfs/4AA3-2542ENW.pdf [5] Microsoft - SQL server documentation [Online] (Läst 2015-05-08) URL: https://msdn.microsoft.com/en-us/library/bb545450.aspx [6] Nagios - NRPE Documentation [Online] (Läst 2015-05-20) URL: http://nagios.sourceforge.net/docs/nrpe/NRPE.pdf [7] JSON - Introducing JSON [Online] (Läst 2015-05-17) URL: http://json.org/ [8] Perl - Perl Documentation [Online] (Läst 2015-05-17) URL: http://perldoc.perl.org/ [9] ConSol Labs - Gerhard Lausser, check mssql health [Online] (Läst 2015-05-12) URL: http://labs.consol.de/lang/en/nagios/check mssql health [10] VMware - SQL Server Best Practices Guide [Online] (Läst 2015-04-27) URL: https://www.vmware.com/files/pdf/solutions/SQL Server on VMwareBest Practices Guide.pdf [11] FreeTDS - FreeTDS Documentation [Online] (Läst 2015-05-19) URL: http://www.freetds.org/docs.html [12] GitHub - Gerhard Lausser, check mssql health [Online] (Läst 2015-05-13) URL: https://github.com/lausser/check mssql health Bilagor Bilaga 1 - ’MSSQL Counters’ Bilaga 2 - ’Management Pack’ Bilaga 1 - MSSQL Counters Hög Hög Hög Hög Hög Hög Hög Hög Hög Hög Hög Hög Hög Hög Hög Hög Hög Hög Hög Hög Hög Hög Medel Medel Medel Medel Medel Medel Medel Medel Medel Medel Låg Låg Låg Check_mssql_health_cpu-busy Check_mssql_health_io-busy Check_mssql_health_latches-waits Check_mssql_health_latches-wait-time Check_mssql_health_locks-waits Check_mssql_health_locks-timeouts Check_mssql_health_locks-deadlocks Check_mssql_health_sql-recompilations Check_mssql_health_mem-pool-data-buffer-hit-ratio Check_mssql_health_page-life-expectancy Check_mssql_health_free-list-stalls Check_mssql_health_database-free_all Check_mssql_health_database-free Check_mssql_health_database-backup-age_all Check_mssql_health_database-backup-age Check_mssql_health_database-logbackup-age_all Check_mssql_health_database-logbackup-age Check_mssql_health_database-logfile-auto-growths_all Check_mssql_health_database-logfile-auto-growths Check_mssql_health_database-datafile-auto-growths_all Check_mssql_health_database-datafile-auto-growths Check_mssql_health_failed-jobs Check_mssql_health_full-scans Check_mssql_health_connected-users Check_mssql_health_transactions_all Check_mssql_health_transactions Check_mssql_health_batch-requests Check_mssql_health_sql-initcompilations Check_mssql_health_database-online_all Check_mssql_health_database-online Check_mssql_health_database-file-auto-growths_all Check_mssql_health_database-file-auto-growths Check_mssql_health_total-server-memory Check_mssql_health_lazy-writes Check_mssql_health_checkpoint-pages Antalet Flushed Dirty Pages per sekund Antalet lazy writes per sekund Primära minnet som är reserverat för SQL-Servern Antalet auto grow events av data/log-filer de senaste n minuterna för en specifik databas Antalet auto grow events av data/log-filer de senaste n minuterna för alla databaser Kollar om specificerad database är online och accepterar anslutningar Kollar om alla databaser är online och accepterar anslutningar Antalet initial compilations per sekund Antalet batch requests per sekund Antalet transaktioner per sekund för specificerad databas Antalet transaktioner per sekund för alla databaser Antalet anslutna användare Antalet full table scans per sekund Antalet jobb som inte kunde avslutas korrekt de senaste n minuterna Antalet auto grow events av datafiler de senaste n minuterna för en specificerad databas Antalet auto grow events av datafiler de senaste n minuterna för alla databaser Antalet auto grow events av logfiler de senaste n minuterna för en specificerad databas Antalet auto grow events av logfiler de senaste n minuterna för alla databaser Tid(i timmar) sedan senaste backup av databasloggen (för en specificerad databas) Tid(i timmar) sedan senaste backup av databasloggen (visar alla databaser) Tid(i timmar) sedan senaste backup av databasen (för en specificerad databas) Tid(i timmar) sedan senaste backup av databasen (visar alla databaser) Ledigt utrymme i databasen (specificera databas) Ledigt utrymme i databaserna (returnerar alla databaser) Antalet lediga list stalls per sekund Genomsnittliga tiden som en sida stannar i minnet Data buffer cache hit ratio Antalet re-compilations per sekund Antalet Deadlocks per sekund Antalet lock-requests per sekund som resulterade i en timeout Antalet lock-requests per sekund som inte kunde utföras Medeltiden ett latch-request måste vänta innan det kan uppfyllas Antalet latch-request per sekund, som inte kunde uppfyllas TID IO är upptagen (%) Tid CPU är upptagen (%) Intresse Kommentar Check 0..n 0..n 0..n 0..n 0..n - - 0..n 0..n 0..n 0..n 0..n 0..n 0..n 0..n [0..n] 0..n [0..n] 0..n [0..n] 0..n [0..n] 0%..100% [0%..100%] 0..n 0..n 0%..100% 0..n 0..n 0..n 0..n 0..n ms 0..n 0%..100% 0%..100% Tröskelnivå - 20 - 1 1 - - 100 100 1000 10000 50 100 1 1 1 1 1 - - - - 5: 5: 4 300: 90: 1 1 1 100 1 10 80 80 Varning - 40 - 5 5 - - 200 200 5000 50000 80 500 5 5 5 5 5 - - - - 2: 2: 10 180: 80: 10 5 5 500 5 50 90 90 Kritisk Låg Låg Låg Låg Låg Låg Låg Låg Låg Låg Låg Låg Låg Check_mssql_health_database-file-auto-shrinks_all Check_mssql_health_database-file-auto-shrinks Check_mssql_health_database-logfile-auto-shrinks_all Check_mssql_health_database-logfile-auto-shrinks Check_mssql_health_database-datafile-auto-shrinks_all Check_mssql_health_database-datafile-auto-shrinks Check_mssql_health_database-file-dbcc-shrinks_all Check_mssql_health_database-file-dbcc-shrinks Check_mssql_health_sql Check_mssql_health_sql-runtime Check_mssql_health_list-databases Check_mssql_health_list-datafiles Check_mssql_health_list-locks [0..n] [0..n] 0..n [0..n] 0..n [0..n] Returnerar en lista med locks Returnerar en lista med alla datafiler Returnerar en lista med alla databaser Körtiden av ett användar-anpassat SQL-anrop i sekunder Resultatet av ett användar-anpassat SQL-anrop - - - - - Antalet auto shrink events av data/log-filer de senaste n minuterna för en specificerad databa 0..n Antalet auto shrink events av data/log-filer de senaste n minuterna för alla databaser Antalet auto shrink events av datafiler de senaste n minuterna för en specificerad databas Antalet auto shrink events av datafiler de senaste n minuterna för alla databaser Antalet auto shrink events av logfiler de senaste n minuterna för en specificerad databas Antalet auto shrink events av logfiler de senaste n minuterna för alla databaser Antalet auto shrink events av databasfiler de senaste n minuterna för en specificerad databa 0..n Antalet auto shrink events av databasfiler de senaste n minuterna för alla databaser - - - - - 1 1 1 1 1 1 1 1 - - - - - 5 5 5 5 5 5 5 5 Bilaga 2 - Management Pack { "management_pack": { "management_pack": { "management_pack_name": "DD Microsoft SQL Template Host", "hostgroup": "DD Microsoft SQL Hosts", "icon": "host_database_mssql.png", "description": "Adds monitoring of several important metrics with the check_mssql_health plugin on a Microsoft SQL Server.", "version": 3, "_DATABASEPWD": "Password for the SQL instance", "_DATABASEUSR": "Username for the SQL instance" }, "hostgroup": { "hostgroup_name": "DD Microsoft SQL Hosts", "alias": "Data Ductus MSSQL Servers", "notes": "Monitoring several metrics of an MSSQL server with check_mssql_health." }, "services": [ { "hostgroup_name": "DD Microsoft SQL Hosts", "service_description": "Batch-requests", "check_command": "dd_check_mssql_health_batch-requests", "check_command_args": "$_SERVICEINSTANCE$!$_HOSTDATABASEUSR$! $_HOSTDATABASEPWD$!100!200", "parallelize_check": true, "obsess": true, "_INSTANCE": "\\\\MSSQLSERVER" }, { "hostgroup_name": "DD Microsoft SQL Hosts", "service_description": "Connected-users", "check_command": "dd_check_mssql_health_connected-users", "check_command_args": "$_SERVICEINSTANCE$!$_HOSTDATABASEUSR$! $_HOSTDATABASEPWD$!50!80", "parallelize_check": true, "obsess": true, "_INSTANCE": "\\\\MSSQLSERVER" }, { "hostgroup_name": "DD Microsoft SQL Hosts", "service_description": "CPU-Busy", "check_command": "check_mssql_health_cpu-busy", "check_command_args": "$_HOSTDATABASEUSR$!$_HOSTDATABASEPWD$!80!90", "parallelize_check": true, "obsess": true }, { "hostgroup_name": "DD Microsoft SQL Hosts", "service_description": "Database-backup-age-all", "check_command": "dd_check_mssql_health_database-backup-age_all", "check_command_args": "$_SERVICEINSTANCE$!$_HOSTDATABASEUSR$! $_HOSTDATABASEPWD$!24!48", "parallelize_check": true, "obsess": true, "_INSTANCE": "\\\\MSSQLSERVER" }, { "hostgroup_name": "DD Microsoft SQL Hosts", "service_description": "Database-datafile-auto-growths-all", "check_command": "dd_check_mssql_health_database-datafile-auto-growths_all ", "check_command_args": "$_SERVICEINSTANCE$!$_HOSTDATABASEUSR$! $_HOSTDATABASEPWD$!1!5", "parallelize_check": true, "obsess": true, "_INSTANCE": "\\\\MSSQLSERVER" }, { "hostgroup_name": "DD Microsoft SQL Hosts", "service_description": "Database-file-auto-growths-all", "check_command": "dd_check_mssql_health_database-file-auto-growths_all", "check_command_args": "$_SERVICEINSTANCE$!$_HOSTDATABASEUSR$! $_HOSTDATABASEPWD$!1!5", "parallelize_check": true, "obsess": true, "_INSTANCE": "\\\\MSSQLSERVER" }, { "hostgroup_name": "DD Microsoft SQL Hosts", "service_description": "Database-free-all", "check_command": "dd_check_mssql_health_database-free_all", "check_command_args": "$_SERVICEINSTANCE$!$_HOSTDATABASEUSR$! $_HOSTDATABASEPWD$!5:!2:", "parallelize_check": true, "obsess": true, "_INSTANCE": "\\\\MSSQLSERVER" }, { "hostgroup_name": "DD Microsoft SQL Hosts", "service_description": "Database-logbackup-age-all", "check_command": "dd_check_mssql_health_database-logbackup-age_all", "check_command_args": "$_SERVICEINSTANCE$!$_HOSTDATABASEUSR$! $_HOSTDATABASEPWD$!1!5", "parallelize_check": true, "obsess": true, "_INSTANCE": "\\\\MSSQLSERVER" }, { "hostgroup_name": "DD Microsoft SQL Hosts", "service_description": "Database-logfile-auto-growths-all", "check_command": "dd_check_mssql_health_database-logfile-auto-growths_all", "check_command_args": "$_SERVICEINSTANCE$!$_HOSTDATABASEUSR$! $_HOSTDATABASEPWD$!1!5", "parallelize_check": true, "obsess": true, "_INSTANCE": "\\\\MSSQLSERVER" }, { "hostgroup_name": "DD Microsoft SQL Hosts", "service_description": "Database-online-all", "check_command": "dd_check_mssql_health_database-online_all", "check_command_args": "$_SERVICEINSTANCE$!$_HOSTDATABASEUSR$! $_HOSTDATABASEPWD$", "parallelize_check": true, "obsess": true, "_INSTANCE": "\\\\MSSQLSERVER" }, { "hostgroup_name": "DD Microsoft SQL Hosts", "service_description": "Failed-jobs", "check_command": "dd_check_mssql_health_failed-jobs", "check_command_args": "$_SERVICEINSTANCE$!$_HOSTDATABASEUSR$! $_HOSTDATABASEPWD$!1!5", "parallelize_check": true, "obsess": true, "_INSTANCE": "\\\\MSSQLSERVER" }, { "hostgroup_name": "DD Microsoft SQL Hosts", "service_description": "Free-list-stalls", "check_command": "dd_check_mssql_health_free-list-stalls", "check_command_args": "$_SERVICEINSTANCE$!$_HOSTDATABASEUSR$! $_HOSTDATABASEPWD$!4!10", "parallelize_check": true, "obsess": true, "_INSTANCE": "\\\\MSSQLSERVER" }, { "hostgroup_name": "DD Microsoft SQL Hosts", "service_description": "Full-scans", "check_command": "dd_check_mssql_health_full-scans", "check_command_args": "$_SERVICEINSTANCE$!$_HOSTDATABASEUSR$! $_HOSTDATABASEPWD$!100!500", "parallelize_check": true, "obsess": true, "_INSTANCE": "\\\\MSSQLSERVER" }, { "hostgroup_name": "DD Microsoft SQL Hosts", "service_description": "IO-Busy", "check_command": "dd_check_mssql_health_io-busy", "check_command_args": "$_SERVICEINSTANCE$!$_HOSTDATABASEUSR$! $_HOSTDATABASEPWD$!80!90", "parallelize_check": true, "obsess": true, "_INSTANCE": "\\\\MSSQLSERVER" }, { "hostgroup_name": "DD Microsoft SQL Hosts", "service_description": "Latches-wait-time", "check_command": "dd_check_mssql_health_latches-wait-time", "check_command_args": "$_SERVICEINSTANCE$!$_HOSTDATABASEUSR$! $_HOSTDATABASEPWD$!1!5", "parallelize_check": true, "obsess": true, "_INSTANCE": "\\\\MSSQLSERVER" }, { "hostgroup_name": "DD Microsoft SQL Hosts", "service_description": "Latches-waits", "check_command": "dd_check_mssql_health_latches-waits", "check_command_args": "$_SERVICEINSTANCE$!$_HOSTDATABASEUSR$! $_HOSTDATABASEPWD$!10!50", "parallelize_check": true, "obsess": true, "_INSTANCE": "\\\\MSSQLSERVER" }, { "hostgroup_name": "DD Microsoft SQL Hosts", "service_description": "Locks-deadlocks", "check_command": "dd_check_mssql_health_locks-deadlocks", "check_command_args": "$_SERVICEINSTANCE$!$_HOSTDATABASEUSR$! $_HOSTDATABASEPWD$!1!5", "parallelize_check": true, "obsess": true, "_INSTANCE": "\\\\MSSQLSERVER" }, { "hostgroup_name": "DD Microsoft SQL Hosts", "service_description": "Locks-timeouts", "check_command": "dd_check_mssql_health_locks-timeouts", "check_command_args": "$_SERVICEINSTANCE$!$_HOSTDATABASEUSR$! $_HOSTDATABASEPWD$!1!5", "parallelize_check": true, "obsess": true, "_INSTANCE": "\\\\MSSQLSERVER" }, { "hostgroup_name": "DD Microsoft SQL Hosts", "service_description": "Locks-waits", "check_command": "dd_check_mssql_health_locks-waits", "check_command_args": "$_SERVICEINSTANCE$!$_HOSTDATABASEUSR$! $_HOSTDATABASEPWD$!100!500", "parallelize_check": true, "obsess": true, "_INSTANCE": "\\\\MSSQLSERVER" }, { "hostgroup_name": "DD Microsoft SQL Hosts", "service_description": "Mem-pool-data-buffer-hit-ratio", "check_command": "dd_check_mssql_health_mem-pool-data-buffer-hit-ratio", "check_command_args": "$_SERVICEINSTANCE$!$_HOSTDATABASEUSR$! $_HOSTDATABASEPWD$!90:!80:", "parallelize_check": true, "obsess": true, "_INSTANCE": "\\\\MSSQLSERVER" }, { "hostgroup_name": "DD Microsoft SQL Hosts", "service_description": "Page-life-expectancy", "check_command": "dd_check_mssql_health_page-life-expectancy", "check_command_args": "$_SERVICEINSTANCE$!$_HOSTDATABASEUSR$! $_HOSTDATABASEPWD$!300:!180:", "parallelize_check": true, "obsess": true, "_INSTANCE": "\\\\MSSQLSERVER" }, { "hostgroup_name": "DD Microsoft SQL Hosts", "service_description": "SQL-initcompilations", "check_command": "dd_check_mssql_health_sql-initcompilations", "check_command_args": "$_SERVICEINSTANCE$!$_HOSTDATABASEUSR$! $_HOSTDATABASEPWD$!100!200", "parallelize_check": true, "obsess": true, "_INSTANCE": "\\\\MSSQLSERVER" }, { "hostgroup_name": "DD Microsoft SQL Hosts", "service_description": "SQL-Recompilations", "check_command": "dd_check_mssql_health_sql-recompilations", "check_command_args": "$_SERVICEINSTANCE$!$_HOSTDATABASEUSR$! $_HOSTDATABASEPWD$!1!5", "parallelize_check": true, "obsess": true, "_INSTANCE": "\\\\MSSQLSERVER" }, { "hostgroup_name": "DD Microsoft SQL Hosts", "service_description": "Transactions-all", "check_command": "dd_check_mssql_health_transactions_all", "check_command_args": "$_SERVICEINSTANCE$!$_HOSTDATABASEUSR$! $_HOSTDATABASEPWD$!10000!50000", "parallelize_check": true, "obsess": true, "_INSTANCE": "\\\\MSSQLSERVER" } ], "commands": [ { "command_name": "dd_check_mssql_health_batch-requests", "command_line": "$USER1$/check_mssql_health --server $HOSTADDRESS$$ARG1$ -username ’$ARG2$’ --password ’$ARG3$’ --mode batch-requests --warning $ARG4$ --critical $ARG5$" }, { "command_name": "dd_check_mssql_health_connected-users", "command_line": "$USER1$/check_mssql_health --server $HOSTADDRESS$$ARG1$ -username ’$ARG2$’ --password ’$ARG3$’ --mode connected-users --warning $ARG4$ --critical $ARG5$" }, { "command_name": "check_mssql_health_cpu-busy", "command_line": "$USER1$/check_mssql_health --server $HOSTADDRESS$ -username ’$ARG1$’ --password ’$ARG2$’ --mode cpu-busy --warning $ARG3$ --critical $ARG4$" }, { "command_name": "dd_check_mssql_health_database-backup-age_all", "command_line": "$USER1$/check_mssql_health --server $HOSTADDRESS$$ARG1$ -username ’$ARG2$’ --password ’$ARG3$’ --mode database-backup-age -- warning $ARG4$ --critical $ARG5$ --name=’ˆ(?!(tempdb$ARG6$))’ --regexp" }, { "command_name": "dd__database-datafile-auto-growths_all", "command_line": "$USER1$/check_mssql_health --server $HOSTADDRESS$$ARG1$ -username ’$ARG2$’ --password ’$ARG3$’ --mode database-datafile-autogrowths --warning $ARG4$ --critical $ARG5$" }, { "command_name": "dd_check_mssql_health_database-file-auto-growths_all", "command_line": "$USER1$/check_mssql_health --server $HOSTADDRESS$$ARG1$ -username ’$ARG2$’ --password ’$ARG3$’ --mode database-file-auto-growths --warning $ARG4$ --critical $ARG5$" }, { "command_name": "dd_check_mssql_health_database-free_all", "command_line": "$USER1$/check_mssql_health --server $HOSTADDRESS$$ARG1$ -username ’$ARG2$’ --password ’$ARG3$’ --mode database-free --warning $ARG4$ --critical $ARG5$" }, { "command_name": "dd_check_mssql_health_database-logbackup-age_all", "command_line": "$USER1$/check_mssql_health --server $HOSTADDRESS$$ARG1$ -username ’$ARG2$’ --password ’$ARG3$’ --mode database-logbackup-age -warning $ARG4$ --critical $ARG5$ --name=’ˆ(?!(tempdb$ARG6$))’ --regexp" }, { "command_name": "dd_check_mssql_health_database-logfile-auto-growths_all", "command_line": "$USER1$/check_mssql_health --server $HOSTADDRESS$$ARG1$ -username ’$ARG2$’ --password ’$ARG3$’ --mode database-logfile-autogrowths --warning $ARG4$ --critical $ARG5$" }, { "command_name": "dd_check_mssql_health_database-online_all", "command_line": "$USER1$/check_mssql_health --server $HOSTADDRESS$$ARG1$ -username ’$ARG2$’ --password ’$ARG3$’ --mode database-online --warning $ARG4$ --critical $ARG5$" }, { "command_name": "dd_check_mssql_health_failed-jobs", "command_line": "$USER1$/check_mssql_health --server $HOSTADDRESS$$ARG1$ -username ’$ARG2$’ --password ’$ARG3$’ --mode failed-jobs --warning $ARG4$ --critical $ARG5$" }, { "command_name": "dd_check_mssql_health_free-list-stalls", "command_line": "$USER1$/check_mssql_health --server $HOSTADDRESS$$ARG1$ -username ’$ARG2$’ --password ’$ARG3$’ --mode free-list-stalls --warning $ARG4$ --critical $ARG5$" }, { "command_name": "dd_check_mssql_health_full-scans", "command_line": "$USER1$/check_mssql_health --server $HOSTADDRESS$$ARG1$ -username ’$ARG2$’ --password ’$ARG3$’ --mode full-scans --warning $ARG4$ --critical $ARG5$" }, { "command_name": "dd_check_mssql_health_io-busy", "command_line": "$USER1$/check_mssql_health --server $HOSTADDRESS$$ARG1$ -username ’$ARG2$’ --password ’$ARG3$’ --mode io-busy --warning $ARG4$ -critical $ARG5$" }, { "command_name": "dd_check_mssql_health_latches-wait-time", "command_line": "$USER1$/check_mssql_health --server $HOSTADDRESS$$ARG1$ -username ’$ARG2$’ --password ’$ARG3$’ --mode latches-wait-time --warning $ARG4$ --critical $ARG5$" }, { "command_name": "dd_check_mssql_health_latches-waits", "command_line": "$USER1$/check_mssql_health --server $HOSTADDRESS$$ARG1$ -username ’$ARG2$’ --password ’$ARG3$’ --mode latches-waits --warning $ARG4$ --critical $ARG5$" }, { "command_name": "dd_check_mssql_health_locks-deadlocks", "command_line": "$USER1$/check_mssql_health --server $HOSTADDRESS$$ARG1$ -username ’$ARG2$’ --password ’$ARG3$’ --mode locks-deadlocks --warning $ARG4$ --critical $ARG5$" }, { "command_name": "dd_check_mssql_health_locks-timeouts", "command_line": "$USER1$/check_mssql_health --server $HOSTADDRESS$$ARG1$ -username ’$ARG2$’ --password ’$ARG3$’ --mode locks-timeouts --warning $ARG4$ --critical $ARG5$" }, { "command_name": "dd_check_mssql_health_locks-waits", "command_line": "$USER1$/check_mssql_health --server $HOSTADDRESS$$ARG1$ -username ’$ARG2$’ --password ’$ARG3$’ --mode locks-waits --warning $ARG4$ --critical $ARG5$" }, { "command_name": "dd_check_mssql_health_mem-pool-data-buffer-hit-ratio", "command_line": "$USER1$/check_mssql_health --server $HOSTADDRESS$$ARG1$ -username ’$ARG2$’ --password ’$ARG3$’ --mode mem-pool-data-buffer-hitratio --warning $ARG4$ --critical $ARG5$" }, { "command_name": "dd_check_mssql_health_page-life-expectancy", "command_line": "$USER1$/check_mssql_health --server $HOSTADDRESS$$ARG1$ -username ’$ARG2$’ --password ’$ARG3$’ --mode page-life-expectancy -warning $ARG4$ --critical $ARG5$" }, { "command_name": "dd_check_mssql_health_sql-initcompilations", "command_line": "$USER1$/check_mssql_health --server $HOSTADDRESS$$ARG1$ -username ’$ARG2$’ --password ’$ARG3$’ --mode sql-initcompilations -warning $ARG4$ --critical $ARG5$" }, { "command_name": "dd_check_mssql_health_sql-recompilations", "command_line": "$USER1$/check_mssql_health --server $HOSTADDRESS$$ARG1$ -username ’$ARG2$’ --password ’$ARG3$’ --mode sql-recompilations -warning $ARG4$ --critical $ARG5$" }, { "command_name": "dd_check_mssql_health_transactions_all", "command_line": "$USER1$/check_mssql_health --server $HOSTADDRESS$$ARG1$ -username ’$ARG2$’ --password ’$ARG3$’ --mode transactions --warning $ARG4$ --critical $ARG5$" } ] }, "changes": [ { "version": 3, "description": "This is a management pack" } ], "vendor": "" }