Raccogliere e trasportare le metriche

Si applica a: Segno di spunta IoT Edge 1.5 IoT Edge 1.5 Segno di spunta IoT Edge 1.4 IoT Edge 1.4

Importante

IoT Edge 1.5 LTS e IoT Edge 1.4 LTS sono versioni supportate. IoT Edge 1.4 LTS raggiungerà il fine vita il 12 novembre 2024. Se si usa una versione precedente, vedere Aggiornare IoT Edge.

È possibile monitorare in remoto la flotta 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 la raccolta e il trasporto di metriche dei moduli in Monitoraggio di Azure.

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

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

Architettura

Screenshot dell'architettura di monitoraggio delle metriche con Hub IoT.

Nota Descrizione
1 Tutti i moduli devono emettere metriche usando il modello di dati Prometheus. Anche se le metriche predefinite abilitano la visibilità generale del carico di lavoro per impostazione predefinita, è anche possibile usare moduli personalizzati per emettere 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 in scenari di accesso alla rete con restrizioni più avanti in questo articolo.
4️ Ogni voce di metrica contiene il 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 IoT Edge curati possono richiamare metriche emettendo query per la risorsa.

Questo approccio, inoltre,consente 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 Hub IoT.1 Il modulo dell'agente di raccolta può essere configurato per l’invio delle metriche raccolte come messaggi da dispositivo a cloud JSON con codifica UTF-8 tramite il modulo edgeHub. Questa opzione sblocca il monitoraggio dei dispositivi IoT Edge bloccati a cui è consentito l'accesso esterno solo all'endpoint di Hub IoT. Consente, inoltre, il monitoraggio dei dispositivi IoT Edge figlio in una configurazione annidata in cui i dispositivi figlio possono accedere solo al loro dispositivo padre.
6️ Quando le metriche vengono instradate tramite Hub IoT, è necessario configurare un flusso di lavoro cloud (monouso). 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 la funzionalità visualizzazioni curate 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 Instradare 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 IoT Edge per raccogliere le metriche dei moduli e inviarle a Monitoraggio di Azure. Il codice del modulo è open source ed è 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 su mcr.microsoft.com/azureiotedge-metrics-collector.

Configurazione dell'agente di raccolta metriche

Tutte le configurazioni per metrics-collector vengono eseguite usando variabili di ambiente. È necessario almeno specificare le variabili indicate in questa tabella contrassegnate come Obbligatorio.

Environment variable name Descrizione
ResourceId ID risorsa dell'hub IoT con cui comunica il dispositivo. Per altre informazioni, vedere la sezione Proprietà 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 caricamento.

Può essere AzureMonitor o IoTMessage

Non obbligatorio

Valore predefinito: AzureMonitor
LogAnalyticsWorkspaceId ID 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 con 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 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. Configurare una stringa vuota per disabilitarlo. Per altre informazioni, vedere gli elenchi di elementi da consentire e non consentire.

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

Non obbligatorio

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

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

Non obbligatorio

Valore predefinito: vuoto
CompressForUpload Controlla se deve essere usata la compressione 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 quando le metriche vengono inserite 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. Fornire questo ID come valore della variabile di ambiente ResourceID.

Il formato dell’ID è il seguente:

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

L'ID della risorsa si trova nel portale di Azure, nella pagina Proprietà dell’hub IoT.

Screenshot che mostra come recuperare l'ID risorsa dalle proprietà di Hub IoT.

In alternativa, recuperare 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 Hub IoT.

Se si imposta UploadTarget su IoTMessage, le metriche del modulo vengono pubblicate come messaggi IoT. Questi messaggi vengono emessi come json con codifica UTF8 dall'endpoint /messages/modules/<metrics collector module name>/outputs/metricOutput. Ad esempio, se il modulo metrict-collector 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"
    }
}]

Elenchi di elementi da consentire e non consentire

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

I selettori metriche usano un formato simile a un sottoinsieme 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 della metrica (metricToSelect).

  • Nei nomi delle metriche è possibile usare i caratteri jolly * (qualunque carattere) e ? (qualunque singolo carattere). Ad esempio, *CPU corrisponderebbe a maxCPU e minCPU ma non a CPUMaximum. ???CPU corrisponderebbe a maxCPU e minCPU ma non a maximumCPU.
  • Questo componente è necessario in un selettore metriche.

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

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

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

  • L'URL deve corrispondere esattamente a un URL elencato in MetricsEndpointsCSV.
  • Questo componente è facoltativo in un selettore 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 i valori 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]. Usare più selettori per creare un comportamento or-like invece di un comportamento and-like.

Ad esempio, per consentire la metrica personalizzata mem con qualunque 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 personalizzate mem e cpu per qualunque etichetta o endpoint, aggiungere quanto segue a AllowedMetrics:

mem cpu

Abilitare in 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 per i moduli di sistema per consentire la comunicazione tramite un server proxy.

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

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

Instradare le metriche

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

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

Suggerimento

Ricordarsi di aggiungere un percorso edgeHub per consegnare messaggi di 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 consegnare messaggi di metriche in arrivo in Hub IoT all'area di lavoro Log Analytics. Senza questa configurazione, le altre parti dell'integrazione, ad esempio visualizzazioni curate e avvisi, non funzionano.

Nota

Tenere presenti costi aggiuntivi con questa opzione. I messaggi di metriche verranno conteggiati rispetto alla quota dei messaggi di 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 consegna messaggi di metriche 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.