Analýza logů je Big Data problém. Podívejme se jak můžete provádět velmi komplexní analýzu nad logy v Microsoft Operations Management Suite v reálném čase.
Hledání v logu OMS disponuje velmi silným query jazykem, který v tomto článku budeme postupně odhalovat.
Pro začátek si zobrazíme všechno - za jediný den tu máme nějakých 123 milionů hlášek a měření. V levé části vidíte časové rozmezí a můžete si ho jednoduše myší přizpůsobit. Také v levé straně máte návrhy na filtrování - ale k tomu se dostaneme později.
*
Aniž bychom ještě znali nějaký query jazyk můžeme jednoduše udělat fulltextové vyhledávání.
OMS dokáže filtrovat podle jednotlivých položek. Zkuste v pravé části kliknout na jednu z doporučených filtračních hodnot, třeba Event.
Co se stalo? OMS pro vás vytvořilo vaše první jednoduché query, které říká, že chcete zobrazit jen informace typu Event, což jsou hlášky z Windows OS (podobně můžete získat třeba Syslog z Linux apod.).
V levé části sjeďme trochu níž a podívejme se na všechny doporučované možnosti dalšího filtrování. Co třeba zobrazit jen hlášky z konkrétního stroje? Z EX01.contoso.com jich tam je jak vidno 72 000. Klikněme na to a query se nám upraví.
Takhle to pak vypadá.
A co když nás zajímají jen Error a Warning hlášky?
Toto bude výsledek.
Tak vidíte, začínáte na to přicházet. Pojďme teď do query zasáhnout napřímo. Co třeba dotaz rozšířit na všechny počítače, které obsahují v názvu slovo contoso?
Type=Event Computer=*contoso* (EventLevelName=warning OR EventLevelName=error)
Pokud jste příznivci komplexnějšího pattern matchingu s Regular Expressions (já tedy jsem), tak i ty můžete v OMS použít. Pojďme například zahrnout hlášky jen z počítačů, jejich jméno začíná na "i" a dále někde obsahují řetězec "web0" následovaný buď 0 nebo 1 nebo 2 nebo 3.
Type=Event Computer=RegEx("i@web0[0123]@") (EventLevelName=warning OR EventLevelName=error)
Vraťme jsme k hláškám typu Event, tedy těm z Windows OS. Máme jich za den 596 000 - jak se v tom vyznat?
Můžeme si zobrazení přepnout do tabulky, ale to nám tolik nepomůže.
Velmi zajímavou funkcí je hledání podobných hlášek. Ne stejných, ale podobných a to je disciplína z kategorie Machine learning. Klikněte na Minify a uvidíte co se stane.
Vidíme hlášky seskupené podle podobnosti, takže se dá poměrně rychle zjistit co se v mém prostředí nejčastěji odehrává. Pokud najedete myší nad hvězdičku zjistíte, kolik různých hodnot se v tomto místě objevuje.
Můžete na ni i kliknout.
Vnímavost funkce Minify k podobnostem můžete změnit.
Dnes se nebudeme pouštět do něčeho příliš složitého, ale základní funkce bych rád prošel. Tak například pojďme na začátek spočítat všechny události. Query jazyk používá symbol pipe a tím můžete předávat výstup jedné funkce do další a takto je řetězit. Například první funkce bude vracet všechny Syslog zprávy a v druhé budeme počítat počet výskytů za jednotlivé monitorované stroje.
Type=Syslog | measure count() by Computer
Co kdybychom výsledný sloupeček pojmenovali nějak lépe?
Type=Syslog | measure count() as Hlasky by Computer
Výsledky máme seřazené podle počtu hlášek, ale co když potřebujeme abecedně podle názvu stroje?
Type=Syslog | measure count() as Hlasky by Computer | sort Computer
Nebo jen tři počítače s nejvyšším počtem hlášek?
Type=Syslog | measure count() as Hlasky by Computer | top 3
Na začátku můžeme samozřejmě také filtrovat - to už umíme.
Type=Syslog Computer=acme* | measure count() as Hlasky by Computer
O co kdybychom nestáli jen o celkový součet třeba za den (interval jsme nastavili v levé části obrazovky), ale sledovali vývoj počtu třeba v intervalech deseti minut? Snadné - sledujte.
Type=Syslog Computer=acme* | measure count() as Hlasky by Computer interval 10MINUTES
Agregačních funkcí je daleko víc a to využijeme hned v další kapitolce.
OMS toho sbírá daleko víc, než jen hlášky. Jedním z podkladů jsou výkonnostní ukazatele. Zkuste tohle:
Každé měření je údaj v OMS. Ani nemusíme tvořit složitější query (ale můžeme, to si ukážeme) - takhle si třeba vypíšeme údaje o CPU a necháme si GUI to hezky vyobrazit.
OMS sbírá informace o síťovém provozu ve vašich VM. Zkusme si to.
Například se tedy můžeme podívat kolik počítače jejichž jméno začíná řetězcem acme posílají dat v jednotlivých cílových TCP portech.
Type=WireData Direction=Outbound Computer=acme* | measure sum(SentBytes) by RemotePortNumber
Nebo vám přijde zajímavější vidět vývoj posílání na jednotlivé porty v čase?
Type=WireData Direction=Outbound Computer=acme* | measure sum(SentBytes) by RemotePortNumber interval 5MINUTES
Pokud do OMS zařadíte váš Windows DNS server, můžeme se koukat na DNS dotazy a dělat nad tím docela chytré analýzy. Pro dnešek se jen podíváme kam nejčastěji naše systémy žádají překlad.
Type=DnsEvents SubType=LookupQuery | measure count() by Name
Co třeba zjistit na jakých počítačích je Microsoft Silverlight a v jaké verzi? Využijeme funkce OMS, které shromažďuje změny v konfiguracích systémů - v jejich aplikacích, službách, daemonech i souborech. Abychom u každého neměli dlouhý seznam atributů, použil jsem funkci select, která do výstupu vypíše jen ta políčka, která chci.
Type=ConfigurationChange ConfigChangeType=Software SoftwareName="Microsoft Silverlight" | select Computer,Current
A co najít situace, kdy vám chybí důležitá aktualizace?
Type=Update UpdateState=Needed Optional=false (Classification="Security Updates" OR Classification="Critical Updates")
Dá se toho dělat ještě daleko víc, OMS toho dokáže opravdu hodně. Ale pro dnešek už je toho hodně, vrátíme se k tomu příště.
Je zřejmé, že pokud se jazyk naučíte, dá se v reálném čase velmi efektivně vyhledávat s využitím Big Data engine, který je pod kapotou. Dotazy mají ale ještě několik dalších použití.
Můžete si do GUI přidat vlastní budíky a grafy. Co myslíte, že je plní daty? Přesně tak - query. Odladíte si dotaz, pak si řeknete jak chcete údaje vizualizovat a vytvoříte z toho nový budík na dashboard.
Query je také použito pro vytváření automatických skupin počítačů. OMS vám umožní mít stroje seskupené třeba podle údajů v Active Directory, ale navíc si dokážete vytvořit vlastní skupin jejíž členy definujete jako výsledek query.
Pokud chcete dostávat alerty a hlášky tak máte jednu velmi mocnou možnost - query. OMS bude pravidelně query provádět a pokud vrátí nějaký výsledek, udělá z toho alert. Nejste omezeni nějakým GUI na to co může všechno být alert, použijete velmi mocný query jazyk. Ve výsledku si pak můžete třeba nechat poslat email, zavolat webhook do nějaké jiné aplikace nebo využít třeba integraci se ServiceNow a automaticky založit servisní ticket.
Dnes jsme prohledávání logů v OMS naťukli, ale ještě se k tomu vrátíme. Dá se s tím totiž dělat ještě mnohem víc.