Creare un connettore personalizzato a un'origine dati
Questo argomento descrive come connettere un'origine dati personalizzata a CloudWatch. Puoi connettere un'origine dati personalizzata a CloudWatch in due modi:
-
Utilizzando un modello di esempio fornito da CloudWatch. Puoi usare JavaScript o Python con questo modello. Questi modelli includono codice Lambda di esempio che ti sarà utile durante la creazione della tua funzione Lambda. Puoi quindi modificare la funzione Lambda del modello per connetterti alla tua origine dati personalizzata.
-
Creando una funzione AWS Lambda da zero che implementa il connettore di origine dati, la query sui dati e la preparazione delle serie temporali per l'utilizzo da parte di CloudWatch. Questa funzione deve preaggregare o unire i datapoint, se necessario, e allineare il periodo e i timestamp per essere compatibile con CloudWatch.
Indice
Utilizzo dei modelli
L'utilizzo di un modello crea una funzione Lambda di esempio e può aiutarti a creare più velocemente il tuo connettore personalizzato. Queste funzioni di esempio forniscono codice di esempio per molti scenari comuni relativi alla creazione di un connettore personalizzato. Puoi esaminare il codice Lambda dopo aver creato un connettore con un modello, quindi modificarlo per utilizzarlo per connetterti alla tua origine dati.
Inoltre, se utilizzi il modello, CloudWatch si occupa di creare la policy di autorizzazione Lambda e di allegare i tag delle risorse alla funzione Lambda.
Per usare il modello per creare un connettore a un'origine dati personalizzata
Apri la console CloudWatch all'indirizzo https://console.aws.amazon.com/cloudwatch/
. -
Nel pannello di navigazione scegli Impostazioni.
Seleziona la scheda Origini dati dei parametri.
Seleziona Create data source (Crea origine dati).
Seleziona il pulsante di opzione Personalizzato - modello di base, quindi scegli Successivo.
Inserisci un nome per l'origine dati.
Seleziona uno dei modelli elencati.
Seleziona Node.js o Python.
Seleziona Create data source (Crea origine dati).
La nuova origine personalizzata appena aggiunta non viene visualizzata finché lo stack CloudFormation non termina la creazione. Per verificare i progressi, puoi selezionare Visualizza lo stato del mio stack CloudFormation. In alternativa, puoi selezionare l'icona di aggiornamento per aggiornare questo elenco.
Quando la nuova origine dati viene visualizzata in questo elenco, è pronta per essere testata nella console e modificata.
(Facoltativo) Per eseguire query sui dati di test provenienti da questa origine nella console, consulta le istruzioni fornite in Creazione di un grafico dei parametri da un'altra origine dati.
Modifica la funzione Lambda in base alle necessità.
Nel pannello di navigazione scegli Impostazioni.
Seleziona la scheda Origini dati dei parametri.
Seleziona Visualizza nella console Lambda per l'origine che desideri modificare.
Ora puoi modificare la funzione per accedere alla tua origine dati. Per ulteriori informazioni, consulta Fase 1: Creare la funzione.
Nota
Utilizzando il modello, quando scrivi la funzione Lambda non è necessario seguire le istruzioni in Fase 2: creazione di una policy di autorizzazioni Lambda o. Fase 3: collegamento di un tag delle risorse alla funzione Lambda Poiché hai utilizzato il modello, questi passaggi sono stati eseguiti da CloudWatch.
Creazione di un'origine dati personalizzata partendo da zero
Segui i passaggi descritti in questa sezione per creare una funzione Lambda che connetta CloudWatch a un'origine dati.
Fase 1: Creare la funzione
Un connettore di origine dati personalizzato deve supportare gli eventi GetMetricData di CloudWatch. Facoltativamente, puoi anche implementare un evento DescribeGetMetricData per fornire la documentazione su come utilizzare il connettore agli utenti nella console CloudWatch. La risposta DescribeGetMetricData può essere utilizzata anche per impostare le impostazioni predefinite usate nel generatore di query personalizzato di CloudWatch.
CloudWatch fornisce frammenti di codice come esempi per iniziare. Per maggiori informazioni, consulta l'archivio di esempi all'indirizzo https://github.com/aws-samples/cloudwatch-data-source-samples
Vincoli
La risposta di Lambda deve avere una dimensione inferiore a 6 Mb. Se la risposta supera i 6 Mb, la risposta
GetMetricDatacontrassegna la funzione Lambda comeInternalErrore non viene restituito alcun dato.La funzione Lambda deve completare la sua esecuzione entro 10 secondi per scopi di visualizzazione e dashboard o entro 4,5 secondi per l'utilizzo degli allarmi. Se la il tempo di esecuzione è più lungo, la risposta
GetMetricDatacontrassegna la funzione Lambda comeInternalErrore non viene restituito alcun dato.La funzione Lambda deve inviare il suo output utilizzando timestamp epoch in secondi.
Se la funzione Lambda non ricampiona i dati e restituisce invece dati che non corrispondono all'ora di inizio e alla durata del periodo richiesti dall'utente CloudWatch, tali dati vengono ignorati da CloudWatch. I dati aggiuntivi vengono eliminati da qualsiasi visualizzazione o allarme. Vengono eliminati anche tutti i dati che non si trovano tra l'ora di inizio e l'ora di fine.
Ad esempio, se un utente richiede dati dalle 10:00 alle 11:00 con una durata di 5 minuti, gli intervalli di tempo validi per la restituzione dei dati sono "dalle 10:00:00 alle 10:04:59" e "dalle 10:05:00 alle 10:09:59". È necessario restituire una serie temporale che includa
10:00 value1,10:05 value2e così via. Se la funzione restituisce10:03 valueX, ad esempio, viene eliminata perché 10:03 non corrisponde all'ora e al periodo di inizio richiesti.Le query su più righe non sono supportate dai connettori di origine dati CloudWatch. Ogni avanzamento riga viene sostituito da uno spazio quando la query viene eseguita o quando si crea un allarme o un widget del pannello di controllo con la query. In alcuni casi, ciò potrebbe rendere la query non valida.
Evento GetMetricData
Payload della richiesta
Di seguito è riportato un esempio di payload della richiesta GetMetricData inviato come input alla funzione Lambda.
{ "EventType": "GetMetricData", "GetMetricDataRequest": { "StartTime": 1697060700, "EndTime": 1697061600, "Period": 300, "Arguments": ["serviceregistry_external_http_requests{host_cluster!=\"prod\"}"] } }
StartTime: il timestamp che specifica i primi dati da restituire. Il Tipo è timestamp secondi epoch.
EndTime: il timestamp che specifica gli ultimi dati da restituire. Tipo è timestamp secondi epoch.
Periodo:: il numero di secondi rappresentato da ciascuna aggregazione dei dati dei parametri. Il valore minimo è 60 secondi. Il Type è Secondi.
Argomenti: una matrice di argomenti da passare all'espressione matematica del parametro Lambda. Per informazioni sugli argomenti da passare, consulta Come passare argomenti alla funzione Lambda.
Payload della risposta
Di seguito è riportato un esempio di payload di risposta GetMetricData per la funzione Lambda.
{ "MetricDataResults": [ { "StatusCode": "Complete", "Label": "CPUUtilization", "Timestamps": [ 1697060700, 1697061000, 1697061300 ], "Values": [ 15000, 14000, 16000 ] } ] }
Il payload di risposta conterrà un campo MetricDataResults o un campo Error, ma non entrambi.
Un campo MetricDataResults è un elenco di campi di serie temporali di tipo MetricDataResult. Ciascuno di questi campi di serie temporali può includere i seguenti campi.
StatusCode: (facoltativo)
Completeindica che sono stati restituiti tutti i punti dati nell'intervallo di tempo richiesto.PartialDataindica che è stato restituito un insieme incompleto di punti dati. Se viene omesso, il valore predefinito èComplete.Valori validi:
Complete|InternalError|PartialData|ForbiddenMessaggi: elenco facoltativo di messaggi con informazioni aggiuntive sui dati restituiti.
Tipo: matrice di oggetti MessageData con stringhe
CodeeValue.Etichetta: l'etichetta leggibile dall'uomo associata ai dati.
Tipo: string
Timestamp: i timestamp per i punti dati, formattati in base all'ora epoch. Il numero di timestamp corrisponde sempre al numero di valori e il valore per
Timestamps[x]èValues[x].Tipo: matrice di timestamp
Valori: i valori dei punti dati per il parametro, corrispondenti a
Timestamps. Il numero di valori corrisponde sempre al numero di timestamp e il valore perTimestamps[x]èValues[x].Tipo: matrice di doppi
Per ulteriori informazioni sull'utilizzo degli oggetti Error, consulta le sezioni successive.
Formati di risposta di errore
Puoi utilizzare la risposta di errore per fornire ulteriori informazioni sugli errori. Ti consigliamo di restituire un errore con Code Validation quando si verifica un errore di convalida, ad esempio quando un parametro manca o è del tipo sbagliato.
Di seguito è riportato un esempio di risposta per un caso in cui la funzione Lambda vuole generare un'eccezione di convalida GetMetricData.
{ "Error": { "Code": "Validation", "Value": "Invalid Prometheus cluster" } }
Di seguito è riportato un esempio di risposta per un caso in cui la funzione Lambda indica che non è in grado di restituire dati a causa di un problema di accesso. La risposta viene tradotta in una singola serie temporale con un codice di stato di Forbidden.
{ "Error": { "Code": "Forbidden", "Value": "Unable to access ..." } }
Di seguito è riportato l'esempio di un caso in cui la funzione Lambda genera un'eccezione InternalError generale, che viene tradotta in una singola serie temporale con un codice di stato di InternalError e un messaggio. Ogni volta che un codice di errore ha un valore diverso da Validation o Forbidden, CloudWatch presume che si tratti di un errore interno generico.
{ "Error": { "Code": "PrometheusClusterUnreachable", "Value": "Unable to communicate with the cluster" } }
Evento DescribeGetMetricData
Payload della richiesta
Di seguito è riportato un esempio di payload della richiesta DescribeGetMetricData.
{ "EventType": "DescribeGetMetricData" }
Payload della risposta
Di seguito è riportato un esempio di payload della risposta DescribeGetMetricData.
{ "Description": "Data source connector", "ArgumentDefaults": [{ Value: "default value" }] }
Descrizione: una descrizione di come utilizzare il connettore di origine dati. Questa descrizione verrà visualizzata nella console CloudWatch. Markdown è supportato.
Tipo: string
ArgumentDefaults: una matrice opzionale di valori predefiniti degli argomenti utilizzati precompila il generatore di origini dati personalizzato.
Se
[{ Value: "default value 1"}, { Value: 10}]viene restituito, il generatore di query nella console CloudWatch mostra due input, il primo con “valore predefinito 1” e il secondo con 10.Se
ArgumentDefaultsnon viene fornito, viene visualizzato un singolo input con il tipo predefonito impostato su.StringTipo: matrice di oggetti contenente Vaolre e Tipo.
Errore: (facoltativo) è possibile includere un campo di errore in qualsiasi risposta. Puoi consultare degli esempi in Evento GetMetricData.
Considerazioni importanti sugli allarmi CloudWatch
Se intendi utilizzare l'origine dati per impostare gli allarmi CloudWatch, devi configurarla affinché restituisca i dati con timestamp a CloudWatch ogni minuto. Per ulteriori informazioni e altre considerazioni sulla creazione di allarmi sui parametri provenienti da origini dati connesse, consulta Creazione di un allarme basato su un'origine dati connessa.
(Facoltativo) Utilizzo di Gestione dei segreti AWS per memorizzare le credenziali
Se la tua funzione Lambda deve utilizzare credenziali per accedere all'origine dati, ti consigliamo di utilizzare Gestione dei segreti AWS per archiviare queste credenziali invece di codificarle nella funzione Lambda. Per ulteriori informazioni sull'uso di Gestione dei segreti AWS con Lambda, consulta Utilizzo dei segreti Gestione dei segreti AWS nelle funzioni AWS Lambda.
(Facoltativo) Connessione a un'origine dati in un VPC
Se la tua origine dati si trova in un VPC gestito da Amazon Virtual Private Cloud, devi configurare la funzione Lambda per accedervi. Per ulteriori informazioni, consulta Connessione della rete in uscita alle risorse in un VPC.
Potrebbe anche essere necessario configurare gli endpoint del servizio VPC per accedere a servizi come Gestione dei segreti AWS. Per ulteriori informazioni, consulta Accesso a un servizio AWS utilizzando un endpoint VPC di interfaccia.
Fase 2: creazione di una policy di autorizzazioni Lambda
È necessario creare un'istruzione di policy che conceda a CloudWatch l'autorizzazione a utilizzare la funzione Lambda creata. Puoi utilizzare AWS CLI o la console Lambda per creare l'istruzione di policy.
Per utilizzare AWS CLI per creare l'istruzione di policy
Inserire il seguente comando. Sostituisci
123456789012con l'ID del tuo account, sostituiscimy-data-source-functioncon il nome della tua funzione Lambda e sostituisciMyDataSource-DataSourcePermission1234con un valore univoco arbitrario.aws lambda add-permission --function-namemy-data-source-function--statement-idMyDataSource-DataSourcePermission1234--action lambda:InvokeFunction --principal lambda.datasource.cloudwatch.amazonaws.com --source-account123456789012
Fase 3: collegamento di un tag delle risorse alla funzione Lambda
La console CloudWatch determina quali delle funzioni Lambda sono connettori di origine dati utilizzando un tag. Quando crei un'origine dati utilizzando una delle procedure guidate, il tag viene applicato automaticamente dallo stack CloudFormation che lo configura. Quando crei personalmente un'origine dati, puoi usare il tag seguente per la tua funzione Lambda. In questo modo il connettore viene visualizzato nel menu a discesa Origine dati nella console CloudWatch quando esegui una query sui parametri.
Aggiungi un tag con
cloudwatch:datasourcecome chiave ecustomcome valore.