Dela via


Skapa övervakningsresurser med hjälp av Bicep

Azure har en omfattande uppsättning verktyg som kan övervaka dina program och tjänster. Du kan programmatiskt skapa dina övervakningsresurser med Bicep för att automatisera skapandet av regler, diagnostikinställningar och aviseringar när du etablerar din Azure-infrastruktur.

Det kan verka ovanligt att ta med din övervakningskonfiguration i Bicep-koden, med tanke på att det finns verktyg i Azure-portalen för att konfigurera aviseringsregler, diagnostikinställningar och instrumentpaneler.

Aviseringar och diagnostikinställningar är dock i stort sett desamma som dina andra infrastrukturresurser. Genom att inkludera dem i din Bicep-kod kan du distribuera och testa dina aviseringsresurser på samma sätt som för andra Azure-resurser.

Om du använder Git eller ett annat versionskontrollverktyg för att hantera dina Bicep-filer får du också fördelen av att ha en historik över din övervakningskonfiguration så att du kan se hur aviseringar har konfigurerats och konfigurerats.

Log Analytics- och Application Insights-arbetsytor

Du kan skapa Log Analytics-arbetsytor med resurstypen Microsoft.OperationalInsights/workspaces och Application Insights-arbetsytor med typen Microsoft.Insights/components. Båda dessa komponenter distribueras till resursgrupper.

Diagnostikinställningar

Med diagnostikinställningar kan du konfigurera Azure Monitor för att exportera loggar och mått till ett antal mål, inklusive Log Analytics och Azure Storage.

När du skapar diagnostikinställningar i Bicep bör du komma ihåg att den här resursen är en tilläggsresurs, vilket innebär att den tillämpas på en annan resurs. Du kan skapa diagnostikinställningar i Bicep med hjälp av resurstypen Microsoft.Insights/diagnostic Inställningar.

När du skapar diagnostikinställningar i Bicep måste du tillämpa diagnostikinställningens omfång. Diagnostikinställningen kan tillämpas på hanterings-, prenumerations- eller resursgruppsnivå. Använd omfångsegenskapen för den här resursen för att ange resursens omfång.

Ta följande som exempel:

param location string = resourceGroup().location
param appPlanName string = '${uniqueString(resourceGroup().id)}asp'
param logAnalyticsWorkspace string = '${uniqueString(resourceGroup().id)}la'

var appPlanSkuName = 'S1'

resource logAnalytics 'Microsoft.OperationalInsights/workspaces@2021-12-01-preview' existing = {
  name: logAnalyticsWorkspace
}

resource appServicePlan 'Microsoft.Web/serverfarms@2021-03-01' = {
  name: appPlanName
  location: location
  sku: {
    name: appPlanSkuName
    capacity: 1
  } 
}

resource diagnosticLogs 'Microsoft.Insights/diagnosticSettings@2021-05-01-preview' = {
  name: appServicePlan.name
  scope: appServicePlan
  properties: {
    workspaceId: logAnalytics.id
    logs: [
      {
        category: 'AllMetrics'
        enabled: true
        retentionPolicy: {
          days: 30
          enabled: true 
        }
      }
    ]
  }
}

I föregående exempel skapar du en diagnostikinställning för App Service-planen och skickar diagnostiken till Log Analytics. Du kan använda scope egenskapen för att definiera din App Service-plan som omfång för diagnostikinställningen workspaceId och använda egenskapen för att definiera Log Analytics-arbetsytan som diagnostikloggarna ska skickas till. Du kan också exportera diagnostikinställningar till Event Hubs och Azure Storage-konton.

Loggtyperna skiljer sig åt mellan resurser, så se till att loggarna som du vill exportera gäller för den resurs som du använder.

Diagnostikinställningar för aktivitetslogg

Om du vill använda Bicep för att konfigurera diagnostikinställningar för att exportera Azure-aktivitetsloggen distribuerar du en diagnostikinställningsresurs i prenumerationsomfånget.

I följande exempel visas hur du exporterar flera aktivitetsloggtyper till en Log Analytics-arbetsyta:

targetScope = 'subscription'

param logAnalyticsWorkspaceId string

var activityLogDiagnosticSettingsName = 'export-activity-log'

resource subscriptionActivityLog 'Microsoft.Insights/diagnosticSettings@2021-05-01-preview' = {
  name: activityLogDiagnosticSettingsName
  properties: {
    workspaceId: logAnalyticsWorkspaceId
    logs: [
      {
        category: 'Administrative'
        enabled: true
      }
      {
        category: 'Security'
        enabled: true
      }
      {
        category: 'ServiceHealth'
        enabled: true
      }
      {
        category: 'Alert'
        enabled: true
      }
      {
        category: 'Recommendation'
        enabled: true
      }
      {
        category: 'Policy'
        enabled: true
      }
      {
        category: 'Autoscale'
        enabled: true
      }
      {
        category: 'ResourceHealth'
        enabled: true
      }
    ]
  }
}

Aviseringar

Aviseringar meddelar dig proaktivt när problem hittas i din Azure-infrastruktur och dina program genom att övervaka data i Azure Monitor. Genom att konfigurera konfigurationen för övervakning och aviseringar i Bicep-koden kan du automatisera skapandet av dessa aviseringar tillsammans med infrastrukturen som du etablerar i Azure.

Mer information om hur aviseringar fungerar i Azure finns i Översikt över aviseringar i Microsoft Azure.

Följande avsnitt visar hur du kan konfigurera olika typer av aviseringar med hjälp av Bicep-kod.

Åtgärdsgrupper

Om du vill få ett meddelande när aviseringar har utlösts måste du skapa en åtgärdsgrupp. En åtgärdsgrupp är en samling aviseringsinställningar som definieras av ägaren till en Azure-prenumeration. Åtgärdsgrupper används för att meddela användare att en avisering har utlösts eller för att utlösa automatiserade svar på aviseringar.

Om du vill skapa åtgärdsgrupper i Bicep kan du använda typen Microsoft.Insights/actionGroups. Här är ett exempel:

param actionGroupName string = 'On-Call Team'
param location string = resourceGroup().location

var actionGroupEmail = 'oncallteam@contoso.com'

resource supportTeamActionGroup 'Microsoft.Insights/actionGroups@2023-01-01' = {
  name: actionGroupName
  location: location
  properties: {
    enabled: true
    groupShortName: actionGroupName
    emailReceivers: [
      {
        name: actionGroupName
        emailAddress: actionGroupEmail
        useCommonAlertSchema: true
      }
    ]
  }
}

I föregående exempel skapas en åtgärdsgrupp som skickar aviseringar till en e-postadress, men du kan också definiera åtgärdsgrupper som skickar aviseringar till Event Hubs, Azure Functions, Logic Apps med mera.

Regler för aviseringsbearbetning

Med regler för aviseringsbearbetning (kallades tidigare åtgärdsregler) kan du tillämpa bearbetning på aviseringar som har utlösts. Du kan skapa regler för aviseringsbearbetning i Bicep med hjälp av typen Microsoft.AlertsManagement/actionRules.

Varje regel för aviseringsbearbetning har ett omfång som kan vara en lista över en eller flera specifika resurser, en specifik resursgrupp eller hela din Azure-prenumeration. När du definierar regler för aviseringsbearbetning i Bicep definierar du en lista över resurs-ID:t i omfångsegenskapen, som riktar sig till dessa resurser för aviseringsbearbetningsregeln.

param alertRuleName string = 'AlertRuleName'
param actionGroupName string = 'On-Call Team'
param location string = resourceGroup().location

resource actionGroup 'Microsoft.Insights/actionGroups@2021-09-01' existing = {
  name: actionGroupName
}

resource alertProcessingRule 'Microsoft.AlertsManagement/actionRules@2021-08-08' = {
  name: alertRuleName
  location: location
  properties: {
    actions: [
      {
        actionType: 'AddActionGroups'
        actionGroupIds: [
          actionGroup.id
        ]
      }
    ]
    conditions: [
      {
        field: 'MonitorService'
        operator: 'Equals'
        values: [
          'Azure Backup'
        ]
      }
    ]
    enabled: true
    scopes: [
      subscription().id
    ]
  }
}

I föregående exempel MonitorService definieras regeln för aviseringsbearbetning i Azure Backup Vault, som tillämpas på den befintliga åtgärdsgruppen. Den här regeln utlöser aviseringar till åtgärdsgruppen.

Loggaviseringsregler

Loggaviseringar kör automatiskt en Log Analytics-fråga. Frågan som används för att utvärdera resursloggar med ett intervall som du definierar, avgör om resultaten uppfyller vissa kriterier som du anger och sedan utlöser en avisering.

Du kan skapa loggaviseringsregler i Bicep med hjälp av typen Microsoft.Insights/scheduledQueryRules.

Måttaviseringsregler

Måttaviseringar meddelar dig när ett av dina mått överskrider ett definierat tröskelvärde. Du kan definiera en måttaviseringsregel i Bicep-koden med hjälp av typen Microsoft.Insights/metricAlerts.

Aktivitetsloggaviseringar

Azure-aktivitetsloggen är en plattformslogg i Azure som ger insikter om händelser på prenumerationsnivå. Detta inkluderar information som när en resurs i Azure ändras.

Aktivitetsloggaviseringar är aviseringar som aktiveras när en ny aktivitetslogghändelse inträffar som matchar de villkor som anges i aviseringen.

Du kan använda scope egenskapen i typen Microsoft.Insights/activityLogAlerts för att skapa aktivitetsloggaviseringar på en specifik resurs eller en lista över resurser med resurs-ID:t som prefix.

Du definierar dina villkor för aviseringsregeln condition i egenskapen och konfigurerar sedan aviseringsgruppen så att aviseringarna utlöses med hjälp av matrisen actionGroup . Här kan du skicka en eller flera åtgärdsgrupper för att skicka aktivitetsloggaviseringar till, beroende på dina krav.

param activityLogAlertName string = '${uniqueString(resourceGroup().id)}-alert'
param actionGroupName string = 'adminactiongroup'

resource actionGroup 'Microsoft.Insights/actionGroups@2021-09-01' existing = {
  name: actionGroupName
}

resource activityLogAlert 'Microsoft.Insights/activityLogAlerts@2020-10-01' = {
  name: activityLogAlertName
  location: 'Global'
  properties: {
    condition: {
      allOf: [
        {
          field: 'category'
          equals: 'Administrative'
        }
        {
          field: 'operationName'
          equals: 'Microsoft.Resources/deployments/write'
        }
        {
          field: 'resourceType'
          equals: 'Microsoft.Resources/deployments'
        }
      ]
    }
    actions: {
      actionGroups: [
        {
          actionGroupId: actionGroup.id
        }
      ]
    }
    scopes: [
      subscription().id
    ]
  }
}

Resource Health-aviseringar

Azure Resource Health håller dig informerad om den aktuella och historiska hälsostatusen för dina Azure-resurser. Genom att skapa dina resurshälsoaviseringar med hjälp av Bicep kan du skapa och anpassa aviseringarna i grupp.

I Bicep kan du skapa resurshälsoaviseringar med typen Microsoft.Insights/activityLogAlerts.

Aviseringar om resurshälsa kan konfigureras för att övervaka händelser på prenumerationsnivå, resursgrupp eller enskild resurs.

Tänk på följande exempel, där du skapar en resurshälsoavisering som rapporterar om tjänsthälsoaviseringar. Aviseringen tillämpas på prenumerationsnivå (med hjälp av scope egenskapen) och skickar aviseringar till en befintlig åtgärdsgrupp:

param activityLogAlertName string = uniqueString(resourceGroup().id)
param actionGroupName string = 'oncallactiongroup'

resource actionGroup 'Microsoft.Insights/actionGroups@2021-09-01' existing = {
  name: actionGroupName
}

resource resourceHealthAlert 'Microsoft.Insights/activityLogAlerts@2020-10-01' = {
  name: activityLogAlertName
  location: 'global'
  properties: {
    condition: {
      allOf: [
        {
          field: 'category'
          equals: 'ServiceHealth'
        }
      ]
    }
    scopes: [
      subscription().id
    ]
    actions: {
      actionGroups: [
        {
          actionGroupId: actionGroup.id
        }
      ]
    }
  }
}

Aviseringar för smart identifiering

Aviseringar om smart identifiering varnar dig för potentiella prestandaproblem och felavvikelser i webbappen. Du kan skapa aviseringar för smart identifiering i Bicep med hjälp av typen Microsoft.AlertsManagement/smartDetectorAlertRules.

Instrumentpaneler

I Bicep kan du skapa portalinstrumentpaneler med hjälp av resurstypen Microsoft.Portal/instrumentpaneler.

Mer information om hur du skapar instrumentpaneler med kod finns i Programmatiskt skapa en Azure-instrumentpanel.

Regler för autoskalning

Om du vill skapa en autoskalningsinställning definierar du dessa med hjälp av resurstypen Microsoft.Insights/autoskalning Inställningar.

Om du vill rikta in dig på den resurs som du vill tillämpa inställningen för automatisk skalning på måste du ange målresursidentifieraren för resursen som inställningen ska läggas till i.

I det här exemplet är ett utskalningsvillkor för App Service-planen baserat på den genomsnittliga CPU-procentandelen under en tidsperiod på 10 minuter. Om App Service-planen överskrider 70 % genomsnittlig CPU-förbrukning under 10 minuter skalar autoskalningsmotorn ut planen genom att lägga till en instans.

param location string = resourceGroup().location
param appPlanName string = '${uniqueString(resourceGroup().id)}asp'

var appPlanSkuName = 'S1'

resource appServicePlan 'Microsoft.Web/serverfarms@2022-09-01' = {
  name: appPlanName
  location: location
  properties: {}
  sku: {
    name: appPlanSkuName
    capacity: 1
  }
}

resource scaleOutRule 'Microsoft.Insights/autoscalesettings@2022-10-01' = {
  name: appServicePlan.name
  location: location
  properties: {
    enabled: true
    profiles: [
      {
        name: 'Scale out condition'
        capacity: {
          maximum: '3'
          default: '1'
          minimum: '1'
        }
        rules: [
          {
            scaleAction: {
              type: 'ChangeCount'
              direction: 'Increase'
              cooldown: 'PT5M'
              value: '1'
            }
            metricTrigger: {
              metricName: 'CpuPercentage'
              operator: 'GreaterThan'
              timeAggregation: 'Average'
              threshold: 70
              metricResourceUri: appServicePlan.id
              timeWindow: 'PT10M'
              timeGrain: 'PT1M'
              statistic: 'Average'
            }
          }
        ]
      }
    ]
    targetResourceUri: appServicePlan.id
  }
}

Kommentar

När du definierar regler för automatisk skalning bör du ha bästa praxis i åtanke för att undvika problem när du försöker autoskala, till exempel flaxning. Mer information finns i följande dokumentation om metodtips för autoskalning.