Oppdatering | 23.06.2021 – Dataset-instruksjonene er oppdatert til å bruke parametere. Oppdatering | 02.01.2022 – Pipelinjen er oppdatert til å bruke en variabel for å bestemme filnavnet på output-filen.
I dette neste innlegget i serien bygger vi en spørring i Log Analytics og henter deretter ut dataene med Azure Data Factory.
Hvis du gikk glipp av det, finner du en lenke til del 1 her.
Innhente data i et nylig opprettet Log Analytics-workspace
- Hvis du allerede har Azure-ressurser i et annet Log Analytics-workspace som du vil rapportere på, kan du hoppe over denne delen.
- I dette eksemplet er det distribuerte Log Analytics-workspacet tomt.
- For å hente inn data går du til ressursen eller ressursene som skal sende data til Log Analytics. Merk at dette ikke fungerer med klassiske ressurser.
- Gå til bladet Diagnostic settings under overskriften Monitoring i ressursbladet.
- Klikk på Add diagnostic setting.
- Konfigurer hvilke datapunkter som skal sendes til Log Analytics-workspacet, i kolonnen Category details.
- Angi det tomme Log Analytics-workspacet du nettopp opprettet som mål i kolonnen Destination details.
- Gi diagnostic setting et unikt navn, og klikk deretter på Save.
Opprette Kusto-spørringen for å hente ut data
- Jeg skal analysere Application Insights-data, så neste steg er å bygge en Kusto-spørring, slik jeg har gjort i et annet workspace nedenfor.
- Kopier spørringen til en tekstfil og lagre den på datamaskinen. Du trenger den senere.

- For å gjøre det enklere senere lagrer vi spørringen som en function.
- Klikk på Save og deretter Save as function.

- Gi spørringen et unikt, men beskrivende navn, og kontroller at den har fått tildelt en kategori.

- Når spørringen/function er på plass, kan vi gå videre til neste steg: å hente ut dataene i Azure Data Factory.
Azure Data Factory-miljøet
Jeg sammenligner oppsettet av Azure Data Factory med en løk på grunn av de mange lagene.
- Det første laget består av integration runtimes, som muliggjør tilkobling til linked service-typer som Azure Blob Storage, Snowflake, Salesforce og Azure Cosmos DB.
- Det andre laget består av selve linked services. Disse kan være enten datatilkoblinger eller compute-tilkoblinger. Linked service-typene over er eksempler på datatilkoblinger. Compute-tilkoblinger kan være linked service-typer som Azure Functions eller Azure Databricks. I pipelines kan vi bruke compute-kraft og utføre datatransformasjoner.
- Det tredje laget består av datasets som er koblet til linked services vi har definert i factory-en. Eksempler er SQL-tabeller, Blob Storage-mapper og REST API-er.
- Det siste, fjerde laget består av pipelines. Det er her datatransformasjoner, compute-aktiviteter og data flows utføres.
Opprette linked services
- Åpne den distribuerte Azure Data Factory-en, og klikk på verktøykasseikonet i venstre panel. Det har Manage som verktøytips.

- Hvis du trenger flere Integration runtimes, for eksempel en self-hosted integration runtime for privat tilkobling til Azure-ressurser eller on-premises-datasets, kan du konfigurere dem i dette bladet.
- Gå til bladet Linked services, hvis du ikke allerede er der.
- Opprett alle nødvendige linked services ved å klikke på Create linked service.
- Azure Data Lake Storage Gen 2
- Finn tjenesten i listen over tilgjengelige tjenester, og klikk på Continue.
- Gi linked service et navn med prefikset LS_, slik at det er tydelig at den er en linked service, for eksempel LS_Datalake.
- Velg en ikke-standard integration runtime hvis du bruker en; ellers lar du standardvalget stå.
- Velg managed identity som autentiseringsmetode.
- Velg Azure Subscription som data lake-en befinner seg i.
- Velg riktig storage account.
- Bruk Test connection for å kontrollere tilkoblingen.
- Hvis alt er i orden, klikker du på Create.
- Azure Key Vault
- Finn tjenesten i listen over tilgjengelige tjenester, og klikk på Continue.
- Gi linked service et navn med prefikset LS_, for eksempel LS_Key_Vault.
- Velg Azure Subscription som key vault befinner seg i.
- Velg riktig key vault.
- Bruk Test connection for å kontrollere tilkoblingen.
- Hvis alt er i orden, klikker du på Create.
- Log Analytics REST API
- Finn REST-tjenesten i listen over tilgjengelige tjenester, og klikk på Continue.
- Gi linked service et navn med prefikset LS_, for eksempel LS_REST_Log_Analytics.
- Velg en ikke-standard integration runtime hvis du bruker en; ellers lar du standardvalget stå.
- Angi base-URL-en som https://api.loganalytics.io/v1/workspaces//. Du finner den 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 velge Dataset.
- REST Dataset
- Finn REST i listen, og klikk på den.
- Klikk på Continue.
- Gi det nye datasettet et navn med prefikset DS_, for eksempel DS_Log_Analytics.
- Velg den samme Linked Service som du opprettet i forrige del.
- Skriv query i feltet Relative URL.
- Data lake JSON Sink
- Kontroller at du har klargjort en container og/eller mappestruktur som dataene kan kopieres til.
- Finn Azure Data Lake Storage Gen 2 i listen, og klikk på den.
- Klikk på Continue.
- Velg JSON, og klikk på Continue. REST API-et støtter ikke andre formater for output.
- Velg den samme Linked Service som du opprettet i forrige del.
- Gi det nye datasettet et navn med prefikset DS_, for eksempel DS_Datalake_JSON.
- Klikk på Ok.
- Gå til fanen Parameters. Parametere gjør at datasettet kan brukes av flere pipelines, slik at du unngår datasets som er spesifikke for hvert enkelt brukstilfelle i factory-en. Det blir fort vanskelig å administrere.
- Klikk på New.
- Opprett nye parametere for
container, filename og folderPath. - Gå tilbake til fanen Connection.
- For å angi file path klikker du i tekstboksen Filesystem.
- Klikk på koblingen Add dynamic content.
- Velg
container fra parameterlisten. Den skal vises som @dataset().container i den store tekstboksen. Klikk deretter på Finish. - Gjenta dette for tekstboksen Directory, og velg parameteren
folderPath. - Gjenta dette for tekstboksen File, og velg parameteren
filename. 
- Klikk på Publish All og Publish.

Opprette pipelinjen
- Opprett pipelinen ved å klikke på plussikonet og velge Pipeline.
- Gi pipelinen et navn med prefikset PL_, for eksempel PL_Log_Analytics_Data.
- Deretter må vi autentisere forespørslene mot Log Analytics REST API ved hjelp av service principal-en som ble opprettet i del 1.
- Dette gjør du ved å hente client ID og secret for service principal-en fra Azure Key Vault, slik at du kan generere et bearer token som er gyldig i en bestemt tidsperiode.
- I bladet Activities, under overskriften General, klikker du på aktiviteten Web og drar den inn i workspace-området til høyre.
- Gi aktiviteten navnet Get Client ID from Key Vault.
- Merk av for Secure output på fanen General, slik at ingen legitimasjonsopplysninger eksponeres i loggene.
- Skriv inn følgende i feltet URL på fanen Settings:
- https://.vault.azure.net/secrets/
- Kontroller at suffikset ?api-version=7.1 er lagt til URL-en. Det var riktig versjon da dette ble skrevet. Se dokumentasjonen.
- Den skal se 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 overskriften General, klikker du på aktiviteten Web og drar den inn i workspace-området.
- Gi aktiviteten navnet Get Client Secret from Key Vault.
- Gjenta stegene i punkt 4.
- Klikk på Publish All og Publish.

- I bladet Activities, under overskriften General, klikker du på aktiviteten Web og drar den inn i workspace-området.
- Gi aktiviteten navnet Get Azure AD Bearer Token.
- Merk av for Secure output på fanen General, slik at ingen legitimasjonsopplysninger eksponeres i loggene.
- Gjør det samme for Secure input.
- Skriv inn følgende i feltet URL på fanen Settings:
- Angi Method til POST.
- Legg til en ny Header:
- Name: Content-Type
- Value: application/x-www-form-urlencoded
- For Body klikker du i tekstboksen og deretter på Add Dynamic Content.
- Skriv inn følgende, 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 de foregående key vault-aktivitetene klikker du på den grønne boksen og drar den til aktiviteten Get Azure AD Bearer Token.
- Klikk på Publish All og Publish.

- Nå som all autentisering er på plass, kan vi endelig kopiere data fra Log Analytics.
- Først må vi deklarere en pipeline-variabel på fanen Variables i det nedre panelet i pipeline-redigeringen.
- Klikk på New.
- Kall den nye variabelen filename, og kontroller at den er av typen string uten standardverdi.
- I bladet Activities, under overskriften General, klikker du på aktiviteten Set variable og drar den inn i workspace-området.
- Gi aktiviteten navnet Set filename.
- Angi den nylig opprettede variabelen filename som navn på fanen Variables.
- Klikk i verdifeltet, klikk på Add Dynamic Content, og sett inn følgende:
@concat('appLogs',utcnow('yyyy_MM_dd_HH_mm_ss'),'.json')
- Klikk på den grønne boksen i aktiviteten Get Azure AD Bearer Token, og dra den til aktiviteten Set filename.
- I bladet Activities, under overskriften Move & transform, klikker du på aktiviteten Copy data og drar den inn i workspace-området.
- Gi aktiviteten navnet Copy Raw Data.
- Merk av for Secure input på fanen General, slik at ingen legitimasjonsopplysninger eksponeres i loggene.
- Velg det tidligere opprettede datasettet DS_Log_Analytics som Source dataset på fanen Source.
- Angi Request Method til POST.
- Angi følgende format for Request Body:
- Mellom "" limer du inn navnet på Kusto-function-en du lagret tidligere. Kontroller at eventuelle " i spørringen erstattes med ’, fordi Data Factory ikke håndterer " som inngår i request bodies på en god måte. Spørringen må også komprimeres til én linje. Dette kan du gjøre med et verktøy som Visual Studio Code.
- Du kan også lagre Log Analytics-spørringen som en workspace function i Log Analytics-workspacet og deretter kalle function-en som spørring. Dette regnes som anbefalt praksis fordi du kan administrere spørringene sentralt og bruke escape characters som " i spørringen.
- Legg til en Additional Header for innholdstypen:
- Name: Content-Type
- Value: application/json
- Legg til en Additional Header for autorisering:
- Name: Authorization
- Value: Klikk i feltet, klikk på Add Dynamic Content, og sett inn følgende:
@concat('Bearer ',activity('Get Azure AD Bearer Token').output.access_token)
- Velg det tidligere opprettede datasettet DS_Datalake_JSON som Sink dataset på fanen Sink.
- Angi følgende verdier for hver parameter:
- filename: Klikk på Add Dynamic Content, og angi følgende:
- container: loganalytics
- folderPath: raw-data
- Angi Copy behavior til Flatten Hierarchy.
- Angi File pattern til Set of Objects.
- Klikk på den grønne boksen i aktiviteten Set filename, og dra den til aktiviteten Copy Raw Data.
- Klikk på Publish All og Publish.

- Klikk på Debug for å teste pipelinen.
- Hvis alt er i orden, skal du se grønne haker. Hvis ikke, finner du Output for aktiviteten som feilet; den bør gi en indikasjon på årsaken.
- Hovedproblemet jeg møtte første gang, var at request method i Copy data-oppgaven var angitt til GET i stedet for POST.

- Output-JSON-en skal vises i Data Lake-containeren.
- Hvis du laster ned filen, vil du se at den har et svært lite praktisk format: alt er komprimert til én linje.
- Dette løses i neste innlegg, der Databricks pakker ut filen og konverterer den til et tabellformat.
Konklusjon
I del to er følgende aktiviteter fullført:
Opprettet Log Analytics Kusto Query
Opprettet Data Factory-ressurser
- Linked Services
- Datasets
- Pipelines
Kopiert data fra Log Analytics til Azure Data Lake Storage Gen 2
Neste er del 3, der vi pakker ut dataene med Azure Databricks til et delvis gjenkjennelig og rapporterbart format.