Del 1: Rapportering på Log Analytics-data | Setje opp det første miljøet

| 6 min lesing

Nyleg har eg utvikla ei løysing for å hente ut data frå eit Log Analytics-workspace med Azure Data Factory. Då dette blei skrive, hadde Azure Data Factory ingen innebygd connector for Log Analytics-workspaces, så Log Analytics REST API må brukast i staden. Dataa blir deretter lasta inn i ein Azure SQL-database for rapportering.

Sjølv om det er mogleg å eksportere M Queries direkte frå Log Analytics til Power BI, dekkjer dette ikkje scenario med langtidsoppbevaring. Eg trudde først dette var ei enkel oppgåve. Det var feil. I dei neste fire innlegga går eg gjennom stega for å setje opp det første miljøet, hente ut dataa og til slutt behandle og laste dei inn i SQL-databasen.

Kva trengst for å kome i gang?

  • Azure Subscription – Subscription Owner/Contributor og Azure AD-løyve til å distribuere Service Principals
  • PowerShell Core med Az Module installert
    • Installer det dersom det ikkje allereie finst på maskina di.
    • I dette innlegget bruker eg Windows Terminal i PowerShell Core-modus på Windows 10, men den vanlege PowerShell Core-kommandolinja er nok.
      • Merk: Eg bruker ikkje Windows PowerShell, for å vere OS-agnostisk, slik at du kan følgje dei same stega på Mac, Linux osv.

For å gjere dette raskare har eg laga eit par ARM-malar og tilhøyrande PowerShell-skript på GitHub. PowerShell-koden som blir brukt i dei neste stega, er dokumentert der. Det er verdt å klone mappa til den lokale PC-en.

I seinare innlegg må vi distribuere fleire ressursar, men dei blir distribuerte når dei trengst.

Distribuere dei første ressursane

PowerShell-referanse i GitHub-repositoriet for denne delen: Deploy Initial Resources.ps1 Deploy Initial Resources opprettar desse ressursane:

  • Resource Group
  • Azure KeyVault
  • Log Analytics workspace
  • ADLS Gen 2 Data Lake Account
  • Azure Data Factory

(Viss du ikkje har eit Azure Subscription, opprettar du eitt før du held fram.)

  1. Opne ein PowerShell Core-terminal i anten Windows Terminal eller PowerShell Core som administrator, eller med utvida løyve.
  2. Installer Az PowerShell-modulen. Dersom han allereie er installert, kontrollerer du om det finst oppdateringar. Trykk A og Enter for å stole på repositoriet medan dei nyaste modulane blir lasta ned og installerte. Dette kan ta nokre minutt.
    ##Køyr dersom Az PowerShell-modulen ikkje allereie er installert
    Install-Module Az -AllowClobber
    
    ##Køyr dersom Az PowerShell-modulen allereie er installert, men oppdateringskontroll er nødvendig
    Update-Module Az
    
  3. Importer Az PowerShell-modulen i gjeldande sesjon.
    Import-Module Az
    
  4. Autentiser mot Azure som vist nedanfor. Dersom tenant eller subscription er ein annan enn standarden som er knytt til Azure AD-identiteten din, kan dette oppgivast på same kodelinje med brytarane -Tenant eller -Subscription. For å finne Tenant GUID opnar du Azure Portal, kontrollerer at du er innlogga på riktig tenant og går til Azure Active Directory. Directory GUID bør visast på heimesida. For å finne Subscription GUID byter du til riktig tenant i Azure Portal, skriv Subscriptions i søkjefeltet og trykkjer Enter. GUID-ane for alle subscriptions du har tilgang til i denne tenanten, blir viste.
    Connect-AzAccount
    ``` [![](/images/blog/2021/02/Screenshot-2021-02-25-224732-1.webp)](/images/blog/2021/02/Screenshot-2021-02-25-224732-1.webp)
    
  5. I PowerShell-terminalen finn du short code for Azure-regionen nærast deg ved å skrive kommandoen nedanfor.
    Get-AzLocation
    
  6. Set variablane som skal brukast gjennom heile distribusjonsprosessen.
    ##Set parametrar som skal brukast av ARM-malen
    
    $resourceGroupName = '<tilfeldigStreng>'
    $deploymentLocation = '<shortcode frå førre steg>' ##Må vere ein location-eigenskap frå outputen av førre kommando
    $resourceRandomName = '<tilfeldigStreng>' #Må vere globalt unik og på maksimalt seksten teikn
    $tenantId = (Get-AzTenant).Id
    $currentUser = (Get-AzContext).Account.Id
    $principalObjectId = (Get-AzADUser -UserPrincipalName $currentUser).Id
    
  7. Først må ei resource group distribuerast for å kunne distribuere ressursane som krevst i dette scenarioet. Resource group får namnet frå verdien som er tildelt variabelen $resourceGroupName.
    ##Distribuer resource group
    New-AzSubscriptionDeployment -Location $deploymentLocation -TemplateFile 'arm-template-resource-group.json' -resourceGroupName $resourceGroupName -deploymentLocation $deploymentlocation
    
  8. No som ho er distribuert, distribuerer du ressursane i denne gruppa.
    ##Distribuer ressursane
    New-AzResourceGroupDeployment -ResourceGroupName $resourceGroupName -TemplateFile 'arm-template-resources.json' -deploymentLocation $deploymentLocation -resourceRandomName $resourceRandomName -tenantId $tenantId -principalObjectId $principalObjectId
    
  9. Verify the newly deployed resources in the Portal

Opprette Azure AD Service Principal

The code reference for this next section is in the GitHub repo as ‘Deploy Service Principal and KeyVault Secrets.ps1’

For å autentisere vellukka mot Log Analytics REST API bør du opprette ein Azure AD Service Principal med avgrensa løyve, slik at kommunikasjon via Azure Data Factory blir mogleg.

  1. Set først nokre variablar som skal brukast i dei følgjande kommandoane.
    ##Set variablane våre
    $vaultName = $resourceRandomName+,"-kv"
    $servicePrincipalName = 'LogAnalyticsReaderService'
    $servicePrincipalScope = '/subscriptions/<subscriptionid>/resourceGroups/<resourcegroupname>/providers/Microsoft.OperationalInsights/workspaces/<workspacename>'
    
  2. Opprett Azure AD Service Principal.
    ##Opprett Azure AD Service Principal
    $createServicePrincipal = New-AzADServicePrincipal -DisplayName $servicePrincipalName -Role 'Log Analytics Reader' -Scope $servicePrincipalScope
    
  3. Lagre til slutt client ID og client secret i Key Vault.
    ##Lagre service principal client ID i Key Vault
    Set-AzKeyVaultSecret -VaultName $vaultName -Name 'log-analytics-reader-service-client-id' -SecretValue (ConvertTo-SecureString -AsPlainText ($createServicePrincipal.ApplicationId))
    ##Lagre service principal secret i Key Vault
    Set-AzKeyVaultSecret -VaultName $vaultName -Name 'log-analytics-reader-service-secret' -SecretValue $createServicePrincipal.Secret
    

Gje Azure Data Factory løyve til å lese secrets frå Azure Key Vault

  1. Gå til den nyleg distribuerte Key Vault-en i portalen og opne Access Policies. Der står det at Azure role-based access control er aktivert. Denne funksjonen er framleis i preview og passar derfor ikkje for produksjonsscenario. Vel Vault access policy og klikk Save.
  2. Klikk Add Access Policy.
  3. Angi omfanget av løyva for policyen. I dette tilfellet treng du berre secret-løyva Get og List.
  4. Til slutt skal denne access policy-en avgrensast til ein bestemt principal, her den distribuerte Azure Data Factory. Søk etter data factory-en og klikk Select. Kontroller at data factory-en, og ikkje resource group-en, er vald, slik at løyve blir gitt på lågast mogleg nivå.
  5. Når data factory-en er vald, klikkar du Add og lagrar policyen.

Gje Azure Data Factory løyve på Azure Data Lake Gen 2 Storage

  1. Gå til den distribuerte data lake-en i Azure Portal og opne Access Control.
  2. Klikk Add.
  3. Set rollen Storage Blob Data Contributor.
  4. Finn den distribuerte data factory-en i søkjefeltet og klikk Save.

Konklusjon

Den nødvendige kjerneinfrastrukturen er sett opp og klar til bruk.

I del éin er desse aktivitetane fullførte:

  • Oppretta resource group
  • Distribuert desse ressursane til resource group
    • Azure Key Vault
    • Azure Log Analytics workspace
    • Azure Data Factory
    • Azure Data Lake Storage Gen 2
  • Oppretta Azure AD Service Principal for Log Analytics Workspace
  • Lagra Azure AD Service Principal-secrets i Azure Key Vault
  • Sett løyve for at Azure Data Factory kan få tilgang til secrets i Azure Key Vault
  • Sett løyve for at Azure Data Factory kan lese og skrive blobs i Azure Data Lake Storage Gen 2

Følg med på del 2, der vi konfigurerer Azure Data Factory til å hente ut data frå Log Analytics.