Bewakingsresources maken met bicep

Azure heeft een uitgebreide suite met hulpprogramma's waarmee u uw toepassingen en services kunt bewaken. U kunt uw bewakingsresources programmatisch maken met bicep om het maken van regels, diagnostische instellingen en waarschuwingen bij het inrichten van uw Azure-infrastructuur te automatiseren.

Het kan ongebruikelijk lijken om uw bewakingsconfiguratie in uw Bicep-code op te nemen, aangezien er hulpprogramma's beschikbaar zijn in de Azure Portal voor het instellen van waarschuwingsregels, diagnostische instellingen en dashboards.

Waarschuwingen en diagnostische instellingen zijn echter in wezen hetzelfde als uw andere infrastructuurresources. Door ze op te slaan in uw Bicep-code, kunt u uw waarschuwingsresources implementeren en testen op basis van andere Azure-resources.

Als u Git of een ander hulpprogramma voor versiebeheer gebruikt om uw Bicep-bestanden te beheren, hebt u ook het voordeel dat u een geschiedenis van uw bewakingsconfiguratie hebt, zodat u kunt zien hoe waarschuwingen zijn ingesteld en geconfigureerd.

Log Analytics- en Application Insights-werkruimten

U kunt Log Analytics-werkruimten maken met het resourcetype Microsoft.OperationalInsights/workspaces en Application Insights-werkruimten met het type Microsoft.Insights/components. Beide onderdelen worden geïmplementeerd in resourcegroepen.

Diagnostische instellingen

Met diagnostische instellingen kunt u Azure Monitor configureren om uw logboeken en metrische gegevens te exporteren naar een aantal bestemmingen, waaronder Log Analytics en Azure Storage.

Houd er bij het maken van diagnostische instellingen in Bicep rekening mee dat deze resource een extensieresource is, wat betekent dat deze wordt toegepast op een andere resource. U kunt diagnostische instellingen maken in Bicep met behulp van het resourcetype Microsoft.Insights/diagnosticSettings.

Wanneer u diagnostische instellingen maakt in Bicep, moet u het bereik van de diagnostische instelling toepassen. De diagnostische instelling kan worden toegepast op het niveau van beheer, abonnement of resourcegroep. Gebruik de eigenschap scope voor deze resource om het bereik voor deze resource in te stellen.

Kijk eens naar het volgende voorbeeld:

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 
        }
      }
    ]
  }
}

In het voorgaande voorbeeld maakt u een diagnostische instelling voor het App Service-plan en verzendt u deze diagnostische gegevens naar Log Analytics. U kunt de scope eigenschap gebruiken om uw App Service-plan te definiëren als het bereik voor uw diagnostische instelling en de workspaceId eigenschap gebruiken om de Log Analytics-werkruimte te definiëren waarnaar de diagnostische logboeken moeten worden verzonden. U kunt ook diagnostische instellingen exporteren naar Event Hubs en Azure Storage-accounts.

Logboektypen verschillen per resource, dus zorg ervoor dat de logboeken die u wilt exporteren van toepassing zijn op de resource die u gebruikt.

Diagnostische instellingen voor activiteitenlogboek

Als u Bicep wilt gebruiken om diagnostische instellingen te configureren voor het exporteren van het Azure-activiteitenlogboek, implementeert u een resource voor diagnostische instellingen in het abonnementsbereik.

In het volgende voorbeeld ziet u hoe u verschillende typen activiteitenlogboeken exporteert naar een Log Analytics-werkruimte:

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
      }
    ]
  }
}

Waarschuwingen

Waarschuwingen stellen u proactief op de hoogte wanneer er problemen worden gevonden in uw Azure-infrastructuur en -toepassingen door gegevens in Azure Monitor te bewaken. Door uw bewakings- en waarschuwingsconfiguratie in uw Bicep-code te configureren, kunt u het maken van deze waarschuwingen automatiseren naast de infrastructuur die u in Azure inricht.

Zie Overzicht van waarschuwingen in Microsoft Azure voor meer informatie over de werking van waarschuwingen in Azure.

In de volgende secties ziet u hoe u verschillende typen waarschuwingen kunt configureren met behulp van Bicep-code.

Actiegroepen

Als u een melding wilt ontvangen wanneer waarschuwingen zijn geactiveerd, moet u een actiegroep maken. Een actiegroep is een verzameling meldingsvoorkeuren die zijn gedefinieerd door de eigenaar van een Azure-abonnement. Actiegroepen worden gebruikt om gebruikers te waarschuwen dat er een waarschuwing is geactiveerd of om automatische reacties op waarschuwingen te activeren.

Als u actiegroepen wilt maken in Bicep, kunt u het type Microsoft.Insights/actionGroups gebruiken. Hier volgt een voorbeeld:

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
      }
    ]
  }
}

In het voorgaande voorbeeld wordt een actiegroep gemaakt die waarschuwingen naar een e-mailadres verzendt, maar u kunt ook actiegroepen definiëren die waarschuwingen verzenden naar Event Hubs, Azure Functions, Logic Apps en meer.

Regels voor het verwerken van waarschuwingen

Met regels voor het verwerken van waarschuwingen (voorheen actieregels genoemd) kunt u verwerking toepassen op waarschuwingen die zijn geactiveerd. U kunt regels voor het verwerken van waarschuwingen maken in Bicep met het type Microsoft.AlertsManagement/actionRules.

Elke regel voor het verwerken van waarschuwingen heeft een bereik. Dit kan een lijst zijn met een of meer specifieke resources, een specifieke resourcegroep of uw hele Azure-abonnement. Wanneer u regels voor het verwerken van waarschuwingen in Bicep definieert, definieert u een lijst met resource-id's in de bereikeigenschap , die is gericht op die resources voor de regel voor het verwerken van waarschuwingen.

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
    ]
  }
}

In het voorgaande voorbeeld is de regel voor het MonitorService verwerken van waarschuwingen voor Azure Backup Vault gedefinieerd, die wordt toegepast op de bestaande actiegroep. Met deze regel worden waarschuwingen geactiveerd voor de actiegroep.

Waarschuwingsregels voor logboeken

Met logboekwaarschuwingen wordt automatisch een Log Analytics-query uitgevoerd. De query die wordt gebruikt om resourcelogboeken te evalueren met een interval dat u definieert, bepaalt of de resultaten voldoen aan een aantal criteria die u opgeeft. Vervolgens wordt een waarschuwing geactiveerd.

U kunt regels voor logboekwaarschuwingen maken in Bicep met behulp van het type Microsoft.Insights/scheduledQueryRules.

Regels voor metrische waarschuwingen

Metrische waarschuwingen stellen u op de hoogte wanneer een van uw metrische gegevens een gedefinieerde drempelwaarde overschrijdt. U kunt een waarschuwingsregel voor metrische gegevens definiëren in uw Bicep-code met behulp van het type Microsoft.Insights/metricAlerts.

Waarschuwingen voor activiteitenlogboeken

Het Azure-activiteitenlogboek is een platformlogboek in Azure dat inzicht biedt in gebeurtenissen op abonnementsniveau. Dit omvat informatie zoals wanneer een resource in Azure wordt gewijzigd.

Waarschuwingen voor activiteitenlogboeken zijn waarschuwingen die worden geactiveerd wanneer er een nieuwe gebeurtenis in het activiteitenlogboek optreedt die overeenkomt met de voorwaarden die zijn opgegeven in de waarschuwing.

U kunt de scope eigenschap in het type Microsoft.Insights/activityLogAlerts gebruiken om waarschuwingen voor activiteitenlogboeken te maken voor een specifieke resource of een lijst met resources met de resource-id's als voorvoegsel.

U definieert de voorwaarden voor de waarschuwingsregel in de condition eigenschap en configureert vervolgens de waarschuwingsgroep om deze waarschuwingen te activeren met behulp van de actionGroup matrix. Hier kunt u één of meerdere actiegroepen doorgeven om waarschuwingen voor activiteitenlogboeken naar te verzenden, afhankelijk van uw vereisten.

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
    ]
  }
}

Waarschuwingen voor resourcestatus

Azure Resource Health houdt u op de hoogte van de huidige en historische status van uw Azure-resources. Door uw resourcestatuswaarschuwingen te maken met Bicep, kunt u deze waarschuwingen bulksgewijs maken en aanpassen.

In Bicep kunt u resourcestatuswaarschuwingen maken met het type Microsoft.Insights/activityLogAlerts.

Resourcestatuswaarschuwingen kunnen worden geconfigureerd voor het bewaken van gebeurtenissen op het niveau van een abonnement, resourcegroep of afzonderlijke resource.

Bekijk het volgende voorbeeld, waarin u een resourcestatuswaarschuwing maakt die rapporteert over servicestatuswaarschuwingen. De waarschuwing wordt toegepast op abonnementsniveau (met behulp van de scope eigenschap) en verzendt waarschuwingen naar een bestaande actiegroep:

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
        }
      ]
    }
  }
}

Waarschuwingen voor slimme detectie

Waarschuwingen voor slimme detectie waarschuwen u voor mogelijke prestatieproblemen en foutafwijkingen in uw webtoepassing. U kunt waarschuwingen voor slimme detectie in Bicep maken met het type Microsoft.AlertsManagement/smartDetectorAlertRules.

Dashboards

In Bicep kunt u portaldashboards maken met behulp van het resourcetype Microsoft.Portal/dashboards.

Zie Programmatisch een Azure-dashboard maken voor meer informatie over het maken van dashboards met code.

Regels voor automatisch schalen

Als u een instelling voor automatisch schalen wilt maken, definieert u deze met behulp van het resourcetype Microsoft.Insights/autoscaleSettings.

Als u de resource wilt targeten waarop u de instelling voor automatisch schalen wilt toepassen, moet u de doelresource-id opgeven van de resource waaraan de instelling moet worden toegevoegd.

In dit voorbeeld is een uitschaalvoorwaarde voor de App Service plan op basis van het gemiddelde CPU-percentage gedurende een periode van 10 minuten. Als het App Service-abonnement het gemiddelde CPU-verbruik van 70% overschrijdt gedurende 10 minuten, schaalt de engine voor automatisch schalen het plan uit door één exemplaar toe te voegen.

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
  }
}

Notitie

Houd bij het definiëren van regels voor automatisch schalen rekening met best practices om problemen te voorkomen bij het uitvoeren van automatische schaalaanpassing, zoals flappen. Zie de volgende documentatie over aanbevolen procedures voor automatische schaalaanpassing voor meer informatie.