Del 2: Rapportering på Log Analytics-data | Byggje spurnaden og hente ut data med Azure Data Factory

| 9 min lesing

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

  1. Viss du alt har Azure-ressursar i eit anna Log Analytics-workspace som du vil rapportere på, kan du hoppe over denne delen.
  2. I dette eksempelet er det distribuerte Log Analytics-workspacet tomt.
  3. 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.
  4. Gå til bladet Diagnostic settings under overskrifta Monitoring i ressursbladet.
  5. Klikk på Add diagnostic setting.
  6. Konfigurer kva datapunkt som skal sendast til Log Analytics-workspacet, i kolonnen Category details.
  7. Angi det tomme Log Analytics-workspacet du nettopp oppretta som mål i kolonnen Destination details.
  8. Gi diagnostic setting eit unikt namn, og klikk deretter på Save.

Opprette Kusto-spurnaden for å hente ut data

  1. Eg skal analysere Application Insights-data, så neste steg er å byggje ei Kusto-spørring, slik eg har gjort i eit anna workspace nedanfor.
  2. Kopier spørringa til ei tekstfil og lagre ho på datamaskina. Du treng ho seinare.
  3. For å gjere det enklare seinare lagrar vi spørringa som ein function.
  4. Klikk på Save og deretter Save as function.
  5. Gi spørringa eit unikt, men beskrivande namn, og kontroller at ho har fått tildelt ein kategori.
  6. 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

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

Opprette pipelinen

  1. Opprett pipelinen ved å klikke på plussikonet og velje Pipeline.

  2. Gi pipelinen eit namn med prefikset PL_, til dømes PL_Log_Analytics_Data.

  3. 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.
  4. 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.
  5. 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.
  6. 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.
  7. No som all autentisering er på plass, kan vi endeleg kopiere data frå Log Analytics.

  8. Først må vi deklarere ein pipeline-variabel på fana Variables i det nedre panelet i pipeline-redigeringa.

  9. Klikk på New.

  10. Kall den nye variabelen filename, og kontroller at han er av typen string utan standardverdi.

  11. 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.

  12. 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:
      {
          "query": ""
      }
      
    • 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:
        @variables('filename')
        
      • 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. Skjermbilete av ein Azure Data Factory-pipeline med web-aktivitetar som får tilgang til Azure Key Vault API, opprettar eit bearer token, set ein variabel for å fastsetje filnamnet og deretter kopierer data frå Log Analytics med ein copy activity
  13. Klikk på Debug for å teste pipelinen.

  14. 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. Skjermbilete av ein Azure Data Factory-pipeline med web-aktivitetar som får tilgang til Azure Key Vault API, opprettar eit bearer token, set filename-variabelen og til slutt kopierer data frå Log Analytics med ein copy activity. Køyringa var vellukka.
  15. 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.