Creación de recursos de supervisión mediante Bicep

Azure tiene un conjunto completo de herramientas que pueden supervisar las aplicaciones y los servicios. Puede crear mediante programación los recursos de supervisión mediante Bicep para automatizar la creación de reglas, configuraciones de diagnóstico y alertas al aprovisionar la infraestructura de Azure.

La incorporación de la configuración de supervisión al código de Bicep puede parecer inusual, teniendo en cuenta que hay herramientas disponibles dentro de la Azure Portal para configurar reglas de alerta, configuración de diagnóstico y paneles.

Sin embargo, las alertas y la configuración de diagnóstico son básicamente las mismas que los demás recursos de infraestructura. Al incluirlos en el código de Bicep, puede implementar y probar los recursos de alerta como haría con otros recursos de Azure.

Si usa Git u otra herramienta de control de versiones para administrar los archivos de Bicep, también obtendrá la ventaja de tener un historial de la configuración de supervisión para que pueda ver cómo se configuraron y configuraron las alertas.

Áreas de trabajo de Log Analytics y Application Insights

Puede crear áreas de trabajo de Log Analytics con el tipo de recurso Microsoft.OperationalInsights/workspaces y las áreas de trabajo de Visual Studio Online Application Insights con el tipo Microsoft.Ideas /components. Ambos componentes se implementan en grupos de recursos.

Configuración de diagnóstico

La configuración de diagnóstico permite configurar Azure Monitor para exportar los registros y las métricas a varios destinos, incluidos Log Analytics y Azure Storage.

Al crear la configuración de diagnóstico en Bicep, recuerde que este recurso es un recurso de extensión, lo que significa que se aplica a otro recurso. Puede crear la configuración de diagnóstico en Bicep mediante el tipo de recurso Microsoft.Ideas /diagnosticSettings.

Al crear la configuración de diagnóstico en Bicep, debe aplicar el ámbito de la configuración de diagnóstico. La configuración de diagnóstico puede aplicarse a nivel de gestión, suscripción o grupo de recursos. Use la propiedad de ámbito de este recurso para establecer el ámbito de este recurso.

Considere el ejemplo siguiente:

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@2023-09-01' existing = {
  name: logAnalyticsWorkspace
}

resource appServicePlan 'Microsoft.Web/serverfarms@2023-12-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 
        }
      }
    ]
  }
}

En el ejemplo anterior, creará una configuración de diagnóstico para el plan de App Service y enviará esos diagnósticos a Log Analytics. Puede usar la propiedad para definir el scope plan de App Service como ámbito de la configuración de diagnóstico y usar la propiedad para definir el workspaceId área de trabajo de Log Analytics a la que enviar los registros de diagnóstico. También puede exportar la configuración de diagnóstico a Event Hubs y las cuentas de Microsoft Azure Storage.

Los tipos de registro difieren entre los recursos, por lo que debe asegurarse de que los registros que desea exportar procedan para el recurso que está usando.

Configuración de diagnóstico del registro de actividad

Para usar Bicep para configurar las opciones de diagnóstico para exportar el registro de actividad de Azure, implemente un recurso de configuración de diagnóstico en el ámbito de la suscripción.

En el ejemplo siguiente se muestra cómo exportar varios tipos de registro de actividad a un área de trabajo de 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
      }
    ]
  }
}

Alertas

Las alertas le notifican proactivamente cuándo se encuentran problemas en la infraestructura y las aplicaciones de Azure mediante la supervisión de datos en Azure Monitor. Al configurar la configuración de supervisión y alertas en el código de Bicep, puede automatizar la creación de estas alertas junto con la infraestructura que está aprovisionando en Azure.

Para más información sobre cómo funcionan las alertas en Azure, consulte Información general sobre las alertas en Microsoft Azure.

En las secciones siguientes se muestra cómo configurar diferentes tipos de alertas mediante código de Bicep.

Grupos de acciones

Para recibir una notificación cuando se hayan desencadenado las alertas, debe crear un grupo de acciones. Un grupo de acciones es una colección de las preferencias de notificación que el propietario de una suscripción de Azure define. Los grupos de acciones se usan para notificar a los usuarios que se ha desencadenado una alerta o para desencadenar respuestas automatizadas a las alertas.

Para crear grupos de acciones en Bicep, puede usar el tipo Microsoft.Ideas /actionGroups. Este es un ejemplo:

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

En el ejemplo anterior se crea un grupo de acciones que envía alertas a una dirección de correo electrónico, pero también puede definir grupos de acciones que envían alertas a Event Hubs, Azure Functions, Logic Apps y mucho más.

Reglas de procesamiento de alertas

Las reglas de procesamiento de alertas (anteriormente conocidas como reglas de acción) le permiten aplicar el procesamiento en las alertas que se han desencadenado. Puede crear reglas de procesamiento de alertas en Bicep con el tipo Microsoft.AlertsManagement/actionRules.

Cada regla de procesamiento de alertas tiene un ámbito, que podría ser una lista de uno o varios recursos específicos, un grupo de recursos específico o toda la suscripción de Azure. Al definir reglas de procesamiento de alertas en Bicep, se define una lista de identificadores de recursos en la propiedad ámbito, que tiene como destino esos recursos para la regla de procesamiento de alertas.

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

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

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

En el ejemplo anterior, se define la MonitorService regla de procesamiento de alertas en Azure Backup Vault, que se aplica al grupo de acciones existente. Esta regla desencadena alertas al grupo de acciones.

Reglas de alertas de registro

Las alertas de registro ejecutan automáticamente una consulta de Log Analytics. La consulta que se usa para evaluar los registros de recursos en un intervalo que defina, determina si los resultados cumplen algunos criterios que especifique y, a continuación, desencadena una alerta.

Puede crear reglas de alertas de registro en Bicep mediante el tipo Microsoft.Ideas /scheduledQueryRules.

Reglas de alertas de métricas

Las alertas de métrica le notifican cuando una de sus métricas cruza un umbral definido. Puede definir una regla de alertas de métricas en el código de Bicep mediante el tipo Microsoft.Ideas /metricAlerts.

Alertas de registros de actividad

El Registro de actividad de Azure es un registro de plataforma en Azure que proporciona conclusiones sobre los eventos del nivel de suscripción. Esto incluye información como cuando se modifica un recurso en Azure.

Las alertas de registro de actividad son alertas que se activan cuando se produce un nuevo evento de registro de actividad que coincide con las condiciones especificadas en la alerta.

Puede usar la scope propiedad en el tipo Microsoft.Ideas /activityLogAlerts para crear alertas del registro de actividad en un recurso específico o una lista de recursos mediante los identificadores de recursos como prefijo.

Debe definir las condiciones de la regla de alerta dentro de la condition propiedad y, a continuación, configurar el grupo de alertas para desencadenar estas alertas en mediante la actionGroup matriz. Aquí puede pasar un único o varios grupos de acciones a los que enviar alertas del registro de actividad, en función de sus requisitos.

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

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

resource activityLogAlert 'Microsoft.Insights/activityLogAlerts@2023-01-01-preview' = {
  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
    ]
  }
}

Alertas sobre el estado de los recursos

Azure Resource Health le mantiene informado sobre el estado actual y pasado de sus recursos de Azure. Mediante la creación de alertas de Resource Health mediante Bicep, puede crear y personalizar estas alertas de forma masiva.

En Bicep, puede crear alertas de estado de los recursos con el tipo Microsoft.Ideas /activityLogAlerts.

Las alertas de Estado de los recursos se pueden configurar para supervisar eventos en el nivel de una suscripción, un grupo de recursos o un recurso individual.

Considere el ejemplo siguiente, en el que se crea una alerta de estado de los recursos que informa sobre las alertas de estado del servicio. La alerta se aplica en el nivel de suscripción (mediante la scope propiedad ) y envía alertas a un grupo de acciones existente:

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

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

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

Alertas de detección inteligente

Las alertas de detección inteligente le advierten de posibles problemas de rendimiento y anomalías de fallo en su aplicación web. Puede crear alertas de detección inteligente en Bicep mediante el tipo Microsoft.AlertsManagement/smartDetectorAlertRules.

Paneles

En Bicep, puede crear paneles del portal mediante el tipo de recurso Microsoft.Portal/dashboards.

Para más información sobre cómo crear paneles, consulte Creación mediante programación de paneles de Azure.

Reglas de autoescalado

Para crear una configuración de escalado automático, debe definirlas con el tipo de recurso Microsoft.Ideas /autoscaleSettings.

Para establecer como destino el recurso al que desea aplicar la configuración de escalado automático, debe proporcionar el identificador de recurso de destino del recurso al que se debe agregar la configuración.

En este ejemplo, una condición de escalado horizontal para el plan de App Service en función del porcentaje medio de CPU durante un período de tiempo de 10 minutos. Si el plan de App Service supera el consumo medio de CPU del 70 % durante 10 minutos, el motor de escalado automático escala horizontalmente el plan agregando una instancia.

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

var appPlanSkuName = 'S1'

resource appServicePlan 'Microsoft.Web/serverfarms@2023-12-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
  }
}

Nota:

Al definir reglas de escalado automático, tenga en cuenta los procedimientos recomendados para evitar problemas al intentar escalar automáticamente, como la marcación. Para obtener más información, consulte la siguiente documentación sobre los procedimientos recomendados para el escalado automático.