إنشاء موارد المراقبة باستخدام Bicep

يحتوي Azure على مجموعة شاملة من الأدوات التي يمكنها مراقبة تطبيقاتك وخدماتك. يمكنك إنشاء موارد المراقبة برمجيا باستخدام Bicep لأتمتة إنشاء القواعد وإعدادات التشخيص والتنبيهات عند توفير البنية الأساسية لـ Azure.

قد يبدو إحضار تكوين المراقبة الخاص بك إلى تعليمة Bicep البرمجية غير عادية، مع الأخذ في الاعتبار أن هناك أدوات متوفرة داخل مدخل Microsoft Azure لإعداد قواعد التنبيه وإعدادات التشخيص ولوحات المعلومات.

ومع ذلك، فإن التنبيهات وإعدادات التشخيص هي في الأساس نفس موارد البنية الأساسية الأخرى. من خلال تضمينها في التعليمات البرمجية لـ Bicep، يمكنك توزيع موارد التنبيه واختبارها كما تفعل لموارد Azure الأخرى.

إذا كنت تستخدم Git أو أداة أخرى للتحكم في الإصدار لإدارة ملفات Bicep الخاصة بك، يمكنك أيضًا الاستفادة من وجود محفوظات لتكوين المراقبة بحيث يمكنك معرفة كيفية إعداد التنبيهات وتكوينها.

مساحات عمل Log Analytics وApplication Insights

يمكنك إنشاء مساحات عمل Log Analytics باستخدام نوع المورد Microsoft.OperationalInsights/workspaces ومساحات عمل Application Insights مع نوع Microsoft.Insights/components. يتم توزيع كلا المكونين في مجموعات الموارد.

إعدادات التشخيص

تمكّنك إعدادات التشخيص من تكوين Azure Monitor لتصدير السجلات والمقاييس الخاصة بك إلى عدد من الوجهات، بما في ذلك تحليلات السجل وتخزين Azure.

عند إنشاء إعدادات التشخيص في Bicep، تذكر أن هذا المورد هو مورد ملحق، ما يعني أنه يتم تطبيقه على مورد آخر. يمكنك إنشاء إعدادات التشخيص في Bicep باستخدام نوع المورد Microsoft.Insights/diagnosticSettings.

عند إنشاء إعدادات التشخيص في Bicep، تحتاج إلى تطبيق نطاق إعداد التشخيص. يمكن تطبيق إعداد التشخيص على مستوى الإدارة أو الاشتراك أو مجموعة الموارد. استخدم خاصية النطاق على هذا المورد لتعيين نطاق هذا المورد.

تأمل المثال التالي:

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

في المثال السابق، يمكنك إنشاء إعداد تشخيص لخطة App Service وإرسال هذه التشخيصات إلى Log Analytics. يمكنك استخدام الخاصية scope لتعريف خطة App Service كنطاق لإعداد التشخيص الخاص بك، واستخدام الخاصية workspaceId لتعريف مساحة عمل Log Analytics لإرسال سجلات التشخيص إليها. يمكنك أيضًا تصدير إعدادات التشخيص إلى مراكز الأحداث وحسابات تخزين Azure.

تختلف أنواع السجلات باختلاف الموارد، لذا تأكد من أن السجلات التي تريد تصديرها قابلة للتطبيق على المورد الذي تستخدمه.

سجلات النشاط وإعدادات التشخيص

لاستخدام Bicep لتكوين إعدادات التشخيص لتصدير سجل نشاط Azure، انشر مورد إعداد تشخيص في نطاق الاشتراك.

يوضح المثال التالي كيفية تصدير العديد من أنواع سجلات النشاط إلى مساحة عمل 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
      }
    ]
  }
}

التنبيهات

تقوم التنبيهات بإعلامك بشكل استباقي عند العثور على المشكلات داخل البنية الأساسية لتطبيقات Azure من خلال مراقبة البيانات داخل Azure Monitor. من خلال تكوين المراقبة والتنبيه داخل تعليمة Bicep البرمجية الخاصة بك، يمكنك أتمتة إنشاء هذه التنبيهات جنبا إلى جنب مع البنية الأساسية التي تقوم بتوفيرها في Azure.

لمزيد من المعلومات حول كيفية عمل التنبيهات في Azure، راجع نظرة عامة على التنبيهات في Microsoft Azure.

توضح الأقسام التالية كيف يمكنك تكوين أنواع مختلفة من التنبيهات باستخدام تعليمة Bicep البرمجية.

مجموعات الإجراءات

ليتم إعلامك عند تشغيل التنبيهات، تحتاج إلى إنشاء مجموعة إجراءات. مجموعة الإجراءات هي مجموعة من التنبيهات المفضلة يحددها مالك اشتراك Azure. يتم استخدام مجموعات الإجراءات لإعلام المستخدمين بأنه تم تشغيل تنبيه، أو لتشغيل استجابات تلقائية للتنبيهات.

لإنشاء مجموعات إجراءات في Bicep، يمكنك استخدام النوع Microsoft.Insights/actionGroups. إليك مثال:

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

ينشئ المثال السابق مجموعة إجراءات ترسل تنبيهات إلى عنوان بريد إلكتروني، ولكن يمكنك أيضًا تعريف مجموعات الإجراءات التي ترسل تنبيهات إلى Event Hubs وAzure Functions وLogic Apps والمزيد.

قواعد معالجة التنبيه

تسمح لك قواعد معالجة التنبيه (يشار إليها سابقًا باسم قواعد الإجراء) بتطبيق المعالجة على التنبيهات التي تم إطلاقها. يمكنك إنشاء قواعد معالجة التنبيه في Bicep باستخدام نوع Microsoft.AlertsManagement/actionRules.

كل قاعدة معالجة تنبيه لها نطاق، والتي يمكن أن تكون قائمة بموارد محددة واحدة أو أكثر، أو مجموعة موارد محددة أو اشتراك Azure بأكمله. عند تعريف قواعد معالجة التنبيه في Bicep، يمكنك تعريف قائمة معرفات الموارد في خاصية النطاق، والتي تستهدف هذه الموارد لقاعدة معالجة التنبيه.

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

في المثال السابق، يتم تعريف قاعدة معالجة التنبيه MonitorService في Azure Backup Vault، والتي يتم تطبيقها على مجموعة الإجراءات الموجودة. تقوم هذه القاعدة بتشغيل التنبيهات إلى مجموعة الإجراءات.

قواعد تنبيه السجل

تقوم تنبيهات السجل تلقائيًا بتشغيل استعلام Log Analytics. يحدد الاستعلام المستخدم لتقييم سجلات الموارد في فاصل زمني تحدده، ما إذا كانت النتائج تفي ببعض المعايير التي تحددها، ثم يطلق تنبيهًا.

يمكنك إنشاء قواعد تنبيه السجل في Bicep باستخدام النوع Microsoft.Insights/scheduledQueryRules.

قواعد التنبيه القياسي

تقوم تنبيهات القياس بإعلامك عندما يتجاوز أحد مقاييسك حد معين. يمكنك تعريف قاعدة تنبيه القياس في التعليمات البرمجية لـ Bicep باستخدام النوع Microsoft.Insights/metricAlerts.

تنبيهات سجل النشاط

يمثل سجل نشاط Azure سجل نظام أساسي في Azure يوفر تفاصيل حول الأحداث على مستوى الاشتراك. يتضمن ذلك معلومات مثل وقت تعديل مورد في Azure.

تنبيهات سجل النشاط هي التنبيهات التي يتم تنشيطها عند حدوث حدث سجل نشاط جديد يطابق الشروط المُحددة في التنبيه.

يمكنك استخدام الخاصية scope ضمن النوع Microsoft.Insights/activityLogAlerts لإنشاء تنبيهات سجل النشاط على مورد معين أو قائمة بالموارد باستخدام معرفات المورد كبادئة.

يمكنك تعريف شروط قاعدة التنبيه داخل الخاصية condition ثم تكوين مجموعة التنبيه لتشغيل هذه التنبيهات باستخدام الصفيف actionGroup. هنا يمكنك تمرير مجموعات إجراءات واحدة أو متعددة لإرسال تنبيهات سجل النشاط إليها، اعتمادًا على متطلباتك.

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

تنبيهات صحة الموارد

يبقيك Azure Resource Health على اطلاع بالحالة الصحية الحالية والقديمة لموارد Azure. من خلال إنشاء تنبيهات صحة الموارد باستخدام Bicep، يمكنك إنشاء هذه التنبيهات وتخصيصها بشكل مجمع.

في Bicep، يمكنك إنشاء تنبيهات صحة الموارد باستخدام نوع Microsoft.Insights/activityLogAlerts.

يمكن تكوين تنبيهات صحة الموارد لمراقبة الأحداث على مستوى الاشتراك أو مجموعة الموارد أو المورد الفردي.

ضع في اعتبارك المثال التالي، حيث تقوم بإنشاء تنبيه صحة المورد الذي يبلغ عن تنبيهات صحة الخدمة. يتم تطبيق التنبيه على مستوى الاشتراك (باستخدام الخاصية scope )، ويرسل تنبيهات إلى مجموعة إجراءات موجودة:

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

تنبيهات الكشف الذكي

يحذرك الكشف الذكي تلقائيًا من مشاكل الأداء المحتملة وحالات الفشل الشاذة في تطبيق الويب الخاص بك. يمكنك إنشاء تنبيهات الكشف الذكية في Bicep باستخدام نوع Microsoft.AlertsManagement/smartDetectorAlertRules.

لوحات المعلومات

في Bicep، يمكنك إنشاء لوحات معلومات المدخل باستخدام نوع المورد Microsoft.Portal/dashboards.

لمزيد من المعلومات حول إنشاء لوحات المعلومات، راجع إنشاء لوحات معلومات Azure برمجيًا.

قواعد التحجيم التلقائي

لإنشاء إعداد التحجيم التلقائي، يمكنك تعريف هذه باستخدام نوع المورد Microsoft.Insights/autoscaleSettings.

لاستهداف المورد الذي تريد تطبيق إعداد التحجيم التلقائي عليه، تحتاج إلى توفير معرف المورد الهدف للمورد الذي يجب إضافة الإعداد إليه.

في هذا المثال، شرط توسيع لخطة App Service استنادا إلى متوسط النسبة المئوية لوحدة المعالجة المركزية على مدى فترة زمنية مدتها 10 دقائق. إذا تجاوزت خطة App Service متوسط استهلاك CPU بنسبة 70٪ على مدى 10 دقائق، يقوم محرك التحجيم التلقائي بتوسيع الخطة عن طريق إضافة مثيل واحد.

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

إشعار

عند تحديد قواعد التحجيم التلقائي، ضع في اعتبارك أفضل الممارسات لتجنب المشكلات عند محاولة التحجيم التلقائي، مثل الخفقان. لمزيد من المعلومات، راجع الوثائق التالية حول أفضل الممارسات للتحجيم التلقائي.