Creare un connettore personalizzato a un'origine dati - Amazon CloudWatch

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à.

Creare un connettore personalizzato a un'origine dati

Per connettere un'origine dati personalizzata a CloudWatch, hai due opzioni:

  • Inizia utilizzando un modello di esempio che CloudWatch fornisce. Puoi usare entrambi 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.

  • Crea una AWS Lambda funzione da zero che implementi il connettore di origine dati, la query dei dati e la preparazione delle serie temporali da utilizzare da. CloudWatch Questa funzione deve preaggregare o unire i punti dati, se necessario, e inoltre allineare il periodo e i timestamp con cui è compatibile. CloudWatch

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 politica di autorizzazioni Lambda e di allegare i tag delle risorse alla funzione Lambda.

Per usare il modello per creare un connettore a un'origine dati personalizzata
  1. Apri la console all'indirizzo https://console.aws.amazon.com/cloudwatch/ CloudWatch .

  2. Nel pannello di navigazione scegli Impostazioni.

  3. Seleziona la scheda Origini dati dei parametri.

  4. Seleziona Create data source (Crea origine dati).

  5. Seleziona il pulsante di opzione Personalizzato - modello di base, quindi scegli Successivo.

  6. Inserisci un nome per l'origine dati.

  7. Seleziona uno dei modelli elencati.

  8. Seleziona Node.js o Python.

  9. Seleziona Create data source (Crea origine dati).

    La nuova fonte personalizzata che hai appena aggiunto non viene visualizzata finché lo AWS CloudFormation stack non finisce di crearla. Per verificare i progressi, puoi scegliere Visualizza lo stato del mio CloudFormation stack. 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.

  10. (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.

  11. Modifica la funzione Lambda in base alle necessità.

    1. Nel pannello di navigazione scegli Impostazioni.

    2. Seleziona la scheda Origini dati dei parametri.

    3. 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 Questi passaggi sono stati eseguiti CloudWatch perché hai utilizzato il modello.

Creazione di un'origine dati personalizzata partendo da zero

Segui i passaggi in questa sezione per creare una funzione Lambda che si connette CloudWatch a un'origine dati.

Fase 1: Creare la funzione

Un connettore di origine dati personalizzato deve supportare GetMetricData eventi provenienti da CloudWatch. Facoltativamente, puoi anche implementare un DescribeGetMetricData evento per fornire la documentazione agli utenti della CloudWatch console su come utilizzare il connettore. La DescribeGetMetricData risposta può essere utilizzata anche per impostare i valori predefiniti utilizzati nel generatore di query CloudWatch personalizzato.

CloudWatch fornisce frammenti di codice come esempi per aiutarti a iniziare. Per ulteriori informazioni, consultate l'archivio degli 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 GetMetricData contrassegna la funzione Lambda come InternalError e 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 GetMetricData contrassegna la funzione Lambda come InternalError e 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' CloudWatch utente, 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 value2 e così via. Se la funzione restituisce 10:03 valueX, ad esempio, viene eliminata perché 10:03 non corrisponde all'ora e al periodo di inizio richiesti.

  • Le interrogazioni multilinea non sono supportate dai connettori delle sorgenti 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.

GetMetricData evento

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 i dati più recenti 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) Complete indica che sono stati restituiti tutti i punti dati nell'intervallo di tempo richiesto. PartialDatasignifica che è stato restituito un set incompleto di punti dati. Se viene omesso, il valore predefinito è Complete.

    Valori validi: Complete | InternalError | PartialData | Forbidden

  • Messaggi: elenco facoltativo di messaggi con informazioni aggiuntive sui dati restituiti.

    Tipo: matrice di MessageDataoggetti con Code e Value stringhe.

  • Etichetta: l'etichetta leggibile dall'uomo associata ai dati.

    ▬Tipo: stringa

  • 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 per Timestamps[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 oForbidden, CloudWatch si presume che si tratti di un errore interno generico.

{ "Error": { "Code": "PrometheusClusterUnreachable", "Value": "Unable to communicate with the cluster" } }

DescribeGetMetricData evento

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 CloudWatch console. Markdown è supportato.

    ▬Tipo: stringa

  • ArgumentDefaults— La matrice opzionale di valori predefiniti degli argomenti utilizzati precompila il generatore di sorgenti dati personalizzato.

    Se [{ Value: "default value 1"}, { Value: 10}] viene restituito, il generatore di query nella CloudWatch console visualizza due input, il primo con «valore predefinito 1" e il secondo con 10.

    Se ArgumentDefaults non viene fornito, viene visualizzato un singolo input con il tipo predefonito impostato su. String

    Tipo: matrice di oggetti contenente Vaolre e Tipo.

  • Errore: (facoltativo) è possibile includere un campo di errore in qualsiasi risposta. Puoi consultare degli esempi in GetMetricData evento.

Considerazioni importanti sugli allarmi CloudWatch

Se intendi utilizzare la fonte dati per impostare gli CloudWatch allarmi, dovresti configurarla in modo da riportare dati con timestamp ogni minuto. CloudWatch 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) Da utilizzare AWS Secrets Manager per memorizzare le credenziali

Se la tua funzione Lambda deve utilizzare credenziali per accedere all'origine dati, ti consigliamo di utilizzare AWS Secrets Manager per archiviare queste credenziali invece di codificarle nella tua funzione Lambda. Per ulteriori informazioni sull'utilizzo AWS Secrets Manager con Lambda, consulta Usare AWS Secrets Manager i segreti nelle AWS Lambda funzioni.

(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 AWS Secrets Manager. Per ulteriori informazioni, consulta Accedere a un AWS servizio utilizzando un endpoint VPC di interfaccia.

Fase 2: creazione di una policy di autorizzazioni Lambda

È necessario utilizzare creare una dichiarazione politica che conceda l' CloudWatch autorizzazione all'uso della funzione Lambda creata. È possibile utilizzare la console AWS CLI o la console Lambda per creare l'informativa sulla politica.

Da utilizzare AWS CLI per creare l'informativa sulla politica
  • Inserire il seguente comando. Sostituisci 123456789012 con l'ID del tuo account, sostituisci my-data-source-functioncon il nome della tua funzione Lambda e sostituisci MyDataSource- DataSourcePermission 1234 con un valore univoco arbitrario.

    aws lambda add-permission --function-name my-data-source-function --statement-id MyDataSource-DataSourcePermission1234 --action lambda:InvokeFunction --principal lambda.datasource.cloudwatch.amazonaws.com --source-account 123456789012

Fase 3: collegamento di un tag delle risorse alla funzione Lambda

La CloudWatch console determina quali delle funzioni Lambda sono connettori di sorgenti dati utilizzando un tag. Quando crei un'origine dati utilizzando una delle procedure guidate, il tag viene applicato automaticamente dallo AWS CloudFormation stack 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 della CloudWatch console quando esegui una query sulle metriche.

  • Aggiungi un tag con cloudwatch:datasource come chiave e custom come valore.