View a markdown version of this page

InfluxDB - AWS IoT Core

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

InfluxDB

Scegli questa azione quando desideri interrogare la telemetria del dispositivo per verificare le tendenze operative o monitorare i dati di serie temporali in tempo reale. Puoi utilizzare il batching lato client o lato server per combinare più punti in un'unica richiesta di scrittura. AWS IoT Core converte ogni messaggio nel protocollo di linea InfluxDB e lo scrive nel database e nella tabella specificati. Per ulteriori informazioni sul formato, vedere il protocollo di linea InfluxDB nella documentazione. InfluxData Per informazioni sui cluster gestiti, consulta Amazon Timestream per InfluxDB.

Prerequisiti

Questa azione basata sulla regola ha i seguenti prerequisiti:

  • Una destinazione dell'azione InfluxDB: crea una destinazione dell'azione InfluxDB che specifichi l'endpoint, la versione e le credenziali per la tua istanza InfluxDB. AWS IoT Core Convalida la proprietà dell'endpoint prima di inviare traffico. Consulta Destinazione dell'azione InfluxDB.

  • Un ruolo IAM che AWS IoT può presupporre di scrivere nei database InfluxDB ed eseguire l'GetSecretValueoperazione sul segreto che memorizza le credenziali di InfluxDB. Per ulteriori informazioni, consulta Concessione di un AWS IoT regola l'accesso che richiede.

  • Credenziali InfluxDB archiviate in AWS Secrets Manager: per InfluxDB V3, Amazon Timestream for InfluxDB fornisce automaticamente un segreto di Secrets Manager quando crei il cluster InfluxDB. Il segreto contiene le credenziali del cluster. Per InfluxDB V2, genera un token All Access o un'API personalizzata dalla tua istanza InfluxDB. Memorizza il valore del token come testo segreto in. AWS Secrets Manager Per ulteriori informazioni sulla creazione di token, consulta Creare un token nella InfluxData documentazione. In fase di esecuzione, l'azione della regola richiede il recupero secretsmanager:GetSecretValue di queste credenziali prima dell'autenticazione sull'endpoint InfluxDB.

  • Timestamp nel payload del messaggio: ogni oggetto nel payload del messaggio deve contenere una chiave denominata timestamp (con distinzione tra maiuscole e minuscole) con un valore di epoca Unix intero. L'unità di timestamp può essere impostata anche nella definizione delle regole IoT. AWS IoT Core non genera timestamp per l'azione InfluxDB, tranne quando InfluxDB viene utilizzato come azione Error.

    Nota

    Un alias come o non può essere utilizzato al posto dits. time timestamp

  • Connettività HTTPS: la tua istanza InfluxDB deve essere raggiungibile tramite HTTPS. AWS IoT Core Le porte in uscita supportate sono: 443, 8443, 8086 (porta predefinita per InfluxDB V2) e 8181 (porta predefinita per InfluxDB V3).

  • JSON-format payload: l'azione InfluxDB elabora solo i payload JSON. Se i tuoi dispositivi pubblicano dati binari o Protobuf, usa la decode() funzione nella regola SQL per convertirli in JSON prima che l'azione venga eseguita.

Destinazione dell'azione InfluxDB

Prima di poter utilizzare l'azione della regola InfluxDB, è necessario creare una destinazione dell'azione InfluxDB. La destinazione definisce i parametri di connessione per l'istanza InfluxDB. AWS IoT Core quindi convalida la proprietà dell'endpoint.

Creazione di una destinazione

Usa l'CreateTopicRuleDestinationAPI per creare una destinazione InfluxDB:

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

Parametri di destinazione

Parametro Tipo Campo obbligatorio Descrizione
endpoint Stringa Sì L'URL dell'endpoint HTTPS della tua istanza InfluxDB. HTTP non è supportato. Porte supportate: 443, 8086, 8181, 8443.
influxDBVersion Stringa Sì La versione InfluxDB. Valori validi: V2, V3.
secretId Stringa Sì Il nome o l'ARN del AWS Secrets Manager segreto che contiene il tuo token InfluxDB.
secretType Stringa No Il tipo di valore segreto. Valori validi: SecretString, SecretBinary.
secretKey Stringa No La chiave all'interno del JSON segreto che contiene il token di autenticazione. Richiesto solo quando il segreto è un oggetto JSON con più chiavi.

Convalida della proprietà degli endpoint

Quando crei una destinazione d'azione InfluxDB, AWS IoT Core convalida la proprietà degli endpoint autenticandosi con l'API InfluxDB utilizzando le credenziali che hai fornito:

  • /api/v2/meInfluxDB V2: chiama l'endpoint. AWS IoT Core

  • InfluxDB V3: AWS IoT Core chiama l'elenco dei database endpoint (). GET /api/v3/configure/database

Una risposta riuscita (2xx) imposta lo stato della destinazione su. ENABLED In caso di errore, AWS IoT Core imposta lo stato su. ERROR Per riprovare la convalida, chiama UpdateTopicRuleDestination con lo stato impostato su. IN_PROGRESS

Mappatura della terminologia di InfluxDB

I seguenti termini differiscono tra InfluxDB V2 e V3.

AWS IoT Core parametro termine InfluxDB V2 Termine InfluxDB V3
databaseName Bucket Database
tableName Misura Tabella
Nota

Se stai migrando dall'azione delle regole di Amazon Timestream, il dimensions parametro viene mappato ai tag nell'azione InfluxDB e gli attributi dei risultati della query vengono mappati ai campi.

Parameters

Quando crei una AWS IoT regola con l'azione InfluxDB, devi specificare le seguenti informazioni:

destinationArn

L'ARN della destinazione dell'azione InfluxDB. Consulta Destinazione dell'azione InfluxDB. Supporta modelli di sostituzione: no

roleArn

L'ARN del ruolo IAM che concede il AWS IoT permesso di accedere al segreto di Secrets Manager. Consulta Prerequisiti. Supporta modelli di sostituzione: no

databaseName

Il nome del database InfluxDB (chiamato bucket in InfluxDB v2 o database in InfluxDB v3) su cui scrivere i record. Supporta i modelli di sostituzione: No. Per indirizzare i dati a database diversi, crea azioni di regole separate per ogni database.

tableName

Il nome della tabella (chiamata misurazione in InfluxDB v2 o tabella in InfluxDB v3) su cui scrivere i record. Supporta modelli di sostituzione: Sì.

organization

Il nome dell'organizzazione InfluxDB. Richiesto per InfluxDB v2. Se includi questo parametro per InfluxDB v3, viene ignorato. Supporta i modelli di sostituzione: No.

tags

Metadati per ogni punto, specificati come mappa. Ogni chiave della mappa è il nome di un tag e ogni valore della mappa è il valore del tag corrispondente. I tag sono indicizzati per le prestazioni delle query.

  • In InfluxDB V3, ogni nome di tag deve essere univoco all'interno di una tabella e non può duplicare il nome di un campo.

  • I valori dei tag supportano i modelli di message-scope e di sostituzione per elemento.

timestampUnit

La precisione del valore del timestamp nel payload. Valori validi: s (secondi) | (millisecondi) | ms (microsecondi) | us (nanosecondi). ns Default: ms. Supporta i modelli di sostituzione: No.

batchConfig

Configurazione in Server-side batch (opzionale). Per ulteriori informazioni, consulta Batching.

  • maxBatchSize— Numero massimo di punti in ogni lotto. Intervallo valido: 1—500.

  • maxBatchOpenMs— Tempo massimo in millisecondi per mantenere aperto un batch. Intervallo valido: 5—1.000.

  • maxBatchSizeBytes— Dimensione totale massima in byte prima dello svuotamento. Intervallo valido: 100—131.072.

  • batchAcrossTopics: booleano. Quandotrue, il batch include punti tratti da messaggi su argomenti diversi. Default: false.

Batching

L'azione InfluxDB supporta due modalità di batch.

Client-side raggruppamento in batch

Il tuo dispositivo IoT raggruppa i dati delle serie temporali come un array JSON e li pubblica come un singolo messaggio MQTT. Con il batching lato client, ogni elemento dell'array diventa un punto di protocollo di linea in una singola richiesta di scrittura. Non è necessaria una configurazione aggiuntiva.

Server-side raggruppamento in batch

Usa il batching lato server per raggruppare i singoli messaggi prima di scriverli su InfluxDB. Configura il batching lato server utilizzando il parametro. batchConfig Il batch viene svuotato quando viene raggiunto per primo un limite configurato (maxBatchSize,maxBatchOpenMs, omaxBatchSizeBytes).

Nota

È possibile configurare contemporaneamente sia il batching lato server che il batching lato client (payload di array JSON).

L'azione InfluxDB viene misurata in base alla dimensione del payload in uscita con incrementi di 5 KiB. Line-protocol Anche gli errori di conversione vengono misurati.

Per-element modelli per i payload degli array

Quando i tuoi dispositivi IoT inviano dati di serie temporali in batch come array JSON, puoi utilizzare i «modelli di sostituzione per elemento» per risolvere i valori di ogni singolo elemento dell'array. Questo indirizza ogni punto dati a una tabella diversa o applica tag specifici dell'elemento. Per ulteriori informazioni, consulta Per-element i modelli.

Sintassi di due modelli di sostituzione

  • ${expression}— Si risolve in base all'ambito del messaggio, rispetto al messaggio del dispositivo in arrivo. Valutato una volta per ogni messaggio; lo stesso valore si applica a tutti i punti dell'array.

  • @{expression}— Si risolve nell'ambito dell'elemento, rispetto a un singolo elemento del payload prodotto dall'istruzione SQL SELECT della regola. Re-evaluated per ogni elemento dell'array, in modo che ogni punto possa ottenere un valore diverso. Per ulteriori informazioni, vedere @{expression} riferimento.

Utilizzate i valori @{...} in tableName e tag per risolvere l'espressione rispetto a ciascun elemento dell'array singolarmente.

Esempio

Dato il seguente payload del dispositivo (array JSON):

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

E la seguente configurazione delle azioni:

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

L'output del protocollo di linea risultante contiene due punti:

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

Un campo a cui fa riferimento @{...} viene rimosso dal set di campi del protocollo di linea, quindi non viene visualizzato anche come campo. In questo esempio, measurement_type diventa il nome della tabella e room diventa un tag, quindi nessuno dei due appare nel set di campi: value è l'unico campo.

Restrizioni

  • @{...}è supportato solo nella configurazione delle azioni InfluxDB (tableNamee nei valori dei tag).

  • Non è possibile utilizzare @{...} nella regola SQL (SELECT/WHEREclausole), le definizioni delle azioni di errore o qualsiasi altra azione della regola.

  • All'interno sono supportati solo i riferimenti ai campi. @{...} Le funzioni non sono supportate.

  • Ogni valore supporta al massimo un @{...} marker. Più marcatori in un singolo valore generano un'eccezione API.

  • Non è possibile combinare ${...} e @{...} inserire lo stesso valore. La miscelazione produce un'eccezione API.

  • Un singolo oggetto JSON viene trattato come un array a un elemento.

Contenuto del record InfluxDB

Per ogni record nel risultato della query post-SQL, il punto del protocollo di linea InfluxDB risultante contiene questi componenti:

Componente Origine
Tabella Il valore del parametro tableName
Tag Le coppie chiave-valore del parametro tags
Campi Attributi del payload rimanenti non utilizzati come tag, nome della tabella o timestamp
Time stamp La timestamp chiave estratta dal payload

Conversione dei tipi di dati

AWS IoT Core converte i valori JSON nei tipi di protocollo di linea InfluxDB come segue:

tipo JSON Tipo di protocollo di linea Esempio
Numero intero (da −2³ a 2³−1) Numero intero con segno (isuffisso) 42 → 42i
Numero intero (da 2³ a 2−1) Numero intero senza segno (suffisso) u 9223372036854775808 → 9223372036854775808u
Numero intero esterno (da −2³ a 2−1) Rifiutato (azione di errore attivata) —
Float/decimale IEEE-754 virgola mobile a 64 bit 23.5 → 23.5
Booleano t o f true → t
Stringa Stringa citata "active" → "active"
Null Omessa (non scritta) —
Oggetto o matrice Stringa JSON compatta (senza spazi bianchi) {"a":1} → "{\"a\":1}"

Restrizioni di denominazione

  • Le chiavi di campo e le chiavi dei tag non possono essere vuote o iniziare con un carattere di sottolineatura ()_.

  • In InfluxDB V3, il nome della tabella e la chiave del tag devono iniziare con una lettera o una cifra.

  • Le virgole, i segni di uguale e gli spazi nelle chiavi dei campi, nelle chiavi dei tag e nei valori dei tag vengono eliminati automaticamente.

  • Misurazioni: le virgole e gli spazi vengono eliminati automaticamente.

  • I tag vengono ordinati alfabeticamente per chiave prima della serializzazione per migliorare le prestazioni di inserimento.

  • I valori dei tag vuoti vengono omessi dall'output.

Chiavi riservate

Le seguenti chiavi di payload vengono rimosse dal campo impostato durante la conversione del protocollo di linea:

  • timestamp— Usato come timestamp in punti.

  • Chiavi a cui fa riferimento tableName (tramite ${...} o@{...}): utilizzate come nome della tabella.

  • Chiavi a cui fa riferimento il valore del tag (tramite ${...} o@{...}): utilizzate come valori del tag.

Azioni di errore

Se l'azione InfluxDB fallisce, viene attivata l'azione di errore configurata.

Utilizzo di InfluxDB come azione di errore

È possibile configurare l'azione InfluxDB come azione di errore per qualsiasi regola. L'intero payload viene scritto su un singolo recordtableName. Message-scope i modelli di sostituzione (${...}) sono supportati nelle azioni di errore e. tableName tags

output dell'azione di errore

Quando viene attivata l'azione di errore, il payload di output contiene: ruleNametopic,cloudwatchTraceId,clientId,sourceIp, base64OriginalPayload (messaggio Base64-encoded originale) e un failures array in cui ogni voce ha failedActionfailedResource, e. errorMessage

Con il batching lato server, il payload utilizza una voce per ogni messaggio payloadsWithMetadata MQTT in entrata distinto. affectedIdsI valori di ogni errore si riferiscono ai id valori di tali messaggi; non sono indici di punti. Un array JSON sul lato client è un messaggio in entrata anche se produce più punti InfluxDB. Per il formato completo del payload, consulta. Azioni di errore relative al batching

Scenario di errore Description
Destinazione DISABILITATA o ERRORE La destinazione dell'azione InfluxDB non è abilitata. Verifica che la convalida della proprietà degli endpoint sia avvenuta con successo.
ARN di destinazione non valido La destinazione specificata non esiste.
Ruolo ARN non valido Il ruolo IAM non esiste o è privo di autorizzazioni.
Errore nel recupero del segreto Il segreto o la configurazione secretKey non esiste oppure il ruolo di azione della regola non può recuperare o decrittografare il segreto.
Timestamp mancante Il payload non contiene una chiave. timestamp Ogni oggetto nel payload deve includere un timestamp campo con un valore di epoca Unix intero.
Valore di timestamp non valido Il valore del timestamp non è un numero intero (ad esempio, una stringa, un float o una data). ISO-8601 Il valore deve essere un numero intero di epoca Unix nell'unità specificata da. timestampUnit
Payload non valido (nessun campo) Il payload non contiene campi validi per il protocollo di linea dopo aver rimosso le chiavi riservate.
Chiave di campo non valida Una chiave di campo è vuota o inizia con_.
Il batch client contiene un punto non valido Uno o più elementi in un array JSON non sono riusciti a convalidare il protocollo di linea.
I tag + i campi superano il limite delle colonne Le chiavi combinate di tag e campi superano il numero massimo di colonne (250).
Errore della connessione AWS IoT Core impossibile connettersi all'endpoint InfluxDB.
Errori di autenticazione Il token InfluxDB non è valido o è scaduto. Aggiorna il segreto in. AWS Secrets Manager
Risorsa non trovata Il database, la tabella o l'organizzazione specificati non esistono in InfluxDB.
Conflitto tra tipi di campo Uno o più campi sono in conflitto con lo schema esistente. L'intera scrittura del batch ha esito negativo.
Errore del server InfluxDB Si è verificato un errore interno in InfluxDB.
Servizio InfluxDB non disponibile InfluxDB è temporaneamente non disponibile. Il Rules Engine riprova con un backoff esponenziale.
Importante

Un conflitto tra i tipi di campo in un punto qualsiasi di un batch causa il fallimento dell'intera scrittura del batch. InfluxDB non impegna parzialmente i punti: o tutti i punti hanno esito positivo o l'intera scrittura viene rifiutata.

Gli errori rieseguibili (503) vengono ritentati con un backoff esponenziale. Per una risposta HTTP 401, AWS IoT Core ricarica il token da e riprova la richiesta una volta. AWS Secrets Manager Non-retryable gli errori (404, 422) attivano immediatamente l'azione di errore. Per i limiti dei tentativi, vedi quote di AWS IoT Core servizio.

Esempi

Azione della regola InfluxDB

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

Esempio di payload:

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

Protocollo di linea risultante:

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

L'ordine dei campi nell'output può variare: i campi non sono ordinati alfabeticamente.

Client-batched payload di matrice con modelli per elemento

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

Esempio di payload (pubblicato su): 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} ]

Protocollo di linea risultante:

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 raggruppamento con InfluxDB

Per aggiungere il batching lato server a qualsiasi azione InfluxDB, includi nella configurazione dell'azione: batchConfig

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

Politica IAM per il ruolo di azione delle regole

Politica di fiducia:

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

Politica di autorizzazione:

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

Batching combinato lato client e lato server (riordino dei punti)

Quando abiliti sia il batching lato client (payload di array JSON) che il batching lato server (), tieni presente che il batch lato server potrebbe riordinare i punti da un payload in batch sul lato client. batchConfig Il Rules Engine accumula punti da più messaggi in arrivo in un unico batch sul lato server. Poiché i messaggi arrivano in modo asincrono da dispositivi o argomenti diversi, i punti ordinati all'interno del payload originale del client possono essere interlacciati con i punti provenienti da altri messaggi in fase di scrittura finale.

Configurazione dell'azione:

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

Il dispositivo A pubblica al devices/deviceA/telemetry momento 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} ]

Il dispositivo B pubblica devices/deviceB/telemetry al tempo T+10ms:

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

Entrambi i messaggi arrivano entro la finestra batch di 500 ms (maxBatchOpenMs), quindi il Rules Engine combina tutti e cinque i punti in un unico batch lato server.

Protocollo di riga risultante (scrittura in batch sul lato server):

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

Nota che i punti non sono più nell'ordine in cui sono apparsi all'interno del payload di ciascun cliente. I tre punti del dispositivo A (timestamp 1700000000000, 1700000000100, 1700000000200) sono interlacciati con i due punti del dispositivo B (timestamp 1700000000050, 1700000000150). Il batch lato server non garantisce l'ordine originale all'interno di ciascun messaggio. InfluxDB utilizza il campo timestamp per inserire ogni punto sulla timeline, quindi il riordino non influisce sulla correttezza della query. Tuttavia, se la tua applicazione si basa sulla semantica dell'ordine di scrittura (ad esempio, la gestione dei conflitti tra i tipi di campo o la deduplicazione delle vittorie all'ultima scrittura entro lo stesso millisecondo), tieni presente che l'ordine di scrittura effettivo potrebbe differire dall'ordine di pubblicazione.