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, consulta il protocollo di linea InfluxDB nella documentazione. InfluxData Per informazioni sui cluster gestiti, consulta Amazon Timestream for InfluxDB.

Prerequisiti

L'azione di questa regola presenta i seguenti prerequisiti:

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

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

  • 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 API All Access o personalizzato dalla tua istanza InfluxDB. Memorizza il valore del token come segreto in testo semplice 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 secretsmanager:GetSecretValue di recuperare queste credenziali prima dell'autenticazione sull'endpoint InfluxDB.

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

    Nota

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

  • Connettività HTTPS: l'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 dell'esecuzione dell'azione.

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.

Creare 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 token InfluxDB.
secretType Stringa No Il tipo di valore segreto. Valori validi: SecretString, SecretBinary.
secretKey Stringa No La chiave all'interno del codice 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à dell'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 terminologica 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 Timestreamdimensions, il 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 l' AWS IoT autorizzazione ad 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 modelli sostitutivi: No. Per indirizzare i dati verso 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. Obbligatorio per InfluxDB v2. Se includi questo parametro per InfluxDB v3, viene ignorato. Supporta modelli sostitutivi: 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 un nome di campo.

  • I valori dei tag supportano l'ambito del messaggio e i modelli 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 modelli sostitutivi: No.

batchConfig

(Facoltativo) configurazione in Server-side batch. Per ulteriori informazioni, consulta Batching.

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

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

  • maxBatchSizeBytes— Dimensione totale massima in byte prima del flushing. 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 dosaggio

Il tuo dispositivo IoT raggruppa i dati delle serie temporali come 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 alcuna configurazione aggiuntiva.

Server-side dosaggio

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 il batching lato server e il batching lato client (payload dell'array JSON).

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

Per-element modelli per payload di array

Quando i 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 sostituzione per i payload dell'array in AWS IoT rules.

Sintassi di due modelli di sostituzione

  • ${expression}— Risolve nell'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}— 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, consulta il @{expression}riferimento.

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

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 di 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": { "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 line-protocol, 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 viene visualizzato nel set di campi, ma value è l'unico campo.

Restrizioni

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

  • Non è possibile utilizzare @{...} nelle regole SQL (SELECT/WHEREclausole), definizioni di 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ù marker in un singolo valore producono 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 di 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 Gli attributi del payload rimanenti non vengono 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 in 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 u (suffisso) 9223372036854775808 → 9223372036854775808u
Numero intero esterno (da −2³ a 2−1) Rifiutato (azione di errore attivata) —
Float/decimale IEEE-754 Flottante a 64 bit 23.5 → 23.5
Booleano t o f true → t
Stringa Stringa tra virgolette "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 di tag non possono essere vuote o iniziare con un trattino basso ()_.

  • 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 di campo, 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— Utilizzato come indicatore temporale del punto.

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

  • Chiavi a cui fa riferimento il valore del tag (tramite ${...} or@{...}): utilizzate come valori di 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 in un unico recordtableName. Message-scope i modelli di sostituzione (${...}) sono supportati nell'azione 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 contiene failedActionfailedResource, e. errorMessage

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

Scenario di fallimento Description
Destinazione DISABILITATA o ERRORE La destinazione dell'azione InfluxDB non è abilitata. Verifica che la convalida della proprietà dell'endpoint sia riuscita.
ARN di destinazione non valido La destinazione specificata non esiste.
ARN del ruolo non valido Il ruolo IAM non esiste o non dispone di autorizzazioni.
Errore di recupero segreto Il segreto o il file configurato 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 intero di epoca Unix.
Valore del 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'epoca Unix intera nell'unità specificata da. timestampUnit
Payload non valido (nessun campo) Il payload non contiene campi validi per il protocollo di linea dopo la rimozione delle chiavi riservate.
Chiave di campo non valida Una chiave di campo è vuota o inizia con_.
Il batch del 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 + campi superano il limite delle colonne Le chiavi combinate di tag e campo 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. La scrittura dell'intero 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 di tipo di campo in qualsiasi punto di un batch causa un errore di scrittura dell'intero batch. InfluxDB non assegna punti parzialmente: 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 ritenta la richiesta una volta. AWS Secrets Manager Non-retryable gli errori (404, 422) attivano immediatamente l'azione di errore. Per i limiti dei tentativi, consulta le 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" } } ] } }

Payload di esempio:

{ "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 dell'array 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" } }

Payload di esempio (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 batch 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 Rule Action

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 abilitate sia il batching lato client (payload dell'array JSON) che il batching lato server (), tenete presente che il batch lato server può riordinare i punti da un payload in batch lato client. batchConfig Il Rules Engine accumula punti da più messaggi in arrivo in un unico batch lato server. Poiché i messaggi arrivano in modo asincrono da dispositivi o argomenti diversi, i punti ordinati all'interno del payload del client originale possono essere interlacciati con i punti di altri messaggi durante la 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 devices/deviceA/telemetry su al 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 al devices/deviceB/telemetry momento T+10 ms:

[ {"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 linea risultante (scrittura batch 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

Notate che i punti non sono più nell'ordine in cui sono apparsi all'interno di ogni payload del client. 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 ogni messaggio. InfluxDB utilizza il campo timestamp per posizionare ogni punto sulla timeline, quindi il riordino non influisce sulla correttezza della query. Tuttavia, se l'applicazione si basa sulla semantica dell'ordine di scrittura (ad esempio, la gestione dei conflitti tra i tipi di campo o la deduplicazione dell'ultima scrittura entro lo stesso millisecondo), tieni presente che l'ordine di scrittura effettivo può differire dall'ordine di pubblicazione.