Del 2: Rapportering på Log Analytics-data | Bygge spørringen og hente ut data med Azure Data Factory

| 9 min lesing

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

  1. Hvis du allerede har Azure-ressurser i et annet Log Analytics-workspace som du vil rapportere på, kan du hoppe over denne delen.
  2. I dette eksemplet er det distribuerte Log Analytics-workspacet tomt.
  3. 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.
  4. Gå til bladet Diagnostic settings under overskriften Monitoring i ressursbladet.
  5. Klikk på Add diagnostic setting.
  6. Konfigurer hvilke datapunkter som skal sendes til Log Analytics-workspacet, i kolonnen Category details.
  7. Angi det tomme Log Analytics-workspacet du nettopp opprettet som mål i kolonnen Destination details.
  8. Gi diagnostic setting et unikt navn, og klikk deretter på Save.

Opprette Kusto-spørringen for å hente ut data

  1. Jeg skal analysere Application Insights-data, så neste steg er å bygge en Kusto-spørring, slik jeg har gjort i et annet workspace nedenfor.
  2. Kopier spørringen til en tekstfil og lagre den på datamaskinen. Du trenger den senere.
  3. For å gjøre det enklere senere lagrer vi spørringen som en function.
  4. Klikk på Save og deretter Save as function.
  5. Gi spørringen et unikt, men beskrivende navn, og kontroller at den har fått tildelt en kategori.
  6. 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

  1. Åpne den distribuerte Azure Data Factory-en, og klikk på verktøykasseikonet i venstre panel. Det har Manage som verktøytips.
  2. 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.
  3. Gå til bladet Linked services, hvis du ikke allerede er der.
  4. 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.
  5. Klikk på Publish All og Publish.

Opprette datasets

  1. Klikk på blyantikonet i venstre panel. Det har Author som verktøytips.
  2. 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.
  3. Klikk på Publish All og Publish.

Opprette pipelinjen

  1. Opprett pipelinen ved å klikke på plussikonet og velge Pipeline.
  2. Gi pipelinen et navn med prefikset PL_, for eksempel PL_Log_Analytics_Data.
  3. 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.
  4. 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.
  5. 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.
  6. 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.
  7. Nå som all autentisering er på plass, kan vi endelig kopiere data fra Log Analytics.
  8. Først må vi deklarere en pipeline-variabel på fanen Variables i det nedre panelet i pipeline-redigeringen.
  9. Klikk på New.
  10. Kall den nye variabelen filename, og kontroller at den er av typen string uten standardverdi.
  11. 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.
  12. 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:
      {
          "query": ""
      }
      
    • 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:
        @variables('filename')
        
      • 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. Skjermbilde av en Azure Data Factory-pipeline med web-aktiviteter som får tilgang til Azure Key Vault API, oppretter et bearer token, angir en variabel for å bestemme filnavnet og deretter kopierer data fra Log Analytics med en copy activity
  13. Klikk på Debug for å teste pipelinen.
  14. 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. Skjermbilde av en Azure Data Factory-pipeline med web-aktiviteter som får tilgang til Azure Key Vault API, oppretter et bearer token, angir filename-variabelen og til slutt kopierer data fra Log Analytics med en copy activity. Kjøringen var vellykket.
  15. 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.