View a markdown version of this page

InfluxDB - AWS IoT Core

Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.

InfluxDB

Wählen Sie diese Aktion, wenn Sie die Gerätetelemetrie nach Betriebstrends abfragen oder Zeitreihendaten in Echtzeit überwachen möchten. Sie können clientseitiges oder serverseitiges Batching verwenden, um mehrere Punkte in einer Schreibanforderung zu kombinieren. AWS IoT Core konvertiert jede Nachricht in das InfluxDB-Leitungsprotokoll und schreibt sie in die angegebene Datenbank und Tabelle. Weitere Informationen zum Format finden Sie in der Dokumentation unter InfluxDB-Leitungsprotokoll. InfluxData Informationen zu verwalteten Clustern finden Sie unter Amazon Timestream for InfluxDB.

Voraussetzungen

Diese Regelaktion hat die folgenden Voraussetzungen:

  • Ein InfluxDB-Aktionsziel — Erstellen Sie ein InfluxDB-Aktionsziel, das den Endpunkt, die Version und die Anmeldeinformationen für Ihre InfluxDB-Instanz angibt. AWS IoT Core validiert den Besitz des Endpunkts, bevor der Datenverkehr gesendet wird. Siehe Ziel der InfluxDB-Aktion.

  • Eine IAM-Rolle, die annehmen AWS IoT kann, in Ihre InfluxDB-Datenbanken zu schreiben und die GetSecretValue Operation mit dem Secret auszuführen, das Ihre InfluxDB-Anmeldeinformationen speichert. Weitere Informationen finden Sie unter Gewährung einer AWS IoT regeln Sie den Zugriff, den es benötigt.

  • InfluxDB-Anmeldeinformationen gespeichert in AWS Secrets Manager — Für InfluxDB V3 stellt Amazon Timestream for InfluxDB automatisch ein Secrets Manager-Geheimnis bereit, wenn Sie den InfluxDB-Cluster erstellen. Das Geheimnis enthält die Cluster-Anmeldeinformationen. Generieren Sie für InfluxDB V2 ein All-Access- oder ein benutzerdefiniertes API-Token aus Ihrer InfluxDB-Instanz. Speichern Sie den Token-Wert als Klartext-Geheimnis in. AWS Secrets Manager Weitere Informationen zur Tokenerstellung finden Sie in der InfluxData Dokumentation unter Erstellen eines Tokens. Zur Laufzeit fordert die Regelaktion auf, diese Anmeldeinformationen secretsmanager:GetSecretValue abzurufen, bevor Sie sich bei Ihrem InfluxDB-Endpunkt authentifizieren.

  • Zeitstempel in der Nachrichtennutzlast — Jedes Objekt in der Nachrichtennutzlast muss einen benannten Schlüssel timestamp (Groß- und Kleinschreibung beachten) mit einem ganzzahligen Unix-Epochenwert enthalten. Die Zeitstempeleinheit kann auch in der IoT-Regeldefinition festgelegt werden. AWS IoT Core generiert keine Zeitstempel für die InfluxDB-Aktion, außer wenn InfluxDB als Fehleraktion verwendet wird.

    Anmerkung

    Ein Alias wie ts oder time kann nicht anstelle von verwendet werden. timestamp

  • HTTPS-Konnektivität — Ihre InfluxDB-Instanz muss AWS IoT Core über HTTPS erreichbar sein. Unterstützte ausgehende Ports sind: 443, 8443, 8086 (Standardport für InfluxDB V2) und 8181 (Standardport für InfluxDB V3).

  • JSON-format Payload — Die InfluxDB-Aktion verarbeitet nur JSON-Payloads. Wenn Ihre Geräte Binär- oder Protobuf-Daten veröffentlichen, verwenden Sie die decode() Funktion in Ihrer Regel-SQL, um sie vor der Ausführung der Aktion in JSON zu konvertieren.

Ziel der InfluxDB-Aktion

Bevor Sie die InfluxDB-Regelaktion verwenden können, müssen Sie ein InfluxDB-Aktionsziel erstellen. Das Ziel definiert die Verbindungsparameter für Ihre InfluxDB-Instanz. AWS IoT Core validiert dann den Besitz des Endpunkts.

Ein Ziel erstellen

Verwenden Sie die CreateTopicRuleDestination API, um ein InfluxDB-Ziel zu erstellen:

{ "destinationConfiguration": { "influxDBConfiguration": { "endpoint": "https://my-instance.timestream-influxdb.us-west-2.amazonaws.com:8086", "influxDBVersion": "V2", "secretId": "arn:aws:secretsmanager:us-west-2:111122223333:secret:my-influxdb-credentials-AbCdEf" } } }

Zielparameter

Parameter Typ Erforderlich Beschreibung
endpoint Zeichenfolge Ja Die HTTPS-Endpunkt-URL Ihrer InfluxDB-Instanz. HTTP wird nicht unterstützt. Unterstützte Ports: 443, 8086, 8181, 8443.
influxDBVersion Zeichenfolge Ja Die InfluxDB-Version. Zulässige Werte: V2, V3.
secretId Zeichenfolge Ja Der Name oder ARN des AWS Secrets Manager Geheimnisses, das Ihr InfluxDB-Token enthält.
secretType Zeichenfolge Nein Der Typ des geheimen Werts. Zulässige Werte: SecretString, SecretBinary.
secretKey Zeichenfolge Nein Der Schlüssel im geheimen JSON, der das Authentifizierungstoken enthält. Nur erforderlich, wenn das Geheimnis ein JSON-Objekt mit mehreren Schlüsseln ist.

Überprüfung des Besitzes am Endpunkt

Wenn Sie ein InfluxDB-Aktionsziel erstellen, AWS IoT Core validiert es den Besitz des Endpoints, indem es sich anhand der von Ihnen angegebenen Anmeldeinformationen gegenüber der InfluxDB-API authentifiziert:

  • InfluxDB V2: Ruft den Endpunkt auf. AWS IoT Core /api/v2/me

  • InfluxDB V3: AWS IoT Core Ruft den Endpunkt () der Listendatenbanken auf. GET /api/v3/configure/database

Eine erfolgreiche Antwort (2xx) setzt den Zielstatus auf. ENABLED AWS IoT Core Setzt den Status im Fehlerfall aufERROR. Um die Überprüfung erneut zu versuchen, rufen Sie UpdateTopicRuleDestination mit dem Status auf anIN_PROGRESS.

Zuordnung der InfluxDB-Terminologie

Die folgenden Begriffe unterscheiden sich zwischen InfluxDB V2 und V3.

AWS IoT Core Parameter Begriff InfluxDB V2 Begriff InfluxDB V3
databaseName Bucket Datenbank
tableName Messung Tabelle
Anmerkung

Wenn Sie von der Amazon Timestream-Regelaktion migrieren, wird der dimensions Parameter den Tags in der InfluxDB-Aktion zugeordnet, und die Attribute der Abfrageergebnisse werden Feldern zugeordnet.

Parameters

Wenn Sie eine AWS IoT Regel mit der InfluxDB-Aktion erstellen, müssen Sie die folgenden Informationen angeben:

destinationArn

Der ARN des InfluxDB-Aktionsziels. Siehe Ziel der InfluxDB-Aktion. Unterstützt Ersatzvorlagen: Nein

roleArn

Der ARN der IAM-Rolle, die die AWS IoT Erlaubnis zum Zugriff auf das Secrets Manager-Geheimnis gewährt. Siehe Voraussetzungen. Unterstützt Ersatzvorlagen: Nein

databaseName

Der Name der InfluxDB-Datenbank (in InfluxDB v2 als Bucket oder in InfluxDB v3 als Datenbank bezeichnet), in die Datensätze geschrieben werden sollen. Unterstützt Substitutionsvorlagen: Nein. Ersetzungsvorlagen Um Daten an verschiedene Datenbanken weiterzuleiten, erstellen Sie separate Regelaktionen für jede Datenbank.

tableName

Der Name der Tabelle (in InfluxDB v2 als Messung oder in InfluxDB v3 als Tabelle bezeichnet), in die Datensätze geschrieben werden sollen. Unterstützt Ersatzvorlagen: Ja

organization

Der Name der InfluxDB-Organisation. Erforderlich für InfluxDB v2. Wenn Sie diesen Parameter für InfluxDB v3 angeben, wird er ignoriert. Unterstützt Substitutionsvorlagen: Nein.

tags

Metadaten für jeden Punkt, angegeben als Karte. Jeder Kartenschlüssel ist ein Tag-Name, und jeder Kartenwert ist der entsprechende Tag-Wert. Die Tags werden aus Gründen der Abfrageleistung indexiert.

  • In InfluxDB V3 muss jeder Tag-Name innerhalb einer Tabelle eindeutig sein und darf keinen Feldnamen duplizieren.

  • Tag-Werte unterstützen Vorlagen für den Nachrichtenumfang und die Substitution pro Element.

timestampUnit

Die Genauigkeit des Zeitstempelwerts in der Nutzlast. Gültige Werte: s (Sekunden) | (Millisekunden) | ms (Mikrosekunden) | us (Nanosekunden). ns Standard: ms. Unterstützt Substitutionsvorlagen: Nein.

batchConfig

(Optional) Server-side Stapelkonfiguration. Weitere Informationen finden Sie unter Stapelverarbeitung.

  • maxBatchSize— Maximale Anzahl von Punkten in jedem Stapel. Gültiger Bereich: 1—500.

  • maxBatchOpenMs— Maximale Zeit in Millisekunden, um einen Stapel geöffnet zu halten. Gültiger Bereich: 5—1.000.

  • maxBatchSizeBytes— Maximale Gesamtgröße in Byte vor dem Leeren. Gültiger Bereich: 100—131.072.

  • batchAcrossTopics – Boolesch. Wenntrue, enthält der Stapel Punkte aus Nachrichten zu verschiedenen Themen. Standard: false.

Stapelverarbeitung

Die InfluxDB-Aktion unterstützt zwei Batching-Modi.

Client-side Stapelverarbeitung

Ihr IoT-Gerät stapelt Zeitreihendaten als JSON-Array und veröffentlicht sie als einzelne MQTT-Nachricht. Beim clientseitigen Batching wird jedes Array-Element in einer einzigen Schreibanforderung zu einem Zeilenprotokollpunkt. Sie benötigen keine zusätzliche Konfiguration.

Server-side Stapelverarbeitung

Verwenden Sie serverseitiges Batching, um einzelne Nachrichten zu gruppieren, bevor Sie sie in InfluxDB schreiben. Konfigurieren Sie das serverseitige Batching mithilfe des Parameters. batchConfig Der Stapel wird geleert, wenn ein konfiguriertes Limit (maxBatchSizemaxBatchOpenMs, odermaxBatchSizeBytes) zuerst erreicht wird.

Anmerkung

Sowohl serverseitiges Batching als auch clientseitiges Batching (JSON-Array-Payloads) können gleichzeitig konfiguriert werden.

Die InfluxDB-Aktion wird auf der Grundlage der Größe der ausgehenden Nutzdaten in Schritten von 5 KiB gemessen. Line-protocol Konvertierungsfehler werden ebenfalls gemessen.

Per-element Vorlagen für Array-Nutzlasten

Wenn Ihre IoT-Geräte gestapelte Zeitreihendaten als JSON-Array senden, können Sie die „Vorlagen für die Ersetzung pro Element“ verwenden, um Werte aus jedem einzelnen Array-Element aufzulösen. Dadurch wird jeder Datenpunkt an eine andere Tabelle weitergeleitet oder elementspezifische Tags angewendet. Weitere Informationen finden Sie unter Per-element Vorlagen.

Syntax von zwei Vorlagen für Substitutionen

  • ${expression}— Wird im Nachrichtenbereich anhand der eingehenden Gerätenachricht aufgelöst. Wird für jede Nachricht einmal ausgewertet; derselbe Wert gilt für jeden Punkt im Array.

  • @{expression}— Wird im Gültigkeitsbereich eines Elements anhand eines einzelnen Elements der Nutzlast aufgelöst, die durch die SQL SELECT-Anweisung der Regel erzeugt wird. Re-evaluated für jedes Array-Element, sodass jeder Punkt einen anderen Wert erhalten kann. Weitere Informationen finden Sie in der @{expression} Referenz.

Verwenden Sie @{...} in tableName - und Tag-Werte, um den Ausdruck für jedes Array-Element einzeln aufzulösen.

Beispiel

Angesichts der folgenden Gerätenutzlast (JSON-Array):

[ {"measurement_type": "temperature", "room": "kitchen", "timestamp": 1700000000000, "value": 23.5}, {"measurement_type": "humidity", "room": "bedroom", "timestamp": 1700000001000, "value": 60.1} ]

Und die folgende Aktionskonfiguration:

{ "influxDB": { "destinationArn": "arn:aws:iot:us-west-2:111122223333:ruledestination/influxdb/abc123", "roleArn": "arn:aws:iam::111122223333:role/iot-influxdb-role", "databaseName": "sensor_data", "tableName": "@{measurement_type}", "tags": { "room": "@{room}" }, "timestampUnit": "ms" } }

Die resultierende Line-Protocol-Ausgabe enthält zwei Punkte:

temperature,room=kitchen value=23.5 1700000000000 humidity,room=bedroom value=60.1 1700000001000
Anmerkung

Ein Feld, auf das von verwiesen @{...} wird, wird aus dem Line-Protocol-Feldsatz entfernt, sodass es nicht auch als Feld erscheint. In diesem Beispiel measurement_type wird es zum Tabellennamen und room zu einem Tag, sodass keines von beiden in der Feldgruppe vorkommt — value es ist das einzige Feld.

Einschränkungen

  • @{...}wird nur in der InfluxDB-Aktionskonfiguration (tableNameund in den Tag-Werten) unterstützt.

  • Sie können @{...} in der Regel keine SQL (SELECT/WHEREKlauseln), Fehleraktionsdefinitionen oder andere Regelaktionen verwenden.

  • Im Inneren @{...} werden nur Feldverweise unterstützt. Funktionen werden nicht unterstützt.

  • Jeder Wert unterstützt höchstens einen @{...} Marker. Mehrere Markierungen in einem einzelnen Wert führen zu einer API-Ausnahme.

  • Sie können zwei Werte nicht mischen ${...} und @{...} denselben Wert verwenden. Das Mischen führt zu einer API-Ausnahme.

  • Ein einzelnes JSON-Objekt wird als ein Array mit einem Element behandelt.

Inhalt des InfluxDB-Datensatzes

Für jeden Datensatz im Post-SQL-Abfrageergebnis enthält der resultierende InfluxDB-Zeilenprotokollpunkt die folgenden Komponenten:

Komponente Quelle
Tabelle Der Parameterwert tableName
Tags (Markierungen) Die Schlüssel-Wert-Paare aus dem Parameter tags
Felder Die verbleibenden Nutzdatenattribute werden nicht als Tags, Tabellenname oder Zeitstempel verwendet
Zeitstempel Der aus der timestamp Nutzlast extrahierte Schlüssel

Datentypkonvertierung

AWS IoT Core konvertiert JSON-Werte wie folgt in InfluxDB-Zeilenprotokolltypen:

JSON-Typ Leitungsprotokolltyp Beispiel
Integer (−2³ bis 2³−1) Ganzzahl mit i Vorzeichen (Suffix) 42 → 42i
Ganzzahl (2°³ bis 2−1) Ganzzahl ohne Vorzeichen (Suffix) u 9223372036854775808 → 9223372036854775808u
Ganzzahl außerhalb (−2³ bis 2−1) Abgelehnt (Fehleraktion ausgelöst) —
Gleitkommazahl/Dezimal IEEE-754 64-Bit-Float 23.5 → 23.5
Boolesch t oder f true → t
Zeichenfolge Zeichenfolge in Anführungszeichen "active" → "active"
Null Ausgelassen (nicht geschrieben) —
Objekt oder Array Komprimierte JSON-Zeichenfolge (ohne Leerzeichen) {"a":1} → "{\"a\":1}"

Einschränkungen bei der Benennung

  • Feldschlüssel und Tagschlüssel dürfen nicht leer sein oder mit einem Unterstrich (_) beginnen.

  • In InfluxDB V3 müssen Tabellenname und Tag-Schlüssel mit einem Buchstaben oder einer Ziffer beginnen.

  • Kommas, Gleichheitszeichen und Leerzeichen in Feldschlüsseln, Tag-Schlüsseln und Tag-Werten werden automatisch maskiert.

  • Maße: Kommas und Leerzeichen werden automatisch maskiert.

  • Die Tags werden vor der Serialisierung alphabetisch nach Schlüsseln sortiert, um die Aufnahmeleistung zu verbessern.

  • Leere Tag-Werte werden in der Ausgabe weggelassen.

Reservierte Schlüssel

Die folgenden Nutzdatenschlüssel werden bei der Konvertierung des Leitungsprotokolls aus dem Feldsatz entfernt:

  • timestamp— Wird als Punkt-Zeitstempel verwendet.

  • Schlüssel, auf die tableName (über ${...} oder@{...}) verwiesen wird — Wird als Tabellenname verwendet.

  • Schlüssel, auf die anhand des Tag-Werts verwiesen wird (via ${...} oder@{...}) — Werden als Tag-Werte verwendet.

Fehleraktionen

Wenn die InfluxDB-Aktion fehlschlägt, wird die konfigurierte Fehleraktion ausgelöst.

InfluxDB als Fehleraktion verwenden

Sie können die InfluxDB-Aktion als Fehleraktion für jede Regel konfigurieren. Die gesamte Nutzlast wird tableName als ein Datensatz in einen einzigen Datensatz geschrieben. Message-scope Substitutionsvorlagen (${...}) werden in den Fehleraktionen und unterstützt. tableName tags

Ausgabe der Fehleraktion

Wenn die Fehleraktion ausgelöst wird, enthält die Ausgabe-Nutzlast:ruleName,topic,cloudwatchTraceId, clientIdsourceIp, base64OriginalPayload (Base64-encoded Originalnachricht) und ein failures Array, in dem jeder Eintrag failedActionfailedResource, und errorMessage enthält.

Beim serverseitigen Batching verwendet payloadsWithMetadata die Payload Folgendes: Ein Eintrag für jede einzelne eingehende MQTT-Nachricht. Die Werte jedes Fehlers beziehen sich auf die affectedIds id Werte dieser Nachrichteneinträge; es handelt sich nicht um Punktindizes. Ein clientseitiges JSON-Array ist eine eingehende Nachricht, obwohl es mehrere InfluxDB-Punkte erzeugt. Das vollständige Payload-Format finden Sie unter. Fehleraktionen beim Stapeln

Szenario eines Fehlers Description
Ziel DEAKTIVIERT oder FEHLER Das InfluxDB-Aktionsziel ist nicht aktiviert. Vergewissern Sie sich, dass die Überprüfung des Endpunktbesitzes
Ungültiger Ziel-ARN Das angegebene Ziel existiert nicht.
Ungültiger Rollen-ARN Die IAM-Rolle ist nicht vorhanden oder es fehlen Berechtigungen.
Fehler beim Abrufen geheimer Daten Der geheime oder konfigurierte Schlüssel ist secretKey nicht vorhanden, oder die Regelaktionsrolle kann den Schlüssel nicht abrufen oder entschlüsseln.
Fehlender Zeitstempel Die Payload enthält keinen Schlüssel. timestamp Jedes Objekt in der Nutzlast muss ein timestamp Feld mit einem ganzzahligen Unix-Epochenwert enthalten.
Ungültiger Zeitstempelwert Der Zeitstempelwert ist keine Ganzzahl (z. B. eine Zeichenfolge, eine Gleitkommazahl oder ein ISO-8601 Datum). Der Wert muss eine Unix-Epoche mit einer Ganzzahl in der von angegebenen Einheit sein. timestampUnit
Ungültige Nutzlast (keine Felder) Die Payload enthält nach dem Entfernen der reservierten Schlüssel keine gültigen Felder für das Leitungsprotokoll.
Ungültiger Feldschlüssel Ein Feldschlüssel ist leer oder beginnt mit_.
Der Client-Stapel enthält einen ungültigen Punkt Bei einem oder mehreren Elementen in einem JSON-Array ist die Überprüfung des Zeilenprotokolls fehlgeschlagen.
Stichwörter und Felder überschreiten das Spaltenlimit Kombinierte Tag- und Feldschlüssel überschreiten die maximale Spaltenanzahl (250).
Verbindungsfehler AWS IoT Core konnte keine Verbindung zum InfluxDB-Endpunkt herstellen.
Authentifizierungsfehler Das InfluxDB-Token ist ungültig oder abgelaufen. Aktualisieren Sie das Geheimnis in. AWS Secrets Manager
Die Ressource wurde nicht gefunden Die angegebene Datenbank, Tabelle oder Organisation existiert nicht in InfluxDB.
Konflikt zwischen Feldtyp Ein oder mehrere Felder stehen in Konflikt mit dem vorhandenen Schema. Das gesamte Batch-Schreiben schlägt fehl.
InfluxDB-Serverfehler In InfluxDB ist ein interner Fehler aufgetreten.
Der InfluxDB-Dienst ist nicht verfügbar InfluxDB ist vorübergehend nicht verfügbar. Die Rules Engine versucht es erneut mit exponentiellem Backoff.
Wichtig

Ein Feldtypkonflikt an einer beliebigen Stelle in einem Batch führt dazu, dass der gesamte Batch-Schreibvorgang fehlschlägt. InfluxDB überträgt Punkte nicht teilweise — entweder sind alle Punkte erfolgreich oder der gesamte Schreibvorgang wird abgelehnt.

Wiederholbare Fehler (503) werden mit exponentiellem Backoff wiederholt. AWS IoT Core Lädt bei einer HTTP 401-Antwort das Token erneut von und versucht die Anfrage einmal erneut. AWS Secrets Manager Non-retryable Fehler (404, 422) lösen die Fehleraktion sofort aus. Die Grenzwerte für Wiederholungsversuche finden Sie unter AWS IoT Core Dienstkontingente.

Beispiele

Aktion der InfluxDB-Regel

{ "topicRulePayload": { "sql": "SELECT * FROM 'devices/+/telemetry'", "ruleDisabled": false, "awsIotSqlVersion": "2016-03-23", "actions": [ { "influxDB": { "destinationArn": "arn:aws:iot:us-west-2:111122223333:ruledestination/influxdb/a1b2c3d4", "roleArn": "arn:aws:iam::111122223333:role/iot-influxdb-role", "organization": "my-org", "databaseName": "sensor_data", "tableName": "device_metrics", "tags": { "device_id": "${clientid()}", "location": "building-a" }, "timestampUnit": "ms" } } ] } }

Beispiel für eine Nutzlast:

{ "timestamp": 1700000000000, "temperature": 23.5, "humidity": 60.1, "pressure": 1013.25, "battery_level": 87 }

Resultierendes Leitungsprotokoll:

device_metrics,device_id=myDevice123,location=building-a temperature=23.5,humidity=60.1,pressure=1013.25,battery_level=87i 1700000000000

Die Reihenfolge der Felder in der Ausgabe kann variieren — die Felder sind nicht alphabetisch sortiert.

Client-batched Array-Nutzlast mit Vorlagen pro Element

{ "influxDB": { "destinationArn": "arn:aws:iot:us-west-2:111122223333:ruledestination/influxdb/a1b2c3d4", "roleArn": "arn:aws:iam::111122223333:role/iot-influxdb-role", "organization": "my-org", "databaseName": "sensor_data", "tableName": "@{measurement_type}", "tags": { "sensor_id": "@{sensor_id}", "location": "${topic(2)}" }, "timestampUnit": "ns" } }

Beispiel-Nutzlast (veröffentlicht unter): devices/floor3/telemetry

[ {"measurement_type": "temperature", "sensor_id": "sensor-42", "timestamp": 1700000000000000000, "value": 23.5}, {"measurement_type": "humidity", "sensor_id": "sensor-42", "timestamp": 1700000001000000000, "value": 60.1}, {"measurement_type": "pressure", "sensor_id": "sensor-43", "timestamp": 1700000002000000000, "value": 1013.25} ]

Resultierendes Leitungsprotokoll:

temperature,location=floor3,sensor_id=sensor-42 value=23.5 1700000000000000000 humidity,location=floor3,sensor_id=sensor-42 value=60.1 1700000001000000000 pressure,location=floor3,sensor_id=sensor-43 value=1013.25 1700000002000000000

Server-side Batching mit InfluxDB

Um einer InfluxDB-Aktion serverseitiges Batching hinzuzufügen, nehmen Sie Folgendes in die Aktionskonfiguration auf: batchConfig

"batchConfig": { "maxBatchSize": 50, "maxBatchOpenMs": 1000, "maxBatchSizeBytes": 65536, "batchAcrossTopics": false }

IAM-Richtlinie für die Rolle „Regelaktion“

Vertrauensrichtlinie:

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": {"Service": "iot.amazonaws.com"}, "Action": "sts:AssumeRole" } ] }

Richtlinien zur Genehmigung:

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "secretsmanager:GetSecretValue", "Resource": "arn:aws:secretsmanager:us-west-2:111122223333:secret:my-influxdb-secret-a1b2c3" } ] }

Kombiniertes clientseitiges und serverseitiges Batching (Neuanordnung von Punkten)

Wenn Sie sowohl das clientseitige Batching (JSON-Array-Payloads) als auch das serverseitige Batching () aktivieren, beachten Sie, dass das serverseitige Batch möglicherweise Punkte batchConfig aus einer clientseitigen Batch-Payload neu anordnet. Die Rules Engine sammelt Punkte aus mehreren eingehenden Nachrichten in einem einzigen serverseitigen Batch. Da Nachrichten asynchron von verschiedenen Geräten oder Themen ankommen, können Punkte, die innerhalb der ursprünglichen Client-Nutzlast angeordnet waren, beim letzten Schreibvorgang mit Punkten aus anderen Nachrichten verschachtelt werden.

Konfiguration der Aktion:

{ "influxDB": { "destinationArn": "arn:aws:iot:us-west-2:111122223333:ruledestination/influxdb/abc123", "roleArn": "arn:aws:iam::111122223333:role/iot-influxdb-role", "databaseName": "sensor_data", "tableName": "@{measurement_type}", "tags": { "device_id": "${topic(2)}", "floor": "@{floor}" }, "timestampUnit": "ms", "batchConfig": { "maxBatchSize": 100, "maxBatchOpenMs": 500, "maxBatchSizeBytes": 65536, "batchAcrossTopics": true } } }

Gerät A veröffentlicht devices/deviceA/telemetry an zum Zeitpunkt T:

[ {"measurement_type": "temperature", "floor": "1", "timestamp": 1700000000000, "value": 22.1}, {"measurement_type": "temperature", "floor": "2", "timestamp": 1700000000100, "value": 23.4}, {"measurement_type": "humidity", "floor": "1", "timestamp": 1700000000200, "value": 55.0} ]

Gerät B veröffentlicht devices/deviceB/telemetry an zum Zeitpunkt T+10 ms:

[ {"measurement_type": "temperature", "floor": "3", "timestamp": 1700000000050, "value": 21.8}, {"measurement_type": "humidity", "floor": "3", "timestamp": 1700000000150, "value": 62.3} ]

Beide Nachrichten kommen innerhalb des Batchfensters von 500 ms an (maxBatchOpenMs), sodass die Rules Engine alle fünf Punkte zu einem einzigen serverseitigen Batch zusammenfasst.

Das resultierende Zeilenprotokoll (serverseitiges Batch-Schreiben):

temperature,device_id=deviceB,floor=3 value=21.8 1700000000050 temperature,device_id=deviceA,floor=1 value=22.1 1700000000000 temperature,device_id=deviceA,floor=2 value=23.4 1700000000100 humidity,device_id=deviceB,floor=3 value=62.3 1700000000150 humidity,device_id=deviceA,floor=1 value=55.0 1700000000200

Beachten Sie, dass die Punkte nicht mehr in der Reihenfolge angeordnet sind, in der sie in den einzelnen Client-Nutzdaten erschienen sind. Die drei Punkte von Gerät A (Zeitstempel 1700000000000, 1700000000100, 1700000000200) sind mit den beiden Punkten von Gerät B (Zeitstempel 1700000000050, 1700000000150) verschachtelt. Der serverseitige Batch garantiert nicht die ursprüngliche Reihenfolge in jeder Nachricht. InfluxDB verwendet das Zeitstempelfeld, um jeden Punkt auf der Timeline zu platzieren, sodass die Neuanordnung die Richtigkeit der Abfrage nicht beeinträchtigt. Wenn Ihre Anwendung jedoch auf Semantik der Schreibreihenfolge angewiesen ist (z. B. die Behandlung von Feldtypkonflikten oder die Deduplizierung bei Last-Write-Wins innerhalb derselben Millisekunde), beachten Sie, dass die effektive Schreibreihenfolge von der Veröffentlichungsreihenfolge abweichen kann.