Enviar logs de servicios de AWS con la función Lambda de Datadog
El servicio logs de AWS puede recopilarse con la función Lambda de Datadog Forwarder. Esta Lambda—que se activa en S3 Buckets, CloudWatch grupos log y eventos EventBridge—reenvía logs a Datadog.
Para empezar a recoger logs de tus servicios AWS:
- Configura la función Lambda de Datadog Forwarder en tu cuenta AWS.
- Habilita el registro para tu servicio AWS (la mayoría de los servicios AWS pueden loguear a un bucket S3 o CloudWatch Grupo log).
- Configurar los disparadores que hacen que la Lambda Forwarder se ejecute cuando hay nuevos logs que reenviar. Hay dos maneras de Configurar los disparadores.
Nota: Si te encuentras en la región AWS us-east-1
, aprovecha Datadog-AWS Private Link.
Nota: Cloudformation crea una política IAM que incluye KMS:Decrypt para todos los recursos, y no se alinea con las mejores prácticas de AWS Security Hub. Este permiso se utiliza para descifrar objetos de buckets S3 cifrados con KMS para configurar la función Lambda, y no se puede predecir qué clave KMS se utiliza para cifrar los buckets S3. Puedes eliminar este permiso de forma segura una vez que la instalación haya finalizado correctamente.
Habilita el registro para tu servicio AWS
Se admite cualquier servicio AWS que genere logs en un bucket S3 o un CloudWatch Grupo log. Encontrará instrucciones de configuración para los servicios en la siguiente tabla:
Establecer disparadores
Existen dos opciones a la hora de configurar los disparadores en la función Lambda de Datadog Forwarder:
- Automáticamente: Datadog recupera automáticamente los log de localización para el servicio AWS seleccionado y los añade como disparadores en la función Lambda de Datadog Forwarder. Datadog también mantiene actualizada la lista.
- Manualmente: Configura tu mismo cada disparador.
Configurar automáticamente los disparadores
Datadog puede Configurar disparadores automáticamente la función Lambda de Datadog Forwarder para recopilar logs de AWS de las siguientes fuentes y localizaciones:
Origen | Localización |
---|
Logs de acceso a la API Gateway | CloudWatch |
Ejecución de logs de API Gateway | CloudWatch |
Logs de acceso de la aplicación ELB | S3 |
Logs de acceso a ELB clásico | S3 |
Logs de acceso a CloudFront | S3 |
Logs de Lambda | CloudWatch |
Logs de Redshift | S3 |
Logs de acceso S3 | S3 |
Funciones Step | CloudWatch |
Cortafuegos de aplicaciones web | S3, CloudWatch |
Nota: Los Filtros de suscripción no son creados automáticamente por DatadogForwarder. Crealos directamente en un Grupo de Log.
Si aún no lo has hecho, configura la función AWS Lambda de recopilación de logs de Datadog.
Asegúrese de que la política de rol IAM utilizada para la integración Datadog-AWS tiene los siguientes permisos. La información sobre cómo se utilizan estos permisos se puede encontrar en las descripciones a continuación:
"cloudfront:GetDistributionConfig",
"cloudfront:ListDistributions",
"elasticloadbalancing:DescribeLoadBalancers",
"elasticloadbalancing:DescribeLoadBalancerAttributes",
"lambda:List*",
"lambda:GetPolicy",
"redshift:DescribeClusters",
"redshift:DescribeLoggingStatus",
"s3:GetBucketLogging",
"s3:GetBucketLocation",
"s3:GetBucketNotification",
"s3:ListAllMyBuckets",
"s3:PutBucketNotification",
"states:ListStateMachines",
"states:DescribeStateMachine",
"wafv2:ListLoggingConfigurations",
"logs:PutSubscriptionFilter",
"logs:DeleteSubscriptionFilter",
"logs:DescribeSubscriptionFilters"
Permiso AWS | Descripción |
---|
cloudfront:GetDistributionConfig | Obtener el nombre del bucket de S3 que contiene los logs de acceso a CloudFront. |
cloudfront:ListDistributions | Lista todas las distribuciones de CloudFront. |
elasticloadbalancing:
DescribeLoadBalancers | Lista todos los equilibradores de carga. |
elasticloadbalancing:
DescribeLoadBalancerAttributes | Obtener el nombre del bucket S3 que contiene los logs de acceso a ELB. |
lambda:List* | Lista todas las funciones Lambda. |
lambda:GetPolicy | Obtener la política de Lambda cuando los disparadores deben ser eliminados. |
redshift:DescribeClusters | Lista todos los clústeres de Redshift. |
redshift:DescribeLoggingStatus | Obtener el nombre del bucket S3 que contiene logs de Redshift. |
s3:GetBucketLogging | Obtener el nombre del bucket S3 que contiene los logs de acceso S3. |
s3:GetBucketLocation | Obtener la región del bucket S3 que contiene los logs de acceso S3. |
s3:GetBucketNotification | Obtener las configuraciones de activación Lambda existentes. |
Más enlaces, artículos y documentación útiles: | |
s3:PutBucketNotification | Añadir o eliminar un disparador Lambda basado en el bucket S3 eventos. |
states:ListStateMachines | Lista todas las funciones Step. |
states:DescribeStateMachine | Obtener detalles de registro sobre una función Step. |
wafv2:ListLoggingConfigurations | Lista todas las configuraciones de registro del Cortafuegos de aplicaciones web. |
logs:PutSubscriptionFilter | Añadir un disparador Lambda basado en log de eventos de CloudWatch |
logs:DeleteSubscriptionFilter | Eliminar un disparador Lambda basado en log de eventos de CloudWatch |
logs:DescribeSubscriptionFilters | Lista los filtros de suscripción para el grupo log especificado. |
En la página integración AWS, selecciona la cuenta AWS de la que desea recolectar logs y haga clic en la pestaña Log Collection.
Introduzca el ARN de Lambda creada en la sección anterior y haga clic en Add.
Seleccione los servicios de los que deseas recopilar logs y haz clic en Save. Para dejar de recopilar logs de un determinado servicio, anule la selección de la fuente de log.
Si tienes logs en varias regiones, debes crear funciones Lambda adicionales en esas regiones e introducirlas en esta página.
Para dejar de recopilar todos los AWS logs , pase el ratón por encima de una Lambda y haga clic en el icono Eliminar. Se eliminarán todos los disparadores de esa función.
A los pocos minutos de esta configuración inicial, tus AWS logs apareceran en el log Explorer de Datadog.
Configurar manualmente los disparadores
Recopilar logs del grupo log de CloudWatch
Si estas recopilando logs de un grupo log de CloudWatch, Configura el disparador de la función Lambda de Datadog Forwarder utilizando uno de los siguientes métodos:
- En la consola AWS, vaya a Lambda.
- Haz clic en Functions y selecciona Datadog Forwarder .
- Haz clic en Add trigger y selecciona **CloudWatch Logs **.
- Selecciona el grupo log en el menú desplegable.
- Introduce un nombre para el filtro y, opcionalmente, especifique un patrón de filtrado.
- Haz clic en Add (Añadir).
- Ve a la sección Datadog log para explorar cualquier nuevo eventos log enviado a su grupo log.
Para los usuarios de Terraform, puedes aprovisionar y gestionar tus disparadores utilizando el recurso aws_cloudwatch_log_subscription_filter. Vea el código de ejemplo a continuación.
resource "aws_cloudwatch_log_subscription_filter" "datadog_log_subscription_filter" {
name = "datadog_log_subscription_filter"
log_group_name = <CLOUDWATCH_LOG_GROUP_NAME> # for example, /aws/lambda/my_lambda_name
destination_arn = <DATADOG_FORWARDER_ARN> # for example, arn:aws:lambda:us-east-1:123:function:datadog-forwarder
filter_pattern = ""
}
Para los usuarios de AWS CloudFormation, puedes aprovisionar y gestionar tus disparadores utilizando el recurso CloudFormation AWS::logs::SubscriptionFilter. Vea el código de ejemplo a continuación.
El código de ejemplo también funciona para AWS SAM y serverless Framework. Para serverless Framework, coloque el código en la sección resources dentro de su serverless.yml
.
Resources:
MyLogSubscriptionFilter:
Type: "AWS::Logs::SubscriptionFilter"
Properties:
DestinationArn: "<DATADOG_FORWARDER_ARN>"
LogGroupName: "<CLOUDWATCH_LOG_GROUP_NAME>"
FilterPattern: ""
Recopilación de logs de buckets S3
Si estas recopilando logs de un bucket S3, Configurar el disparador a la función Lambda de Datadog Forwarder utilizando uno de los siguientes métodos:
Una vez instalada la función Lambda, añade manualmente un disparador en el bucket S3 que contiene tus logs en la consola AWS:
Seleccione el bucket y siga las instrucciones de AWS:
Establece el tipo correcto de evento en los buckets S3:
¡Una vez hecho esto, entra en tu sección Datadog Log para empezar a explorar tus logs!
Para los usuarios de Terraform, puedes aprovisionar y gestionar tus disparadores utilizando el recurso aws_s3_bucket_notification. Consulte el código de ejemplo a continuación.
resource "aws_s3_bucket_notification" "my_bucket_notification" {
bucket = my_bucket
lambda_function {
lambda_function_arn = "<DATADOG_FORWARDER_ARN>"
events = ["s3:ObjectCreated:*"]
filter_prefix = "AWSLogs/"
filter_suffix = ".log"
}
}
Para los usuarios de CloudFormation, puedes Configurar disparadores usando CloudFormation NotificationConfiguration para tu bucket S3. Consulte el código de ejemplo a continuación.
Resources:
Bucket:
Type: AWS::S3::Bucket
Properties:
BucketName: "<MY_BUCKET>"
NotificationConfiguration:
LambdaConfigurations:
- Event: 's3:ObjectCreated:*'
Function: "<DATADOG_FORWARDER_ARN>"
Depurar y filtrar
Puedes depurar correos electrónicos o direcciones IP de logs enviados por la función Lambda, o definir una regla de depuración personalizada en los parámetros de Lambda.
También puedes excluir o enviar solo aquellos logs que coincidan con un patrón específico utilizando la opción de filtrado.