Nylig har jeg utviklet en løsning for å hente ut data fra et Log Analytics-workspace med Azure Data Factory. Da dette ble skrevet, hadde Azure Data Factory ingen innebygd connector for Log Analytics-workspaces, så Log Analytics REST API må brukes i stedet. Dataene lastes deretter inn i en Azure SQL-database for rapportering.
Selv om det er mulig å eksportere M Queries direkte fra Log Analytics til Power BI, dekker dette ikke scenarioer med langtidsoppbevaring. Jeg trodde først dette var en enkel oppgave. Det var feil. I de neste fire innleggene går jeg gjennom stegene for å sette opp det første miljøet, hente ut dataene og til slutt behandle og laste dem inn i SQL-databasen.
Hva trengs for å komme i gang?
- Azure Subscription – Subscription Owner/Contributor og Azure AD-tillatelser til å distribuere Service Principals
- PowerShell Core med Az Module installert
- Installer det dersom det ikke allerede finnes på maskinen din.
- I dette innlegget bruker jeg Windows Terminal i PowerShell Core-modus på Windows 10, men den vanlige PowerShell Core-ledeteksten er tilstrekkelig.
- Merk: Jeg bruker ikke Windows PowerShell, for å være OS-agnostisk, slik at du kan følge de samme stegene på Mac, Linux osv.
For å gjøre dette raskere har jeg laget et par ARM-maler og tilhørende PowerShell-skript på GitHub. PowerShell-koden som brukes i de neste stegene, er dokumentert der. Det er verdt å klone mappen til den lokale PC-en.
I senere innlegg må vi distribuere flere ressurser, men de distribueres når de trengs.
Distribuere de første ressursene
PowerShell-referanse i GitHub-repositoriet for denne delen: Deploy Initial Resources.ps1 Deploy Initial Resources oppretter følgende ressurser:
- Resource Group
- Azure KeyVault
- Log Analytics workspace
- ADLS Gen 2 Data Lake Account
- Azure Data Factory
(Hvis du ikke har et Azure Subscription, oppretter du ett før du fortsetter.)
- Åpne en PowerShell Core-terminal i enten Windows Terminal eller PowerShell Core som administrator, eller med utvidede tillatelser.
- Installer Az PowerShell-modulen. Hvis den allerede er installert, kontrollerer du om det finnes oppdateringer. Trykk A og Enter for å stole på repositoriet mens de nyeste modulene lastes ned og installeres. Dette kan ta noen minutter.
##Kjør hvis Az PowerShell-modulen ikke allerede er installert
Install-Module Az -AllowClobber
##Kjør hvis Az PowerShell-modulen allerede er installert, men oppdateringskontroll kreves
Update-Module Az
- Importer Az PowerShell-modulen i gjeldende sesjon.
- Autentiser mot Azure som vist nedenfor. Hvis tenant eller subscription er en annen enn standarden som er knyttet til Azure AD-identiteten din, kan dette angis på samme kodelinje med bryterne -Tenant eller -Subscription. For å finne Tenant GUID åpner du Azure Portal, kontrollerer at du er logget på riktig tenant og går til Azure Active Directory. Directory GUID bør vises på hjemmesiden. For å finne Subscription GUID bytter du til riktig tenant i Azure Portal, skriver Subscriptions i søkefeltet og trykker Enter. GUID-ene for alle subscriptions du har tilgang til i denne tenanten, vises.

- I PowerShell-terminalen finner du short code for Azure-regionen nærmest deg ved å skrive kommandoen nedenfor.
- Angi variablene som skal brukes gjennom hele distribusjonsprosessen.
##Angi parametere som skal brukes av ARM-malen
$resourceGroupName = ‘’
$deploymentLocation = ‘’ ##Må være en location-egenskap fra outputen av forrige kommando
$resourceRandomName = ‘’ #Må være globalt unik og på maksimalt seksten tegn
$tenantId = (Get-AzTenant).Id
$currentUser = (Get-AzContext).Account.Id
$principalObjectId = (Get-AzADUser -UserPrincipalName $currentUser).Id
7. Først må en resource group distribueres for å kunne distribuere ressursene som kreves i dette scenarioet. Resource group får navnet fra verdien som er tildelt variabelen **$resourceGroupName**.
```powershell
##Distribuer resource group
New-AzSubscriptionDeployment -Location $deploymentLocation -TemplateFile 'arm-template-resource-group.json' -resourceGroupName $resourceGroupName -deploymentLocation $deploymentlocation
- Nå som den er distribuert, distribuerer du ressursene i denne gruppen.
##Distribuer ressursene
New-AzResourceGroupDeployment -ResourceGroupName $resourceGroupName -TemplateFile 'arm-template-resources.json' -deploymentLocation $deploymentLocation -resourceRandomName $resourceRandomName -tenantId $tenantId -principalObjectId $principalObjectId
- Verify the newly deployed resources in the Portal

Opprette Azure AD Service Principal
Kodereferansen for neste del ligger i GitHub-repositoriet som Deploy Service Principal and KeyVault Secrets.ps1
For å autentisere vellykket mot Log Analytics REST API bør du opprette en Azure AD Service Principal med avgrensede tillatelser, slik at kommunikasjon via Azure Data Factory blir mulig.
- Angi først noen variabler som skal brukes i de følgende kommandoene.
##Angi variablene våre
$vaultName = $resourceRandomName+,"-kv"
$servicePrincipalName = 'LogAnalyticsReaderService'
$servicePrincipalScope = '/subscriptions/<subscriptionid>/resourceGroups/<resourcegroupname>/providers/Microsoft.OperationalInsights/workspaces/<workspacename>'
- Opprett Azure AD Service Principal.
##Opprett Azure AD Service Principal
$createServicePrincipal = New-AzADServicePrincipal -DisplayName $servicePrincipalName -Role 'Log Analytics Reader' -Scope $servicePrincipalScope
- 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
Gi Azure Data Factory tillatelse til å lese secrets fra Azure Key Vault
- Gå til den nylig distribuerte Key Vault-en i portalen og åpne Access Policies. Der står det at Azure role-based access control er aktivert. Denne funksjonen er fortsatt i preview og passer derfor ikke for produksjonsscenarioer. Velg Vault access policy og klikk Save.

- Klikk Add Access Policy.
- Angi omfanget av tillatelsene for policyen. I dette tilfellet trenger du bare secret-tillatelsene Get og List.

- Til slutt skal denne access policy-en avgrenses til en bestemt principal, her den distribuerte Azure Data Factory. Søk etter data factory-en og klikk Select. Kontroller at data factory-en, og ikke resource group-en, er valgt, slik at tillatelser gis på lavest mulig nivå.

- Når data factory-en er valgt, klikker du Add og lagrer policyen.
Gi Azure Data Factory tillatelser på Azure Data Lake Gen 2 Storage
- Gå til den distribuerte data lake-en i Azure Portal og åpne Access Control.
- Klikk Add.
- Angi rollen Storage Blob Data Contributor.
- Finn den distribuerte data factory-en i søkefeltet og klikk Save.

Konklusjon
Den nødvendige kjerneinfrastrukturen er satt opp og klar til bruk.
I del én er følgende aktiviteter fullført:
- Opprettet resource group
- Distribuert følgende ressurser til resource group
- Azure Key Vault
- Azure Log Analytics workspace
- Azure Data Factory
- Azure Data Lake Storage Gen 2
- Opprettet Azure AD Service Principal for Log Analytics Workspace
- Lagret Azure AD Service Principal-secrets i Azure Key Vault
- Satt tillatelser for at Azure Data Factory kan få tilgang til secrets i Azure Key Vault
- Satt tillatelser 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 fra Log Analytics.