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à.
Esempio: integra le notifiche di Datadog e Splunk
Questo esempio fornisce passaggi dettagliati per l'integrazione delle notifiche da Datadog e Splunk a AWS Incident Detection and Response.
Argomenti
Fase 1: configura il tuo APM come fonte di eventi in Amazon EventBridge
Configura ognuno di voi APMs come fonte di eventi in Amazon EventBridge nel tuo account AWS. Per istruzioni su come configurare il tuo APM come fonte di eventi, consulta le istruzioni per la configurazione della sorgente di eventi per il tuo strumento nei EventBridge partner Amazon
Configurando il tuo APM come fonte di eventi, puoi importare notifiche dall'APM a un bus di eventi nel tuo account AWS. Dopo la configurazione, AWS Incident Detection and Response può avviare il processo di gestione degli incidenti quando l'event bus riceve un evento. Questo processo aggiunge Amazon EventBridge come destinazione nel tuo APM.
Passaggio 2: crea un bus di eventi personalizzato
È consigliabile utilizzare un bus di eventi personalizzato. AWS Incident Detection and Response utilizza il bus di eventi personalizzato per importare eventi trasformati. Una AWS Lambda funzione trasforma l'evento del bus degli eventi partner e lo invia al bus degli eventi personalizzato. AWS Incident Detection and Response installa una regola gestita per importare eventi dal bus di eventi personalizzato.
Puoi utilizzare il bus di eventi predefinito anziché un bus di eventi personalizzato. AWS Incident Detection and Response modifica la regola gestita per importarla dal bus degli eventi predefinito anziché da uno personalizzato.
Crea un bus di eventi personalizzato nel tuo AWS account:
-
Apri la EventBridge console Amazon all'indirizzo https://console.aws.amazon.com/events/
-
Scegli Buses, Event bus.
-
In Custom event bus, scegli Crea.
-
Fornisci un nome per il bus dell'evento in Nome. Il formato consigliato è APMName- AWSIncidentDetectionResponse-EventBus.
Ad esempio, usa uno dei seguenti se usi Datadog o Splunk:
-
Datadog: Datadog-AWSIncidentDetectionResponse-EventBus
-
Splunk: Splunk-AWSIncidentDetectionResponse-EventBus
-
Fase 3: Creare una AWS Lambda funzione per la trasformazione
La funzione Lambda trasforma gli eventi tra il bus eventi partner nel passaggio 1 e il bus eventi personalizzato (o predefinito) del passaggio 2. La trasformazione della funzione Lambda corrisponde alla regola gestita di AWS Incident Detection and Response.
Crea una AWS Lambda funzione nel tuo account AWS
-
Apri la pagina Funzioni
sulla AWS Lambda console. -
Scegli Crea funzione.
-
Scegli la scheda Autore da zero.
-
Per Nome della funzione, inserisci un nome utilizzando il formato
APMName-AWSIncidentDetectionResponse-LambdaFunction
.Di seguito sono riportati alcuni esempi per Datadog e Splunk:
Datadog: Datadog-AWSIncidentDetectionResponse-LambdaFunction
-
Splunk: Splunk-AWSIncidentDetectionResponse-LambdaFunction
-
Per Runtime, inserisci Python 3.10.
-
Lascia i campi rimanenti con i valori predefiniti. Scegli Crea funzione.
-
Nella pagina di modifica del codice, sostituisci il contenuto predefinito della funzione Lambda con la funzione nei seguenti esempi di codice.
Notate i commenti che iniziano con # nei seguenti esempi di codice. Questi commenti indicano quali valori modificare.
Modello di codice di trasformazione Datadog:
import logging import json import boto3 logger = logging.getLogger() logger.setLevel(logging.INFO) # Change the EventBusName to the custom event bus name you created previously or use your default event bus which is called 'default'. # Example 'Datadog-AWSIncidentDetectionResponse-EventBus' EventBusName = "Datadog-AWSIncidentDetectionResponse-EventBus" def lambda_handler(event, context): # Set the event["detail"]["incident-detection-response-identifier"] value to the name of your alert that is coming from your APM. Each APM is different and each unique alert will have a different name. # Replace the dictionary path, event["detail"]["meta"]["monitor"]["name"], with the path to your alert name based on your APM payload. # This example is for finding the alert name for Datadog. event["detail"]["incident-detection-response-identifier"] = event["detail"]["meta"]["monitor"]["name"] logger.info(f"We got: {json.dumps(event, indent=2)}") client = boto3.client('events') response = client.put_events( Entries=[ { 'Detail': json.dumps(event["detail"], indent=2), 'DetailType': 'ams.monitoring/generic-apm', # Do not modify. This DetailType value is required. 'Source': 'GenericAPMEvent', # Do not modify. This Source value is required. 'EventBusName': EventBusName # Do not modify. This variable is set at the top of this code as a global variable. Change the variable value for your eventbus name at the top of this code. } ] ) print(response['Entries'])
Modello di codice di trasformazione Splunk:
import logging import json import boto3 logger = logging.getLogger() logger.setLevel(logging.INFO) # Change the EventBusName to the custom event bus name you created previously or use your default event bus which is called 'default'. # Example Splunk-AWSIncidentDetectionResponse-EventBus EventBusName = "Splunk-AWSIncidentDetectionResponse-EventBus" def lambda_handler(event, context): # Set the event["detail"]["incident-detection-response-identifier"] value to the name of your alert that is coming from your APM. Each APM is different and each unique alert will have a different name. # replace the dictionary path event["detail"]["ruleName"] with the path to your alert name based on your APM payload. # This example is for finding the alert name in Splunk. event["detail"]["incident-detection-response-identifier"] = event["detail"]["ruleName"] logger.info(f"We got: {json.dumps(event, indent=2)}") client = boto3.client('events') response = client.put_events( Entries=[ { 'Detail': json.dumps(event["detail"], indent=2), 'DetailType': 'ams.monitoring/generic-apm', # Do not modify. This DetailType value is required. 'Source': 'GenericAPMEvent', # Do not modify. This Source value is required. 'EventBusName': EventBusName # Do not modify. This variable is set at the top of this code as a global variable. Change the variable value for your eventbus name at the top of this code. } ] ) print(response['Entries'])
-
Seleziona Deploy (Implementa).
-
Aggiungi l'PutEventsautorizzazione al ruolo di esecuzione Lambda per il bus di eventi a cui stai inviando i dati trasformati:
Apri la pagina Funzioni
sulla AWS Lambda console. -
Seleziona la funzione, quindi scegli Autorizzazioni nella scheda Configurazione.
-
In Ruolo di esecuzione, seleziona il nome del ruolo per aprire il ruolo di esecuzione nella AWS Identity and Access Management console.
-
In Criteri di autorizzazione, seleziona il nome del criterio esistente per aprire il criterio.
-
In Autorizzazioni definite in questa politica, scegli Modifica.
-
Nella pagina dell'editor delle politiche, seleziona Aggiungi nuova dichiarazione:
-
L'editor delle politiche aggiunge una nuova dichiarazione vuota simile alla seguente
-
Sostituisci la nuova istruzione generata automaticamente con la seguente:
{ "Sid": "AWSIncidentDetectionResponseEventBus0", "Effect": "Allow", "Action": "events:PutEvents", "Resource": "arn:aws:events:{region}:{accountId}:event-bus/{custom-eventbus-name}" }
La risorsa è l'ARN del bus eventi personalizzato che hai creato Passaggio 2: crea un bus di eventi personalizzato o l'ARN del tuo bus eventi predefinito se utilizzi il bus eventi predefinito nel tuo codice Lambda.
-
Verifica e conferma che le autorizzazioni richieste siano state aggiunte al ruolo.
-
Scegli Imposta questa nuova versione come predefinita, quindi scegli Salva modifiche.
Cosa è richiesto da una trasformazione del payload?
Le seguenti coppie chiave:valore JSON sono necessarie negli eventi del bus di eventi acquisiti da AWS Incident Detection and Response.
{ "detail-type": "ams.monitoring/generic-apm", "source": "GenericAPMEvent" "detail" : { "incident-detection-response-identifier": "Your alarm name from your APM", } }
Gli esempi seguenti mostrano un evento proveniente da un bus di eventi partner prima e dopo la sua trasformazione.
{ "version": "0", "id": "a6150a80-601d-be41-1a1f-2c5527a99199", "detail-type": "Datadog Alert Notification", "source": "aws.partner/datadog.com/Datadog-aaa111bbbc", "account": "123456789012", "time": "2023-10-25T14:42:25Z", "region": "us-east-1", "resources": [], "detail": { "alert_type": "error", "event_type": "query_alert_monitor", "meta": { "monitor": { "id": 222222, "org_id": 3333333333, "type": "query alert", "name": "UnHealthyHostCount", "message": "@awseventbridge-Datadog-aaa111bbbc", "query": "max(last_5m):avg:aws.applicationelb.un_healthy_host_count{aws_account:123456789012} \u003c\u003d 1", "created_at": 1686884769000, "modified": 1698244915000, "options": { "thresholds": { "critical": 1.0 } }, }, "result": { "result_id": 7281010972796602670, "result_ts": 1698244878, "evaluation_ts": 1698244868, "scheduled_ts": 1698244938, "metadata": { "monitor_id": 222222, "metric": "aws.applicationelb.un_healthy_host_count" } }, "transition": { "trans_name": "Triggered", "trans_type": "alert" }, "states": { "source_state": "OK", "dest_state": "Alert" }, "duration": 0 }, "priority": "normal", "source_type_name": "Monitor Alert", "tags": [ "aws_account:123456789012", "monitor" ] } }
Si noti che prima della trasformazione dell'evento, detail-type
indica l'APM da cui proviene l'avviso, la fonte proviene da un APM partner e la incident-detection-response-identifier
chiave non è presente.
La funzione Lambda trasforma l'evento precedente e lo inserisce nel bus eventi di destinazione personalizzato o predefinito. Il payload trasformato ora include le coppie chiave:valore richieste.
{ "version": "0", "id": "7f5e0fc1-e917-2b5d-a299-50f4735f1283", "detail-type": "ams.monitoring/generic-apm", "source": "GenericAPMEvent", "account": "123456789012", "time": "2023-10-25T14:42:25Z", "region": "us-east-1", "resources": [], "detail": { "incident-detection-response-identifier": "UnHealthyHostCount", "alert_type": "error", "event_type": "query_alert_monitor", "meta": { "monitor": { "id": 222222, "org_id": 3333333333, "type": "query alert", "name": "UnHealthyHostCount", "message": "@awseventbridge-Datadog-aaa111bbbc", "query": "max(last_5m):avg:aws.applicationelb.un_healthy_host_count{aws_account:123456789012} \u003c\u003d 1", "created_at": 1686884769000, "modified": 1698244915000, "options": { "thresholds": { "critical": 1.0 } }, }, "result": { "result_id": 7281010972796602670, "result_ts": 1698244878, "evaluation_ts": 1698244868, "scheduled_ts": 1698244938, "metadata": { "monitor_id": 222222, "metric": "aws.applicationelb.un_healthy_host_count" } }, "transition": { "trans_name": "Triggered", "trans_type": "alert" }, "states": { "source_state": "OK", "dest_state": "Alert" }, "duration": 0 }, "priority": "normal", "source_type_name": "Monitor Alert", "tags": [ "aws_account:123456789012", "monitor" ] } }
Nota che ora detail-type
è adessoams.monitoring/generic-apm
, la fonte è oraGenericAPMEvent
, e sotto i dettagli c'è una nuova coppia chiave:valore:. incident-detection-response-identifier
Nell'esempio precedente, il incident-detection-response-identifier
valore viene preso dal nome dell'avviso sotto il percorso. $.detail.meta.monitor.name
I percorsi dei nomi degli avvisi APM sono diversi da un APM all'altro. La funzione Lambda deve essere modificata per prendere il nome dell'allarme dal percorso JSON dell'evento partner corretto e utilizzarlo per il valore. incident-detection-response-identifier
Ogni nome univoco impostato su incident-detection-response-identifier
viene fornito al team AWS Incident Detection and Response durante l'onboarding. Gli eventi con un nome sconosciuto incident-detection-response-identifier
non vengono elaborati.
Fase 4: Creare una EventBridge regola Amazon personalizzata
Il bus degli eventi partner creato nella Fase 1 richiede una EventBridge regola da te creata. La regola invia gli eventi desiderati dal bus eventi partner alla funzione Lambda creata nel passaggio 3.
Per linee guida sulla definizione della EventBridge regola, consulta EventBridge le regole di Amazon.
-
Apri la EventBridge console Amazon all'indirizzo https://console.aws.amazon.com/events/
-
Scegli Regole, quindi seleziona il bus degli eventi partner associato al tuo APM. Di seguito sono riportati alcuni esempi di bus per eventi partner:
Datadog: aws. partner/datadog.com/eventbus-nome
Splunk: aws. partner/signalfx.com/RandomString
-
Scegli Crea regola per creare una nuova EventBridge regola.
-
Per il nome della regola, inserisci un nome nel formato seguente
APMName-AWS Incident Detection and Response-EventBridgeRule
, quindi scegli Avanti. Di seguito sono riportati alcuni esempi di nomi:-
Datadog: Datadog-AWSIncidentDetectionResponse-EventBridgeRule
-
Splunk: Splunk-AWSIncidentDetectionResponse-EventBridgeRule
-
-
Per Event source, seleziona AWS events o EventBridge partner events.
-
Lascia Sample event e Creation method come valori predefiniti.
-
Per Event pattern, scegliete quanto segue:
Fonte dell'evento: EventBridge partner.
Partner: seleziona il tuo partner APM.
Tipo di evento: tutti gli eventi.
Di seguito sono riportati esempi di modelli di eventi:
Esempio di pattern di eventi Datadog
Esempio di pattern di eventi Splunk
-
Per Targets, scegli quanto segue:
-
Tipi di target: AWS servizio
-
Seleziona un obiettivo: scegli la funzione Lambda.
-
Funzione: il nome della funzione Lambda creata nel passaggio 2.
-
-
Scegliete Avanti, Salva regola.