@@ -11,12 +11,14 @@ ms.topic: troubleshooting-general
1111ms.workload : infrastructure-services
1212ms.tgt_pltfrm : vm-linux
1313ms.custom : sap:VM Performance
14- ms.date : 07/31/2024
14+ ms.date : 02/06/2025
1515
1616---
1717
1818# Collect performance metrics for a Linux VM
1919
20+ [ ![ Deploy to Azure] ( https://aka.ms/deploytoazurebutton )] ( https://go.microsoft.com/fwlink/?linkid=2303209 )
21+
2022** Applies to:** :heavy_check_mark : Linux VMs
2123
2224This article describes how to retrieve performance metrics from a Linux virtual machine (VM) in Microsoft Azure by using the Sysstat utilities (performance monitoring tools). It provides examples of how to use these utilities and read their outputs.
@@ -107,7 +109,7 @@ mpstat -P ALL 1 2
107109``` azurecli-interactive
108110output=$(az vm run-command invoke --resource-group $MY_RESOURCE_GROUP_NAME --name $MY_VM_NAME --command-id RunShellScript --scripts 'mpstat -P ALL 1 2')
109111value=$(echo "$output" | jq -r '.value[0].message')
110- extracted=$(echo "$value" | awk '/\ [stdout\ ]/,/\ [stderr\ ]/' | sed '/\ [stdout\ ]/d' | sed '/\ [stderr\ ]/d')
112+ extracted=$(echo "$value" | awk '/[stdout]/,/[stderr]/' | sed '/[stdout]/d' | sed '/[stderr]/d')
111113echo "$extracted"
112114```
113115
@@ -199,7 +201,7 @@ vmstat -w 1 5
199201``` azurecli-interactive
200202output=$(az vm run-command invoke --resource-group $MY_RESOURCE_GROUP_NAME --name $MY_VM_NAME --command-id RunShellScript --scripts 'vmstat -w 1 5')
201203value=$(echo "$output" | jq -r '.value[0].message')
202- extracted=$(echo "$value" | awk '/\ [stdout\ ]/,/\ [stderr\ ]/' | sed '/\ [stdout\ ]/d' | sed '/\ [stderr\ ]/d')
204+ extracted=$(echo "$value" | awk '/[stdout]/,/[stderr]/' | sed '/[stdout]/d' | sed '/[stderr]/d')
203205echo "$extracted"
204206```
205207
@@ -308,7 +310,7 @@ uptime
308310``` azurecli-interactive
309311output=$(az vm run-command invoke --resource-group $MY_RESOURCE_GROUP_NAME --name $MY_VM_NAME --command-id RunShellScript --scripts 'uptime')
310312value=$(echo "$output" | jq -r '.value[0].message')
311- extracted=$(echo "$value" | awk '/\ [stdout\ ]/,/\ [stderr\ ]/' | sed '/\ [stdout\ ]/d' | sed '/\ [stderr\ ]/d')
313+ extracted=$(echo "$value" | awk '/[stdout]/,/[stderr]/' | sed '/[stdout]/d' | sed '/[stderr]/d')
312314echo "$extracted"
313315```
314316
@@ -353,7 +355,7 @@ free -h
353355``` azurecli-interactive
354356output=$(az vm run-command invoke --resource-group $MY_RESOURCE_GROUP_NAME --name $MY_VM_NAME --command-id RunShellScript --scripts 'free -h')
355357value=$(echo "$output" | jq -r '.value[0].message')
356- extracted=$(echo "$value" | awk '/\ [stdout\ ]/,/\ [stderr\ ]/' | sed '/\ [stdout\ ]/d' | sed '/\ [stderr\ ]/d')
358+ extracted=$(echo "$value" | awk '/[stdout]/,/[stderr]/' | sed '/[stdout]/d' | sed '/[stderr]/d')
357359echo "$extracted"
358360```
359361
@@ -390,7 +392,7 @@ swapon -s
390392``` azurecli-interactive
391393output=$(az vm run-command invoke --resource-group $MY_RESOURCE_GROUP_NAME --name $MY_VM_NAME --command-id RunShellScript --scripts 'swapon -s')
392394value=$(echo "$output" | jq -r '.value[0].message')
393- extracted=$(echo "$value" | awk '/\ [stdout\ ]/,/\ [stderr\ ]/' | sed '/\ [stdout\ ]/d' | sed '/\ [stderr\ ]/d')
395+ extracted=$(echo "$value" | awk '/[stdout]/,/[stderr]/' | sed '/[stdout]/d' | sed '/[stderr]/d')
394396echo "$extracted"
395397```
396398
@@ -433,7 +435,7 @@ iostat -dxtm 1 5
433435``` azurecli-interactive
434436output=$(az vm run-command invoke --resource-group $MY_RESOURCE_GROUP_NAME --name $MY_VM_NAME --command-id RunShellScript --scripts 'iostat -dxtm 1 5')
435437value=$(echo "$output" | jq -r '.value[0].message')
436- extracted=$(echo "$value" | awk '/\ [stdout\ ]/,/\ [stderr\ ]/' | sed '/\ [stdout\ ]/d' | sed '/\ [stderr\ ]/d')
438+ extracted=$(echo "$value" | awk '/[stdout]/,/[stderr]/' | sed '/[stdout]/d' | sed '/[stderr]/d')
437439echo "$extracted"
438440```
439441---
@@ -495,7 +497,7 @@ lsblk
495497``` azurecli-interactive
496498output=$(az vm run-command invoke --resource-group $MY_RESOURCE_GROUP_NAME --name $MY_VM_NAME --command-id RunShellScript --scripts 'lsblk')
497499value=$(echo "$output" | jq -r '.value[0].message')
498- extracted=$(echo "$value" | awk '/\ [stdout\ ]/,/\ [stderr\ ]/' | sed '/\ [stdout\ ]/d' | sed '/\ [stderr\ ]/d')
500+ extracted=$(echo "$value" | awk '/[stdout]/,/[stderr]/' | sed '/[stdout]/d' | sed '/[stderr]/d')
499501echo "$extracted"
500502```
501503
@@ -557,7 +559,7 @@ pidstat 1 2
557559``` azurecli-interactive
558560output=$(az vm run-command invoke --resource-group $MY_RESOURCE_GROUP_NAME --name $MY_VM_NAME --command-id RunShellScript --scripts 'pidstat 1 2')
559561value=$(echo "$output" | jq -r '.value[0].message')
560- extracted=$(echo "$value" | awk '/\ [stdout\ ]/,/\ [stderr\ ]/' | sed '/\ [stdout\ ]/d' | sed '/\ [stderr\ ]/d')
562+ extracted=$(echo "$value" | awk '/[stdout]/,/[stderr]/' | sed '/[stdout]/d' | sed '/[stderr]/d')
561563echo "$extracted"
562564```
563565
@@ -607,7 +609,7 @@ pidstat -r 1 2
607609``` azurecli-interactive
608610output=$(az vm run-command invoke --resource-group $MY_RESOURCE_GROUP_NAME --name $MY_VM_NAME --command-id RunShellScript --scripts 'pidstat -r 1 2')
609611value=$(echo "$output" | jq -r '.value[0].message')
610- extracted=$(echo "$value" | awk '/\ [stdout\ ]/,/\ [stderr\ ]/' | sed '/\ [stdout\ ]/d' | sed '/\ [stderr\ ]/d')
612+ extracted=$(echo "$value" | awk '/[stdout]/,/[stderr]/' | sed '/[stdout]/d' | sed '/[stderr]/d')
611613echo "$extracted"
612614```
613615
@@ -664,7 +666,7 @@ pidstat -d 1 2
664666``` azurecli-interactive
665667output=$(az vm run-command invoke --resource-group $MY_RESOURCE_GROUP_NAME --name $MY_VM_NAME --command-id RunShellScript --scripts 'pidstat -d 1 2')
666668value=$(echo "$output" | jq -r '.value[0].message')
667- extracted=$(echo "$value" | awk '/\ [stdout\ ]/,/\ [stderr\ ]/' | sed '/\ [stdout\ ]/d' | sed '/\ [stderr\ ]/d')
669+ extracted=$(echo "$value" | awk '/[stdout]/,/[stderr]/' | sed '/[stdout]/d' | sed '/[stderr]/d')
668670echo "$extracted"
669671```
670672
@@ -718,7 +720,7 @@ ps aux --sort=-%cpu | head -10
718720``` azurecli-interactive
719721output=$(az vm run-command invoke --resource-group $MY_RESOURCE_GROUP_NAME --name $MY_VM_NAME --command-id RunShellScript --scripts 'ps aux --sort=-%cpu | head -10')
720722value=$(echo "$output" | jq -r '.value[0].message')
721- extracted=$(echo "$value" | awk '/\ [stdout\ ]/,/\ [stderr\ ]/' | sed '/\ [stdout\ ]/d' | sed '/\ [stderr\ ]/d')
723+ extracted=$(echo "$value" | awk '/[stdout]/,/[stderr]/' | sed '/[stdout]/d' | sed '/[stderr]/d')
722724echo "$extracted"
723725```
724726
@@ -750,7 +752,7 @@ ps aux --sort=-%mem| head -10
750752``` azurecli-interactive
751753output=$(az vm run-command invoke --resource-group $MY_RESOURCE_GROUP_NAME --name $MY_VM_NAME --command-id RunShellScript --scripts 'ps aux --sort=-%mem| head -10')
752754value=$(echo "$output" | jq -r '.value[0].message')
753- extracted=$(echo "$value" | awk '/\ [stdout\ ]/,/\ [stderr\ ]/' | sed '/\ [stdout\ ]/d' | sed '/\ [stderr\ ]/d')
755+ extracted=$(echo "$value" | awk '/[stdout]/,/[stderr]/' | sed '/[stdout]/d' | sed '/[stderr]/d')
754756echo "$extracted"
755757```
756758
@@ -788,7 +790,7 @@ This script saves the output of the commands in a file located in the same direc
788790``` azurecli-interactive
789791output=$(az vm run-command invoke --resource-group $MY_RESOURCE_GROUP_NAME --name $MY_VM_NAME --command-id RunShellScript --scripts 'mpstat -P ALL 1 2 && vmstat -w 1 5 && uptime && free -h && swapon && iostat -dxtm 1 1 && lsblk && ls -l /dev/disk/azure && pidstat 1 1 -h --human && pidstat -r 1 1 -h --human && pidstat -d 1 1 -h --human && ps aux --sort=-%cpu | head -20 && ps aux --sort=-%mem | head -20')
790792value=$(echo "$output" | jq -r '.value[0].message')
791- extracted=$(echo "$value" | awk '/\ [stdout\ ]/,/\ [stderr\ ]/' | sed '/\ [stdout\ ]/d' | sed '/\ [stderr\ ]/d')
793+ extracted=$(echo "$value" | awk '/[stdout]/,/[stderr]/' | sed '/[stdout]/d' | sed '/[stderr]/d')
792794echo "$extracted"
793795```
794796
0 commit comments