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à.
Processori che puoi usare
Questa sezione contiene informazioni su ciascun processore che è possibile utilizzare in un trasformatore di eventi di registro. I processori possono essere classificati in parser, mutatori di stringhe, mutatori JSON e processori di data.
Processori configurabili di tipo parser
parseJSON
Il processore ParseJSON analizza gli eventi di registro JSON e inserisce le coppie chiave-valore JSON estratte nella destinazione. Se non si specifica una destinazione, il processore posiziona la coppia chiave-valore sotto il nodo radice. Quando si utilizza parseJSON
come primo processore, è necessario analizzare l'intero evento di registro utilizzandolo @message
come campo di origine. Dopo l'analisi JSON iniziale, è possibile manipolare campi specifici nei processori successivi.
Il @message
contenuto originale non viene modificato, le nuove chiavi vengono aggiunte al messaggio.
Campo | Descrizione | Obbligatorio? | Predefinita | Limiti |
---|---|---|---|---|
source |
Percorso del campo nel registro dell'evento che verrà analizzato. Usa la notazione a punti per accedere ai campi secondari. Ad esempio, store.book |
No |
|
Lunghezza massima: 128. Profondità massima della chiave annidata: 3 |
destinazione |
Il campo di destinazione del file JSON analizzato |
No |
|
Lunghezza massima: 128. Profondità massima della chiave annidata: 3 |
Esempio
Supponiamo che un evento di registro importato abbia il seguente aspetto:
{ "outer_key": { "inner_key": "inner_value" } }
Quindi se abbiamo questo processore ParseJson:
[ { "parseJSON": { "destination": "new_key" } } ]
L'evento di registro trasformato sarebbe il seguente.
{ "new_key": { "outer_key": { "inner_key": "inner_value" } } }
grok
Usa il processore grok per analizzare e strutturare i dati non strutturati utilizzando il pattern matching. Questo processore può anche estrarre campi dai messaggi di registro.
Campo | Descrizione | Obbligatorio? | Predefinita | Limiti | Note |
---|---|---|---|---|---|
source |
Percorso del campo su cui applicare la corrispondenza Grok |
No |
|
Lunghezza massima: 128. Profondità massima della chiave annidata: 3 |
|
match |
Il pattern grok da confrontare con l'evento log |
Sì |
Lunghezza massima: 512 Schemi di gruppo massimi: 20 Alcuni tipi di pattern grok hanno limiti di utilizzo individuali. Qualsiasi combinazione dei seguenti modelli può essere utilizzata fino a cinque volte: {URI, URIPARAM, URIPATHPARAM, SPACE, DATA, GREEDYDATA, GREEDYDATA_MULTILINE} I pattern Grok non supportano le conversioni di tipo. Per i modelli di formato di log comuni (APACHE_ACCESS_LOG, NGINX_ACCESS_LOG, SYSLOG5424), è supportato l'inclusione solo dei modelli DATA, GREEDYDATA o GREEDYDATA_MULTILINE dopo il modello di log comune. |
Struttura di un pattern Grok
Questa è la struttura del pattern grok supportata:
%{PATTERN_NAME:FIELD_NAME}
-
PATTERN_NAME: si riferisce a un'espressione regolare predefinita per la corrispondenza di un tipo specifico di dati. Sono supportati solo i modelli grok predefiniti dall'elenco dei modelli grok supportati. La creazione di modelli personalizzati non è consentita.
-
FIELD_NAME: assegna un nome al valore estratto.
FIELD_NAME
è facoltativo, ma se non si specifica questo valore, i dati estratti verranno eliminati dall'evento di registro trasformato. SeFIELD_NAME
utilizza la notazione punteggiata (ad esempio, «parent.child»), viene considerata un percorso JSON. -
Conversione dei tipi: le conversioni di tipo esplicite non sono supportate. Usa il TypeConverter processore per convertire il tipo di dati di qualsiasi valore estratto da grok.
Per creare espressioni di corrispondenza più complesse, puoi combinare diversi modelli grok. È possibile combinare fino a 20 pattern grok per abbinare un evento log. Ad esempio, questa combinazione di pattern %{NUMBER:timestamp} [%{NUMBER:db}
%{IP:client_ip}:%{NUMBER:client_port}] %{GREEDYDATA:data}
può essere utilizzata per estrarre campi da una voce di slow log di Redis come questa:
1629860738.123456 [0 127.0.0.1:6379] "SET" "key1" "value1"
Esempi di Grok
Esempio 1: Usa grok per estrarre un campo da log non strutturati
Registro di esempio:
293750 server-01.internal-network.local OK "[Thread-000] token generated"
Trasformatore utilizzato:
[ { "grok": { "match": "%{NUMBER:version} %{HOSTNAME:hostname} %{NOTSPACE:status} %{QUOTEDSTRING:logMsg}" } } ]
Output:
{ "version": "293750", "hostname": "server-01.internal-network.local", "status": "OK", "logMsg": "[Thread-000] token generated" }
Registro di esempio:
23/Nov/2024:10:25:15 -0900 172.16.0.1 200
Trasformatore utilizzato:
[ { "grok": { "match": "%{HTTPDATE:timestamp} %{IPORHOST:clientip} %{NUMBER:response_status}" } } ]
Output:
{ "timestamp": "23/Nov/2024:10:25:15 -0900", "clientip": "172.16.0.1", "response_status": "200" }
Esempio 2: usa grok in combinazione con parseJSON per estrarre campi da un evento di registro JSON
Registro di esempio:
{ "timestamp": "2024-11-23T16:03:12Z", "level": "ERROR", "logMsg": "GET /page.html HTTP/1.1" }
Trasformatore utilizzato:
[ { "parseJSON": {} }, { "grok": { "source": "logMsg", "match": "%{WORD:http_method} %{NOTSPACE:request} HTTP/%{NUMBER:http_version}" } } ]
Output:
{ "timestamp": "2024-11-23T16:03:12Z", "level": "ERROR", "logMsg": "GET /page.html HTTP/1.1", "http_method": "GET", "request": "/page.html", "http_version": "1.1" }
Esempio 3: pattern Grok con annotazione punteggiata in FIELD_NAME
Registro di esempio:
192.168.1.1 GET /index.html?param=value 200 1234
Trasformatore utilizzato:
[ { "grok": { "match": "%{IP:client.ip} %{WORD:method} %{URIPATHPARAM:request.uri} %{NUMBER:response.status} %{NUMBER:response.bytes}" } } ]
Output:
{ "client": { "ip": "192.168.1.1" }, "method": "GET", "request": { "uri": "/index.html?param=value" }, "response": { "status": "200", "bytes": "1234" } }
Schemi grok supportati
Le tabelle seguenti elencano i modelli supportati dal grok
processore.
Schemi di gruppo generali
Modello Grok | Descrizione | Limite massimo del pattern | Esempio |
---|---|---|---|
USERNAME o USER | Corrisponde a uno o più caratteri che possono includere lettere minuscole (a-z), lettere maiuscole (A-Z), cifre (0-9), punti (.), caratteri di sottolineatura (_) o trattini (-) | 20 |
Input: Modello: Uscita: |
INT | Corrisponde a un segno più o meno opzionale seguito da una o più cifre. | 20 |
Ingresso: Modello: Uscita: |
BASE10 NUM | Corrisponde a un numero intero o a virgola mobile con segno e virgola decimale opzionali | 20 |
Ingresso: Modello: Uscita: |
BASE16NUM | Corrisponde ai numeri decimali ed esadecimali con un segno opzionale (+ o -) e un prefisso 0x opzionale | 20 |
Ingresso: Modello: Uscita: |
PUNTO | Corrisponde a numeri interi positivi senza zeri iniziali, costituiti da una o più cifre (1-9 seguito da 0-9) | 20 |
Ingresso: Modello: Uscita: |
NONNEGINT | Corrisponde a qualsiasi numero intero (composto da una o più cifre da 0 a 9) compresi zero e numeri con zeri iniziali. | 20 |
Ingresso: Modello: Uscita: |
PAROLA | Corrisponde a parole intere composte da uno o più caratteri di parola (\ w), incluse lettere, cifre e caratteri di sottolineatura | 20 |
Ingresso: Modello: Uscita: |
NON SPAZIO | Corrisponde a uno o più caratteri diversi dagli spazi bianchi. | 5 |
Ingresso: Modello: Uscita: |
SPACE | Corrisponde a zero o più caratteri di spazio bianco. | 5 |
Ingresso: Modello: Uscita: |
DATA | Corrisponde a qualsiasi carattere (eccetto la nuova riga) zero o più volte, non è avido. | 5 |
Ingresso: Modello: Uscita: |
DATI AVIDI | Corrisponde a qualsiasi carattere (eccetto la nuova riga) zero o più volte, greedy. | 5 |
Ingresso: Modello: Uscita: |
GREEDYDATA_MULTILINE | Corrisponde a qualsiasi carattere (inclusa la nuova riga) zero o più volte, greedy. | 1 |
Input:
Modello: Uscita: |
STRINGA TRA VIRGOLETTE | Corrisponde alle stringhe tra virgolette (virgolette singole o doppie) ai caratteri con escape. | 20 |
Ingresso: Modello: Uscita: |
UUID | Corrisponde a un formato UUID standard: 8 caratteri esadecimali, seguiti da tre gruppi di 4 caratteri esadecimali e termina con 12 caratteri esadecimali, tutti separati da trattini. | 20 |
Ingresso: Modello: Uscita: |
URNA | Corrisponde alla sintassi URN (Uniform Resource Name). | 20 |
Ingresso: Modello: Uscita: |
AWS modelli grok
Pattern | Descrizione | Limite massimo del modello | Esempio |
---|---|---|---|
ARN |
Corrisponde AWS ad Amazon Resource Names (ARNs), acquisendo la partizione ( |
5 |
Ingresso: Modello: Uscita: |
Schemi di gruppo di rete
Modello Grok | Descrizione | Limite massimo del pattern | Esempio |
---|---|---|---|
CISCOMAC | Corrisponde a un indirizzo MAC in formato esadecimale 4-4-4. | 20 |
Ingresso: Modello: Uscita: |
WINDOWS MAC | Corrisponde a un indirizzo MAC in formato esadecimale con trattini | 20 |
Ingresso: Modello: Uscita: |
MAC COMUNE | Corrisponde a un indirizzo MAC in formato esadecimale con due punti. | 20 |
Ingresso: Modello: Uscita: |
MAC | Corrisponde a uno dei pattern grok CISCOMAC, WINDOWSMAC o COMMONMAC | 20 |
Ingresso: Modello: Uscita: |
IPV6 | Corrisponde IPv6 agli indirizzi, inclusi i moduli compressi e gli indirizzi IPv4 mappati IPv6 . | 5 |
Ingresso: Modello: Uscita: |
IPV4 | Corrisponde a un IPv4 indirizzo. | 20 |
Ingresso: Modello: Uscita: |
IP | IPv6 Corrisponde agli indirizzi supportati da% {IPv6} o IPv4 agli indirizzi supportati da% {IPv4} | 5 |
Ingresso: Modello: Uscita: |
HOSTNAME o HOST | Corrisponde ai nomi di dominio, inclusi i sottodomini | 5 |
Ingresso: Modello: Uscita: |
IP O HOST | Corrisponde a un nome host o a un indirizzo IP | 5 |
Ingresso: Modello: Uscita: |
HOSTPORT | Corrisponde a un indirizzo IP o a un nome host come supportato dal pattern% {IPORHOST} seguito da due punti e da un numero di porta, che nell'output registra la porta come «PORT». | 5 |
Ingresso: Modello: Uscita: |
URIHOST | Corrisponde a un indirizzo IP o a un nome host, come supportato dal pattern% {IPORHOST}, seguito facoltativamente da due punti e da un numero di porta, identificando la porta come «porta», se presente. | 5 |
Ingresso: Modello: Uscita: |
Path Grok pattern
Modello Grok | Descrizione | Limite massimo del pattern | Esempio |
---|---|---|---|
UNIXPATH | Corrisponde ai percorsi degli URL, inclusi potenzialmente i parametri di query. | 20 |
Ingresso: Modello: Uscita: |
PERCORSO VINCENTE | Corrisponde ai percorsi dei file di Windows. | 5 |
Ingresso: Modello: Uscita: |
PATH | Corrisponde ai percorsi dei file URL o Windows | 5 |
Ingresso: Modello: Uscita: |
TTY | Corrisponde ai percorsi dei dispositivi Unix per terminali e pseudo-terminali. | 20 |
Ingresso: Modello: Uscita: |
URIPROTO | Corrisponde alle lettere, seguite facoltativamente da un carattere più (+) e lettere aggiuntive o caratteri più (+) | 20 |
Ingresso: Modello: Uscita: |
URIPATA | Corrisponde al componente del percorso di un URI | 20 |
Ingresso: Modello: Uscita: |
URIPARAM | Corrisponde ai parametri della query URL | 5 |
Ingresso: Modello: Uscita: |
PARAMETRO URIPATH | Corrisponde a un percorso URI seguito facoltativamente da parametri di query | 5 |
Ingresso: Modello: Uscita: |
URI | Corrisponde a un URI completo | 5 |
Ingresso: Modello: Uscita: |
Schemi grok di data e ora
Modello Grok | Descrizione | Limite massimo del pattern | Esempio |
---|---|---|---|
MESE | Corrisponde ai nomi completi o abbreviati dei mesi inglesi a parole intere | 20 |
Ingresso: Modello: Uscita: Ingresso: Modello: Uscita: |
NUMERO DI MESI | Corrisponde ai numeri dei mesi da 1 a 12, con lo zero iniziale opzionale per i mesi a una cifra. | 20 |
Ingresso: Modello: Uscita: Ingresso: Modello: Uscita: |
MONTHNUM2 | Corrisponde ai numeri dei mesi a due cifre compresi tra 01 e 12. | 20 |
Ingresso: Modello: Uscita: |
MESE/GIORNO | Corrisponde al giorno del mese compreso tra 1 e 31, con zero iniziale opzionale. | 20 |
Ingresso: Modello: Uscita: |
ANNO | Corrisponde all'anno in due o quattro cifre | 20 |
Ingresso: Modello: Uscita: Ingresso: Modello: Uscita: |
GIORNO | Corrisponde ai nomi dei giorni completi o abbreviati. | 20 |
Ingresso: Modello: Uscita: |
ORA | Corrisponde all'ora nel formato a 24 ore con uno zero iniziale opzionale (0) 0-23. | 20 |
Ingresso: Modello: Uscita: |
MINUTO | Corrisponde ai minuti (00-59). | 20 |
Ingresso: Modello: Uscita: |
SECOND | Corrisponde a un numero che rappresenta i secondi (0) 0-60, seguito facoltativamente da un punto decimale o due punti e da una o più cifre per i minuti frazionari | 20 |
Ingresso: Modello: Uscita: Ingresso: Modello: Uscita: Ingresso: Modello: Uscita: |
TIME | Corrisponde a un formato orario con ore, minuti e secondi nel formato (H) H:mm :( s) s. I secondi includono il secondo intercalare (0) 0-60. | 20 |
Ingresso: Modello: Uscita: |
DATA_US | Corrisponde a una data nel formato (M) M/ (d) d/ (yy) yy o (M) M- (d) d- (yy) yy. | 20 |
Ingresso: Modello: Uscita: Ingresso: Modello: Uscita: |
DATE_EU | Corrisponde alla data nel formato (d) d/ (M) M/ (yy) yy, (d) d- (M) M- (yy) yy o (d) d. (M) M. (yy) yy. | 20 |
Ingresso: Modello: Uscita: Ingresso: Modello: Uscita: |
ISO8601_FUSO ORARIO | Corrisponde all'offset UTC 'Z' o all'offset del fuso orario con due punti opzionali nel formato [+-] (H) H (:) mm. | 20 |
Ingresso: Modello: Uscita: Ingresso: Modello: Uscita: Ingresso: Modello: Uscita: |
ISO8601_SECONDI | Corrisponde a un numero che rappresenta i secondi (0) 0-60, seguito facoltativamente da un punto decimale o due punti e da una o più cifre per frazioni di secondo | 20 |
Ingresso: Modello: Uscita: |
TIMESTAMP_ 01 ISO86 | Corrisponde al formato ISO86 01 datetime (yy) yy- (M) M- (d) dT (H) H:mm :( (s) s) (Z| [+-] (H) H:mm) con secondi e fuso orario opzionali. | 20 |
Ingresso: Modello: Uscita: Ingresso: Modello: Uscita: Ingresso: Modello: Uscita: |
DATE | Corrisponde a una data nel formato USA utilizzando% {DATE_US} o nel formato UE utilizzando% {DATE_EU} | 20 |
Ingresso: Modello: Uscita: Ingresso: Modello: Uscita: |
TIMBRO DATARIO | Corrisponde a% {DATE} seguito dallo schema% {TIME}, separato da uno spazio o da un trattino. | 20 |
Ingresso: Modello: Uscita: |
TZ | Corrisponde alle abbreviazioni dei fusi orari comuni (PST, PDT, MST, MDT, CST CDT, EST, EDT, UTC). | 20 |
Ingresso: Modello: Uscita: |
TIMBRO DATA_ RFC822 | Corrisponde a data e ora nel formato: Day MonthName (D) D (YY) YY (H) H:mm :( s) s Timezone | 20 |
Ingresso: Modello: Uscita: Ingresso: Modello: Uscita: |
TIMBRO DATA_ RFC2822 | Corrisponde al formato RFC2822 data-ora: Day, (d) d (yy) yy MonthName (H) H:mm :( s) s Z| [+-] (H) H:mm | 20 |
Ingresso: Modello: Uscita: Ingresso: Modello: Uscita: |
DATESTAMP_OTHER | Corrisponde a data e ora nel formato: Giorno MonthName (d) d (H) H:mm :( s) s Fuso orario (yy) yy | 20 |
Ingresso: Modello: Uscita: |
DATESTAMP_EVENTLOG | Corrisponde al formato datetime compatto senza separatori: (yy) yYmm (d) d (H) Hmm (s) s | 20 |
Ingresso: Modello: Uscita: |
Schemi di gruppo logaritmici
Modello Grok | Descrizione | Limite massimo del pattern | Esempio |
---|---|---|---|
LIVELLO DI REGISTRO | Corrisponde ai livelli di log standard in diverse lettere maiuscole e abbreviazioni, tra cui:Alert/ALERT ,Trace/TRACE ,Debug/DEBUG ,Notice/NOTICE ,Info/INFO ,,Warn/Warning/WARN/WARNING ,Err/Error/ERR/ERROR , Crit/Critical/CRIT/CRITICAL Fatal/FATAL Severe/SEVERE Emerg/Emergency/EMERG/EMERGENCY |
20 |
Ingresso: Modello: Uscita: |
HTTP: DATA | Corrisponde al formato di data e ora spesso utilizzato nei file di registro. Formato: (d) d/MonthName/(yy) yy :( H) H:mm :( s) s Fuso orario: corrisponde ai nomi completi o abbreviati dei mesi in inglese (esempio MonthName: «Jan» o «January») Fuso orario: corrisponde al modello% {INT} grok | 20 |
Ingresso: Modello: Uscita: |
TIMESTAMP SYSLOG | Corrisponde al formato della data con MonthName (d) d (H) H:mm :( s) s: corrisponde ai nomi completi o abbreviati dei mesi in inglese (esempio MonthName: «Jan» o «January») | 20 |
Ingresso: Modello: Uscita: |
PROG | Corrisponde al nome di un programma composto da una stringa di lettere, cifre, punti, trattini bassi, barra, segno di percentuale e trattini. | 20 |
Ingresso: Modello: Uscita: |
SYSLOGPROG | Corrisponde al pattern PROG grok seguito facoltativamente da un ID di processo tra parentesi quadre. | 20 |
Ingresso: Modello: Uscita: |
SYSLOGHOST | Corrisponde a uno schema% {HOST} o% {IP} | 5 |
Ingresso: Modello: Uscita: |
IMPIANTO SYSLOG | Corrisponde alla priorità syslog in formato decimale. Il valore deve essere racchiuso tra parentesi angolari (<>). | 20 |
Ingresso: Modello: Uscita: |
Schemi di log grok comuni
È possibile utilizzare modelli grok personalizzati predefiniti per abbinare i formati di registro Apache, NGINX e Syslog Protocol (RFC 5424). Quando si utilizzano questi modelli specifici, devono essere i primi modelli nella configurazione corrispondente e nessun altro modello può precederli. Inoltre, puoi seguirli solo con esattamente un DATO. Pattern GREEDYDATA o GREEDYDATA_MULTILINE.
Pattern grok | Descrizione | Limite massimo del modello |
---|---|---|
APACHE_ACCESS_LOG |
Corrisponde ai log di accesso di Apache |
1 |
NGINX_ACCESS_LOG |
Corrisponde ai log di accesso di NGINX |
1 |
SYSLOG5424 |
Corrisponde ai log del protocollo Syslog (RFC 5424) |
1 |
Di seguito sono riportati esempi validi e non validi per l'utilizzo di questi modelli di formato di registro comuni.
"%{NGINX_ACCESS_LOG} %{DATA}" // Valid "%{SYSLOG5424}%{DATA:logMsg}" // Valid "%{APACHE_ACCESS_LOG} %{GREEDYDATA:logMsg}" // Valid "%{APACHE_ACCESS_LOG} %{SYSLOG5424}" // Invalid (multiple common log patterns used) "%{NGINX_ACCESS_LOG} %{NUMBER:num}" // Invalid (Only GREEDYDATA and DATA patterns are supported with common log patterns) "%{GREEDYDATA:logMsg} %{SYSLOG5424}" // Invalid (GREEDYDATA and DATA patterns are supported only after common log patterns)
Esempi di formati di log comuni
Esempio di log di Apache
Registro di esempio:
127.0.0.1 - - [03/Aug/2023:12:34:56 +0000] "GET /page.html HTTP/1.1" 200 1234
Trasformatore:
[ { "grok": { "match": "%{APACHE_ACCESS_LOG}" } } ]
Output:
{ "request": "/page.html", "http_method": "GET", "status_code": 200, "http_version": "1.1", "response_size": 1234, "remote_host": "127.0.0.1", "timestamp": "2023-08-03T12:34:56Z" }
Esempio di log NGINX
Registro di esempio:
192.168.1.100 - Foo [03/Aug/2023:12:34:56 +0000] "GET /account/login.html HTTP/1.1" 200 42 "https://www.amazon.com/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4515.131 Safari/537.36"
Trasformatore:
[ { "grok": { "match": "%{NGINX_ACCESS_LOG}" } } ]
Output:
{ "request": "/account/login.html", "referrer": "https://www.amazon.com/", "agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4515.131 Safari/537.36", "http_method": "GET", "status_code": 200, "auth_user": "Foo", "http_version": "1.1", "response_size": 42, "remote_host": "192.168.1.100", "timestamp": "2023-08-03T12:34:56Z" }
Esempio di log del protocollo Syslog (RFC 5424)
Registro di esempio:
<165>1 2003-10-11T22:14:15.003Z mymachine.example.com evntslog - ID47 [exampleSDID@32473 iut="3" eventSource= "Application" eventID="1011"][examplePriority@32473 class="high"]
Trasformatore:
[ { "grok": { "match": "%{SYSLOG5424}" } } ]
Output:
{ "pri": 165, "version": 1, "timestamp": "2003-10-11T22:14:15.003Z", "hostname": "mymachine.example.com", "app": "evntslog", "msg_id": "ID47", "structured_data": "exampleSDID@32473 iut=\"3\" eventSource= \"Application\" eventID=\"1011\"", "message": "[examplePriority@32473 class=\"high\"]" }
Analizza in OCSF
Il processore ParseToOCSF converte i log in formato Open Cybersecurity Schema Framework (OCSF).
Il @message
contenuto originale non viene modificato, le nuove chiavi vengono aggiunte al messaggio.
Campo | Descrizione | Obbligatorio? | Predefinita | Limiti |
---|---|---|---|---|
eventSource |
Il servizio o il processo che produce gli eventi di registro che verranno convertiti con questo processore. I valori validi sono i seguenti.
|
Sì |
- |
- |
versione OCSF |
La versione dello schema OCSF da utilizzare per gli eventi di registro trasformati. Attualmente, l'unico valore supportato è V1.1 |
Sì |
|
- |
Esempio
L'esempio seguente trasforma i log di flusso di Amazon VPC in formato OCSF.
[ "parseToOCSF": { eventSource: "VPCFlow", version: "V1.1" } ]
csv
Il processore csv analizza i valori separati da virgole (CSV) dagli eventi di registro in colonne.
Campo | Descrizione | Obbligatorio? | Predefinita | Limiti |
---|---|---|---|---|
source |
Percorso del campo nell'evento di registro che verrà analizzato |
No |
|
Lunghezza massima: 128. Profondità massima della chiave annidata: 3 |
delimitatore |
Il carattere utilizzato per separare ogni colonna nell'evento di registro dei valori separati da virgole originale |
No |
|
Lunghezza massima: 1 |
Cita carattere |
Carattere utilizzato come qualificatore di testo per una singola colonna di dati |
No |
|
Lunghezza massima: 1 |
columns |
Elenco di nomi da utilizzare per le colonne dell'evento di registro trasformato. |
No |
|
Numero massimo di colonne CSV: 100 Lunghezza massima: 128. Profondità massima della chiave annidata: 3 |
Esempio
Supponiamo che parte di un evento di registro importato abbia il seguente aspetto:
'Akua Mansa',28,'New York, USA'
Supponiamo di utilizzare solo il processore csv:
[ "csv": { "delimiter": ",", "quoteCharacter": ":"" } ]
L'evento di registro trasformato sarebbe il seguente.
{ "column_1": "Akua Mansa", "column_2": "28", "column_3": "New York: USA" }
parseKeyValue
Utilizzate il parseKeyValueprocessore per analizzare un campo specificato in coppie chiave-valore. È possibile personalizzare il processore per analizzare le informazioni sui campi con le seguenti opzioni.
Campo | Descrizione | Obbligatorio? | Predefinita | Limiti |
---|---|---|---|---|
source |
Percorso del campo nel registro dell'evento che verrà analizzato |
No |
|
Lunghezza massima: 128. Profondità massima della chiave annidata: 3 |
destinazione |
Il campo di destinazione in cui inserire le coppie chiave-valore estratte |
No |
Lunghezza massima: 128. |
|
FieldDelimiter |
La stringa delimitatrice di campo utilizzata tra coppie chiave-valore negli eventi del registro originale |
No |
|
Lunghezza massima: 128. |
keyValueDelimiter |
La stringa delimitatrice da utilizzare tra la chiave e il valore in ogni coppia nell'evento di registro trasformato |
No |
|
Lunghezza massima: 128. |
nonMatchValue |
Un valore da inserire nel campo del valore del risultato, quando una coppia chiave-valore non viene divisa correttamente. |
No |
Lunghezza massima: 128. |
|
keyPrefix |
Se vuoi aggiungere un prefisso a tutte le chiavi trasformate, specificalo qui. |
No |
Lunghezza massima: 128. |
|
overwriteIfExists |
Se sovrascrivere il valore se la chiave di destinazione esiste già |
No |
|
Esempio
Prendiamo il seguente esempio di evento di registro:
key1:value1!key2:value2!key3:value3!key4
Supponiamo di utilizzare la seguente configurazione del processore:
[ { "parseKeyValue": { "destination": "new_key", "fieldDelimiter": "!", "keyValueDelimiter": ":", "nonMatchValue": "defaultValue", "keyPrefix": "parsed_" } } ]
L'evento di registro trasformato sarebbe il seguente.
{ "new_key": { "parsed_key1": "value1", "parsed_key2": "value2", "parsed_key3": "value3", "parsed_key4": "defaultValue" } }
Processori integrati per i AWS log venduti
Analizza WAF
Usa questo processore per analizzare i log AWS WAF venduti, prende il contenuto httpRequest.headers
e crea chiavi JSON da ogni nome di intestazione, con il valore corrispondente. Fa lo stesso anche per. labels
Queste trasformazioni possono rendere molto più semplice l'interrogazione dei AWS WAF log. Per ulteriori informazioni sul formato dei AWS WAF log, consulta Esempi di log per il traffico ACL web.
Questo processore accetta solo @message
come input.
Importante
Se si utilizza questo processore, deve essere il primo processore del trasformatore.
Esempio
Prendiamo il seguente esempio di evento di registro:
{ "timestamp": 1576280412771, "formatVersion": 1, "webaclId": "arn:aws:wafv2:ap-southeast-2:111122223333:regional/webacl/STMTest/1EXAMPLE-2ARN-3ARN-4ARN-123456EXAMPLE", "terminatingRuleId": "STMTest_SQLi_XSS", "terminatingRuleType": "REGULAR", "action": "BLOCK", "terminatingRuleMatchDetails": [ { "conditionType": "SQL_INJECTION", "sensitivityLevel": "HIGH", "location": "HEADER", "matchedData": ["10", "AND", "1"] } ], "httpSourceName": "-", "httpSourceId": "-", "ruleGroupList": [], "rateBasedRuleList": [], "nonTerminatingMatchingRules": [], "httpRequest": { "clientIp": "1.1.1.1", "country": "AU", "headers": [ { "name": "Host", "value": "localhost:1989" }, { "name": "User-Agent", "value": "curl/7.61.1" }, { "name": "Accept", "value": "*/*" }, { "name": "x-stm-test", "value": "10 AND 1=1" } ], "uri": "/myUri", "args": "", "httpVersion": "HTTP/1.1", "httpMethod": "GET", "requestId": "rid" }, "labels": [{ "name": "value" }] }
La configurazione del processore è la seguente:
[ { "parseWAF": {} } ]
L'evento di registro trasformato sarebbe il seguente.
{ "httpRequest": { "headers": { "Host": "localhost:1989", "User-Agent": "curl/7.61.1", "Accept": "*/*", "x-stm-test": "10 AND 1=1" }, "clientIp": "1.1.1.1", "country": "AU", "uri": "/myUri", "args": "", "httpVersion": "HTTP/1.1", "httpMethod": "GET", "requestId": "rid" }, "labels": { "name": "value" }, "timestamp": 1576280412771, "formatVersion": 1, "webaclId": "arn:aws:wafv2:ap-southeast-2:111122223333:regional/webacl/STMTest/1EXAMPLE-2ARN-3ARN-4ARN-123456EXAMPLE", "terminatingRuleId": "STMTest_SQLi_XSS", "terminatingRuleType": "REGULAR", "action": "BLOCK", "terminatingRuleMatchDetails": [ { "conditionType": "SQL_INJECTION", "sensitivityLevel": "HIGH", "location": "HEADER", "matchedData": ["10", "AND", "1"] } ], "httpSourceName": "-", "httpSourceId": "-", "ruleGroupList": [], "rateBasedRuleList": [], "nonTerminatingMatchingRules": [] }
parsePostGres
Usa questo processore per analizzare i log Amazon RDS for PostgreSQL forniti, estrarre campi e convertirli in formato JSON. Per ulteriori informazioni sul formato di registro RDS for PostgreSQL, consulta File di log del database RDS for PostgreSQL.
Questo processore accetta solo come input. @message
Importante
Se si utilizza questo processore, deve essere il primo processore del trasformatore.
Esempio
Prendiamo il seguente esempio di evento di registro:
2019-03-10 03:54:59 UTC:10.0.0.123(52834):postgres@logtestdb:[20175]:ERROR: column "wrong_column_name" does not exist at character 8
La configurazione del processore è la seguente:
[ { "parsePostgres": {} } ]
L'evento di registro trasformato sarebbe il seguente.
{ "logTime": "2019-03-10 03:54:59 UTC", "srcIp": "10.0.0.123(52834)", "userName": "postgres", "dbName": "logtestdb", "processId": "20175", "logLevel": "ERROR" }
parseCloudFront
Usa questo processore per analizzare i log Amazon CloudFront forniti, estrarre campi e convertirli in formato JSON. I valori dei campi codificati vengono decodificati. I valori interi e doppi vengono trattati come tali. Per ulteriori informazioni sul formato dei Amazon CloudFront log, consulta Configurare e utilizzare i log standard (log di accesso).
Questo processore accetta solo @message
come input.
Importante
Se si utilizza questo processore, deve essere il primo processore del trasformatore.
Esempio
Prendiamo il seguente esempio di evento di registro:
2019-12-04 21:02:31 LAX1 392 192.0.2.24 GET d111111abcdef8.cloudfront.net /index.html 200 - Mozilla/5.0%20(Windows%20NT%2010.0;%20Win64;%20x64)%20AppleWebKit/537.36%20(KHTML,%20like%20Gecko)%20Chrome/78.0.3904.108%20Safari/537.36 - - Hit SOX4xwn4XV6Q4rgb7XiVGOHms_BGlTAC4KyHmureZmBNrjGdRLiNIQ== d111111abcdef8.cloudfront.net https 23 0.001 - TLSv1.2 ECDHE-RSA-AES128-GCM-SHA256 Hit HTTP/2.0 - - 11040 0.001 Hit text/html 78 - -
La configurazione del processore è la seguente:
[ { "parseCloudfront": {} } ]
L'evento di registro trasformato sarebbe il seguente.
{ "date": "2019-12-04", "time": "21:02:31", "x-edge-location": "LAX1", "sc-bytes": 392, "c-ip": "192.0.2.24", "cs-method": "GET", "cs(Host)": "d111111abcdef8.cloudfront.net", "cs-uri-stem": "/index.html", "sc-status": 200, "cs(Referer)": "-", "cs(User-Agent)": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.108 Safari/537.36", "cs-uri-query": "-", "cs(Cookie)": "-", "x-edge-result-type": "Hit", "x-edge-request-id": "SOX4xwn4XV6Q4rgb7XiVGOHms_BGlTAC4KyHmureZmBNrjGdRLiNIQ==", "x-host-header": "d111111abcdef8.cloudfront.net", "cs-protocol": "https", "cs-bytes": 23, "time-taken": 0.001, "x-forwarded-for": "-", "ssl-protocol": "TLSv1.2", "ssl-cipher": "ECDHE-RSA-AES128-GCM-SHA256", "x-edge-response-result-type": "Hit", "cs-protocol-version": "HTTP/2.0", "fle-status": "-", "fle-encrypted-fields": "-", "c-port": 11040, "time-to-first-byte": 0.001, "x-edge-detailed-result-type": "Hit", "sc-content-type": "text/html", "sc-content-len": 78, "sc-range-start": "-", "sc-range-end": "-" }
parseRoute53
Usa questo processore per analizzare i log Amazon Route 53 Public Data Plane forniti, estrarre campi e convertirli in formato JSON. I valori dei campi codificati vengono decodificati. Questo processore non supporta Amazon Route 53 Resolver i log.
Questo processore accetta solo @message
come input.
Importante
Se si utilizza questo processore, deve essere il primo processore del trasformatore.
Esempio
Prendiamo il seguente esempio di evento di registro:
1.0 2017-12-13T08:15:50.235Z Z123412341234 example.com AAAA NOERROR TCP IAD12 192.0.2.0 198.51.100.0/24
La configurazione del processore è la seguente:
[ { "parseRoute53": {} } ]
L'evento di registro trasformato sarebbe il seguente.
{ "version": 1.0, "queryTimestamp": "2017-12-13T08:15:50.235Z", "hostZoneId": "Z123412341234", "queryName": "example.com", "queryType": "AAAA", "responseCode": "NOERROR", "protocol": "TCP", "edgeLocation": "IAD12", "resolverIp": "192.0.2.0", "ednsClientSubnet": "198.51.100.0/24" }
ParseVPC
Usa questo processore per analizzare i log venduti da Amazon VPC, estrarre campi e convertirli in formato JSON. I valori dei campi codificati vengono decodificati.
Questo processore accetta solo @message
come input.
Importante
Se si utilizza questo processore, deve essere il primo processore del trasformatore.
Esempio
Prendiamo il seguente esempio di evento di registro:
2 123456789010 eni-abc123de 192.0.2.0 192.0.2.24 20641 22 6 20 4249 1418530010 1418530070 ACCEPT OK
La configurazione del processore è la seguente:
[ { "parseVPC": {} } ]
L'evento di registro trasformato sarebbe il seguente.
{ "version": 2, "accountId": "123456789010", "interfaceId": "eni-abc123de", "srcAddr": "192.0.2.0", "dstAddr": "192.0.2.24", "srcPort": 20641, "dstPort": 22, "protocol": 6, "packets": 20, "bytes": 4249, "start": 1418530010, "end": 1418530070, "action": "ACCEPT", "logStatus": "OK" }
Processori di mutazione delle stringhe
lowerCaseString
Il lowerCaseString
processore converte una stringa nella sua versione minuscola.
Campo | Descrizione | Obbligatorio? | Predefinita | Limiti |
---|---|---|---|---|
Con chiavi |
Un elenco di chiavi da convertire in lettere minuscole |
Sì |
Numero massimo di voci: 10 |
Esempio
Prendiamo il seguente esempio di evento di registro:
{ "outer_key": { "inner_key": "INNER_VALUE" } }
La configurazione del trasformatore è questa, utilizzata lowerCaseString
conparseJSON
:
[ { "parseJSON": {} }, { "lowerCaseString": { "withKeys":["outer_key.inner_key"] } } ]
L'evento di registro trasformato sarebbe il seguente.
{ "outer_key": { "inner_key": "inner_value" } }
upperCaseString
Il upperCaseString
processore converte una stringa nella sua versione maiuscola.
Campo | Descrizione | Obbligatorio? | Predefinita | Limiti |
---|---|---|---|---|
Con chiavi |
Un elenco di chiavi da convertire in lettere maiuscole |
Sì |
Numero massimo di voci: 10 |
Esempio
Prendiamo il seguente esempio di evento di registro:
{ "outer_key": { "inner_key": "inner_value" } }
La configurazione del trasformatore è questa, utilizzata upperCaseString
conparseJSON
:
[ { "parseJSON": {} }, { "upperCaseString": { "withKeys":["outer_key.inner_key"] } } ]
L'evento di registro trasformato sarebbe il seguente.
{ "outer_key": { "inner_key": "INNER_VALUE" } }
SplitString
Il splitString
processore è un tipo di processore di mutazione di stringhe che divide un campo in un array utilizzando un carattere delimitante.
Campo | Descrizione | Obbligatorio? | Predefinita | Limiti |
---|---|---|---|---|
voci |
Matrice di voci. Ogni elemento dell'array deve contenere source delimiter campi. |
Sì |
Numero massimo di iscrizioni: 10 |
|
source |
La chiave del valore del campo da dividere |
Sì |
Lunghezza massima: 128. |
|
delimitatore |
La stringa delimitatrice su cui dividere il valore del campo |
Sì |
Lunghezza massima: 128. |
Esempio 1
Prendiamo il seguente esempio di evento di registro:
[ { "parseJSON": {} }, { "splitString": { "entries": [ { "source": "outer_key.inner_key", "delimiter": "_" } ] } } ]
La configurazione del trasformatore è questa, utilizzata splitString
conparseJSON
:
[ { "parseJSON": {} }, { "splitString": { "entries": [ { "source": "outer_key.inner_key", "delimiter": "_" } ] } } ]
L'evento di registro trasformato sarebbe il seguente.
{ "outer_key": { "inner_key": [ "inner", "value" ] } }
Esempio 2
Il delimitatore su cui dividere la stringa può contenere più caratteri.
Prendiamo il seguente esempio di evento di registro:
{ "outer_key": { "inner_key": "item1, item2, item3" } }
La configurazione del trasformatore è la seguente:
[ { "parseJSON": {} }, { "splitString": { "entries": [ { "source": "outer_key.inner_key", "delimiter": ", " } ] } } ]
L'evento di registro trasformato sarebbe il seguente.
{ "outer_key": { "inner_key": [ "item1", "item2", "item3" ] } }
Stringa sostitutiva
Il substituteString
processore è un tipo di processore di modifica delle stringhe che abbina il valore di una chiave a un'espressione regolare e sostituisce tutte le corrispondenze con una stringa sostitutiva.
Campo | Descrizione | Obbligatorio? | Predefinita | Limiti |
---|---|---|---|---|
voci |
Matrice di voci. Ogni elemento dell'array deve contenere source to campi e. from |
Sì |
Numero massimo di iscrizioni: 10 |
|
source |
La chiave del campo da modificare |
Sì |
Lunghezza massima: 128. Profondità massima della chiave annidata: 3 |
|
from |
La stringa di espressioni regolari da sostituire. I caratteri regex speciali come [e] devono essere evitati usando\\ quando si usano le virgolette doppie e con\ quando si usano le virgolette singole o quando sono configurati da. AWS Management Console Per ulteriori informazioni, vedere Class Pattern È possibile inserire un pattern |
Sì |
Lunghezza massima: 128. |
|
in |
È possibile utilizzare la stringa da sostituire per ogni corrispondenza di Backreference ai gruppi di from acquisizione. Usa il modulo $n per gruppi numerati come $1 e ${group_name} usalo per gruppi denominati come $. {my_group} > |
Sì |
Lunghezza massima: 128. Numero massimo di riferimenti retrospettivi: 10 Numero massimo di riferimenti retrospettivi duplicati: 2 |
Esempio 1
Prendiamo il seguente esempio di evento di registro:
{ "outer_key": { "inner_key1": "[]", "inner_key2": "123-345-567", "inner_key3": "A cat takes a catnap." } }
La configurazione del trasformatore è questa, utilizzata substituteString
conparseJSON
:
[ { "parseJSON": {} }, { "substituteString": { "entries": [ { "source": "outer_key.inner_key1", "from": "\\[\\]", "to": "value1" }, { "source": "outer_key.inner_key2", "from": "[0-9]{3}-[0-9]{3}-[0-9]{3}", "to": "xxx-xxx-xxx" }, { "source": "outer_key.inner_key3", "from": "cat", "to": "dog" } ] } } ]
L'evento di registro trasformato sarebbe il seguente.
{ "outer_key": { "inner_key1": "value1", "inner_key2": "xxx-xxx-xxx", "inner_key3": "A dog takes a dognap." } }
Esempio 2
Prendiamo il seguente esempio di evento di registro:
{ "outer_key": { "inner_key1": "Tom, Dick, and Harry", "inner_key2": "arn:aws:sts::123456789012:assumed-role/MyImportantRole/MySession" } }
La configurazione del trasformatore è questa, utilizzata substituteString
conparseJSON
:
[ { "parseJSON": {} }, { "substituteString": { "entries": [ { "source": "outer_key.inner_key1", "from": "(\w+), (\w+), and (\w+)", "to": "$1 and $3" }, { "source": "outer_key.inner_key2", "from": "^arn:aws:sts::(?P<account_id>\\d{12}):assumed-role/(?P<role_name>[\\w+=,.@-]+)/(?P<role_session_name>[\\w+=,.@-]+)$", "to": "${account_id}:${role_name}:${role_session_name}" } ] } } ]
L'evento di registro trasformato sarebbe il seguente.
{ "outer_key": { "inner_key1": "Tom and Harry", "inner_key2": "123456789012:MyImportantRole:MySession" } }
TrimString
Il trimString
processore rimuove gli spazi bianchi dall'inizio e dalla fine di una chiave.
Campo | Descrizione | Obbligatorio? | Predefinita | Limiti |
---|---|---|---|---|
Con chiavi |
Un elenco di tasti da tagliare |
Sì |
Numero massimo di iscrizioni: 10 |
Esempio
Prendiamo il seguente esempio di evento di registro:
{ "outer_key": { "inner_key": " inner_value " } }
La configurazione del trasformatore è questa, utilizzata trimString
conparseJSON
:
[ { "parseJSON": {} }, { "trimString": { "withKeys":["outer_key.inner_key"] } } ]
L'evento di registro trasformato sarebbe il seguente.
{ "outer_key": { "inner_key": "inner_value" } }
Processori JSON con mutazione
Aggiungi chiavi
Utilizzate il addKeys
processore per aggiungere nuove coppie chiave-valore all'evento di registro.
Campo | Descrizione | Obbligatorio? | Predefinita | Limiti |
---|---|---|---|---|
voci |
Matrice di voci. Ogni elemento dell'array può contenere key overwriteIfExists campi e. value |
Sì |
Numero massimo di iscrizioni: 5 |
|
Chiave |
La chiave della nuova voce da aggiungere |
Sì |
Lunghezza massima: 128. Profondità massima della chiave annidata: 3 |
|
value |
Il valore della nuova voce da aggiungere |
Sì |
Lunghezza massima: 256 |
|
overwriteIfExists |
Se lo imposti sutrue , il valore esistente viene sovrascritto se key già presente nell'evento. Il valore predefinito è false . |
No |
false |
Nessun limite |
Esempio
Prendiamo il seguente esempio di evento di registro:
{ "outer_key": { "inner_key": "inner_value" } }
La configurazione del trasformatore è questa, utilizzata addKeys
conparseJSON
:
[ { "parseJSON": {} }, { "addKeys": { "entries": [ { "source": "outer_key.new_key", "value": "new_value" } ] } } ]
L'evento di registro trasformato sarebbe il seguente.
{ "outer_key": { "inner_key": "inner_value", "new_key": "new_value" } }
DeleteKeys
Usa il deleteKeys
processore per eliminare i campi da un evento di registro. Questi campi possono includere coppie chiave-valore.
Campo | Descrizione | Obbligatorio? | Predefinita | Limiti |
---|---|---|---|---|
Con chiavi |
L'elenco delle chiavi da eliminare. |
Sì |
Nessun limite |
Numero massimo di iscrizioni: 5 |
Esempio
Prendiamo il seguente esempio di evento di registro:
{ "outer_key": { "inner_key": "inner_value" } }
La configurazione del trasformatore è questa, utilizzata deleteKeys
conparseJSON
:
[ { "parseJSON": {} }, { "deleteKeys": { "withKeys":["outer_key.inner_key"] } } ]
L'evento di registro trasformato sarebbe il seguente.
{ "outer_key": {} }
moveKeys
Usa il moveKeys
processore per spostare una chiave da un campo all'altro.
Campo | Descrizione | Obbligatorio? | Predefinita | Limiti |
---|---|---|---|---|
voci |
Matrice di voci. Ogni elemento dell'array può contenere source overwriteIfExists campi e. target |
Sì |
Numero massimo di iscrizioni: 5 |
|
source |
La chiave per muoversi |
Sì |
Lunghezza massima: 128. Profondità massima della chiave annidata: 3 |
|
target |
La chiave verso cui passare |
Sì |
Lunghezza massima: 128. Profondità massima della chiave annidata: 3 |
|
overwriteIfExists |
Se lo impostate sutrue , il valore esistente viene sovrascritto se key già presente nell'evento. Il valore predefinito è false . |
No |
false |
Nessun limite |
Esempio
Prendiamo il seguente esempio di evento di registro:
{ "outer_key1": { "inner_key1": "inner_value1" }, "outer_key2": { "inner_key2": "inner_value2" } }
La configurazione del trasformatore è questa, utilizzata moveKeys
conparseJSON
:
[ { "parseJSON": {} }, { "moveKeys": { "entries": [ { "source": "outer_key1.inner_key1", "target": "outer_key2" } ] } } ]
L'evento di registro trasformato sarebbe il seguente.
{ "outer_key1": {}, "outer_key2": { "inner_key2": "inner_value2", "inner_key1": "inner_value1" } }
RenameKeys
Usa il renameKeys
processore per rinominare le chiavi in un evento di registro.
Campo | Descrizione | Obbligatorio? | Predefinita | Limiti |
---|---|---|---|---|
voci |
Matrice di voci. Ogni elemento dell'array può contenere key overwriteIfExists campi e. target |
Sì |
Nessun limite |
Numero massimo di iscrizioni: 5 |
Chiave |
La chiave per rinominare |
Sì |
Nessun limite |
Lunghezza massima: 128. |
target |
Il nuovo nome della chiave |
Sì |
Nessun limite |
Lunghezza massima: 128. Profondità massima della chiave annidata: 3 |
overwriteIfExists |
Se lo impostate sutrue , il valore esistente viene sovrascritto se key già presente nell'evento. Il valore predefinito è false . |
No |
false |
Nessun limite |
Esempio
Prendiamo il seguente esempio di evento di registro:
{ "outer_key": { "inner_key": "inner_value" } }
La configurazione del trasformatore è questa, utilizzata renameKeys
conparseJSON
:
[ { "parseJSON": {} }, { "renameKeys": { "entries": [ { "key": "outer_key", "target": "new_key" } ] } } ]
L'evento di registro trasformato sarebbe il seguente.
{ "new_key": { "inner_key": "inner_value" } }
CopyValue
Usa il copyValue
processore per copiare i valori all'interno di un evento di registro. È inoltre possibile utilizzare questo processore per aggiungere metadati agli eventi di registro, copiando i valori delle seguenti chiavi di metadati negli eventi di registro:@logGroupName
,,,@logGroupStream
. @accountId
@regionName
Questo è illustrato nell'esempio seguente.
Campo | Descrizione | Obbligatorio? | Predefinita | Limiti |
---|---|---|---|---|
voci |
Matrice di voci. Ogni elemento dell'array può contenere source overwriteIfExists campi e. target |
Sì |
Numero massimo di iscrizioni: 5 |
|
source |
La chiave da copiare |
Sì |
Lunghezza massima: 128. Profondità massima della chiave annidata: 3 |
|
target |
La chiave in cui copiare il valore |
Sì |
Nessun limite |
Lunghezza massima: 128. Profondità massima della chiave annidata: 3 |
overwriteIfExists |
Se lo impostate sutrue , il valore esistente viene sovrascritto se key già presente nell'evento. Il valore predefinito è false . |
No |
false |
Nessun limite |
Esempio
Prendiamo il seguente esempio di evento di registro:
{ "outer_key": { "inner_key": "inner_value" } }
La configurazione del trasformatore è questa, utilizzata copyValue
conparseJSON
:
[ { "parseJSON": {} }, { "copyValue": { "entries": [ { "source": "outer_key.new_key", "target": "new_key" }, { "source": "@logGroupName", "target": "log_group_name" }, { "source": "@logGroupStream", "target": "log_group_stream" }, { "source": "@accountId", "target": "account_id" }, { "source": "@regionName", "target": "region_name" } ] } } ]
L'evento di registro trasformato sarebbe il seguente.
{ "outer_key": { "inner_key": "inner_value" }, "new_key": "inner_value", "log_group_name": "myLogGroupName", "log_group_stream": "myLogStreamName", "account_id": "012345678912", "region_name": "us-east-1" }
listToMap
Il listToMap
processore prende un elenco di oggetti che contengono campi chiave e li converte in una mappa di chiavi di destinazione.
Campo | Descrizione | Obbligatorio? | Predefinita | Limiti |
---|---|---|---|---|
source |
La chiave contiene un elenco di oggetti che verranno convertiti in una mappa ProcessingEvent |
Sì |
Lunghezza massima: 128. Profondità massima della chiave annidata: 3 |
|
Chiave |
La chiave dei campi da estrarre come chiavi nella mappa generata |
Sì |
Lunghezza massima: 128. |
|
ValueKey |
Se viene specificato, i valori specificati in questo parametro verranno estratti dagli source oggetti e inseriti nei valori della mappa generata. Altrimenti, gli oggetti originali nell'elenco dei sorgenti verranno inseriti nei valori della mappa generata. |
No |
Lunghezza massima: 128. |
|
target |
La chiave del campo che conterrà la mappa generata |
No |
Nodo radice |
Lunghezza massima: 128. Profondità massima della chiave annidata: 3 |
flatten |
Un valore booleano per indicare se l'elenco verrà suddiviso in singoli elementi o se i valori nella mappa generata saranno elenchi. Per impostazione predefinita, i valori per le chiavi corrispondenti saranno rappresentati in un array. |
No |
false |
|
Elemento appiattito |
Se impostate su flatten true , utilizzate flattenedElement per specificare quale elemento, first olast , conservare. |
Richiesto quando |
Il valore può essere solo first o last |
Esempio
Prendiamo il seguente esempio di evento di registro:
{ "outer_key": [ { "inner_key": "a", "inner_value": "val-a" }, { "inner_key": "b", "inner_value": "val-b1" }, { "inner_key": "b", "inner_value": "val-b2" }, { "inner_key": "c", "inner_value": "val-c" } ] }
Trasformatore per il caso d'uso 1: flatten
è false
[ { "parseJSON": {} }, { "listToMap": { "source": "outer_key" "key": "inner_key", "valueKey": "inner_value", "flatten": false } } ]
L'evento di registro trasformato sarebbe il seguente.
{ "outer_key": [ { "inner_key": "a", "inner_value": "val-a" }, { "inner_key": "b", "inner_value": "val-b1" }, { "inner_key": "b", "inner_value": "val-b2" }, { "inner_key": "c", "inner_value": "val-c" } ], "a": [ "val-a" ], "b": [ "val-b1", "val-b2" ], "c": [ "val-c" ] }
Trasformatore per il caso d'uso 2: flatten
è true
ed flattenedElement
è first
[ { "parseJSON": {} }, { "listToMap": { "source": "outer_key" "key": "inner_key", "valueKey": "inner_value", "flatten": true, "flattenedElement": "first" } } ]
L'evento di registro trasformato sarebbe il seguente.
{ "outer_key": [ { "inner_key": "a", "inner_value": "val-a" }, { "inner_key": "b", "inner_value": "val-b1" }, { "inner_key": "b", "inner_value": "val-b2" }, { "inner_key": "c", "inner_value": "val-c" } ], "a": "val-a", "b": "val-b1", "c": "val-c" }
Trasformatore per il caso d'uso 3: flatten
è true
ed flattenedElement
è last
[ { "parseJSON": {} }, { "listToMap": { "source": "outer_key" "key": "inner_key", "valueKey": "inner_value", "flatten": true, "flattenedElement": "last" } } ]
L'evento di registro trasformato sarebbe il seguente.
{ "outer_key": [ { "inner_key": "a", "inner_value": "val-a" }, { "inner_key": "b", "inner_value": "val-b1" }, { "inner_key": "b", "inner_value": "val-b2" }, { "inner_key": "c", "inner_value": "val-c" } ], "a": "val-a", "b": "val-b2", "c": "val-c" }
Processori di conversione di tipi di dati
Convertitore di tipo
Utilizzate il typeConverter
processore per convertire un tipo di valore associato alla chiave specificata nel tipo specificato. È un processore di casting che modifica i tipi dei campi specificati. I valori possono essere convertiti in uno dei seguenti tipi di dati:integer
,, double
e. string
boolean
Campo | Descrizione | Obbligatorio? | Predefinita | Limiti |
---|---|---|---|---|
voci |
Matrice di voci. Ogni elemento dell'array deve contenere key type campi. |
Sì |
Numero massimo di iscrizioni: 10 |
|
Chiave |
La chiave con il valore da convertire in un tipo diverso |
Sì |
Lunghezza massima: 128. Profondità massima della chiave annidata: 3 |
|
tipo |
Il tipo in cui eseguire la conversione. I valori validi sono integer double , string eboolean . |
Sì |
Esempio
Prendiamo il seguente esempio di evento di registro:
{ "name": "value", "status": "200" }
La configurazione del trasformatore è questa, utilizzata typeConverter
conparseJSON
:
[ { "parseJSON": {} }, { "typeConverter": { "entries": [ { "key": "status", "type": "integer" } ] } } ]
L'evento di registro trasformato sarebbe il seguente.
{ "name": "value", "status": 200 }
DateTimeConverter
Utilizzate il datetimeConverter
processore per convertire una stringa datetime in un formato specificato dall'utente.
Campo | Descrizione | Obbligatorio? | Predefinita | Limiti |
---|---|---|---|---|
source |
La chiave a cui applicare la conversione della data. |
Sì |
Numero massimo di iscrizioni: 10 |
|
Match Patterns |
Un elenco di modelli da abbinare al campo source |
Sì |
Numero massimo di iscrizioni: 5 |
|
target |
Il campo JSON in cui memorizzare il risultato. |
Sì |
Lunghezza massima: 128. Profondità massima della chiave annidata: 3 |
|
Formato di destinazione |
Il formato datetime da utilizzare per i dati convertiti nel campo di destinazione. |
No |
|
Lunghezza massima: 64 |
Fuso orario di origine |
Il fuso orario del campo sorgente. Per un elenco dei valori possibili, consulta Java Supported Zone Ids and Offsets |
No |
UTC |
Lunghezza minima:1 |
Fuso orario di destinazione |
Il fuso orario del campo di destinazione. Per un elenco dei valori possibili, consulta Java Supported Zone Ids and Offsets |
No |
UTC |
Lunghezza minima:1 |
locale |
La localizzazione del campo sorgente. Per un elenco di valori possibili, vedete Metodo Locale getAvailableLocales () in Java con esempi |
Sì |
Lunghezza minima:1 |
Esempio
Prendiamo il seguente esempio di evento di registro:
{"german_datetime": "Samstag 05. Dezember 1998 11:00:00"}
La configurazione del trasformatore è questa, utilizzata dateTimeConverter
conparseJSON
:
[ { "parseJSON": {} }, { "dateTimeConverter": { "source": "german_datetime", "target": "target_1", "locale": "de", "matchPatterns": ["EEEE dd. MMMM yyyy HH:mm:ss"], "sourceTimezone": "Europe/Berlin", "targetTimezone": "America/New_York", "targetFormat": "yyyy-MM-dd'T'HH:mm:ss z" } } ]
L'evento di registro trasformato sarebbe il seguente.
{ "german_datetime": "Samstag 05. Dezember 1998 11:00:00", "target_1": "1998-12-05T17:00:00 MEZ" }