@@ -8,11 +8,12 @@ Usage() {
8
8
echo " Options:"
9
9
echo " -g| Azure resource group (required)"
10
10
echo " -m| Azure monitor resource name (required)"
11
- echo " -v| Azure VM name (required)"
11
+ echo " -v| Azure VM ID (required)"
12
12
echo " -l| Log analytics workspace name (default: la-footprint)"
13
+ echo " -o| OS Type (default: Windows)"
13
14
}
14
15
15
- while getopts " :g:m:v:l:" opt; do
16
+ while getopts " :g:m:v:l:o: " opt; do
16
17
case $opt in
17
18
g)
18
19
resourceGroup=$OPTARG
@@ -21,11 +22,14 @@ while getopts ":g:m:v:l:" opt; do
21
22
monitorName=$OPTARG
22
23
;;
23
24
v)
24
- vmName =$OPTARG
25
+ vmId =$OPTARG
25
26
;;
26
27
l)
27
28
laName=$OPTARG
28
29
;;
30
+ o)
31
+ osType=$OPTARG
32
+ ;;
29
33
\? )
30
34
echo " Invalid option -$OPTARG " >&2
31
35
exit 1
@@ -40,7 +44,7 @@ while getopts ":g:m:v:l:" opt; do
40
44
esac
41
45
done
42
46
43
- if [[ $OPTIND -eq 1 || -z $resourceGroup || -z $vmName || -z $monitorName ]]; then
47
+ if [[ $OPTIND -eq 1 || -z $resourceGroup || -z $vmId || -z $monitorName ]]; then
44
48
Usage
45
49
exit 1
46
50
fi
@@ -49,18 +53,13 @@ laName="${laName:-la-footprint}"
49
53
BASEDIR=$( dirname $0 )
50
54
51
55
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} "
54
60
ruleName=" $vmName -hostmemcollector"
55
61
subscriptionId=$( az account show --query id -o tsv)
56
62
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
-
64
63
grafanaName=$( az grafana list --query " [?resourceGroup=='$resourceGroup '].name" -o tsv)
65
64
if [ -z $grafanaName ]; then
66
65
echo " Error: Grafana resource not found. Please create a Grafana resource first."
69
68
echo " Grafana resource ($grafanaName ) found. Use existing..."
70
69
fi
71
70
72
- allDashboardName=" Memory Footprint"
73
- hostDashboardName=" Memory Footprint - Host"
71
+ allDashboardName=" Memory Footprint $osType "
72
+ hostDashboardName=" Memory Footprint - Host $osType "
74
73
echo " Creating grafana dashboard..."
75
74
sed -i " s/##SUBSCRIPTION_ID##/$subscriptionId /g" monitoring/mem_by_all.json
76
75
sed -i " s/##SUBSCRIPTION_ID##/$subscriptionId /g" monitoring/mem_by_proc.json
@@ -89,7 +88,7 @@ if [ $osType == "Linux" ]; then
89
88
sed -i " s?##TABLE_QUERY##?$t_query ?g" monitoring/mem_by_proc.json
90
89
sed -i " s/##MEM_UNIT##/decbytes/g" monitoring/mem_by_proc.json
91
90
else
92
- echo " Windows OS detected. Using Linux queries..."
91
+ echo " Windows OS detected. Using Windows queries..."
93
92
echo $ts_query
94
93
echo $t_query
95
94
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
143
142
echo " Log analytics table already exists"
144
143
fi
145
144
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)
147
146
dataCollectionEndpointId=$( echo $monitor_resource | jq -r .properties.defaultIngestionSettings.dataCollectionEndpointResourceId)
148
147
if [ -z $ruleId ]; then
149
148
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 \
151
150
--parameters ruleName=$ruleName dataCollectionEndpointId=$dataCollectionEndpointId logAnalyticsWorkspaceId=$laId | jq -r ' .properties.outputResources[0].id' )
152
151
else
153
152
echo " Data collection rule found: $ruleId "
154
153
fi
155
154
156
- vmId=$( echo $vmResource | jq -r .id)
157
155
if [[ -z $( az monitor data-collection rule association show --name configurationAccessEndpoint --resource $vmId 2> /dev/null | jq .name) ]]; then
158
156
echo " Associate vm $vmId with rule..."
159
157
az monitor data-collection rule association create --name configurationAccessEndpoint --resource $vmId --endpoint-id $dataCollectionEndpointId
0 commit comments