Membuat sumber daya pemantauan dengan menggunakan Bicep

Azure memiliki serangkaian alat komprehensif yang dapat memantau aplikasi dan layanan Anda. Anda dapat membuat sumber daya pemantauan secara terprogram menggunakan Bicep untuk mengotomatiskan pembuatan aturan, pengaturan diagnostik, dan pemberitahuan saat provisi infrastruktur Azure Anda.

Membawa konfigurasi pemantauan ke dalam kode Bicep Anda mungkin tampak tidak biasa, mengingat ada alat yang tersedia di dalam portal Azure untuk menyiapkan aturan pemberitahuan, pengaturan diagnostik, dan dasbor.

Namun, pemberitahuan dan pengaturan diagnostik pada dasarnya sama dengan sumber daya infrastruktur Anda yang lain. Dengan menyertakannya dalam kode Bicep, Anda dapat menyebarkan dan menguji sumber daya pemberitahuan seperti yang Anda lakukan untuk sumber daya Azure lainnya.

Jika Anda menggunakan Git atau alat kontrol versi lain untuk mengelola file Bicep, Anda juga mendapatkan manfaat memiliki riwayat konfigurasi pemantauan sehingga Anda dapat melihat bagaimana pemberitahuan disiapkan dan dikonfigurasi.

Analitik Log dan ruang kerja Application Insights

Anda dapat membuat ruang kerja Analitik Log dengan jenis sumber daya Microsoft.OperationalInsights/workspaces dan ruang kerja Application Insights dengan jenis Microsoft.Insights /components. Kedua komponen ini disebarkan ke grup sumber daya.

Pengaturan diagnostik

Pengaturan diagnostik memungkinkan Anda untuk mengonfigurasi Azure Monitor untuk mengekspor log dan metrik Anda ke sejumlah tujuan, termasuk Log Analytics dan Azure Storage.

Saat membuat setelan diagnostik di Bicep, ingatlah bahwa sumber daya ini adalah sumber daya ekstensi, yang berarti diterapkan ke sumber daya lain. Anda dapat membuat pengaturan diagnostik di Bicep dengan menggunakan jenis sumber daya Microsoft.Insights /diagnosticSettings.

Saat membuat pengaturan diagnostik di Bicep, Anda perlu menerapkan cakupan pengaturan diagnostik. Pengaturan diagnostik dapat diterapkan di tingkat manajemen, langganan, atau grup sumber daya. Gunakan properti cakupan pada sumber daya ini untuk mengatur cakupan untuk sumber daya ini.

Pertimbangkan contoh berikut:

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

Dalam contoh sebelumnya, Anda membuat pengaturan diagnostik untuk paket App Service dan mengirim diagnostik tersebut ke Analitik Log. Anda dapat menggunakan properti scope untuk menentukan paket App Service sebagai cakupan pengaturan diagnostik Anda, dan menggunakan properti workspaceId untuk menentukan ruang kerja Analitik Log untuk mengirim log diagnostik. Anda juga dapat mengekspor pengaturan diagnostik ke Azure Event Hubs dan akun Azure Storage.

Jenis log berbeda di antara sumber daya, jadi pastikan bahwa log yang ingin Anda ekspor berlaku untuk sumber daya yang Anda gunakan.

Pengaturan diagnostik log aktivitas

Untuk menggunakan Bicep guna mengonfigurasi pengaturan diagnostik guna mengekspor log aktivitas Azure, sebarkan sumber daya pengaturan diagnostik di cakupan langganan.

Contoh berikut menunjukkan cara mengekspor beberapa jenis log aktivitas ke ruang kerja 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
      }
    ]
  }
}

Peringatan

Pemberitahuan secara proaktif memberi tahu Anda saat masalah ditemukan dalam infrastruktur dan aplikasi Azure Anda dengan memantau data dalam Azure Monitor. Dengan mengonfigurasi konfigurasi pemantauan dan pemberitahuan dalam kode Bicep, Anda dapat mengotomatiskan pembuatan pemberitahuan ini bersama infrastruktur yang Anda provisikan di Azure.

Untuk informasi selengkapnya tentang cara kerja pemberitahuan di Azure, lihat Ringkasan pemberitahuan di Microsoft Azure.

Bagian berikut menunjukkan bagaimana Anda dapat mengonfigurasi berbagai jenis pemberitahuan menggunakan kode Bicep.

Grup tindakan

Untuk diberi tahu ketika pemberitahuan telah dipicu, Anda perlu membuat grup tindakan. Grup tindakan adalah kumpulan preferensi pemberitahuan yang ditentukan oleh pemilik langganan Azure. Grup tindakan digunakan untuk memberi tahu pengguna bahwa pemberitahuan telah dipicu, atau untuk memicu respons otomatis terhadap pemberitahuan.

Untuk membuat grup tindakan di Bicep, Anda bisa menggunakan jenis Microsoft.Insights /actionGroups. Berikut contohnya:

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

Contoh sebelumnya membuat grup tindakan yang mengirim pemberitahuan ke alamat email, tetapi Anda juga dapat menentukan grup tindakan yang mengirim pemberitahuan ke Azure Event Hubs, Azure Functions, Logic Apps, dan lainnya.

Aturan pemrosesan peringatan

Aturan pemrosesan pemberitahuan (sebelumnya disebut sebagai aturan tindakan) memungkinkan Anda menerapkan pemrosesan pada pemberitahuan yang telah diaktifkan. Anda dapat membuat aturan pemrosesan pemberitahuan di Bicep menggunakan jenis Microsoft.AlertsManagement/actionRules.

Setiap aturan pemrosesan pemberitahuan memiliki cakupan, yang bisa menjadi daftar satu atau beberapa sumber daya tertentu, grup sumber daya tertentu, atau seluruh langganan Azure Anda. Saat Anda menentukan aturan pemrosesan pemberitahuan di Bicep, Anda menentukan daftar ID sumber daya di properti cakupan, yang menargetkan sumber daya tersebut untuk aturan pemrosesan pemberitahuan.

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

Dalam contoh sebelumnya, aturan pemrosesan pemberitahuan MonitorService pada Azure Backup Vault ditentukan, yang diterapkan ke grup tindakan yang ada. Aturan ini memicu pemberitahuan ke grup tindakan.

Aturan pemberitahuan log

Pemberitahuan log secara otomatis menjalankan kueri Analitik Log. Kueri yang digunakan untuk mengevaluasi log sumber daya pada interval yang Anda tentukan, menentukan apakah hasilnya memenuhi beberapa kriteria yang Anda tentukan, lalu mengaktifkan pemberitahuan.

Anda dapat membuat aturan peringatan log di Bicep dengan menggunakan jenis Microsoft.Insights/scheduledQueryRules.

Aturan pemberitahuan metrik

Peringatan metrik memberi tahu Anda saat salah satu metrik Anda melewati ambang batas yang ditentukan. Anda dapat menentukan aturan pemberitahuan metrik dalam kode Bicep Anda dengan menggunakan jenis Microsoft.Insights /metricAlerts.

Pemberitahuan log aktivitas

Log aktivitas Azure adalah log platform di Azure yang memberikan wawasan tentang peristiwa di tingkat langganan. Ini termasuk informasi seperti ketika sumber daya dalam Azure dimodifikasi.

Peringatan log aktivitas adalah peringatan yang diaktifkan saat terjadi peristiwa log aktivitas baru yang cocok dengan kondisi yang ditentukan dalam peringatan.

Anda dapat menggunakan properti scope dalam jenis Microsoft.Insights /activityLogAlerts untuk membuat pemberitahuan log aktivitas pada sumber daya tertentu atau daftar sumber daya menggunakan ID sumber daya sebagai awalan.

Anda menentukan ketentuan aturan lansiran dalam properti condition dan kemudian mengonfigurasi grup lansiran untuk memicu lansiran ini dengan menggunakan array actionGroup. Di sini Anda dapat meneruskan satu atau beberapa grup tindakan untuk mengirim peringatan log aktivitas, tergantung pada kebutuhan Anda.

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

Peringatan kesehatan sumber daya

Azure Resource Health senantiasa menginformasikan status kesehatan terkini maupun historis dari sumber daya Azure Anda. Dengan membuat pemberitahuan kesehatan sumber daya menggunakan Bicep, Anda dapat membuat dan menyesuaikan pemberitahuan ini secara massal.

Di Bicep, Anda dapat membuat pemberitahuan kesehatan sumber daya dengan jenis Microsoft.Insights /activityLogAlerts.

Pemberitahuan kesehatan sumber daya dapat dikonfigurasi untuk memantau peristiwa di tingkat langganan, grup sumber daya, atau sumber daya individual.

Pertimbangkan contoh berikut, tempat Anda membuat pemberitahuan kesehatan sumber daya yang melaporkan pemberitahuan kesehatan layanan. Pemberitahuan diterapkan di tingkat langganan (menggunakan properti scope), dan mengirim pemberitahuan ke grup tindakan yang sudah ada:

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

Pemberitahuan deteksi pintar

Peringatan deteksi cerdas memperingatkan Anda tentang potensi masalah kinerja dan anomali kegagalan dalam aplikasi web Anda. Anda dapat membuat pemberitahuan deteksi cerdas di Bicep menggunakan jenis Microsoft.AlertsManagement/smartDetectorAlertRules.

Dasbor

Di Bicep, Anda dapat membuat dasbor portal dengan menggunakan jenis sumber daya Microsoft.Portal/dashboards.

Untuk informasi selengkapnya tentang membuat dasbor dengan kode, lihat Membuat Dasbor Azure secara terprogram.

Aturan skala otomatis

Untuk membuat pengaturan autoscaling, Anda menentukannya menggunakan jenis sumber daya Microsoft.Insights /autoscaleSettings.

Untuk menargetkan sumber daya yang ingin Anda terapkan pengaturan penskalaan otomatisnya, Anda perlu menyediakan pengidentifikasi sumber daya target sumber daya tempat pengaturan harus ditambahkan.

Dalam contoh ini, kondisi peluasan skala untuk rencana App Service berdasarkan persentase CPU rata-rata selama periode waktu 10 menit. Jika paket App Service melebihi konsumsi CPU rata-rata 70% selama 10 menit, mesin skala otomatis akan menskalakan paket dengan menambahkan satu instans.

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

Catatan

Saat menentukan aturan penskalaan otomatis, ingatlah praktik terbaik untuk menghindari masalah saat mencoba menskalakan otomatis, seperti flapping. Untuk informasi selengkapnya, lihat dokumentasi berikut tentang praktik terbaik untuk Autoscale.