Oppdatering | 23.06.2021 – Dataset-instruksjonane er oppdaterte til å bruke parametrar. Oppdatering | 02.01.2022 – Pipelinjen er oppdatert til å bruke ein variabel for å bestemme filnamnet på output-fila.
I dette neste innlegget i serien byggjer vi ein spurnad i Log Analytics og hentar deretter ut dataa med Azure Data Factory.
Viss du gjekk glipp av det, finn du ei lenkje til del 1 her.
Hente inn data i eit nyleg oppretta Log Analytics-workspace
- Viss du alt har Azure-ressursar i eit anna Log Analytics-workspace som du vil rapportere på, kan du hoppe over denne delen.
- I dette eksempelet er det distribuerte Log Analytics-workspacet tomt.
- For å hente inn data går du til ressursen eller ressursane som skal sende data til Log Analytics. Ver merksam på at dette ikkje fungerer med klassiske ressursar.
- Gå til bladet Diagnostic settings under overskrifta Monitoring i ressursbladet.
- Klikk på Add diagnostic setting.
- Konfigurer kva datapunkt som skal sendast til Log Analytics-workspacet, i kolonnen Category details.
- Angi det tomme Log Analytics-workspacet du nettopp oppretta som mål i kolonnen Destination details.
- Gi diagnostic setting eit unikt namn, og klikk deretter på Save.
Opprette Kusto-spurnaden for å hente ut data
- Eg skal analysere Application Insights-data, så neste steg er å byggje ei Kusto-spørring, slik eg har gjort i eit anna workspace nedanfor.
- Kopier spørringa til ei tekstfil og lagre ho på datamaskina. Du treng ho seinare.

- For å gjere det enklare seinare lagrar vi spørringa som ein function.
- Klikk på Save og deretter Save as function.

- Gi spørringa eit unikt, men beskrivande namn, og kontroller at ho har fått tildelt ein kategori.

- Når spørringa/function-en er på plass, kan vi gå vidare til neste steg: å hente ut dataa i Azure Data Factory.
Azure Data Factory-miljøet
Eg samanliknar oppsettet av Azure Data Factory med ein lauk på grunn av dei mange laga.
- Det første laget består av integration runtimes, som gjer det mogleg å kople til linked service-typar som Azure Blob Storage, Snowflake, Salesforce og Azure Cosmos DB.
- Det andre laget består av sjølve linked services. Desse kan vere anten datatilkoplingar eller compute-tilkoplingar. Linked service-typane over er døme på datatilkoplingar. Compute-tilkoplingar kan vere linked service-typar som Azure Functions eller Azure Databricks. I pipelines kan vi bruke compute-kraft og utføre datatransformasjonar.
- Det tredje laget består av datasets som er kopla til linked services vi har definert i factory-en. Døme er SQL-tabellar, Blob Storage-mapper og REST API-ar.
- Det siste, fjerde laget består av pipelines. Det er her datatransformasjonar, compute-aktivitetar og data flows blir utførte.
Opprette linked services
- Opne den distribuerte Azure Data Factory-en, og klikk på verktøykasseikonet i venstre panel. Det har Manage som verktøytips.

- Viss du treng fleire Integration runtimes, til dømes ein self-hosted integration runtime for privat tilkopling til Azure-ressursar eller on-premises-datasets, kan du konfigurere dei i dette bladet.
- Gå til bladet Linked services, viss du ikkje alt er der.
- Opprett alle nødvendige linked services ved å klikke på Create linked service.
- Azure Data Lake Storage Gen 2
- Finn tenesta i lista over tilgjengelege tenester, og klikk på Continue.
- Gi linked service eit namn med prefikset LS_, slik at det er tydeleg at ho er ei linked service, til dømes LS_Datalake.
- Vel ein ikkje-standard integration runtime viss du bruker ein; elles lèt du standardvalet stå.
- Vel managed identity som autentiseringsmetode.
- Vel Azure Subscription som data lake-en ligg i.
- Vel rett storage account.
- Bruk Test connection for å kontrollere tilkoplinga.
- Viss alt er i orden, klikkar du på Create.
- Azure Key Vault
- Finn tenesta i lista over tilgjengelege tenester, og klikk på Continue.
- Gi linked service eit namn med prefikset LS_, til dømes LS_Key_Vault.
- Vel Azure Subscription som key vault ligg i.
- Vel rett key vault.
- Bruk Test connection for å kontrollere tilkoplinga.
- Viss alt er i orden, klikkar du på Create.
- Log Analytics REST API
- Finn REST-tenesta i lista over tilgjengelege tenester, og klikk på Continue.
- Gi linked service eit namn med prefikset LS_, til dømes LS_REST_Log_Analytics.
- Vel ein ikkje-standard integration runtime viss du bruker ein; elles lèt du standardvalet stå.
- Angi base-URL-en som https://api.loganalytics.io/v1/workspaces//. Du finn han i Azure Portal, i bladet for Log Analytics-workspacet.
- Angi autentiseringstypen til Anonymous.
- Klikk på Publish All og Publish.

Opprette datasets
- Klikk på blyantikonet i venstre panel. Det har Author som verktøytips.

- Opprett alle nødvendige datasets ved å klikke på plussikonet og velje Dataset.
- REST Dataset
- Finn REST i lista, og klikk på han.
- Klikk på Continue.
- Gi det nye datasettet eit namn med prefikset DS_, til dømes DS_Log_Analytics.
- Vel den same Linked Service som du oppretta i førre del.
- Skriv query i feltet Relative URL.
- Data lake JSON Sink
- Kontroller at du har klargjort ein container og/eller mappestruktur som dataa kan kopierast til.
- Finn Azure Data Lake Storage Gen 2 i lista, og klikk på han.
- Klikk på Continue.
- Vel JSON, og klikk på Continue. REST API-et støttar ikkje andre format for output.
- Vel den same Linked Service som du oppretta i førre del.
- Gi det nye datasettet eit namn med prefikset DS_, til dømes DS_Datalake_JSON.
- Klikk på Ok.
- Gå til fana Parameters. Parametrar gjer at datasettet kan nyttast av fleire pipelines, slik at du slepp datasets som er spesifikke for kvart einskilt brukstilfelle i factory-en. Det blir fort vanskeleg å administrere.
- Klikk på New.
- Opprett nye parametrar for
container, filename og folderPath. - Gå tilbake til fana Connection.
- For å angi file path klikkar du i tekstboksen Filesystem.
- Klikk på lenkja Add dynamic content.
- Vel
container frå parameterlista. Han skal visast som @dataset().container i den store tekstboksen. Klikk deretter på Finish. - Gjenta dette for tekstboksen Directory, og vel parameteren
folderPath. - Gjenta dette for tekstboksen File, og vel parameteren
filename. 
- Klikk på Publish All og Publish.

Opprette pipelinen
Opprett pipelinen ved å klikke på plussikonet og velje Pipeline.
Gi pipelinen eit namn med prefikset PL_, til dømes PL_Log_Analytics_Data.
Deretter må vi autentisere førespurnadene mot Log Analytics REST API ved hjelp av service principal-en som blei oppretta i del 1.
- Dette gjer du ved å hente client ID og secret for service principal-en frå Azure Key Vault, slik at du kan generere eit bearer token som er gyldig i ein bestemt tidsperiode.
I bladet Activities, under overskrifta General, klikkar du på aktiviteten Web og dreg han inn i workspace-området til høgre.
- Gi aktiviteten namnet Get Client ID from Key Vault.
- Kryss av for Secure output på fana General, slik at ingen legitimasjonsopplysningar blir eksponerte i loggane.
- Skriv inn følgjande i feltet URL på fana Settings:
- https://.vault.azure.net/secrets/
- Kontroller at suffikset ?api-version=7.1 er lagt til URL-en. Det var rett versjon då dette blei skrive. Sjå dokumentasjonen.
- Han skal sjå slik ut: https://.vault.azure.net/secrets//?api-version=7.1
- Angi Method til GET.
- Utvid Advanced.
- Angi autentiseringsmetoden til MSI.
- Angi verdien for Resource til https://vault.azure.net.
I bladet Activities, under overskrifta General, klikkar du på aktiviteten Web og dreg han inn i workspace-området.
- Gi aktiviteten namnet Get Client Secret from Key Vault.
- Gjenta stega i punkt 4.
- Klikk på Publish All og Publish.

I bladet Activities, under overskrifta General, klikkar du på aktiviteten Web og dreg han inn i workspace-området.
- Gi aktiviteten namnet Get Azure AD Bearer Token.
- Kryss av for Secure output på fana General, slik at ingen legitimasjonsopplysningar blir eksponerte i loggane.
- Gjer det same for Secure input.
- Skriv inn følgjande i feltet URL på fana Settings:
- Angi Method til POST.
- Legg til ein ny Header:
- Name: Content-Type
- Value: application/x-www-form-urlencoded
- For Body klikkar du i tekstboksen og deretter på Add Dynamic Content.
- Skriv inn følgjande, og klikk på Finish:
@concat('grant_type=client_credentials &client_id=',activity('Get Client ID from Key Vault').output.value,'&resource=https://api.loganalytics.io/&client_secret=',activity('Get Client Secret from Key Vault').output.value)
- For begge dei førre key vault-aktivitetane klikkar du på den grøne boksen og dreg han til aktiviteten Get Azure AD Bearer Token.
- Klikk på Publish All og Publish.

No som all autentisering er på plass, kan vi endeleg kopiere data frå Log Analytics.
Først må vi deklarere ein pipeline-variabel på fana Variables i det nedre panelet i pipeline-redigeringa.
Klikk på New.
Kall den nye variabelen filename, og kontroller at han er av typen string utan standardverdi.
I bladet Activities, under overskrifta General, klikkar du på aktiviteten Set variable og dreg han inn i workspace-området.
Gi aktiviteten namnet Set filename.
Angi den nyleg oppretta variabelen filename som namn på fana Variables.
Klikk i verdifeltet, klikk på Add Dynamic Content, og set inn følgjande:
@concat('appLogs',utcnow('yyyy_MM_dd_HH_mm_ss'),'.json')
Klikk på den grøne boksen i aktiviteten Get Azure AD Bearer Token, og dra han til aktiviteten Set filename.
I bladet Activities, under overskrifta Move & transform, klikkar du på aktiviteten Copy data og dreg han inn i workspace-området.
- Gi aktiviteten namnet Copy Raw Data.
- Kryss av for Secure input på fana General, slik at ingen legitimasjonsopplysningar blir eksponerte i loggane.
- Vel det tidlegare oppretta datasettet DS_Log_Analytics som Source dataset på fana Source.
- Angi Request Method til POST.
- Angi følgjande format for Request Body:
- Mellom "" limer du inn namnet på Kusto-function-en du lagra tidlegare. Kontroller at eventuelle " i spørringa blir erstatta med ’, fordi Data Factory ikkje handterer " som inngår i request bodies på ein god måte. Spørringa må òg komprimerast til éi linje. Dette kan du gjere med eit verktøy som Visual Studio Code.
- Du kan òg lagre Log Analytics-spørringa som ein workspace function i Log Analytics-workspacet og deretter kalle function-en som spørring. Dette blir rekna som anbefalt praksis fordi du kan administrere spørringane sentralt og bruke escape characters som " i spørringa.
- Legg til ein Additional Header for innhaldtypen:
- Name: Content-Type
- Value: application/json
- Legg til ein Additional Header for autorisering:
- Name: Authorization
- Value: Klikk i feltet, klikk på Add Dynamic Content, og set inn følgjande:
@concat('Bearer ',activity('Get Azure AD Bearer Token').output.access_token)
- Vel det tidlegare oppretta datasettet DS_Datalake_JSON som Sink dataset på fana Sink.
- Angi følgjande verdiar for kvar parameter:
- filename: Klikk på Add Dynamic Content, og angi følgjande:
- container: loganalytics
- folderPath: raw-data
- Angi Copy behavior til Flatten Hierarchy.
- Angi File pattern til Set of Objects.
- Klikk på den grøne boksen i aktiviteten Set filename, og dra han til aktiviteten Copy Raw Data.
- Klikk på Publish All og Publish.

Klikk på Debug for å teste pipelinen.
Viss alt er i orden, skal du sjå grøne hakar. Viss ikkje, finn du Output for aktiviteten som feila; han bør gi ei indikasjon på årsaka.
- Hovudproblemet eg møtte første gongen, var at request method i Copy data-oppgåva var sett til GET i staden for POST.

Output-JSON-en skal visast i Data Lake-containeren.
- Viss du lastar ned fila, vil du sjå at ho har eit svært lite praktisk format: alt er komprimert til éi linje.
- Dette blir løyst i neste innlegg, der Databricks pakkar ut fila og konverterer ho til eit tabellformat.
Konklusjon
I del to er desse aktivitetane fullførte:
Oppretta Log Analytics Kusto Query
Oppretta Data Factory-ressursar
- Linked Services
- Datasets
- Pipelines
Kopierte data frå Log Analytics til Azure Data Lake Storage Gen 2
Neste er del 3, der vi pakkar ut dataa med Azure Databricks til eit delvis attkjenneleg og rapporterbart format.