Raccogliere e trasportare le metriche

Si applica a:IoT Edge 1.4 checkmark IoT Edge 1.4

Importante

IoT Edge 1.4 è la versione supportata. Se si usa una versione precedente, vedere Aggiornare IoT Edge.

È possibile monitorare in remoto la flotta di IoT Edge usando Monitoraggio di Azure e l'integrazione predefinita delle metriche. Per abilitare questa funzionalità nel dispositivo, aggiungere il modulo metrics-collector alla distribuzione e configurarlo per raccogliere e trasportare le metriche dei moduli in Monitoraggio di Azure.

Per configurare il monitoraggio nel dispositivo IoT Edge, seguire l'esercitazione : Monitorare i dispositivi IoT Edge. Si apprenderà come aggiungere il modulo metrics-collector al dispositivo. Questo articolo offre una panoramica dell'architettura di monitoraggio e illustra le opzioni disponibili per la configurazione delle metriche nel dispositivo.

Integrazione di IoT Edge con Monitoraggio di Azure (4:06)

Architettura

Screenshot of the metrics monitoring architecture with IoT Hub.

Nota Descrizione
1 Tutti i moduli devono generare metriche usando il modello di dati Prometheus. Sebbene le metriche predefinite consentano una visibilità generale del carico di lavoro per impostazione predefinita, i moduli personalizzati possono essere usati anche per generare metriche specifiche dello scenario per migliorare la soluzione di monitoraggio. Informazioni su come instrumentare moduli personalizzati usando librerie open source nell'articolo Aggiungere metriche personalizzate.
2️ Il modulo metrics-collector è un modulo IoT Edge fornito da Microsoft che raccoglie le metriche del modulo del carico di lavoro e le trasporta fuori dispositivo. La raccolta di metriche usa un modello pull . La frequenza di raccolta, gli endpoint e i filtri possono essere configurati per controllare i dati in uscita dal modulo. Per altre informazioni, vedere la sezione relativa alla configurazione dell'agente di raccolta metriche più avanti in questo articolo.
3️ Sono disponibili due opzioni per l'invio di metriche dal modulo metrics-collector al cloud. L'opzione 1 invia le metriche a Log Analytics.1 Le metriche raccolte vengono inserite nell'area di lavoro Log Analytics specificata usando una tabella nativa fissa denominata InsightsMetrics. Lo schema di questa tabella è compatibile con il modello di dati delle metriche Prometheus.

Questa opzione richiede l'accesso all'area di lavoro sulla porta in uscita 443. L'ID e la chiave dell'area di lavoro Log Analytics devono essere specificati come parte della configurazione del modulo. Per abilitare nelle reti con restrizioni, vedere Abilitare negli scenari di accesso alla rete con restrizioni più avanti in questo articolo.
4️ Ogni voce della metrica contiene l'oggetto ResourceId specificato come parte della configurazione del modulo. Questa associazione collega automaticamente la metrica alla risorsa specificata, ad esempio hub IoT. Di conseguenza, i modelli di cartella di lavoro di IoT Edge curati possono recuperare le metriche eseguendo query sulla risorsa.

Questo approccio consente anche a più hub IoT di condividere in modo sicuro una singola area di lavoro Log Analytics come database delle metriche.
5️ L'opzione 2 invia le metriche a hub IoT.1 Il modulo dell'agente di raccolta può essere configurato per inviare le metriche raccolte come messaggi JSON con codifica UTF-8 da dispositivo a cloud tramite il edgeHub modulo. Questa opzione sblocca il monitoraggio dei dispositivi IoT Edge bloccati a cui è consentito l'accesso esterno solo all'endpoint hub IoT. Consente anche il monitoraggio dei dispositivi IoT Edge figlio in una configurazione annidata in cui i dispositivi figlio possono accedere solo al dispositivo padre.
6️ Quando le metriche vengono instradate tramite hub IoT, è necessario configurare un flusso di lavoro cloud (una tantum). Il flusso di lavoro elabora i messaggi provenienti dal modulo dell'agente di raccolta metriche e li invia all'area di lavoro Log Analytics. Il flusso di lavoro abilita le funzionalità curate di visualizzazioni e avvisi anche per le metriche in arrivo tramite questo percorso facoltativo. Per informazioni dettagliate su come configurare questo flusso di lavoro cloud, vedere la sezione Route metrics through hub IoT (Instradare le metriche tramite hub IoT).

1 Attualmente, l'uso dell'opzione 1 per il trasporto diretto delle metriche in Log Analytics dal dispositivo IoT Edge è il percorso più semplice che richiede una configurazione minima. La prima opzione è preferibile a meno che lo scenario specifico non richieda l'approccio dell'opzione 2 in modo che il dispositivo IoT Edge comunichi solo con hub IoT.

Modulo dell'agente di raccolta metriche

Un modulo dell'agente di raccolta metriche fornito da Microsoft può essere aggiunto a una distribuzione di IoT Edge per raccogliere le metriche dei moduli e inviarle a Monitoraggio di Azure. Il codice del modulo è open source e disponibile nel repository GitHub di IoT Edge.

Il modulo metrics-collector viene fornito come immagine del contenitore Docker multi-arch che supporta Linux X64, ARM32, ARM64 e Windows X64 (versione 1809). È disponibile pubblicamente all'indirizzo mcr.microsoft.com/azureiotedge-metrics-collector.

Disponibile anche nel Marketplace dei moduli IoT Edge.

Configurazione dell'agente di raccolta metriche

Tutte le configurazioni per l'agente di raccolta metriche vengono eseguite usando le variabili di ambiente. Minimamente, le variabili indicate in questa tabella contrassegnate come Obbligatorio devono essere specificate.

Environment variable name Descrizione
ResourceId ID risorsa dell'hub IoT con cui comunica il dispositivo. Per altre informazioni, vedere la sezione ID risorsa.

Obbligatorio

Valore predefinito: nessuno
UploadTarget Controlla se le metriche vengono inviate direttamente a Monitoraggio di Azure tramite HTTPS o a hub IoT come messaggi D2C. Per altre informazioni, vedere Destinazione di caricamento.

Può essere AzureMonitor o IoTMessage

Non obbligatorio

Valore predefinito: AzureMonitor
LogAnalyticsWorkspaceId ID dell'area di lavoro Log Analytics.

Obbligatorio solo se UploadTarget è AzureMonitor

Valore predefinito: nessuno
LogAnalyticsSharedKey Chiave dell'area di lavoro Log Analytics.

Obbligatorio solo se UploadTarget è AzureMonitor

Valore predefinito: nessuno
ScrapeFrequencyInSecs Intervallo di tempo ricorrente in secondi in cui raccogliere e trasportare le metriche.

Esempio: 600

Non obbligatorio

Valore predefinito: 300
MetricsEndpointsCSV Elenco delimitato da virgole di endpoint da cui raccogliere le metriche di Prometheus. Tutti gli endpoint del modulo da cui raccogliere le metriche devono essere visualizzati in questo elenco.

Esempio: http://edgeAgent:9600/metrics, http://edgeHub:9600/metrics, http://MetricsSpewer:9417/metrics

Non obbligatorio

Valore predefinito: http://edgeHub:9600/metrics, http://edgeAgent:9600/metrics
AllowedMetrics Elenco di metriche da raccogliere, tutte le altre metriche vengono ignorate. Impostare su una stringa vuota da disabilitare. Per altre informazioni, vedere Consenti e non consentire elenchi.

Esempio: metricToScrape{quantile=0.99}[endpoint=http://MetricsSpewer:9417/metrics]

Non obbligatorio

Valore predefinito: vuoto
BlockedMetrics Elenco di metriche da ignorare. Esegue l'override di AllowedMetrics, quindi una metrica non viene segnalata se è inclusa in entrambi gli elenchi. Per altre informazioni, vedere Consenti e non consentire elenchi.

Esempio: metricToIgnore{quantile=0.5}[endpoint=http://VeryNoisyModule:9001/metrics], docker_container_disk_write_bytes

Non obbligatorio

Valore predefinito: vuoto
CompressForUpload Controlla se la compressione deve essere usata durante il caricamento delle metriche. Si applica a tutte le destinazioni di caricamento.

Esempio: true

Non obbligatorio

Valore predefinito: true
AzureDomain Specifica il dominio di Azure di primo livello da usare per l'inserimento di metriche direttamente in Log Analytics.

Esempio: azure.us

Non obbligatorio

Valore predefinito: azure.com

ID risorsa

Il modulo metrics-collector richiede l'ID di Azure Resource Manager dell'hub IoT a cui appartiene il dispositivo IoT Edge. Specificare questo ID come valore della variabile di ambiente ResourceID .

L'ID risorsa ha il formato seguente:

/subscriptions/<subscription id>/resourceGroups/<resource group name>/providers/Microsoft.Devices/IoTHubs/<iot hub name>

È possibile trovare l'ID risorsa nella pagina Proprietà dell'hub IoT nel portale di Azure.

Screenshot the shows how to retrieve your resource ID from the IoT Hub properties.

In alternativa, si recupera l'ID con il comando az resource show :

az resource show -g <resource group> -n <hub name> --resource-type "Microsoft.Devices/IoTHubs"

Destinazione di caricamento

L'opzione di configurazione UploadTarget controlla se le metriche vengono inviate direttamente a Monitoraggio di Azure o a hub IoT.

Se si imposta UploadTarget su IoTMessage, le metriche del modulo vengono pubblicate come messaggi IoT. Questi messaggi vengono generati come json con codifica UTF8 dall'endpoint /messages/modules/<metrics collector module name>/outputs/metricOutput. Ad esempio, se il modulo dell'agente di raccolta metriche di IoT Edge è denominato IoTEdgeMetricsCollector, l'endpoint è /messages/modules/IoTEdgeMetricsCollector/outputs/metricOutput. Il formato è il seguente:

[{
    "TimeGeneratedUtc": "<time generated>",
    "Name": "<prometheus metric name>",
    "Value": <decimal value>,
    "Label": {
        "<label name>": "<label value>"
    }
}, {
    "TimeGeneratedUtc": "2020-07-28T20:00:43.2770247Z",
    "Name": "docker_container_disk_write_bytes",
    "Value": 0.0,
    "Label": {
        "name": "AzureMonitorForIotEdgeModule"
    }
}]

Consenti e non consenti elenchi

Le AllowedMetrics opzioni di configurazione e BlockedMetrics accettano elenchi delimitati da spazi o virgole di selettori di metriche. Una metrica corrisponde all'elenco ed è inclusa o esclusa se corrisponde a una o più metriche in entrambi gli elenchi.

I selettori di metrica usano un formato simile a un subset del linguaggio di query PromQL .

metricToSelect{quantile=0.5,otherLabel=~Re[ge]*|x}[http://VeryNoisyModule:9001/metrics]

I selettori delle metriche sono costituiti da tre parti:

Nome metrica (metricToSelect).

  • I * caratteri jolly (qualsiasi carattere) e ? (qualsiasi singolo carattere) possono essere usati nei nomi delle metriche. Ad esempio, *CPU corrisponderebbe maxCPU a e minCPU non CPUMaximuma . ???CPU corrisponde maxCPU a e minCPU ma non maximumCPUa .
  • Questo componente è necessario in un selettore di metriche.

Selettori basati su etichette ({quantile=0.5,otherLabel=~Re[ge]*|x}).

  • È possibile includere più valori delle metriche tra parentesi graffe. I valori devono essere delimitati da virgole.
  • Una metrica viene confrontata se sono presenti almeno tutte le etichette nel selettore e corrispondono.
  • Come PromQL, sono consentiti gli operatori corrispondenti seguenti.
    • = Trova la corrispondenza delle etichette esattamente uguale alla stringa specificata (con distinzione tra maiuscole e minuscole).
    • != Trova la corrispondenza delle etichette non esattamente uguale alla stringa specificata.
    • =~ Associare le etichette a un'espressione regolare specificata. ad esempio: label=~CPU|Mem|[0-9]*
    • !~ Trovare le etichette che non rientrano in un'espressione regolare specificata.
    • Regex è completamente ancorato (A ^ e $ vengono aggiunti automaticamente all'inizio e alla fine di ogni espressione regolare)
    • Questo componente è facoltativo in un selettore di metriche.

Selettore endpoint ([http://VeryNoisyModule:9001/metrics]).

  • L'URL deve corrispondere esattamente a un URL elencato in MetricsEndpointsCSV.
  • Questo componente è facoltativo in un selettore di metriche.

Una metrica deve corrispondere a tutte le parti di un selettore specifico da selezionare. Deve corrispondere al nome e avere tutte le stesse etichette con valori corrispondenti e provenire dall'endpoint specificato. Ad esempio, mem{quantile=0.5,otherLabel=foobar}[http://VeryNoisyModule:9001/metrics] non corrisponde al selettore mem{quantile=0.5,otherLabel=~foo|bar}[http://VeryNoisyModule:9001/metrics]. È consigliabile usare più selettori per creare un comportamento simile o simile al comportamento.

Ad esempio, per consentire la metrica personalizzata mem con qualsiasi etichetta da un modulo module1 , ma consentire solo la stessa metrica da module2 con l'etichetta agg=p99, è possibile aggiungere il selettore seguente a AllowedMetrics:

mem{}[http://module1:9001/metrics] mem{agg="p99"}[http://module2:9001/metrics]

In alternativa, per consentire le metriche mem personalizzate e cpu per qualsiasi etichetta o endpoint, aggiungere quanto segue a AllowedMetrics:

mem cpu

Abilitare negli scenari di accesso alla rete con restrizioni

Se si inviano metriche direttamente all'area di lavoro Log Analytics, consentire l'accesso in uscita agli URL seguenti:

  • https://<LOG_ANALYTICS_WORKSPACE_ID>.ods.opinsights.azure.com/*
  • https://<LOG_ANALYTICS_WORKSPACE_ID>.oms.opinsights.azure.com/*

Considerazioni sul proxy

Il modulo metrics-collector è scritto in .NET Core. Usare quindi le stesse indicazioni dei moduli di sistema per consentire la comunicazione tramite un server proxy.

La raccolta di metriche dai moduli locali usa il protocollo HTTP. Escludere la comunicazione locale dal passaggio attraverso il server proxy impostando la NO_PROXY variabile di ambiente.

Impostare NO_PROXY il valore su un elenco delimitato da virgole di nomi host che devono essere esclusi. Usare i nomi dei moduli per i nomi host. Ad esempio: edgeHub, edgeAgent, myCustomModule.

Metriche di route

A volte è necessario inserire le metriche tramite hub IoT anziché inviarle direttamente a Log Analytics. Ad esempio, quando si monitora i dispositivi IoT Edge in una configurazione annidata in cui i dispositivi figlio hanno accesso solo all'hub IoT Edge del dispositivo padre. Un altro esempio è la distribuzione di un dispositivo IoT Edge con accesso alla rete in uscita solo per hub IoT.

Per abilitare il monitoraggio in questo scenario, il modulo metrics-collector può essere configurato per inviare metriche come messaggi da dispositivo a cloud (D2C) tramite il modulo edgeHub. La funzionalità può essere attivata impostando la UploadTarget variabile di ambiente su IoTMessage nella configurazione dell'agente di raccolta.

Suggerimento

Ricordarsi di aggiungere una route edgeHub per recapitare messaggi delle metriche dal modulo dell'agente di raccolta a hub IoT. Ha un aspetto analogo a FROM /messages/modules/replace-with-collector-module-name/* INTO $upstream.

Questa opzione richiede una configurazione aggiuntiva, un flusso di lavoro cloud, per recapitare i messaggi delle metriche in arrivo alle hub IoT all'area di lavoro Log Analytics. Senza questa configurazione, le altre parti dell'integrazione, ad esempio visualizzazioni e avvisi curati, non funzionano.

Nota

Tenere presenti costi aggiuntivi con questa opzione. I messaggi delle metriche verranno conteggiati rispetto alla quota di messaggi hub IoT. Verranno addebitati anche i costi per l'inserimento di Log Analytics e le risorse del flusso di lavoro cloud.

Flusso di lavoro cloud di esempio

Un flusso di lavoro cloud che recapita messaggi di metrica da hub IoT a Log Analytics è disponibile come parte dell'esempio di registrazione e monitoraggio di IoT Edge. L'esempio può essere distribuito nelle risorse cloud esistenti o funge da riferimento alla distribuzione di produzione.

Passaggi successivi

Esplorare i tipi di visualizzazioni curate abilitate da Monitoraggio di Azure.