Samla in och transportera mått

Gäller för:IoT Edge 1.4 checkmark IoT Edge 1.4

Viktigt!

IoT Edge 1.4 är den version som stöds. Om du har en tidigare version läser du Uppdatera IoT Edge.

Du kan fjärrövervaka din IoT Edge-flotta med hjälp av Azure Monitor och inbyggd måttintegrering. Om du vill aktivera den här funktionen på enheten lägger du till modulen metrics-collector i distributionen och konfigurerar den för att samla in och transportera modulmått till Azure Monitor.

Om du vill konfigurera övervakning på din IoT Edge-enhet följer du Självstudie: Övervaka IoT Edge-enheter. Du lär dig hur du lägger till modulen metrics-collector på enheten. Den här artikeln ger dig en översikt över övervakningsarkitekturen och förklarar dina alternativ för att konfigurera mått på enheten.

IoT Edge-integrering med Azure Monitor(4:06)

Arkitektur

Screenshot of the metrics monitoring architecture with IoT Hub.

Kommentar Description
1 Alla moduler måste generera mått med hjälp av Prometheus-datamodellen. Även om inbyggda mått ger bred arbetsbelastningssynlighet som standard kan anpassade moduler också användas för att generera scenariospecifika mått för att förbättra övervakningslösningen. Lär dig hur du instrumenterar anpassade moduler med bibliotek med öppen källkod i artikeln Lägg till anpassade mått .
2️ Modulen metrics-collector är en IoT Edge-modul från Microsoft som samlar in mått för arbetsbelastningsmoduler och transporterar dem utanför enheten. Måttsamlingen använder en pull-modell . Insamlingsfrekvens, slutpunkter och filter kan konfigureras för att styra de data som utgående från modulen. Mer information finns i avsnittet om konfiguration av måttinsamlare senare i den här artikeln.
3️ Du har två alternativ för att skicka mått från modulen metrics-collector till molnet. Alternativ 1 skickar måtten till Log Analytics.1 De insamlade måtten matas in på den angivna Log Analytics-arbetsytan med hjälp av en fast, intern tabell med namnet InsightsMetrics. Den här tabellens schema är kompatibelt med Prometheus-måttdatamodellen.

Det här alternativet kräver åtkomst till arbetsytan på utgående port 443. Log Analytics-arbetsytans ID och nyckel måste anges som en del av modulkonfigurationen. Mer information om hur du aktiverar i begränsade nätverk finns i Aktivera i scenarier med begränsad nätverksåtkomst senare i den här artikeln.
4️ Varje måttpost innehåller den ResourceId som angavs som en del av modulkonfigurationen. Den här associationen länkar automatiskt måttet till den angivna resursen (till exempel IoT Hub). Därför kan de utvalda IoT Edge-arbetsboksmallarna hämta mått genom att skicka frågor mot resursen.

Den här metoden gör det också möjligt för flera IoT-hubbar att på ett säkert sätt dela en enda Log Analytics-arbetsyta som en måttdatabas.
5️ Alternativ 2 skickar måtten till IoT Hub.1 Insamlingsmodulen kan konfigureras för att skicka insamlade mått som UTF-8-kodade JSON-meddelanden från enhet till moln via modulen edgeHub . Det här alternativet låser upp övervakning av låsta IoT Edge-enheter som endast tillåts extern åtkomst till IoT Hub-slutpunkten. Det möjliggör också övervakning av underordnade IoT Edge-enheter i en kapslad konfiguration där underordnade enheter bara kan komma åt sin överordnade enhet.
6️ När mått dirigeras via IoT Hub måste ett (engångs)molnarbetsflöde konfigureras. Arbetsflödet bearbetar meddelanden som kommer från modulen metrics-collector och skickar dem till Log Analytics-arbetsytan. Arbetsflödet aktiverar funktionen för utvalda visualiseringar och aviseringar även för mått som kommer via den här valfria sökvägen. Mer information om hur du konfigurerar det här molnarbetsflödet finns i avsnittet Routningsmått via IoT Hub .

1 För närvarande är det enklare att använda alternativ 1 för att direkt transportera mått till Log Analytics från IoT Edge-enheten som kräver minimal konfiguration. Det första alternativet är att föredra om inte ditt specifika scenario kräver alternativ 2-metoden så att IoT Edge-enheten endast kommunicerar med IoT Hub.

Modul för måttinsamlare

En Microsoft-insamlarmodul kan läggas till i en IoT Edge-distribution för att samla in modulmått och skicka dem till Azure Monitor. Modulkoden är öppen källkod och finns i IoT Edge GitHub-lagringsplatsen.

Modulen metrics-collector tillhandahålls som en Docker-containeravbildning med flera valv som stöder Linux X64, ARM32, ARM64 och Windows X64 (version 1809). Det är offentligt tillgängligt på mcr.microsoft.com/azureiotedge-metrics-collector.

Den finns också på IoT Edge-modulen Marketplace.

Konfiguration av måttinsamlare

All konfiguration för måttinsamlaren görs med hjälp av miljövariabler. Minimalt måste variablerna som anges i den här tabellen markeras som Obligatoriska anges.

Miljöns variabelnamn Description
ResourceId Resurs-ID för den IoT-hubb som enheten kommunicerar med. Mer information finns i avsnittet Resurs-ID .

Krävs

Standardvärde: ingen
UploadTarget Styr om mått skickas direkt till Azure Monitor via HTTPS eller till IoT Hub som D2C-meddelanden. Mer information finns i ladda upp mål.

Kan vara antingen AzureMonitor eller IoTMessage

Krävs inte

Standardvärde: AzureMonitor
LogAnalyticsWorkspaceId Log Analytics-arbetsyte-ID.

Krävs endast om UploadTarget är AzureMonitor

Standardvärde: ingen
LogAnalyticsSharedKey Log Analytics-arbetsytenyckel.

Krävs endast om UploadTarget är AzureMonitor

Standardvärde: ingen
ScrapeFrequencyInSecs Återkommande tidsintervall i sekunder där du kan samla in och transportera mått.

Exempel: 600

Krävs inte

Standardvärde: 300
MetricsEndpointsCSV Kommaavgränsad lista över slutpunkter att samla in Prometheus-mått från. Alla modulslutpunkter för att samla in mått från måste visas i den här listan.

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

Krävs inte

Standardvärde: http://edgeHub:9600/metrics, http://edgeAgent:9600/metrics
AllowedMetrics Lista över mått som ska samlas in, alla andra mått ignoreras. Ange en tom sträng som ska inaktiveras. Mer information finns i Tillåt och tillåt inte listor.

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

Krävs inte

Standardvärde: tomt
BlockedMetrics Lista över mått som ska ignoreras. Åsidosätter AllowedMetrics, så ett mått rapporteras inte om det ingår i båda listorna. Mer information finns i Tillåt och tillåt inte listor.

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

Krävs inte

Standardvärde: tomt
CompressForUpload Styr om komprimering ska användas vid uppladdning av mått. Gäller för alla uppladdningsmål.

Exempel: sant

Krävs inte

Standardvärde: true
AzureDomain Anger den översta Azure-domänen som ska användas vid inmatning av mått direkt till Log Analytics.

Exempel: azure.us

Krävs inte

Standardvärde: azure.com

Resurs-ID

Modulen metrics-collector kräver Azure Resource Manager-ID för den IoT-hubb som IoT Edge-enheten tillhör. Ange det här ID:t som värdet för ResourceID-miljövariabeln .

Resurs-ID:t har följande format:

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

Du hittar resurs-ID:t på sidan Egenskaper för IoT-hubben i Azure-portalen.

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

Du kan också hämta ID:t med kommandot az resource show :

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

Ladda upp mål

Konfigurationsalternativet UploadTarget styr om mått skickas direkt till Azure Monitor eller till IoT Hub.

Om du anger UploadTarget till IoTMessage publiceras modulmåtten som IoT-meddelanden. Dessa meddelanden genereras som UTF8-kodad json från slutpunkten /messages/modules/<metrics collector module name>/outputs/metricOutput. Om modulen IoT Edge Metrics Collector till exempel heter IoTEdgeMetricsCollector är /messages/modules/IoTEdgeMetricsCollector/outputs/metricOutputslutpunkten . Formatet är följande:

[{
    "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"
    }
}]

Tillåt och tillåt inte listor

Konfigurationsalternativen AllowedMetrics och BlockedMetrics tar utrymmes- eller kommaavgränsade listor med måttväljare. Ett mått matchar listan och inkluderas eller exkluderas om det matchar ett eller flera mått i någon av dem.

Måttväljare använder ett format som liknar en delmängd av PromQL-frågespråket.

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

Måttväljare består av tre delar:

Måttnamn (metricToSelect).

  • Jokertecken * (alla tecken) och ? (valfritt enskilt tecken) kan användas i måttnamn. Skulle till exempel *CPU matcha maxCPU och minCPU men inte CPUMaximum. ???CPU skulle matcha maxCPU och minCPU men inte maximumCPU.
  • Den här komponenten krävs i en måttväljare.

Etikettbaserade väljare ({quantile=0.5,otherLabel=~Re[ge]*|x}).

  • Flera måttvärden kan ingå i klammerparenteserna. Värdena ska vara kommaavgränsade.
  • Ett mått matchas om åtminstone alla etiketter i väljaren finns och även matchar.
  • Precis som PromQL tillåts följande matchande operatorer.
    • = Matcha etiketter exakt lika med den angivna strängen (skiftlägeskänslig).
    • != Matcha etiketter som inte är exakt lika med den angivna strängen.
    • =~ Matcha etiketter med en angivet regex. Ex: label=~CPU|Mem|[0-9]*
    • !~ Matcha etiketter som inte passar en angivet regex.
    • Regex är helt förankrat (A ^ och $ läggs automatiskt till i början och slutet av varje regex)
    • Den här komponenten är valfri i en måttväljare.

Slutpunktsväljare ([http://VeryNoisyModule:9001/metrics]).

  • URL:en ska exakt matcha en URL som anges i MetricsEndpointsCSV.
  • Den här komponenten är valfri i en måttväljare.

Ett mått måste matcha alla delar av en viss väljare som ska väljas. Det måste matcha namnet och ha samma etiketter med matchande värden och komma från den angivna slutpunkten. Skulle till exempel mem{quantile=0.5,otherLabel=foobar}[http://VeryNoisyModule:9001/metrics] inte matcha väljaren mem{quantile=0.5,otherLabel=~foo|bar}[http://VeryNoisyModule:9001/metrics]. Flera väljare bör användas för att skapa eller liknande beteende i stället för och liknande beteende.

Om du till exempel vill tillåta det anpassade måttet mem med valfri etikett från en modul module1 men bara tillåta samma mått från module2 med etiketten agg=p99kan följande väljare läggas till i AllowedMetrics:

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

Om du vill tillåta anpassade mått mem och cpu för etiketter eller slutpunkter lägger du till följande i AllowedMetrics:

mem cpu

Aktivera i scenarier med begränsad nätverksåtkomst

Om du skickar mått direkt till Log Analytics-arbetsytan tillåter du utgående åtkomst till följande URL:er:

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

Proxyöverväganden

Modulen metrics-collector är skriven i .NET Core. Använd därför samma vägledning som för systemmoduler för att tillåta kommunikation via en proxyserver.

Måttinsamling från lokala moduler använder http-protokoll. Undanta lokal kommunikation från att gå via proxyservern genom att ange NO_PROXY miljövariabeln.

Ange NO_PROXY värdet till en kommaavgränsad lista med värdnamn som ska undantas. Använd modulnamn för värdnamn. Till exempel: edgeHub,edgeAgent,myCustomModule.

Vägmått

Ibland är det nödvändigt att mata in mått via IoT Hub i stället för att skicka dem direkt till Log Analytics. När du till exempel övervakar IoT Edge-enheter i en kapslad konfiguration där underordnade enheter endast har åtkomst till IoT Edge-hubben för sin överordnade enhet. Ett annat exempel är när du distribuerar en IoT Edge-enhet med utgående nätverksåtkomst endast till IoT Hub.

För att aktivera övervakning i det här scenariot kan modulen metrics-collector konfigureras för att skicka mått som meddelanden från enhet till moln (D2C) via edgeHub-modulen. Funktionen kan aktiveras genom att ställa in UploadTarget miljövariabeln på IoTMessage i insamlarens konfiguration.

Dricks

Kom ihåg att lägga till en edgeHub-väg för att leverera måttmeddelanden från insamlingsmodulen till IoT Hub. Det ser ut som FROM /messages/modules/replace-with-collector-module-name/* INTO $upstream.

Det här alternativet kräver extra installation, ett molnarbetsflöde, för att leverera måttmeddelanden som anländer till IoT Hub till Log Analytics-arbetsytan. Utan den här konfigurationen fungerar inte de andra delarna av integreringen, till exempel utvalda visualiseringar och aviseringar .

Kommentar

Tänk på ytterligare kostnader med det här alternativet. Måttmeddelanden räknas mot din IoT Hub-meddelandekvot. Du debiteras också för Log Analytics-inmatning och molnarbetsflödesresurser.

Exempel på molnarbetsflöde

Ett molnarbetsflöde som levererar måttmeddelanden från IoT Hub till Log Analytics är tillgängligt som en del av IoT Edge-loggnings- och övervakningsexemplet. Exemplet kan distribueras till befintliga molnresurser eller fungera som en referens för produktionsdistribution.

Nästa steg

Utforska de typer av utvalda visualiseringar som Azure Monitor aktiverar.