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.
Recursos relacionados
- Documentación de recursos
- Microsoft.OperationalInsights/workspaces
- Microsoft.Insights/components
- Microsoft.Insights/diagnosticSettings
- Microsoft.Insights/actionGroups
- Microsoft.Insights/scheduledQueryRules
- Microsoft.Insights/metricAlerts
- Microsoft.Portal/dashboards
- Microsoft.Insights/activityLogAlerts
- Microsoft.AlertsManagement/smartDetectorAlertRules.
- Microsoft.Insights/autoscaleSettings