Connettore Amazon Athena per CloudWatch - Amazon Athena

Connettore Amazon Athena per CloudWatch

Il connettore Amazon Athena per CloudWatch consente ad Amazon Athena di comunicare con CloudWatch in modo da poter eseguire query sui dati del log con SQL.

Questo connettore non utilizza connessioni Glue per centralizzare le proprietà di configurazione in Glue. La configurazione della connessione viene effettuata tramite Lambda.

Il connettore associa i LogGroup come schemi e ogni LogStream come una tabella. Il connettore inoltre mappa una visualizzazione all_log_streams speciale che contiene tutti i LogStream nel LogGroup. Questa visualizzazione consente di eseguire una query su tutti i log di un LogGroup alla volta anziché cercare in ogni LogStream singolarmente.

Prerequisiti

Parametri

Utilizzare i parametri illustrati in questa sezione per configurare il connettore CloudWatch.

Si consiglia di configurare un connettore CloudWatch utilizzando un oggetto di connessioni Glue. Per fare ciò, imposta la variabile di ambiente glue_connection del connettore CloudWatch Lambda sul nome della connessione Glue da utilizzare.

Proprietà delle connessioni Glue

Utilizzare il seguente comando per ottenere lo schema di un oggetto di connessione Glue. Questo schema contiene tutti i parametri che è possibile usare per controllare la connessione.

aws glue describe-connection-type --connection-type CLOUDWATCH

Proprietà dell'ambiente Lambda

  • glue_connection: specifica il nome della connessione Glue associata al connettore federato.

Nota
  • Tutti i connettori che utilizzano le connessioni Glue devono utilizzare Gestione dei segreti AWS per memorizzare le credenziali.

  • Il connettore CloudWatch creato utilizzando le connessioni Glue non supporta l'uso di un gestore multiplexing.

  • Il connettore CloudWatch creato utilizzando le connessioni Glue supporta solo 2 ConnectionSchemaVersion.

  • spill_bucket: specifica il bucket Amazon S3 per i dati che superano i limiti della funzione Lambda.

  • spill_prefix: (facoltativo) per impostazione predefinita, viene utilizzata una sottocartella nello spill_bucket specificato chiamata athena-federation-spill. Ti consigliamo di configurare un ciclo di vita dell'archiviazione di Amazon S3 in questa posizione per eliminare gli spill più vecchi di un numero predeterminato di giorni o ore.

  • spill_put_request_headers: (facoltativo) una mappa codificata in JSON delle intestazioni e dei valori della richiesta per la richiesta putObject di Amazon S3 utilizzata per lo spill (ad esempio, {"x-amz-server-side-encryption" : "AES256"}). Per altre possibili intestazioni, consulta l'argomento relativo a PutObject nella Documentazione di riferimento dell'API di Amazon Simple Storage Service.

  • kms_key_id: (facoltativo) per impostazione predefinita, tutti i dati riversati in Amazon S3 vengono crittografati utilizzando la modalità di crittografia autenticata AES-GCM e una chiave generata casualmente. Per fare in modo che la tua funzione Lambda utilizzi chiavi di crittografia più potenti generate da KMS come a7e63k4b-8loc-40db-a2a1-4d0en2cd8331, puoi specificare l'ID della chiave KMS.

  • disable_spill_encryption: (facoltativo) se impostato su True, disabilita la crittografia dello spill. L'impostazione predefinita è False: in questo modo, i dati riversati su S3 vengono crittografati utilizzando AES-GCM tramite una chiave generata casualmente o una chiave generata mediante KMS. La disabilitazione della crittografia dello spill può migliorare le prestazioni, soprattutto se la posizione dello spill utilizza la crittografia lato server.

Il connettore supporta anche il controllo della congestione IAMD per la gestione degli eventi di limitazione da CloudWatch tramite il costrutto ThrottlingInvoker dell'SDK Amazon Athena Query Federation. Puoi modificare il comportamento di limitazione predefinito impostando una delle seguenti variabili di ambiente facoltative:

  • throttle_initial_delay_ms: il ritardo iniziale della chiamata applicato dopo il primo evento di congestione. Il valore predefinito è 10 millisecondi.

  • throttle_max_delay_ms: il ritardo massimo tra le chiamate. Puoi derivare il TPS dividendolo per 1.000 ms. Il valore predefinito è 1000 millisecondi.

  • throttle_decrease_factor: il fattore in base al quale Athena riduce la frequenza delle chiamate. Il valore predefinito è 0.5

  • throttle_increase_ms: la velocità con cui Athena riduce il ritardo della chiamata. Il valore predefinito è 10 millisecondi.

Database e tabelle

Il connettore CloudWatch per Athena associa i LogGroups come schemi (ossia database) e ogni LogStream come una tabella. Il connettore inoltre mappa una visualizzazione all_log_streams speciale che contiene tutti i LogStream nel LogGroup. Questa visualizzazione consente di eseguire una query su tutti i log di un LogGroup alla volta anziché cercare in ogni LogStream singolarmente.

Ogni tabella mappata dal connettore CloudWatch per Athena ha il seguente schema. Questo schema corrisponde ai campi forniti da CloudWatch Logs.

  • log_stream: un VARCHAR che contiene il nome del LogStream da cui proviene la riga.

  • time: un INT64 che contiene l'ora epoch in cui è stata generata la riga del log.

  • message: un VARCHAR che contiene il messaggio di log.

Esempi

L'esempio seguente mostra come eseguire una query SELECT su un LogStream specificato.

SELECT * FROM "lambda:cloudwatch_connector_lambda_name"."log_group_path"."log_stream_name" LIMIT 100

L'esempio seguente mostra come utilizzare la visualizzazione all_log_streams per eseguire una query su tutti i LogStreams in un LogGroup specificato.

SELECT * FROM "lambda:cloudwatch_connector_lambda_name"."log_group_path"."all_log_streams" LIMIT 100

Autorizzazioni richieste

Consulta la sezione Policies del file athena-cloudwatch.yaml per i dettagli completi delle policy IAM richieste da questo connettore. L'elenco che segue riporta un riepilogo delle autorizzazioni richieste.

  • Accesso in scrittura ad Amazon S3: per trasferire i risultati di query di grandi dimensioni, il connettore richiede l'accesso in scrittura a una posizione in Amazon S3.

  • Athena GetQueryExecution: il connettore utilizza questa autorizzazione per interrompersi rapidamente con esito negativo quando la query a monte di Athena è terminata.

  • CloudWatch Logs Read/Write: il connettore utilizza questa autorizzazione per leggere i dati del log e scrivere i relativi log di diagnostica.

Prestazioni

Il connettore CloudWatch per Athena tenta di ottimizzare le query su CloudWatch eseguendo in parallelo le scansioni dei flussi di log necessari per la query. Per determinati filtri dei periodi temporali, il pushdown dei predicati viene eseguito sia all'interno della funzione Lambda sia all'interno di CloudWatch Logs.

Per prestazioni ottimali, utilizza solo lettere minuscole per i nomi di gruppi di log e dei flussi di log. L'utilizzo di caratteri misti tra maiuscole e minuscole fa sì che il connettore esegua una ricerca senza distinzione tra maiuscole e minuscole, più impegnativa dal punto di vista computazionale.

Nota

Il connettore CloudWatch non supporta nomi di database in maiuscolo.

Query passthrough

Il connettore CloudWatchsupporta le query passthrough che utilizzano la sintassi delle queryCloudWatchLogs Insights. Per ulteriori informazioni su CloudWatch Logs Insights, consulta la pagina Analyzing Log Data with CloudWatch Logs Insights della Guida per l'utente di File di log Amazon CloudWatch.

Per creare query passthrough con CloudWatch, utilizzare la seguente sintassi:

SELECT * FROM TABLE( system.query( STARTTIME => 'start_time', ENDTIME => 'end_time', QUERYSTRING => 'query_string', LOGGROUPNAMES => 'log_group-names', LIMIT => 'max_number_of_results' ))

Nell'esempio seguente la query passthrough CloudWatch filtra per il campo duration quando non è uguale a 1000.

SELECT * FROM TABLE( system.query( STARTTIME => '1710918615308', ENDTIME => '1710918615972', QUERYSTRING => 'fields @duration | filter @duration != 1000', LOGGROUPNAMES => '/aws/lambda/cloudwatch-test-1', LIMIT => '2' ))

Informazioni sulla licenza

Il progetto del connettore CloudWatch per Amazon Athena è concesso in licenza ai sensi della Licenza Apache-2.0.

Risorse aggiuntive

Per ulteriori informazioni su questo connettore, visita il sito corrispondente su GitHub.com.