Skip to content

Commit 83f8a1b

Browse files
weiran314weiran-ms
andauthored
Separate VM extension installation from hostmemusage collector configuration (#18)
Co-authored-by: Wei Ran <[email protected]>
1 parent 1351388 commit 83f8a1b

File tree

3 files changed

+78
-20
lines changed

3 files changed

+78
-20
lines changed

.github/workflows/build-monitoring.yaml

+7-1
Original file line numberDiff line numberDiff line change
@@ -52,5 +52,11 @@ jobs:
5252
az extension add --name amg
5353
- name: Create Azure Monitor and Grafana resources
5454
run: bash ${GITHUB_WORKSPACE}/scripts/configure-azmon-grafana.sh -g $resourceGroup -m $monitorName -d $grafanaName -c $clusterName
55+
- name: Create Azure Monitor for VM
56+
run: bash ${GITHUB_WORKSPACE}/scripts/configure-vm-azmon.sh -v $vmName -g $resourceGroup -m $monitorName
5557
- name: Configure hostmemusage collection
56-
run: bash ${GITHUB_WORKSPACE}/scripts/configure-vm-hostmemusage-collector.sh -v $vmName -g $resourceGroup -l $logAnalytics -m $monitorName
58+
run: |
59+
vmResource=$(az vm show --name $vmName --resource-group $resourceGroup | jq -c .)
60+
osType=$(echo $vmResource | jq -r .storageProfile.osDisk.osType)
61+
vmId=$(echo $vmResource | jq -r .id)
62+
bash ${GITHUB_WORKSPACE}/scripts/configure-vm-hostmemusage-collector.sh -v $vmId -g $resourceGroup -l $logAnalytics -m $monitorName -o $osType

scripts/configure-vm-azmon.sh

+54
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,54 @@
1+
#!/bin/bash
2+
set -e
3+
4+
Usage() {
5+
echo "Usage: configure-vm-azmon.sh <OPTIONS>"
6+
echo "Description:"
7+
echo " Creates Azure Monitor for VM"
8+
echo "Options:"
9+
echo " -g| Azure resource group (required)"
10+
echo " -m| Azure monitor resource name (required)"
11+
echo " -v| Azure VM name (required)"
12+
}
13+
14+
while getopts ":g:m:v:" opt; do
15+
case $opt in
16+
g)
17+
resourceGroup=$OPTARG
18+
;;
19+
m)
20+
monitorName=$OPTARG
21+
;;
22+
v)
23+
vmName=$OPTARG
24+
;;
25+
\?)
26+
echo "Invalid option -$OPTARG" >&2
27+
exit 1
28+
;;
29+
esac
30+
31+
case $OPTARG in
32+
-*)
33+
echo "Option $opt needs a valid argument"
34+
exit 1
35+
;;
36+
esac
37+
done
38+
39+
if [[ $OPTIND -eq 1 || -z $resourceGroup || -z $vmName || -z $monitorName ]]; then
40+
Usage
41+
exit 1
42+
fi
43+
44+
BASEDIR=$(dirname $0)
45+
46+
vmResource=$(az vm show --name $vmName --resource-group $resourceGroup | jq -c .)
47+
osType=$(echo $vmResource | jq -r .storageProfile.osDisk.osType)
48+
49+
agent=AzureMonitor${osType}Agent
50+
if [[ -z $(az vm extension show --name $agent --vm-name $vmName -g $resourceGroup 2>/dev/null | jq .name) ]]; then
51+
echo "Installing AzureMonitor agent extension on $vmName..."
52+
az vm extension set --name $agent --publisher Microsoft.Azure.Monitor --vm-name $vmName -g $resourceGroup
53+
fi
54+
echo $agent installed.

scripts/configure-vm-hostmemusage-collector.sh

+17-19
Original file line numberDiff line numberDiff line change
@@ -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
4145
done
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
4650
fi
@@ -49,18 +53,13 @@ laName="${laName:-la-footprint}"
4953
BASEDIR=$(dirname $0)
5054

5155
monitor_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}"
5460
ruleName="$vmName-hostmemcollector"
5561
subscriptionId=$(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-
6463
grafanaName=$(az grafana list --query "[?resourceGroup=='$resourceGroup'].name" -o tsv)
6564
if [ -z $grafanaName ]; then
6665
echo "Error: Grafana resource not found. Please create a Grafana resource first."
@@ -69,8 +68,8 @@ else
6968
echo "Grafana resource ($grafanaName) found. Use existing..."
7069
fi
7170

72-
allDashboardName="Memory Footprint"
73-
hostDashboardName="Memory Footprint - Host"
71+
allDashboardName="Memory Footprint $osType"
72+
hostDashboardName="Memory Footprint - Host $osType"
7473
echo "Creating grafana dashboard..."
7574
sed -i "s/##SUBSCRIPTION_ID##/$subscriptionId/g" monitoring/mem_by_all.json
7675
sed -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
9190
else
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"
144143
fi
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)
147146
dataCollectionEndpointId=$(echo $monitor_resource | jq -r .properties.defaultIngestionSettings.dataCollectionEndpointResourceId)
148147
if [ -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')
152151
else
153152
echo "Data collection rule found: $ruleId"
154153
fi
155154

156-
vmId=$(echo $vmResource | jq -r .id)
157155
if [[ -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

Comments
 (0)