Vytváření prostředků monitorování pomocí bicepu

Azure má komplexní sadu nástrojů, které můžou monitorovat vaše aplikace a služby. Prostředky monitorování můžete prostřednictvím kódu programu vytvořit pomocí Bicepu a automatizovat vytváření pravidel, nastavení diagnostiky a upozornění při zřizování infrastruktury Azure.

Přenesení konfigurace monitorování do kódu Bicep se může zdát neobvyklé vzhledem k tomu, že v Azure Portal jsou k dispozici nástroje pro nastavení pravidel upozornění, nastavení diagnostiky a řídicích panelů.

Upozornění a nastavení diagnostiky jsou ale v podstatě stejná jako ostatní prostředky infrastruktury. Když je zahrnete do kódu Bicep, můžete nasadit a otestovat prostředky upozornění stejně jako u jiných prostředků Azure.

Pokud ke správě souborů Bicep používáte Git nebo jiný nástroj pro správu verzí, získáte také výhodu, že máte historii konfigurace monitorování, abyste viděli, jak se výstrahy nastavovaly a konfigurovaly.

Pracovní prostory Log Analytics a Application Insights

Pracovní prostory služby Log Analytics můžete vytvářet s typem prostředku Microsoft.OperationalInsights/workspaces a pracovní prostory Application Insights s typem Microsoft.Insights/components. Obě tyto komponenty se nasazují do skupin prostředků.

Nastavení diagnostiky

Nastavení diagnostiky umožňuje nakonfigurovat Službu Azure Monitor pro export protokolů a metrik do řady cílů, včetně Log Analytics a Azure Storage.

Při vytváření nastavení diagnostiky v Bicepu mějte na paměti, že tento prostředek je prostředek rozšíření, což znamená, že se použije na jiný prostředek. Nastavení diagnostiky můžete v Nástroji Bicep vytvořit pomocí typu prostředku Microsoft.Insights/diagnosticSettings.

Při vytváření nastavení diagnostiky v bicepu musíte použít rozsah nastavení diagnostiky. Nastavení diagnostiky je možné použít na úrovni správy, předplatného nebo skupiny prostředků. Pomocí vlastnosti scope u tohoto prostředku nastavte obor pro tento prostředek.

Uvažujte následující příklad:

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

V předchozím příkladu vytvoříte nastavení diagnostiky pro plán App Service a odešlete tuto diagnostiku do Log Analytics. Vlastnost můžete použít scope k definování plánu App Service jako rozsahu nastavení diagnostiky a pomocí workspaceId vlastnosti definovat pracovní prostor služby Log Analytics, do které chcete diagnostické protokoly odesílat. Nastavení diagnostiky můžete také exportovat do služby Event Hubs a účtů služby Azure Storage.

Typy protokolů se u jednotlivých prostředků liší, takže se ujistěte, že protokoly, které chcete exportovat, platí pro prostředek, který používáte.

Nastavení diagnostiky protokolu aktivit

Pokud chcete pomocí nástroje Bicep nakonfigurovat nastavení diagnostiky pro export protokolu aktivit Azure, nasaďte prostředek nastavení diagnostiky v oboru předplatného.

Následující příklad ukazuje, jak exportovat několik typů protokolů aktivit do pracovního prostoru služby Log Analytics:

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

Výstrahy

Upozornění vás proaktivně upozorňují na problémy v rámci vaší infrastruktury a aplikací Azure monitorováním dat v rámci Služby Azure Monitor. Konfigurací konfigurace monitorování a upozorňování v kódu Bicep můžete automatizovat vytváření těchto výstrah společně s infrastrukturou, kterou zřizujete v Azure.

Další informace o tom, jak upozornění fungují v Azure, najdete v tématu Přehled upozornění v Microsoft Azure.

Následující části ukazují, jak můžete nakonfigurovat různé typy upozornění pomocí kódu Bicep.

Skupiny akcí

Pokud chcete dostávat oznámení o aktivaci upozornění, musíte vytvořit skupinu akcí. Skupina akcí je kolekce předvoleb oznámení, které definuje vlastník předplatného Azure. Skupiny akcí se používají k oznámení uživatelům, že se aktivovala výstraha, nebo k aktivaci automatizovaných odpovědí na výstrahy.

K vytvoření skupin akcí v Bicepu můžete použít typ Microsoft.Insights/actionGroups. Zde naleznete příklad:

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

Předchozí příklad vytvoří skupinu akcí, která odesílá upozornění na e-mailovou adresu, ale můžete také definovat skupiny akcí, které odesílají upozornění do služby Event Hubs, Azure Functions, Logic Apps a dalších.

Pravidla zpracování upozornění

Pravidla zpracování výstrah (dříve označovaná jako pravidla akcí) umožňují použít zpracování u aktivovaných výstrah. V nástroji Bicep můžete vytvořit pravidla zpracování upozornění pomocí typu Microsoft.AlertsManagement/actionRules.

Každé pravidlo zpracování upozornění má obor, kterým může být seznam jednoho nebo více konkrétních prostředků, konkrétní skupiny prostředků nebo celého vašeho předplatného Azure. Když definujete pravidla zpracování upozornění v nástroji Bicep, definujete seznam ID prostředků ve vlastnosti oboru , která cílí na tyto prostředky pro pravidlo zpracování upozornění.

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

V předchozím příkladu MonitorService je definováno pravidlo zpracování upozornění pro Azure Backup Vault, které se použije na existující skupinu akcí. Toto pravidlo aktivuje upozornění pro skupinu akcí.

Pravidla upozornění protokolu

Upozornění protokolu automaticky spustí dotaz Log Analytics. Dotaz, který se používá k vyhodnocení protokolů prostředků v intervalu, který definujete, určí, jestli výsledky splňují některá kritéria, která zadáte, a pak aktivuje výstrahu.

Pravidla upozornění protokolu můžete v bicepu vytvořit pomocí typu Microsoft.Insights/scheduledQueryRules.

Pravidla upozornění metrik

Upozornění na metriky vás upozorní, když jedna z metrik překročí definovanou prahovou hodnotu. V kódu Bicep můžete definovat pravidlo upozornění na metriku pomocí typu Microsoft.Insights/metricAlerts.

Upozornění protokolu aktivit

Protokol aktivit Azure je protokol platformy v Azure, který poskytuje přehled o událostech na úrovni předplatného. Patří sem například informace o změně prostředku v Azure.

Upozornění protokolu aktivit jsou upozornění, která se aktivují při výskytu nové události protokolu aktivit, která odpovídá podmínkám zadaným v upozornění.

Vlastnost v rámci typu Microsoft.Insights/activityLogAlerts můžete použít scope k vytvoření upozornění protokolu aktivit pro konkrétní prostředek nebo seznam prostředků s použitím ID prostředků jako předpony.

V rámci condition vlastnosti definujete podmínky pravidla upozornění a potom nakonfigurujete skupinu výstrah tak, aby tato upozornění aktivovala pomocí actionGroup pole. V závislosti na vašich požadavcích můžete předat jednu nebo více skupin akcí, do které se budou odesílat upozornění protokolu aktivit.

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

Upozornění služby Resource Health

Azure Resource Health vás informuje o aktuálním a historickém stavu vašich prostředků Azure. Vytvořením upozornění služby Resource Health pomocí nástroje Bicep můžete tato upozornění vytvořit a přizpůsobit hromadně.

V nástroji Bicep můžete vytvořit upozornění služby Resource Health typu Microsoft.Insights/activityLogAlerts.

Upozornění služby Resource Health je možné nakonfigurovat tak, aby monitorovala události na úrovni předplatného, skupiny prostředků nebo jednotlivých prostředků.

Podívejte se na následující příklad, kde vytvoříte upozornění služby Resource Health, které hlásí upozornění služby Service Health. Upozornění se použije na úrovni předplatného (pomocí scope vlastnosti) a odešle výstrahy existující skupině akcí:

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

Upozornění inteligentního zjišťování

Upozornění inteligentního zjišťování vás upozorní na potenciální problémy s výkonem a anomálie selhání ve webové aplikaci. Upozornění inteligentního zjišťování můžete v nástroji Bicep vytvořit pomocí typu Microsoft.AlertsManagement/smartDetectorAlertRules.

Řídicí panely

V bicepu můžete vytvářet řídicí panely portálu pomocí typu prostředku Microsoft.Portal/dashboards.

Další informace o vytváření řídicích panelů s kódem najdete v tématu Vytvoření řídicího panelu Azure prostřednictvím kódu programu.

Pravidla automatického škálování

Pokud chcete vytvořit nastavení automatického škálování, definujete je pomocí typu prostředku Microsoft.Insights/autoscaleSettings.

Pokud chcete cílit na prostředek, na který chcete použít nastavení automatického škálování, musíte zadat identifikátor cílového prostředku prostředku, ke kterému se má nastavení přidat.

V tomto příkladu se jedná o podmínku horizontálního navýšení kapacity pro plán App Service na základě průměrného procenta procesoru za 10minutové časové období. Pokud plán App Service překročí 70 % průměrné spotřeby procesoru za 10 minut, modul automatického škálování horizontálně navýší kapacitu plánu přidáním jedné instance.

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

Poznámka

Při definování pravidel automatického škálování mějte na paměti osvědčené postupy, abyste se vyhnuli problémům při pokusu o automatické škálování, jako je flapping. Další informace najdete v následující dokumentaci k osvědčeným postupům pro automatické škálování.