Professor Dr. Kazemi

MST400 Lab 08

Implement Monitoring — Interactive Lab Manual · Fall 2026

Task 1: Use a template to provision an infrastructure 10 pts

In this task, you will deploy a virtual machine that will be used to test monitoring scenarios.

  1. SettingValue
    SubscriptionYour Azure subscription
    Resource group<yourName>-mst400-F67-rg (select Create new)
    RegionEast US
    Usernamelocaladmin
    PasswordProvide a complex password
    Vm Name Prefix<your initials>-mst-F67-vm
  2. Screenshot must show your Odl_user account, the deployed resources: one virtual network and one virtual machine in <yourName>-mst400-F67-rg

Task 2: Create an alert and configure action group notifications 20 pts

First let’s configure Azure Monitor for virtual machines (this will be used in the last task).

Did you know? You can add up to five action groups to an alert rule. Action groups are executed concurrently, in no specific order. Multiple alert rules can use the same action group.
  1. SettingValue
    Subscriptionyour subscription
    Resource group<yourName>-mst400-F67-rg
    RegionGlobal (default)
    Action group nameAlert the operations team (must be unique in the resource group)
    Display nameAlertOpsTeam
  2. SettingValue
    Notification typeSelect Email/SMS message/Push/Voice
    NameVM was deleted
Note: You should receive an email notification saying you were added to an action group. There may be a few minutes delay, but that is a sure sign the rule has deployed.
  1. SettingValue
    Alert rule nameVM was deleted
    Alert rule descriptionA VM in your resource group was deleted
  2. Screenshot must show your Odl_user account, the created alert rule VM was deleted with its description and the AlertOpsTeam action group

Task 3: Trigger an alert and confirm it is working 15 pts

In this task, you trigger the alert and confirm a notification is sent.

Note: If you delete the virtual machine before the alert rule deploys, the alert rule might not be triggered.
Note: It can take a few minutes for the alert email to be sent and for the alerts to be updated in the portal. If you don’t want to wait, continue to the next task and then return.
  1. Screenshot must show your Odl_user account, the Alert details pane for the VM was deleted alert with its event details

Task 4: Configure an alert processing rule 15 pts

In this task, you create an alert rule to suppress notifications during a maintenance period.

  1. SettingValue
    Apply the ruleAt a specific time
    StartEnter today’s date at 10 pm.
    EndEnter tomorrow’s date at 7 am.
    Time zoneSelect the local timezone.
  2. SettingValue
    Resource group<yourName>-mst400-F67-rg
    Rule namePlanned Maintenance
    DescriptionSuppress notifications during planned maintenance.
  3. Screenshot must show your Odl_user account, the alert processing rule Planned Maintenance with its overnight schedule (10 pm to 7 am) and its description

Task 5: Use Azure Monitor log queries 20 pts

In this task, you will use Azure Monitor to query the data captured from the virtual machine.

  1. Screenshot must show your Odl_user account, the Count heartbeats query on the heartbeat table with the heartbeat count results
  2. InsightsMetrics
    | where TimeGenerated > ago(2h)
    | where Name == "UtilizationPercentage"
    | summarize avg(Val) by bin(TimeGenerated, 5m), Computer //split up by computer
    | render timechart with (title= "<yourName> Chart")
    Screenshot must show your Odl_user account, the InsightsMetrics UtilizationPercentage timechart titled “<yourName> Chart”

Task 6: Summary Questions & Review 20 pts

Minimum 2-3 sentences each — original thinking, your own words!

Your submission preview

Screenshots you attach above and your Task 6 answers appear here. This is exactly what prints/exported as your PDF.

Submit compile & export

\s*/, ''); return sha(stripped).then(function (h) { if (h !== exp.doc) fail('This lab file has been modified.'); }); }), fetch(exp.jsUrl, { cache: 'no-store' }).then(function (r) { return r.text(); }).then(sha).then(function (h) { if (h !== exp.js) fail('Script has been modified.'); }), fetch(exp.cssUrl, { cache: 'no-store' }).then(function (r) { return r.text(); }).then(sha).then(function (h) { if (h !== exp.css) fail('Stylesheet has been modified.'); }) ]; Promise.all(jobs).catch(function () { if (!failed) fail('Could not verify page integrity.'); }); })();