@@ -8,11 +8,12 @@ Usage() {
88 echo " Options:"
99 echo " -g| Azure resource group (required)"
1010 echo " -m| Azure monitor resource name (required)"
11- echo " -v| Azure VM name (required)"
11+ echo " -v| Azure VM ID (required)"
1212 echo " -l| Log analytics workspace name (default: la-footprint)"
13+ echo " -o| OS Type (default: Windows)"
1314}
1415
15- while getopts " :g:m:v:l:" opt; do
16+ while getopts " :g:m:v:l:o: " opt; do
1617 case $opt in
1718 g)
1819 resourceGroup=$OPTARG
@@ -21,11 +22,14 @@ while getopts ":g:m:v:l:" opt; do
2122 monitorName=$OPTARG
2223 ;;
2324 v)
24- vmName =$OPTARG
25+ vmId =$OPTARG
2526 ;;
2627 l)
2728 laName=$OPTARG
2829 ;;
30+ o)
31+ osType=$OPTARG
32+ ;;
2933 \? )
3034 echo " Invalid option -$OPTARG " >&2
3135 exit 1
@@ -40,7 +44,7 @@ while getopts ":g:m:v:l:" opt; do
4044 esac
4145done
4246
43- if [[ $OPTIND -eq 1 || -z $resourceGroup || -z $vmName || -z $monitorName ]]; then
47+ if [[ $OPTIND -eq 1 || -z $resourceGroup || -z $vmId || -z $monitorName ]]; then
4448 Usage
4549 exit 1
4650fi
@@ -49,18 +53,13 @@ laName="${laName:-la-footprint}"
4953BASEDIR=$( dirname $0 )
5054
5155monitor_resource=$( az resource show --resource-type Microsoft.monitor/accounts --name $monitorName --resource-group $resourceGroup | jq -c .)
52- vmResource=$( az vm show --name $vmName --resource-group $resourceGroup | jq -c .)
53- osType=$( echo $vmResource | jq -r .storageProfile.osDisk.osType)
56+ vmResource=$( az resource show --ids $vmId )
57+ vmName=$( echo $vmResource | jq -r .name)
58+ vmResourceGroup=$( echo $vmResource | jq -r .resourceGroup)
59+ osType=" ${osType:- Windows} "
5460ruleName=" $vmName -hostmemcollector"
5561subscriptionId=$( az account show --query id -o tsv)
5662
57- agent=AzureMonitor${osType} Agent
58- if [[ -z $( az vm extension show --name $agent --vm-name $vmName -g $resourceGroup 2> /dev/null | jq .name) ]]; then
59- echo " Installing AzureMonitor agent extension on $vmName ..."
60- az vm extension set --name $agent --publisher Microsoft.Azure.Monitor --vm-name $vmName -g $resourceGroup
61- fi
62- echo $agent installed.
63-
6463grafanaName=$( az grafana list --query " [?resourceGroup=='$resourceGroup '].name" -o tsv)
6564if [ -z $grafanaName ]; then
6665 echo " Error: Grafana resource not found. Please create a Grafana resource first."
6968 echo " Grafana resource ($grafanaName ) found. Use existing..."
7069fi
7170
72- allDashboardName=" Memory Footprint"
73- hostDashboardName=" Memory Footprint - Host"
71+ allDashboardName=" Memory Footprint $osType "
72+ hostDashboardName=" Memory Footprint - Host $osType "
7473echo " Creating grafana dashboard..."
7574sed -i " s/##SUBSCRIPTION_ID##/$subscriptionId /g" monitoring/mem_by_all.json
7675sed -i " s/##SUBSCRIPTION_ID##/$subscriptionId /g" monitoring/mem_by_proc.json
@@ -89,7 +88,7 @@ if [ $osType == "Linux" ]; then
8988 sed -i " s?##TABLE_QUERY##?$t_query ?g" monitoring/mem_by_proc.json
9089 sed -i " s/##MEM_UNIT##/decbytes/g" monitoring/mem_by_proc.json
9190else
92- echo " Windows OS detected. Using Linux queries..."
91+ echo " Windows OS detected. Using Windows queries..."
9392 echo $ts_query
9493 echo $t_query
9594 ts_query=' ResidentSetSummary_CL\\r\\n| where $__timeFilter(TimeGenerated)\\r\\n| summarize Memory=sum(SizeMB)*1024 by TraceProcessName, TimeGenerated\\r\\n| order by TimeGenerated asc'
@@ -143,17 +142,16 @@ else
143142 echo " Log analytics table already exists"
144143fi
145144
146- ruleId=$( az monitor data-collection rule show --name $ruleName -g $resourceGroup 2> /dev/null | jq -r .id)
145+ ruleId=$( az monitor data-collection rule show --name $ruleName -g $vmResourceGroup 2> /dev/null | jq -r .id)
147146dataCollectionEndpointId=$( echo $monitor_resource | jq -r .properties.defaultIngestionSettings.dataCollectionEndpointResourceId)
148147if [ -z $ruleId ]; then
149148 echo " Creating data collection rule..."
150- ruleId=$( az deployment group create -n hostmemdc -g $resourceGroup --template-file $BASEDIR /hostmemcollector.$osType .bicep \
149+ ruleId=$( az deployment group create -n hostmemdc -g $vmResourceGroup --template-file $BASEDIR /hostmemcollector.$osType .bicep \
151150 --parameters ruleName=$ruleName dataCollectionEndpointId=$dataCollectionEndpointId logAnalyticsWorkspaceId=$laId | jq -r ' .properties.outputResources[0].id' )
152151else
153152 echo " Data collection rule found: $ruleId "
154153fi
155154
156- vmId=$( echo $vmResource | jq -r .id)
157155if [[ -z $( az monitor data-collection rule association show --name configurationAccessEndpoint --resource $vmId 2> /dev/null | jq .name) ]]; then
158156 echo " Associate vm $vmId with rule..."
159157 az monitor data-collection rule association create --name configurationAccessEndpoint --resource $vmId --endpoint-id $dataCollectionEndpointId
0 commit comments