Blog pre slovenských vývojárov

Zdroj čerstvých informácií pre vývojárov priamo z kuchyne

Mikrodáta do Azure (5.časť) – Ako analyzovať “rýchle” dáta pomocou Azure Stream Analytics (krok za krokom)

V predošlej časti sme vytvorili aplikáciu (event processor), ktorá upravovala a archivovala správy prijaté IoT Hub-om. Dáta tečú do IoT Hub-u veľkou rýchlosťou a je viac ako pravdepodobné, že obsahujú informácie, na ktoré by bolo dobré zareagovať okamžite. V celom seriáli článkov sme pracovali s telemetrickými dátami generovanými prihlásením do monitorovanej webovej aplikácie. Okrem času prihlásenia, prihlasovacieho mena obsahovali mikrodáta aj geografickú oblasť v momente prihlásenia. Jasnou anomáliou, ktorú by sme chceli rýchlo zachytiť, je prihlásenie toho istého používateľa v priebehu niekoľkých sekúnd z geografických oblastí, ktoré spolu nesusedia. To by bol jasný signál na zablokovanie takéhoto používateľa, pretože odchytená anomália naznačuje odcudzenie jeho prístupu. Na analýzy dát v reálnom čase sa používa služba Azure Stream Analytics, ktorá dokáže v reálnom čase analyzovať dáta prijaté IoT Hub-om.
V nasledujúcich krokoch vytvoríte službu Azure Stream Analytics, ktorú napojíte na IoT Hub, do ktorého priebežne pritekajú dáta. Napíšete „query“ na detekovanie neželanej aktivity a odchytené anomálie uložíte do úložiska Azure Storage.
Poznámka: Úložisko je použité pre zjednodušenie príkladu. Do architektúry umožňujúcej rýchlejšiu reakciu na odchytenú anomáliu sú vhodnejšími výstupmi ďalší IoT Hub, Service Bus alebo cyklicky kontrolovaná databáza.

1. Prihláste sa na Azure portál na https://portal.azure.com  a prejdite do nastavení IoT Hub-u vytvoreného v 1ej časti nášho seriálu.
2. Prejdite do menu Settings -> Shared Access Policies a vyberte politiku „iothubowner“.
3. Do clipboardu nakopírujte prvý kľúč zo zoznamu „Shared Access Keys“ označený ako Primary Key.
Poznámka: Služba Azure Stream Analytics je v našom príklade klientom IoT Hub-u, takže pri konfigurácii jej napojenia na IoT Hub budeme potrebovať prístupový kľúč získaný v tomto kroku.
4. Vytvorte na Azure portále cez menu „New -> Internet of Things -> Stream Analytics Job“ analytickú službu s nasledujúcimi parametrami:

Job name: mojastreamanalytika
ResourceGroup : SkupinaIotProjekt (čiže rovnaká Resource Group ako všetko, čo sme vytvárali v predošlých častiach nášho seriálu)
Location: North Europe

Potvrďte tlačidlo „Create“ a počkajte, kým sa služba vytvorí.

asaobr1

5. Azure Stream Analytics je, zjednodušene napísané, prietoková služba s tromi komponentami. Vstupom dát, logikou analýzy dát a výstupom analyzovaných dát. Nakonfigurujte najskôr vstup dát. Vyberte v vytvorenej analytickej službe panel „Inputs“ a v potom otvorenom paneli v hornom menu vyberte „Add“.

asaobr2
6. Vyplňte parametre nového dátového vstupu:

Input alias: prihlasenia ( tento alias pre vstup budete priamo používať v analytických „query“)
Source Type: Data stream
Source: IotHub
IoT hub: mojIotHub (čiže názov IoT Hub-u, ktorý ste vytvorili v 1ej časti seriálu)
Shared Access Policy name: iothubowner
Shared Access Policy Key : sem nakopírujte kľúč k IoTHub-u získaný v kroku 3.
Consumer group : pre jednoduchosť ponechajte toto pole prázdne, čím bude použitá prednastavená skupina „$default“.
Event Serialization Format: JSON

Potvrďte tlačidlo „Create“.

asaobr3
7. Overte si korektné vytvorenie vstupu v hlavnom panele „mojastreamanalytika“, kde by počet vstupov mal byť 1.
8. Vyberte menu „Outputs“ a v potom otvorenom paneli v hornom menu vyberte „Add“.
9. Vyplňte parametre nového dátového výstupu:

Output alias: vystupanalyzy ( tento alias pre výstup budete priamo používať v analytických „query“)
Sink: Blob Storage
Storage Account: iotarchiv (čiže môžete použiť rovnaký účet úložiska, ktorý ste vytvorili v 4ej časti seriálu v kroku 3.)
Storage account key: sem nakopírujte kľúč Key 1 z zoznamu Access Keys pre úložisko iotarchiv
Container: analyza
Event serialization format: JSON

Nakoniec potvrďte tlačidlo „Create“.

asaobr4
10. Vráťte sa do hlavného panela analytickej služby „mojastreamanalytika“. Máte vytvorený jeden vstup a jeden výstup, a teda môžete vytvoriť logiku analytiky. Potvrďte blok “Query”.
11. V zobrazenom panele pre zadávanie štruktúrovaných prikazov zadajte najskôr príkaz na vybratie všetkých dát z vstupu na výstup:

SELECT
deviceId, idPouzivatela, idOblasti,System.Timestamp as Time
INTO
vystupanalyzy
FROM
prihlasenia

12. Uložte „query“ cez tlačidlo tlačidlo „Save“ a prejdite do hlavného panela analytickej služby „mojastreamanalytika“.
13. V menu potvrďte „Start“ pre naštartovanie úlohy („job-u“) analytickej služby a následne vyberte okamžité naštartovanie úlohy cez voľbu “Now” a tlačidlo “Start”.
Poznámka: V čase písania tohto článku bola možnosť testovať „query“ cez menu „Test“ bez nutnosti naštartovať „job“ a čakať na jeho spustenie implementovaná iba na pôvodnom Azure portále „manage.windowsazure.com“. Menu „Test“ umožňuje ladiť „query“ nad lokálne uloženou vzorkou dát z IoT Hub-u. Preto nie je pri testoch potrebné štartovať celú úlohu Stream Analytics.
14. Po naštartovaní “job-u” spustite aplikáciu “simulacia_zdroja”, ktorú ste vytvorili v 3.časti seriálu o IoT Hub-e, aby sa do IoT Hub-u vkladali simulované dáta.
15. Prejdite na portále do „storage“ účtu „iotarchiv“ blob kontajnera „analyza“. V priebehu pár sekúnd sa tu vytvorí nový súbor obsahujúci výstup dát z Azure Stream Analytics. Keďže naša „query“ v Stream Analytics „prepúšťa“ všetky dáta z vstupu (IoT Hub) na výstup (Blob Storage), súbor v kontajneri analýza obsahuje všetky dáta zo zdroja dát. Súbor si môžete „stiahnuť“ na lokálny počítač tlačidlom „Download“ a môžete ho použiť ako vzorku napr. pre ladenie „query“ vyvolané tlačidlom „Test“.
16. Vráťte sa na Azure portále do služby „mojastreamanalytika“ a tlačidlom „Stop“ zastavte bežiacu analytickú úlohu.
Poznámka: „Query“ v bežiacej úlohe nemôžete jednoducho zameniť. Úlohu treba najskôr zastaviť. Možno otravné, ale logické. Ak by bolo možné editovať „query“ bežiacej úlohy, výsledkom by boli nekonzistentné dáta na výstupe, často s rôznymi výstupnými JSON elementami.
17. Zosumarizujme si, čo celá naša telemetria zberá. Používatelia sa hlásia na weby. Pri každom prihlásení zaznamenáme cez IoT Hub prihlasovacie meno, geografickú oblasť, kde sa používateľ práve nachádza a čas prihlásenia. Nie je možné, aby sa ten istý používateľ v priebehu niekoľkých sekúnd prihlásil z oblasti Východ a Západ, pretože tieto oblasti nesusedia. Ak by taký stav nastal, naznačovalo by to, že pod jedným prihlasovacím menom sa prihlásili dve rôzne osoby a mali by sme proaktívne zareagovať (napr. zablokovaním prihlasovacieho mena). Akú „query“ by sme mali vložiť do Azure Stream Analytics, aby sme takúto anomáliu odchytili? Musíme v nej zvláštny stav dohľadávať nad dvomi posunutými časovými dimenziami previazanými identifikátorom používateľa.
Využime možnosti Azure Stream Analytics Query Language . Zmeňte query na takúto hodnotu:

SELECT
p1.deviceId, p1.idPouzivatela, p1.idOblasti as Oblast1, p2.idOblasti as Oblast2, p1.EventEnqueuedUtcTime as cas1, p2.EventEnqueuedUtcTime as cas2
INTO
vystupanalyzy
FROM
prihlasenia p1 TIMESTAMP BY EventEnqueuedUtcTime
join prihlasenia p2 TIMESTAMP BY EventEnqueuedUtcTime
on p1.idPouzivatela = p2.idPouzivatela AND DATEDIFF(Second, p1, p2) BETWEEN 1 AND 60
where (p1.idoblasti= 'Zapad' and p2.idoblasti = 'Vychod') or (p1.idoblasti = 'Vychod' and p2.idoblasti = 'Zapad')

Dešifrujme si jej obsah. Vytvorili sme si dva streamy dát, p1 a p2 založené na čase, kedy boli mikrodáta o prihlásení vložené do fronty IoT Hub-u („EventEnqueuedUtcTime“). Streamy „joinujeme“ na základ „id“ používateľa a porovnávame iba dáta časovo od seba vzdialené maximálne 60 sekúnd. Anomália nastane vtedy, ak sa v tomto časovom okne nájdu pre jedného používateľa záznamy z oblasti „Vychod“ aj „Zapad“, pretože ich od seba oddeľuje oblasť „Stred“.

18. Uložte „query“ cez tlačidlo tlačidlo „Save“ a prejdite do hlavného panela analytickej služby „mojastreamanalytika“.
19. V menu potvrďte „Start“ pre naštartovanie úlohy („job-u“) analytickej služby a následne vyberte okamžité naštartovanie úlohy cez voľbu “Now” a tlačidlo “Start”.
20. Aplikáciu “simulacia_zdroja”, ktorá do IoT Hub-u vkladá simulované dáta stále beží.
21. Prejdite na portále do „storage“ účtu „iotarchiv“ , do blob kontajnera „analyza“. Po pár minútach otvorte nový súbor obsahujúci výstup dát z Azure Stream Analytics. Bude obsahovať iba záznamy naznačujúce odcudzenie prihlasovacieho mena.

asaobr5

 

V tejto časti ste vytvorili analytickú službu, ktorá odchytáva informáciu o potencialnom útoku na prihlasovacie prístupy používateľov webu. V ďalšej časti budeme dáta analyzované Azure Stream Analytics vizualizovať.

Miro

P.S. Ak ste členmi BizSpark programu pre začínajúce vývojárske “startupy” (firmy alebo živnostníkov) , alebo máte kúpené Visual Studio s MSDN, môžete si bezplatne aktivovať Azure benefit v týchto programoch (Microsoft Azure pre členov BizSpark , Microsoft  Azure pre MSDN predplatiteľov). Pri registrácii Azure benefitu v MSDN alebo BizSparku nie je požadované overenie platobnou kartou. Ak nie ste členmi týchto programov, môžete si Microsoft Azure bezplatne vyskúšať na dobu 30 dní cez Microsoft Azure Trial.