تمرين - توزيع الموارد الملحقة واستخدام الموارد الموجودة

مكتمل

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

أثناء العملية، ستقوم بما يلي:

  • إنشاء مساحة عمل Log Analytics.
  • قم بتحديث ملف Bicep لإضافة إعدادات تشخيصية إلى حساب Cosmos DB الخاص بك.
  • إنشاء حساب تخزين.
  • في ملف Bicep، قم بتحديث إعدادات التشخيص لحساب التخزين.
  • قم بنشر القالب والتحقق من النتيجة.

إنشاء مساحة عمل Log Analytics

قم بإنشاء مساحة عمل Log Analytics لمحاكاة وجود مساحة تم إنشاؤها بالفعل في مؤسستك. استخدام Azure CLI بدلا من Bicep.

شغِّل أمر Azure CLI التالي في الوحدة الطرفية:

az monitor log-analytics workspace create \
  --workspace-name ToyLogs \
  --location eastus

قم بإنشاء مساحة عمل Log Analytics لمحاكاة وجود مساحة تم إنشاؤها بالفعل في مؤسستك. استخدم Azure PowerShell بدلاً من Bicep.

شغِّل أمر Azure PowerShell التالي في الوحدة الطرفية:

New-AzOperationalInsightsWorkspace `
  -Name ToyLogs `
  -Location eastus

ملاحظة

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

إضافة إعدادات التشخيص لـ Azure Cosmos DB

يحتاج فريق البحث &التطوير لديك إلى تسجيل جميع الطلبات إلى حساب Azure Cosmos DB. قررت استخدام تكامل Azure Monitor لـ Azure Cosmos DB لتجميع سجل DataPlaneRequests، الذي يحتوي على معلومات حول الطلبات إلى Azure Cosmos DB.

والآن، بعد أن أنشأت مساحة عمل Log Analytics الموجودة التي تمت محاكاتها مسبقًا، يمكنك الإشارة إليها من داخل قالب Bicep كمورد موجود. يمكنك استخدامه كوجهة لسجلات DB Cosmos Azure.

لإضافة إعدادات التشخيص، قم بما يلي:

  1. في تعليمة Visual Studio البرمجية، افتح الملف main.bicep ثم أضف التعليمة البرمجية التالية أسفل تعريفات المتغير الموجودة:

    var logAnalyticsWorkspaceName = 'ToyLogs'
    var cosmosDBAccountDiagnosticSettingsName = 'route-logs-to-log-analytics'
    
  2. في الجزء السفلي من الملف، أسفل تعريفات الموارد، أضف التعليمات البرمجية التالية:

    resource logAnalyticsWorkspace 'Microsoft.OperationalInsights/workspaces@2020-03-01-preview' existing = {
      name: logAnalyticsWorkspaceName
    }
    

    لاحظ أن تعريف المورد هذا يستخدم الكلمة الأساسية existing، وأنك تغفل عمدًا الخصائص الأخرى التي تحددها عادةً إذا كنت تقوم بتوزيع مساحة عمل Log Analytics من خلال قالب Bicep هذا.

  3. أسفل التعليمات البرمجية التي قمت بإضافتها للتو، أضف التعليمات البرمجية التالية:

    resource cosmosDBAccountDiagnostics 'Microsoft.Insights/diagnosticSettings@2017-05-01-preview' = {
      scope: cosmosDBAccount
      name: cosmosDBAccountDiagnosticSettingsName
      properties: {
        workspaceId: logAnalyticsWorkspace.id
        logs: [
          {
            category: 'DataPlaneRequests'
            enabled: true
          }
        ]
      }
    }
    

    لاحظ أن هذه التعليمات البرمجية يتم من خلالها توزيع مورد ملحق. ويستخدم الكلمة الأساسية scope لإخبار Bicep أنه يجب إرفاق المورد بحساب Azure Cosmos DB. تستخدم التعليمات البرمجية أيضًا خاصية id للمورد الموجود logAnalyticsWorkspace، بحيث يفهم Azure المكان الذي سيرسل إليه سجلات Azure Cosmos DB.

إنشاء حساب تخزين لمستندات تصميم اللعبة

أنشئ حساب تخزين Azure لمحاكاة قيام فريق البحث &التطوير لديك بالفعل بإنشاء حساب في مؤسستك. استخدام Azure CLI بدلاً من Bicep.

شغِّل أمر Azure CLI التالي في الوحدة الطرفية. استبدل {storageaccountname} ليحل محله اسمًا من المحتمل أن يكون فريدًا. يجب أن يكون الاسم بالكامل بأحرف صغيرة، وأن يحتوي على 24 حرفًا أو أقل، وألا يحتوي على مسافات أو أحرف خاصة. احتفظ بملاحظة بالاسم لاستخدامها لاحقًا.

az storage account create \
  --name {storageaccountname} \
  --location eastus

أنشئ حساب تخزين Azure لمحاكاة قيام فريق البحث &التطوير لديك بالفعل بإنشاء حساب في مؤسستك. استخدم Azure PowerShell بدلاً من Bicep.

شغِّل أمر Azure PowerShell التالي في الوحدة الطرفية. استبدل {storageaccountname} ليحل محله اسمًا من المحتمل أن يكون فريدًا. يجب أن يكون الاسم بالكامل بأحرف صغيرة، وأن يحتوي على 24 حرفًا أو أقل، وألا يحتوي على مسافات أو أحرف خاصة.

New-AzStorageAccount `
  -Name {storageaccountname} `
  -Location eastus `
  -SkuName Standard_LRS

إضافة إعدادات التشخيص لحساب التخزين

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

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

  1. بالقرب من أعلى الملف main.bicep أسفل تعريفات المعلمة، أضف تعريف المعلمة التالية:

    param storageAccountName string
    
  2. ضمن تعريفات المتغير، أضف تعريف المتغير التالي:

    var storageAccountBlobDiagnosticSettingsName = 'route-logs-to-log-analytics'
    
  3. في أسفل الملف، ضمن تعريفات الموارد، أضف ما يلي:

    resource storageAccount 'Microsoft.Storage/storageAccounts@2019-06-01' existing = {
      name: storageAccountName
    
      resource blobService 'blobServices' existing = {
        name: 'default'
      }
    }
    

    لاحظ أن كلاً من هذه الموارد تستخدم الكلمة الأساسية existing.

  4. في الجزء السفلي من الملف أسفل تعريف حساب التخزين الذي أضفته للتو، أضف ما يلي:

    resource storageAccountBlobDiagnostics 'Microsoft.Insights/diagnosticSettings@2017-05-01-preview' = {
      scope: storageAccount::blobService
      name: storageAccountBlobDiagnosticSettingsName
      properties: {
        workspaceId: logAnalyticsWorkspace.id
        logs: [
          {
            category: 'StorageRead'
            enabled: true
          }
          {
            category: 'StorageWrite'
            enabled: true
          }
          {
            category: 'StorageDelete'
            enabled: true
          }
        ]
      }
    }
    

    لاحظ أن المورد الملحق هذا يحتوي على scope معينًا إلى المورد المتداخل الموجود. يفهم Bicep أنه يجب إرفاق المورد الملحق إلى المورد التابع blobServices.

    بعد الانتهاء، يجب أن يظهر قالب Bicep لديك كما يلي:

    param cosmosDBAccountName string = 'toyrnd-${uniqueString(resourceGroup().id)}'
    param cosmosDBDatabaseThroughput int = 400
    param location string = resourceGroup().location
    param storageAccountName string
    
    var cosmosDBDatabaseName = 'FlightTests'
    var cosmosDBContainerName = 'FlightTests'
    var cosmosDBContainerPartitionKey = '/droneId'
    var logAnalyticsWorkspaceName = 'ToyLogs'
    var cosmosDBAccountDiagnosticSettingsName = 'route-logs-to-log-analytics'
    var storageAccountBlobDiagnosticSettingsName = 'route-logs-to-log-analytics'
    
    resource cosmosDBAccount 'Microsoft.DocumentDB/databaseAccounts@2020-04-01' = {
      name: cosmosDBAccountName
      location: location
      properties: {
        databaseAccountOfferType: 'Standard'
        locations: [
          {
            locationName: location
          }
        ]
      }
    }
    
    resource cosmosDBDatabase 'Microsoft.DocumentDB/databaseAccounts/sqlDatabases@2020-04-01' = {
      parent: cosmosDBAccount
      name: cosmosDBDatabaseName
      properties: {
        resource: {
          id: cosmosDBDatabaseName
        }
        options: {
          throughput: cosmosDBDatabaseThroughput
        }
      }
    
      resource container 'containers' = {
        name: cosmosDBContainerName
        properties: {
          resource: {
            id: cosmosDBContainerName
            partitionKey: {
              kind: 'Hash'
              paths: [
                cosmosDBContainerPartitionKey
              ]
            }
          }
          options: {}
        }
      }
    }
    
    resource logAnalyticsWorkspace 'Microsoft.OperationalInsights/workspaces@2020-03-01-preview' existing = {
      name: logAnalyticsWorkspaceName
    }
    
    resource cosmosDBAccountDiagnostics 'Microsoft.Insights/diagnosticSettings@2017-05-01-preview' = {
      scope: cosmosDBAccount
      name: cosmosDBAccountDiagnosticSettingsName
      properties: {
        workspaceId: logAnalyticsWorkspace.id
        logs: [
          {
            category: 'DataPlaneRequests'
            enabled: true
          }
        ]
      }
    }
    
    resource storageAccount 'Microsoft.Storage/storageAccounts@2019-06-01' existing = {
      name: storageAccountName
    
      resource blobService 'blobServices' existing = {
        name: 'default'
      }
    }
    
    resource storageAccountBlobDiagnostics 'Microsoft.Insights/diagnosticSettings@2017-05-01-preview' = {
      scope: storageAccount::blobService
      name: storageAccountBlobDiagnosticSettingsName
      properties: {
        workspaceId: logAnalyticsWorkspace.id
        logs: [
          {
            category: 'StorageRead'
            enabled: true
          }
          {
            category: 'StorageWrite'
            enabled: true
          }
          {
            category: 'StorageDelete'
            enabled: true
          }
        ]
      }
    }
    
  5. احفظ التغييرات إلى الملف.

نشر القالب إلى Azure

شغِّل أمر Azure CLI التالي في الوحدة الطرفية. استبدل {storageaccountname} ليحل محله اسم حساب التخزين الذي أنشأته مسبقًا في هذا التمرين:

az deployment group create \
  --template-file main.bicep \
  --parameters storageAccountName={storageaccountname}

شغِّل أمر Azure PowerShell التالي في الوحدة الطرفية. استبدل {storageaccountname} ليحل محله اسم حساب التخزين الذي أنشأته مسبقًا في هذا التمرين:

New-AzResourceGroupDeployment `
  -TemplateFile main.bicep `
  -storageAccountName {storageaccountname}

التحقق من عملية نشرك

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

  2. حدد رابط "1 Succeeded".

  3. حدد عملية النشر باسم "main"، ثم حدد "Deployment details" لتوسيع قائمة الموارد التي تم نشرها.

    Screenshot of the Azure portal interface for the specific deployment, with the Azure Cosmos DB resources as well as two resources with type Microsoft.Insights/diagnosticSettings.

    لاحظ أن هناك موردين مدرجين بالنوع Microsoft.Insights/diagnosticSettings. إنها تمثل موارد ملحقة قمت بتوزيعها. تم إرفاق أحد الموارد بحساب التخزين، والآخر تم إرفاقه بحساب Azure Cosmos DB. الآن، سوف تتحقق من أن إعدادات التشخيص لـ Azure Cosmos DB تم تكوينها بشكل صحيح.

  4. حدد مورد حساب Azure Cosmos DB. سيتم فتح المدخل إلى حساب Azure Cosmos DB.

    Screenshot of the Azure portal interface for the specific deployment, with the Azure Cosmos DB account highlighted.

  5. في حقل Search في أعلى اليسار، أدخل Diagnostic settings واختر عنصر القائمة Diagnostic settings.

    Screenshot of the Azure portal interface for the Azure Cosmos DB account, showing the search field with 'Diagnostic settings' entered and the 'Diagnostic settings' menu item highlighted.

  6. قد يطالبك مدخل Azure بتمكين دعم استعلام النص الكامل للتسجيل. لا تحتاج إليه لهذا التمرين، لذا حدد Not now.

    Screenshot of the Azure portal interface for the Azure Cosmos DB account showing Diagnostic settings page with prompt to enable full-text query.

  7. لاحظ أن هناك إعداد تشخيص يسمى route-logs-to-log-analytics، والذي تم تكوينه لتوجيه السجلات إلى مساحة عمل ToyLogs.

    Screenshot of the Azure portal interface for the Azure Cosmos DB account, showing the diagnostic settings.

    إذا أردت، يمكنك أيضًا التحقق من أن حساب التخزين يحتوي على إعداد تشخيص مماثل تم تمكينه لتخزين كائنات blob.