Dopo aver visto, in questo articolo Azure Arc & Log Analytics: raccogliere gli event log custom, come recuperare dei log di tipo custom, dall’event viewer di Windows Server, è tempo di vedere come raccogliere le metriche di performance di quelli che sono i server della nostra infrastruttura.
Perchè raccogliere le metriche in cloud e non in locale? Sicuramente la dimensione dell’infrastruttura è determinante per scegliere quale strada perseguire, ma è anche vero che software ben fatti, come lo era System Center Operations Manager, ce ne sono pochi; la maggior parte delle soluzioni odierne utilizzano le trap SNMP e non si può certo dire che sia una cosa evoluta.
L’adozione di Azure Arc, legata a tutta una serie di altri elementi, fa sì che anche il monitoring possa essere portato in cloud, come già avviene nativamente per le macchine virtuali create su Azure.
Configurazione
Non ci sarebbe neppure da dirlo più, ma il primo step, al netto dell’installazione dell’agent di Azure Arc, è creare una Data Collection Rule (DCR), che servirà per lo scope di performance.

Nella sezione Resources, selezionate i server per i quali volete raccogliere le metriche.

Passando alla sezione Collect and Deliver, come Data Source, selezionate la modalità Basic che permetterà di raccogliere metriche su CPU, RAM, Disco e Network.

La modalità Custom, consente di personalizzare quali metriche particolari, come SQL Server o altri software che creano dei loro counter dedicati.
Ultimo passaggio è quello di assegnare la Destination, che vede l’uso degli Azure Monitor Metrics, così come degli Azure Monitor Logs, unito a Log Analytics per memorizzare le informazioni nel nostro workspace.

Query
Un esempio di query KQL, per verificare l’andamento di CPU e RAM è la seguente:
Perf
| where Computer contains “itmb01swhypv01”
| where (ObjectName == “Processor Information” and CounterName == “% Processor Time” and InstanceName == “_Total”)
or (ObjectName == “Memory” and CounterName == “Committed Bytes”)
| extend Metric = case(
ObjectName == “Processor Information” and CounterName == “% Processor Time”, “CPU Usage (%)”,
ObjectName == “Memory” and CounterName == “Committed Bytes”, “Memory Usage (GB)”,
“Other”
)
| extend CounterValue = case(
Metric == “Memory Usage (GB)”, CounterValue / pow(1024, 3), // Convert bytes to gigabytes
CounterValue // Keep CPU percentage as is
)
| summarize AverageValue = avg(CounterValue) by bin(TimeGenerated, 1m), Metric, Computer
| order by TimeGenerated asc
Questo risultato può essere riportato in una vista Chart, che risulterà così.

Per creare invece una query KQL, capace di mostrare l’utilizzo del disco in lettura e scrittura, potete usare questo esempio:
Perf
| where Computer contains “itmb01swhypv01”
| where (ObjectName == “LogicalDisk” and CounterName == “Disk Read Bytes/sec”)
or (ObjectName == “LogicalDisk” and CounterName == “Disk Write Bytes/sec”)
| extend Metric = case(
CounterName == “Disk Read Bytes/sec”, “Disk Read (MB/sec)”,
CounterName == “Disk Write Bytes/sec”, “Disk Write (MB/sec)”,
“Other”
)
| extend CounterValue_MB = CounterValue / pow(1024, 2) // Convert bytes to megabytes
| summarize AverageValue = avg(CounterValue_MB) by bin(TimeGenerated, 1m), Metric, Computer
| order by TimeGenerated, Metric
Conclusioni
L’utilizzo di Azure Arc, per monitorare l’andamento dei server, è sicuramente una cosa molto interessate, che può essere usato per spostare in cloud questo tipo di scenario, sia per il mondo SMB, ma anche per quelle aziende che vogliono un secondo metro di controllo o che vogliono integrare le logiche di Log Analytics.