Sammeln und Transportieren von Metriken

Gilt für:IoT Edge 1.4 checkmark IoT Edge 1.4

Wichtig

IoT Edge Version 1.4 wird unterstützt. Wenn Sie ein früheres Release verwenden, finden Sie weitere Informationen unter Aktualisieren von IoT Edge.

Sie können Ihre IoT Edge-Flotte mithilfe von Azure Monitor und den integrierten Metriken remote überwachen. Um diese Funktion auf Ihrem Gerät zu aktivieren, fügen Sie Ihrer Bereitstellung das Modul „Metrikensammler“ hinzu, und konfigurieren Sie es so, dass Modulmetriken gesammelt und an Azure Monitor übertragen werden.

Um die Überwachung auf Ihrem IoT Edge-Gerät zu konfigurieren, folgen Sie dem Lernprogramm: Überwachen von IoT Edge-Geräten. Sie erfahren, wie Sie das Metriksammlermodul zu Ihrem Gerät hinzufügen. In diesem Artikel erhalten Sie eine Übersicht über die Überwachungsarchitektur und erläutern Ihre Optionen zum Konfigurieren von Metriken auf Ihrem Gerät.

IoT Edge-Integration in Azure Monitor (4:06)

Aufbau

Screenshot of the metrics monitoring architecture with IoT Hub.

Hinweis Beschreibung
1 Alle Module müssen mithilfe des Prometheus-Datenmodells Metriken ausgeben. Integrierte Metriken ermöglichen zwar standardmäßig eine umfassende Sichtbarkeit von Workloads, aber es können zusätzlich benutzerdefinierte Module verwendet werden, um szenariospezifische Metriken auszugeben und somit die Überwachungslösung zu verbessern. Informationen über das Instrumentieren benutzerdefinierter Module mithilfe von Open-Source-Bibliotheken finden Sie im Artikel Hinzufügen benutzerdefinierter Metriken.
2️ Das Metrikensammler-Modul ist ein von Microsoft bereitgestelltes IoT Edge-Modul, das Modulmetriken von Workloads sammelt und diese von den Geräten abtransportiert. Der Metrikensammler verwendet ein Pullmodell. Die Sammlungshäufigkeit sowie Endpunkte und Filter können so konfiguriert werden, dass die vom Modul ausgegebenen Daten kontrolliert werden. Weitere Informationen finden Sie im Abschnitt Konfiguration des Metrikensammlers weiter unten in diesem Artikel.
3️ Sie haben zwei Optionen, um Metriken aus dem Metrikensammler-Modul an die Cloud zu senden. Option 1 sendet die Metriken an Log Analytics. 1 Die gesammelten Metriken werden mithilfe einer festen, nativen Tabelle namens InsightsMetrics im angegebenen Log Analytics-Arbeitsbereich erfasst. Das Schema dieser Tabelle ist mit dem Prometheus-Metrikdatenmodell kompatibel.

Diese Option erfordert Zugriff auf den Arbeitsbereich am ausgehenden Port 443. Die ID und der Schlüssel des Log Analytics-Arbeitsbereichs müssen im Rahmen der Modulkonfiguration angegeben werden. Informationen über das Aktivieren in eingeschränkten Netzwerken finden Sie weiter unten in diesem Artikel unter Aktivieren in Szenarien mit eingeschränktem Netzwerkzugriff.
4️ Jeder Metrikeintrag enthält die ResourceId, die als Teil der Modulkonfiguration angegeben wurde. Diese Zuordnung verknüpft die Metrik automatisch mit der angegebenen Ressource (z. B. IoT Hub). Auf diese Weise können die kuratierten IoT Edge-Arbeitsmappenvorlagen Metriken abrufen, indem sie Abfragen für die Ressourcen ausführen.

Mit diesem Ansatz ist es ebenfalls möglich, dass mehrere IoT Hubs einen einzelnen Log Analytics-Arbeitsbereich als Metrikdatenbank sicher gemeinsam nutzen.
5️ Option 2 sendet die Metriken an IoT Hub. 1 Das Sammlermodul kann so konfiguriert werden, dass die gesammelten Metriken über das Modul edgeHub als UTF-8-codierte JSON-Gerät-zu-Cloud-Nachrichten gesendet werden. Diese Option ermöglicht die Überwachung von gesperrten IoT Edge-Geräten, die externen Zugriff nur auf den IoT Hub-Endpunkt erhalten. Außerdem wird auf diese Weise die Überwachung von untergeordneten IoT Edge-Geräten in einer geschachtelten Konfiguration ermöglicht, bei der untergeordnete Geräte nur auf ihr jeweils übergeordnetes Gerät zugreifen können.
6️ Wenn Metriken über IoT Hub weitergeleitet werden, muss ein (einmaliger) Cloudworkflow eingerichtet werden. Der Workflow verarbeitet Nachrichten, die vom Metrikensammler-Modul eintreffen und sendet diese an den Log Analytics-Arbeitsbereich. Der Workflow ermöglicht die Funktionen kuratierte Visualisierungen und Warnungen auch für Metriken, die über diesen optionalen Pfad eintreffen. Weitere Informationen über das Einrichten dieses Cloudworkflows finden Sie im Abschnitt Routen von Metriken durch IoT Hub.

1 Derzeit ist der Einsatz von Option 1 für eine direkte Übertragung von Metriken vom IoT Edge-Gerät an Log Analytics der einfachere Weg, bei dem nur ein minimaler Setup-Aufwand erforderlich ist. Die erste Option wird demnach bevorzugt, es sei denn, Ihr spezifisches Szenario erfordert Option 2, bei der das IoT Edge-Gerät nur mit IoT Hub kommuniziert.

Metrikensammler-Modul

Ein von Microsoft bereitgestelltes Metrikensammler-Modul kann einer IoT Edge-Bereitstellung hinzugefügt werden, um Modulmetriken zu sammeln und an Azure Monitor zu senden. Der Code des Moduls ist ein Open-Source-Code und im IoT Edge GitHub-Repository verfügbar.

Das Metrikensammler-Modul wird als Docker-Containerimage mit mehreren Arches bereitgestellt, das Linux X64, ARM32, ARM64 und Windows X64 (Version 1809) unterstützt. Es ist über mcr.microsoft.com/azureiotedge-metrics-collector öffentlich verfügbar.

Es ist ebenfalls im IoT Edge-Modul-Marketplace verfügbar.

Konfiguration des Metrikensammlers

Die Konfiguration des Metrikensammlers erfolgt mithilfe von Umgebungsvariablen. Die in dieser Tabelle als "Erforderlich" gekennzeichneten Variablen müssen minimal angegeben werden.

Environment variable name Beschreibung
ResourceId Ressourcen-ID des IoT Hubs, mit dem das Gerät kommuniziert. Weitere Informationen finden Sie im Abschnitt Ressourcen-ID.

Erforderlich

Standardwert: none
UploadTarget Steuert, ob Metriken über HTTPS direkt an Azure Monitor oder als D2C-Nachrichten an IoT Hub gesendet werden. Weitere Informationen finden Sie unter Uploadziel.

Kann entweder AzureMonitor oder IoTMessage sein.

Nicht erforderlich

Standardwert: AzureMonitor
LogAnalyticsWorkspaceId ID des Log Analytics-Arbeitsbereichs

Nur erforderlich, wenn UploadTargetAzureMonitor ist

Standardwert: none
LogAnalyticsSharedKey Schlüssel des Log Analytics-Arbeitsbereichs

Nur erforderlich, wenn UploadTargetAzureMonitor ist

Standardwert: none
ScrapeFrequencyInSecs Wiederkehrendes Zeitintervall in Sekunden, in dem Metriken erfasst und transportiert werden sollen.

Beispiel: 600

Nicht erforderlich

Standardwert: 300
MetricsEndpointsCSV Durch Trennzeichen getrennte Liste mit Endpunkten, von denen Prometheus-Metriken gesammelt werden. Alle Modulendpunkte, von denen Metriken gesammelt werden sollen, müssen in dieser Liste aufgeführt werden.

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

Nicht erforderlich

Standardwert: http://edgeHub:9600/metrics, http://edgeAgent:9600/metrics
AllowedMetrics Liste der zu erfassenden Metriken, alle anderen Metriken werden ignoriert. Legen Sie diese auf eine leere Zeichenfolge fest, wenn Sie sie deaktivieren wollen. Weitere Informationen finden Sie unter Listen zulassen oder nicht zulassen.

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

Nicht erforderlich

Standardwert: empty
BlockedMetrics Liste der zu ignorierenden Metriken. Überschreibt AllowedMetrics, sodass eine Metrik nicht gemeldet wird, wenn sie in beiden Listen enthalten ist. Weitere Informationen finden Sie unter Listen zulassen oder nicht zulassen.

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

Nicht erforderlich

Standardwert: empty
CompressForUpload Steuert, ob Komprimierung beim Hochladen von Metriken verwendet werden sollte. Gilt für alle Uploadziele.

Beispiel: true

Nicht erforderlich

Standardwert: true
AzureDomain Gibt die Azure-Domäne der obersten Ebene an, die beim Erfassen von Metriken direkt in Log Analytics verwendet werden soll.

Beispiel: azure.us

Nicht erforderlich

Standardwert: azure.com

Ressourcen-ID

Das Metrikensammler-Modul benötigt die Azure Resource Manager-ID des IoT Hubs, zu dem das IoT Edge-Gerät gehört. Geben Sie diese ID als Wert für die ResourceID-Umgebungsvariable an.

Die Ressourcen-ID hat das folgende Format:

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

Sie finden die Ressourcen-ID auf der Seite Eigenschaften des IoT Hubs im Azure-Portal.

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

Oder Sie rufen die ID mit dem Befehl az resource show ab:

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

Uploadziel

Die Konfigurationsoption UploadTarget steuert, ob Metriken direkt an Azure Monitor oder an IoT Hub gesendet werden.

Wenn Sie UploadTarget auf IoTMessage festlegen, werden Ihre Modulmetriken als IoT-Nachrichten veröffentlicht. Diese Nachrichten werden als UTF8-codierter JSON-Code vom /messages/modules/<metrics collector module name>/outputs/metricOutput-Endpunkt ausgegeben. Wenn Ihr IoT Edge Metrics Collector-Modul beispielsweise den Namen "IoTEdgeMetricsCollector" hat, lautet /messages/modules/IoTEdgeMetricsCollector/outputs/metricOutputder Endpunkt . Das Format ist wie folgt:

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

Listen zulassen oder nicht zulassen

Die Konfigurationsoptionen AllowedMetrics und BlockedMetrics enthalten durch Leerzeichen oder Komma getrennte Listen mit Metrikselektoren. Eine Metrik entspricht der Liste und wird eingeschlossen oder ausgeschlossen, wenn sie einer oder mehreren Metriken in einer der listen entspricht.

Metrikselektoren verwenden ein Format, das einer Untergruppe der PromQL-Abfragesprache ähnelt.

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

Metrikselektoren bestehen aus drei Teilen:

Metrikname (metricToSelect).

  • Platzhalter * (beliebige Zeichen) und ? (beliebiges einzelnes Zeichen) können in Metriknamen verwendet werden. Z. B. würde *CPU mit maxCPU und minCPU übereinstimmen, aber nicht mit CPUMaximum. ???CPU würde mit maxCPU und minCPU übereinstimmen, aber nicht mit maximumCPU.
  • Diese Komponente ist bei einem Metrikselektor erforderlich.

Bezeichnungsbasierte Selektoren ({quantile=0.5,otherLabel=~Re[ge]*|x}).

  • In den geschweiften Klammern können mehrere Metrikwerte enthalten sein. Die Werte sollten durch Trennzeichen getrennt werden.
  • Eine Metrik wird abgeglichen, wenn mindestens alle Beschriftungen in der Auswahl vorhanden sind und ebenfalls übereinstimmen.
  • Wie bei PromQL sind die folgenden Operatoren für den Abgleich zulässig.
    • = Abgleich von Bezeichnungen, die genau mit der angegebenen Zeichenfolge übereinstimmen (Groß- und Kleinschreibung wird beachtet).
    • != Abgleich von Bezeichnungen, die nicht genau mit der angegebenen Zeichenfolge übereinstimmen.
    • =~ Abgleich von Bezeichnungen mit einem bereitgestellten RegEx. Bsp.: label=~CPU|Mem|[0-9]*
    • !~ Abgleich von Bezeichnungen, die zu einem bereitgestellten RegEx nicht passen.
    • Regex ist vollständig verankert (A ^ und $ automatisch am Anfang und Ende jedes regex hinzugefügt)
    • Diese Komponente ist bei einem Metrikselektor optional.

Endpunktselektor ([http://VeryNoisyModule:9001/metrics]).

  • Die URL sollte genau mit einer URL übereinstimmen, die in MetricsEndpointsCSV aufgelistet ist.
  • Diese Komponente ist bei einem Metrikselektor optional.

Eine Metrik muss mit allen Teilen eines jeweiligen Selektors übereinstimmen, um ausgewählt zu werden. Sie muss mit dem Namen übereinstimmen und über dieselben Bezeichnungen mit übereinstimmenden Werten verfügen und vom angegebenen Endpunkt stammen. So würde beispielsweise mem{quantile=0.5,otherLabel=foobar}[http://VeryNoisyModule:9001/metrics] mit dem Selektor mem{quantile=0.5,otherLabel=~foo|bar}[http://VeryNoisyModule:9001/metrics] nicht übereinstimmen. Es sollten mehrere Selektoren verwendet werden, damit die Auswahl nicht eingeschränkt (AND-Operatoren) sondern erweitert wird (OR-Operatoren).

Um z. B. die benutzerdefinierte Metrik mem mit einer Bezeichnung aus dem Modul module1 zuzulassen, aber die gleiche Metrik aus module2 nur mit der Bezeichnung agg=p99 zuzulassen, kann AllowedMetrics der folgende Selektor hinzugefügt werden:

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

Oder fügen Sie AllowedMetrics Folgendes hinzu, um die benutzerdefinierten Metriken mem und cpu unabhängig von den Bezeichnungen oder Endpunkten zuzulassen:

mem cpu

Aktivieren in Szenarien mit eingeschränktem Netzwerkzugriff

Wenn Sie Metriken direkt an den Log Analytics-Arbeitsbereich senden, lassen Sie einen ausgehenden Zugriff auf die folgenden URLs zu:

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

Proxy-Aspekte

Das Metrikensammler-Modul ist in .NET Core geschrieben. Verwenden Sie daher die gleiche Anleitung wie für Systemmodule, um die Kommunikation über einen Proxyserver zu ermöglichen.

Für die Metriksammlung aus lokalen Modulen wird das HTTP-Protokoll verwendet. Schließen Sie eine lokale Kommunikation vom Proxyserver aus, indem Sie die NO_PROXY-Umgebungsvariable einstellen.

Legen Sie den NO_PROXY-Wert auf eine durch Trennzeichen getrennte Liste von Hostnamen fest, die ausgeschlossen werden sollen. Verwenden Sie Modulnamen als Hostnamen. Beispiel: edgeHub,edgeAgent,myCustomModule.

Routen von Metriken

Manchmal ist es notwendig, Metriken über IoT Hub aufzunehmen, anstatt sie direkt an Log Analytics zu senden. Dies ist z. B. der Fall, wenn Sie IoT Edge-Geräte in einer geschachtelten Konfiguration überwachen, bei der untergeordnete Geräte nur Zugriff auf den IoT Edge-Hub ihres übergeordneten Geräts haben. Ein weiteres Beispiel ist die Bereitstellung eines IoT Edge-Geräts mit ausgehenden Netzwerkzugriff nur auf IoT Hub.

Um die Überwachung in diesem Szenario zu ermöglichen, kann das Metrikensammler-Modul so konfiguriert werden, dass Metriken als D2C-Nachrichten (Device-to-Cloud) über das edgeHub-Modul gesendet werden. Die Funktion wird aktiviert, indem die UploadTarget-Umgebungsvariable bei der Konfiguration des Sammlers auf IoTMessagefestgelegt wird.

Tipp

Denken Sie daran, eine edgeHub-Route hinzuzufügen, um Metriknachrichten aus dem Sammlermodul an IoT Hub zu übermitteln. Dieser entspricht dem Format FROM /messages/modules/replace-with-collector-module-name/* INTO $upstream.

Diese Option erfordert zusätzliches Setup, einen Cloudworkflow, um Metrikmeldungen, die beim IoT Hub ankommen, an den Log Analytics-Arbeitsbereich zu übermitteln. Ohne diese Einrichtung funktionieren die anderen Teile der Integration wie kuratierte Visualisierungen und Warnungen nicht.

Hinweis

Bei dieser Option treten zusätzliche Kosten auf. Metriknachrichten werden auf Ihr IoT Hub-Nachrichtenkontingent angerechnet. Außerdem werden Ihnen die Log Analytics-Erfassung und die Cloudworkflowressourcen in Rechnung gestellt.

Beispiel für einen Cloudworkflow

Ein Cloudworkflow, der Metriknachrichten von IoT Hub an Log Analytics übermittelt, ist als Bestandteil des IoT Edge-Protokollierungs- und -Überwachungbeispiels verfügbar. Das Beispiel kann in vorhandenen Cloudressourcen bereitgestellt werden oder als Referenz für eine Produktionsbereitstellung dienen.

Nächste Schritte

Erfahren Sie mehr über die verschiedenen Arten von kuratierten Visualisierungen, die mit Azure Monitor möglich sind.