El Datadog Forwarder es una función AWS Lambda que envía logs desde AWS a Datadog, concretamente:
- Reenvía logs de CloudWatch, ELB, S3, CloudTrail, VPC, SNS y CloudFront a Datadog.
- Reenvía eventos S3 a Datadog.
- Reenvía eventos de flujos (streams) de datos Kinesis a Datadog (sólo se admiten logs de CloudWatch).
- Reenvía métricas, trazas y logs de funciones AWS Lambda a Datadog. Datadog te recomienda que utilices la extensión Lambda de Datadog para monitorizar tus funciones Lambda.
Los clientes serverless que utilizan el Forwarder para reenviar métricas, trazas y logs desde AWS Lambda a Datadog deben migrar a la extensión Lambda de Datadog para recopilar telemetría directamente desde los entornos de ejecución Lambda. El Forwarder sigue estando disponible para su uso en monitorizaciones serverless, pero no se actualizará para admitir las funciones más recientes.
Para obtener más información sobre el envío de logs de servicios AWS con el Datadog Forwarder, consulta la guía Enviar logs de servicios AWS con la función Lambda de Datadog.
Instalación
Datadog recomienda utilizar CloudFormation para instalar automáticamente el Forwarder. También puedes completar el proceso de configuración utilizando Terraform o manualmente. Una vez instalado, puedes asignar fuentes de logs al Forwarder, como buckets S3 o grupos de logs CloudWatch setting up triggers.
- Inicia sesión en tu cuenta o rol de administrador AWS y despliega la pila de CloudFormation utilizando el botón de arriba.
- Rellena la
DdApiKey
y selecciona la opción de DdSite
adecuada. Todos los demás parámetros son opcionales. - Haz clic en Create stack (Crear pila) y espera a que se complete la creación.
- Busca la función Lambda del Forwarder instalada en la pestaña “Resources” (Recursos) de la pila con el
Forwarder
de ID lógico. - Configura los activadores del Forwarder instalado.
- Si operas en varias regiones AWS, repite los pasos anteriores en otra región.
Si ya habías habilitado tu integración AWS utilizando la siguiente plantilla de CloudFormation desde tu página de integraciones AWS en Datadog, es posible que tu cuenta ya incluya la función Lambda del Forwarder de Datadog, si has decidido incluirla. En ese caso, sólo tendrás que instalar Lambda Datadog en las regiones AWS adicionales de tu cuenta a las que quieres exportar logs.
Nota: Se espera que el bloque de código de la función Lambda del Forwarder de Datadog esté vacío, ya que la lógica se implementa a través de una capa Lambda.
Instala el Forwarder utilizando el recurso Terraform aws_cloudformation_stack
como encapsulador, además de la plantilla de CloudFormation proporcionada.
Datadog recomienda crear configuraciones de Terraform separadas:
- Utiliza la primera para almacenar la clave de API de Datadog en el AWS Secrets Manager y anota el ARN de secretos de la salida de aplicación
- A continuación, crea una configuración para el Forwarder y proporciona el ARN de secretos a través del parámetro
DdApiKeySecretArn
. - Por último, crea una configuración para configurar los activadores en el Forwarder.
Al separar las configuraciones de la clave de API y del Forwarder, no es necesario proporcionar la clave de API de Datadog al actualizar el Forwarder. Para actualizar o mejorar el Forwarder en el futuro, vuelve a aplicar la configuración del Forwarder.
Ejemplo de configuración
# Almacenar la clave de API de Datadog en AWS Secrets Manager
variable "dd_api_key" {
type = string
description = "Datadog API key"
}
resource "aws_secretsmanager_secret" "dd_api_key" {
name = "datadog_api_key"
description = "Encrypted Datadog API Key"
}
resource "aws_secretsmanager_secret_version" "dd_api_key" {
secret_id = aws_secretsmanager_secret.dd_api_key.id
secret_string = var.dd_api_key
}
output "dd_api_key" {
value = aws_secretsmanager_secret.dd_api_key.arn
}
# Utiliza el Datadog Forwarder para enviar logs desde S3 y CloudWatch, así como los datos de observabilidad de funciones Lambda a Datadog. Para obtener más información, consulta https://github.com/DataDog/datadog-serverless-functions/tree/master/aws/logs_monitoring
resource "aws_cloudformation_stack" "datadog_forwarder" {
name = "datadog-forwarder"
capabilities = ["CAPABILITY_IAM", "CAPABILITY_NAMED_IAM", "CAPABILITY_AUTO_EXPAND"]
parameters = {
DdApiKeySecretArn = "REPLACE ME WITH THE SECRETS ARN",
DdSite = "<SITE>",
FunctionName = "datadog-forwarder"
}
template_url = "https://datadog-cloudformation-template.s3.amazonaws.com/aws/forwarder/latest.yaml"
}
Nota: Asegúrate de que el parámetro DdSite
coincide con tu sitio Datadog. Selecciona tu sitio en la parte derecha de esta página. Sustituye <SITE>
en el ejemplo de configuración anterior por
.
Manual
Si no puedes instalar el Forwarder utilizando la plantilla de CloudFormation proporcionada, puedes instalarlo manualmente siguiendo los pasos que se indican a continuación. No dudes en abrir una incidencia o en crear una solicitud de extracción para hacernos saber si hay algo que podríamos mejorar para que la plantilla funcione.
- Crea una función Lambda Python 3.10 utilizando
aws-dd-forwarder-<VERSION>.zip
de las últimas versiones. - Guarda tu clave de API de Datadog en AWS Secrets Manager, configura la variable de entorno
DD_API_KEY_SECRET_ARN
con el ARN de secretos en la función Lambda y añade el permiso secretsmanager:GetSecretValue
al rol de ejecución Lambda. - Si necesitas reenviar logs desde buckets S3, añade el permiso
s3:GetObject
al rol de ejecución Lambda. - Configura la variable de entorno
DD_ENHANCED_METRICS
como false
en el Forwarder. Esto evita que el Forwarder genere métricas mejoradas por sí mismo, aunque seguirá reenviando métricas personalizadas desde otras funciones Lambda. - Algunas cuentas de AWS están configuradas para que los activadores no creen automáticamente políticas basadas en recursos que permitan a grupos de logs de CloudWatch invocar el Forwarder. Consulta Permisos para logs de CloudWatch para ver qué permisos son necesarios para que el Forwarder sea invocado por eventos de logs de CloudWatch.
- Configura activadores.
- Crea un bucket S3 y configura la variable de entorno
DD_S3_BUCKET_NAME
con el nombre del bucket. También proporciona permisos s3:GetObject
, s3:PutObject
, s3:ListBucket
y s3:DeleteObject
en este bucket al rol de ejecución Lambda. Este bucket se utiliza para almacenar el caché de diferentes etiquetas (tags), a saber, Lambda, S3, función Step y grupo de logs. Además, este bucket se utilizará para almacenar eventos no reenviados en caso de excepciones de reenvío. - Configura la variable de entorno
DD_STORE_FAILED_EVENTS
como true
para permitir que el Forwarder también almacene datos de eventos en el bucket S3. En caso de excepciones al enviar logs, métricas o trazas para consumir, el Forwarder almacenará los datos pertinentes en el bucket S3. En invocaciones personalizadas, es decir, al recibir un evento con la palabra clave retry
asignada a una cadena no vacía (que puede activarse manualmente; consulta más adelante), el Forwarder volverá a intentar enviar los eventos almacenados. Si tiene éxito, borrará lo que se almacena en el bucket.
aws lambda invoke --function-name <function-name> --payload '{"retry":"true"}' out
Actualizar a una nueva versión
- Busca la pila datadog-forwarder (si no le has cambiado el nombre) de CloudFormation. Si has instalado el Forwarder como parte de la pila de la integración AWS en Datadog, asegúrate de actualizar la pila anidada del Forwarder en lugar de la pila raíz.
- Encuentra la función real Lambda del Forwarder en la pestaña “Resources” (Recursos) de la pila de CloudFormation y ve a su página de configuración. Anota el valor de la etiqueta
dd_forwarder_version
, como 3.73.0
, por si tienes problemas con la nueva versión y necesitas revertirla. - Actualiza la pila utilizando la plantilla
https://datadog-cloudformation-template.s3.amazonaws.com/aws/forwarder/latest.yaml
. También puedes sustituir latest
por una versión específica, como 3.73.0.yaml
, si es necesario. Asegúrate de revisar los conjuntos de cambios antes de aplicar la actualización.
Si tienes problemas para actualizar a la última versión, consulta la sección Solucionar problemas.
Actualizar una versión anterior a la v3.107.0 o superior
A partir de la versión, 3.107.0 se ha añadido una nueva característica para permitir que la función Lambda almacene eventos no reenviados en caso de excepciones en el punto de entrada. Si la función se habilita utilizando la variable de entorno DD_STORE_FAILED_EVENTS
, los eventos que fallen se almacenarán en un directorio definido en el mismo bucket S3 utilizado para almacenar el caché de las etiquetas. El mismo bucket puede utilizarse para almacenar logs de varias funciones Lambda en subdirectorios únicos.
Actualizar una versión anterior a la v3.106.0 o superior
A partir de la versión 3.106.0, la función Lambda se ha actualizado para añadir un prefijo a los nombres de archivos de caché almacenados en el bucket S3 configurado en DD_S3_BUCKET_NAME
. Esto permite utilizar el mismo bucket para almacenar archivos de caché de varias funciones.
Además, a partir de esta versión, el Forwarder adjuntará por defecto etiquetas del bucket S3 personalizadas a todos los logs exportados a S3. Por ejemplo, si un servicio está configurado para enviar logs a un bucket S3 de destino, el Forwarder añadirá las etiquetas del bucket a los logs mientras los extrae y los reenvía.
Actualizar una versión anterior a la v3.99.0 o superior
A partir de la versión 3.99.0, la función Lambda se ha actualizado para requerir Python 3.11. Si actualizas una instalación anterior del Forwarder a la versión 3.99.0 o superior, asegúrate de que la función AWS Lambda está configurada para utilizar Python 3.11
Actualizar una versión anterior a la v3.98.0 o superior
A partir de la versión 3.98.0, la función Lambda ha sido actualizada para requerir Python 3.10. Si actualizas una instalación anterior del Forwarder a la versión 3.98.0 o superior, asegúrate de que la función AWS Lambda está configurada para utilizar Python 3.10.
Actualizar una versión anterior a la v3.74.0 o superior
A partir de la versión 3.74.0, la función Lambda ha sido actualizada para requerir Python 3.9. Si actualizas una instalación anterior del Forwarder a la versión 3.74.0 o superior, asegúrate de que la función AWS Lambda está configurada para utilizar Python 3.9.
Actualizar una versión anterior a la v3.49.0 o superior
A partir de la la versión 3.49.0, la función Lambda ha sido actualizada para requerir Python 3.8. Si actualizas una instalación anterior del Forwarder a la versión 3.49.0 o superior, asegúrate de que la función AWS Lambda está configurada para utilizar Python 3.8.
Actualizar una versión anterior a la v3.0.0 o superior
A partir de la versión 3.0.0, la función Lambda del Forwarder se gestiona utilizando CloudFormation. Para actualizar una instalación anterior del Forwarder a la versión 3.0.0 o superior, sigue los pasos que se indican a continuación.
- Instala un nuevo Forwarder siguiendo los pasos de instalación.
- Busca la función Lambda del Forwarder instalada en la pestaña “Resources” (Recursos) de la pila con el
Forwarder
de ID lógico. - Migra manualmente algunos activadores (filtro de suscripción de grupos de logs de CloudWatch y notificación de eventos de buckets S3) del antiguo Forwarder al nuevo.
- Asegúrate de que el nuevo Forwarder funciona como se espera, por ejemplo, que se invoca regularmente sin errores.
- Asegúrate de que los logs de los activadores migrados (fuentes) aparecen en el explorador de logs de Datadog y que su aspecto es correcto.
- Migra todos los activadores al nuevo Forwarder.
- Si has dejado que Datadog gestione los activadores automáticamente, actualiza el ARN de Lambda del Forwarder en la pestaña Log Collection (Recopilación de logs) de la página de integraciones AWS.
- Si has gestionado los activadores manualmente, entonces tienes que migrarlos manualmente (o utilizando un script).
- Asegúrate de que el recuento de invocaciones de la función Lambda del antiguo Forwarder baja a cero.
- Elimina la función Lambda del antiguo Forwarder cuando lo creas conveniente.
- Si tienes instaladas funciones Lambda del antiguo Forwarder en varias cuentas y regiones AWS, repite los pasos anteriores en cada combinación de cuenta y región.
Eliminación
Para eliminar de forma segura el Forwarder y otros recursos de AWS creados por la pila de CloudFormation del Forwarder, sigue los pasos que se indican a continuación.
- Busca la pila de CloudFormation datadog-forwarder (si no le has cambiado el nombre) o encuéntrala utilizando la consola de administración de funciones Lambda del Forwarder, haciendo clic en el enlace del mensaje “This function belongs to an application. Click here to manage it.” (Esta función corresponde a una aplicación. Haz clic aquí para gestionarla) y, a continuación, haz clic en la pestaña “Deployments” (Despliegues), de la página de la aplicación.
- “Elimina” la pila de CloudFormation.
Ajuste de los parámetros del Forwarder
- Busca la pila de CloudFormation datadog-forwarder (si no le has cambiado el nombre).
- Actualiza la pila utilizando la plantilla actual.
- Ajusta los valores de los parámetros.
Datadog recomienda ajustar los parámetros de tu Forwarder a través de CloudFormation, en lugar de editar directamente la función Lambda. Encuentra la descripción de los parámetros en el archivotemplate.yaml
y en la interfaz de usuario de creación de pilas de CloudFormation, cuando inicies la pila. Siéntete libre de enviar una solicitud de extracción para realizar configuraciones adicionales, ajustables a través de la plantilla.
Solucionar problemas
No olvides comprobar si el problema ya se ha solucionado en las últimas versiones.
Gestión de logs
Configura la variable de entorno DD_LOG_LEVEL
como debug
en la función Lambda del Forwarder para habilitar temporalmente la gestión de logs detallada (no olvides eliminarla). La depuración de logs debería poder mostrarte la carga útil de eventos exacta que recibe la función Lambda y la carga útil de datos (logs, métricas o trazas) que se envían a Datadog.
También puedes añadir la gestión de logs o código adicionales para una investigación más profunda. Para ver las instrucciones de creación del código del Forwarder con cambios locales, consulta la sección de colaboración.
Problemas al actualizar el Forwarder
Actualizar manualmente el código .zip
del Forwarder puede generar conflictos con las actualizaciones de CloudFormation en instalaciones del Forwarder donde el código está empaquetado en una capa Lambda (opción de instalación por defecto a partir de la versión 3.33.0
) y generar errores de invocación. En este caso, actualizar la pila a la última versión disponible a través de CloudFormation dos veces seguidas (con InstallAsLayer
configurado primero como false
y luego como true
) debería resolver el problema, ya que eliminará cualquier resto de .zip
e instalará la última capa disponible.
Si aún así no lo consigues, crea un ticket para el servicio de asistencia de Datadog con una copia de los logs de depuración.
Si tus logs contienen un atributo que Datadog interpreta como una marca de tiempo, debes asegurarte de que la marca de tiempo es actual y tiene el formato correcto. Consulta Reasignador de fechas en logs para saber qué atributos se analizan como marcas de tiempo y cómo asegurarte de que la marca de tiempo es válida.
Problemas al crear activadores S3
En caso de que encuentres el siguiente error al crear activadores S3, te recomendamos que consideres seguir la arquitectura de cargabilidad de salida (fan-out) propuesta por AWS en este artículo
An error occurred when creating the trigger: Configuration is ambiguously defined. Cannot have overlapping suffixes in two rules if the prefixes are overlapping for the same event type.
Colaboración
Nos encantan las solicitudes de extracción. Aquí tienes una guía rápida.
Si quieres discutir una función o la corrección de errores antes de la implementación, ponte en contacto con nosotros en el canal #serverless
de la Comunidad Slack Datadog.
Bifurca, clona y crea una rama:
git clone git@github.com:<your-username>/datadog-serverless-functions.git
git checkout -b <my-branch>
Realiza cambios en el código.
Crea utilizando tus cambios locales.
cd aws/logs_monitoring
./tools/build_bundle.sh <SEMANTIC_VERSION> # any unique version is fine
Actualiza tu Forwarder de test con el código modificado y pruébalo:
# Upload in the AWS Lambda console if you don't have AWS CLI
aws lambda update-function-code \
--region <AWS_REGION> \
--function-name <FORWARDER_NAME> \
--zip-file fileb://.forwarder/aws-dd-forwarder-<SEMANTIC_VERSION>.zip
Ejecuta tests unitarios.
python -m unittest discover . # for code in Python
./trace_forwarder/scripts/run_tests.sh # for code in Go
Ejecuta los tests de integraciones.
./tools/integration_tests/integration_tests.sh
# to update the snapshots if changes are expected
./tools/integration_tests/integration_tests.sh --update
Si los cambios afectan a la plantilla de CloudFormation, ejecuta el test de instalación con tu propia cuenta de AWS.
./tools/installation_test.sh
Envíalo a tu bifurcación y envía una solicitud de extracción.
Avanzado
Envío de logs a varios destinos
Si necesitas enviar logs a varias organizaciones Datadog u otros destinos, configura el parámetro AdditionalTargetLambdaArns
de CloudFormation para que el Datadog Forwarder copie los logs entrantes en las funciones Lambda especificadas. Estas funciones Lambda adicionales serán llamadas de forma asíncrona, exactamente con el mismo event
que recibe el Datadog Forwarder.
Compatibilidad de AWS PrivateLink
Puedes ejecutar el Forwarder en una subred privada de VPC y enviar datos a Datadog a través de AWS PrivateLink. AWS PrivateLink sólo puede configurarse con sitios Datadog alojados en AWS (por ejemplo: datadoghq.com
, no datadoghq.eu
).
- Sigue estas instrucciones para añadir los endpoints
api
, http-logs.intake
y trace.agent
de Datadog a tu VPC. - Sigue las instrucciones para añadir endpoints de AWS Secrets Manager y S3 a tu VPC.
- Al instalar el Forwarder con la plantilla de CloudFormation:
- Configura
UseVPC
como true
. - Configura
VPCSecurityGroupIds
y VPCSubnetIds
en función de la configuración de tu VPC. - Configura
DdFetchLambdaTags
como false
, ya que la API de etiquetado de AWS Resource Groups no admite PrivateLink.
DdUsePrivateLink está obsoleto
La opción DdUsePrivateLink
está obsoleta desde la v3.41.0. Esta opción se utilizaba anteriormente para indicar al Forwarder que debía utilizar un conjunto especial de endpoints de PrivateLink para recibir datos: pvtlink.api.
, api-pvtlink.logs.
y trace-pvtlink.agent.
. A partir de la versión 3.41.0, el Forwarder puede enviar datos a Datadog, a través de PrivateLink, utilizando los nombres comunes del DNS de los endpoints de entrada: api.
, http-intake.logs.
y trace.agent.
. Por lo tanto, la opción DdUsePrivateLink
ya no es necesaria.
Si tienes una implementación antigua del Forwarder con DdUsePrivateLink
configurado como true
, puede que encuentres discordancias entre los endpoints de PrivateLink configurados y aquellos documentados en Datadog, lo cual es de esperar. Aunque los endpoints de PrivateLink más antiguos se hayan eliminado de ese documento, siguen funcionando. No se requiere ningún cambio al actualizar el Forwarder. Esto significa que puedes mantener habilitado DdUsePrivateLink
y seguir utilizando los endpoints más antiguos.
Pero si te interesa cambiar a los nuevos endpoints, debes seguir las instrucciones actualizadas anteriores para:
- Configurar los nuevos endpoints en
api.
, http-intake.logs.
y trace.agent.
. - Configurar
DdUseVPC
como true
. - Configurar
DdUsePrivateLink
como false
.
Compatibilidad de AWS con VPC y proxy
Si necesitas desplegar el Forwarder en una VPC sin acceso público directo a Internet y no puedes utilizar AWS PrivateLink para conectarte a Datadog (por ejemplo, si tu organización está alojada en el sitio Datadog EU: datadoghq.eu
), puedes enviar datos a través de un proxy.
- A menos que el Forwarder esté desplegado en una subred pública, sigue las instrucciones para añadir endpoints para Secrets Manager y S3 a la VPC, de modo que el Forwarder pueda acceder a esos servicios.
- Actualiza tu proxy con las siguientes configuraciones (HAproxy o NGINX). Si estás utilizando otro proxy o proxy web, autoriza el dominio Datadog, por ejemplo:
.
. - Al instalar el Forwarder con la plantilla de CloudFormation, configura
DdUseVPC
, VPCSecurityGroupIds
y VPCSubnetIds
. - Asegúrate de que la opción
DdFetchLambdaTags
está deshabilitada, ya que la VPC de AWS aún no ofrece un endpoint para la API de etiquetado de AWS Resource Groups. - Si utilizas HAproxy o NGINX:
- Configura
DdApiUrl
como http://<proxy_host>:3834
o https://<proxy_host>:3834
. - Configura
DdTraceIntakeUrl
como http://<proxy_host>:3835
o https://<proxy_host>:3835
. - Configura
DdUrl
como <proxy_host>
y DdPort
como 3837
.
En cambio, si utilizas el proxy web:
- Configura
DdHttpproxyURL
en el endpoint de tu proxy, por ejemplo: http://<proxy_host>:<port>
o, si tu proxy tiene nombre de usuario y contraseña, http://<username>:<password>@<proxy_host>:<port>
.
- Configura
DdNoSsl
como true
si te conectas al proxy utilizando http
. - Configura
DdSkipSslValidation
como true
si te conectas al proxy utilizando https
con un certificado firmado automáticamente.
Firma de códigos
El Datadog Forwarder está firmado por Datadog. Para verificar la integridad del Forwarder, utiliza el método de instalación manual. Crea una configuración para la firma de códigos que incluya el ARN del perfil de firma de Datadog (arn:aws:signer:us-east-1:464622532012:/signing-profiles/DatadogLambdaSigningProfile/9vMI9ZAGLc
) y asócialo a la función Lambda del Forwarder antes de cargar el archivo ZIP del Forwarder.
Obligatorio
DdApiKey
- Tu clave de API de Datadog, que puedes encontrar en Organization Settings > API Keys (Parámetros de organización > Claves de API). La clave de API se almacena en AWS Secrets Manager. Si ya tienes una clave de API de Datadog almacenada en AWS Secrets Manager, utiliza
DdApiKeySecretArn
en su lugar. DdApiKeySecretArn
- El ARN del secreto que almacena la clave de API de Datadog, si ya la tienes almacenada en AWS Secrets Manager. Debes almacenar el secreto como texto sin formato, en lugar de como un par clave-valor.
DdSite
- El sitio Datadog al que se enviarán tus métricas y logs. Tu sitio Datadog es
.
Función Lambda (opcional)
FunctionName
- El nombre de la función Lambda del Forwarder de Datadog. No lo cambies al actualizar una pila de CloudFormation existente, de lo contrario se sustituirá la función actual del Forwarder y se perderán todos los activadores.
MemorySize
- Tamaño de la memoria para la función Lambda del Forwarder de Datadog.
Timeout
- Tiempo de espera para la función Lambda del Forwarder de Datadog.
ReservedConcurrency
- Concurrencia reservada para la función Lambda del Forwarder de Datadog. Si está vacío, utiliza la concurrencia no reservada de la cuenta.
Datadog recomienda utilizar al menos 10 de concurrencia reservada, pero este valor por defecto es 0, ya que puede que necesites aumentar sus límites. Si utilizas concurrencia de cuenta no reservada, puedes limitar otras funciones Lambda en tu entorno.
LogRetentionInDays
- Conservación de logs CloudWatch generada por la función Lambda del Forwarder de Datadog.
Reenvío de logs (opcional)
DdTags
- Añade etiquetas personalizadas a logs reenviados, en cadenas delimitadas por comas, sin comas finales, como
env:prod,stack:classic
. DdMultilineLogRegexPattern
- Utiliza la expresión regular proporcionada para detectar una nueva línea de logs para logs de múltiples líneas de S3, como
\d{2}\/\d{2}\/\d{4}
para los logs de múltiples líneas que comienzan con el patrón “11/10/2014”. DdUseTcp
- Por defecto, el Forwarder envía logs utilizando HTTPS a través del puerto 443. Para enviar logs a través de una
conexión TCP cifrada SSL, configura este parámetro como true (verdadero).
DdNoSsl
- Deshabilita SSL al reenviar logs y configúralo como true (verdadero) al reenviar logs a través de un proxy.
DdUrl
- La URL del endpoint al cual reenviar los logs, útil para reenviar logs a través de un proxy.
DdPort
- El puerto del endpoint al cual reenviar los logs, útil para reenviar logs a través de un proxy.
DdSkipSslValidation
- Envía logs a través de HTTPS, sin validar el certificado proporcionado por el endpoint. Se seguirá cifrando el tráfico entre el Forwarder y el endpoint de entrada de logs, pero no se verificará si el certificado SSL de destino es válido.
DdUseCompression
- Configúralo como false (falso) para deshabilitar la compresión de logs. Sólo es válido cuando se envían logs a través de HTTP.
DdCompressionLevel
- Ajusta el nivel de compresión de 0 (sin compresión) a 9 (mejor compresión). El nivel de compresión por defecto es 6. Si aumentas el nivel de compresión, es posible que veas algún beneficio en cuanto a la disminución del tráfico de red saliente, a expensas de un aumento en la duración de la ejecución del Forwarder.
DdForwardLog
- Configúralo como false (falso) para deshabilitar el reenvío de logs, mientras se siguen reenviando otros datos de observabilidad, como métricas y trazas de funciones Lambda.
DdFetchLambdaTags
- Permite que el Forwarder recupere etiquetas de Lambda mediante llamadas a la API de GetResources y las aplique a logs, métricas y trazas. Si se configura como true (verdadero), el permiso
tag:GetResources
se añadirá automáticamente al rol IAM de ejecución Lambda. DdFetchLogGroupTags
- Permite que el Forwarder recupere etiquetas de grupos de logs mediante ListTagsLogGroup y las aplique a logs, métricas y trazas. Si se configura como true (verdadero), el permiso
logs:ListTagsLogGroup
se añadirá automáticamente al rol IAM de ejecución Lambda. DdFetchStepFunctionsTags
- Permite que Forwarder recupere tags de funciones Step mediante llamadas a la API GetResources y las aplique a logs y trazas (si está habilitado el rastreo de funciones Step). Si se configura como true (verdadero), el permiso
tag:GetResources
se añadirá automáticamente al rol IAM de ejecución de Lambda.
Limpieza de logs (opcional)
redactIp
- Sustituye el texto que coincide con
\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}
por xxx.xxx.xxx.xxx
. redactEmail
- Sustituye el texto que coincide con
[a-zA-Z0-9_.+-]+@[a-zA-Z0-9-]+\.[a-zA-Z0-9-.]+
por xxxxx@xxxxx.com
. DdScrubbingRule
- Sustituye el texto que coincide con la expresión regular proporcionada por
xxxxx
(por defecto) o por DdScrubbingRuleReplacement
(si se proporciona). La regla de limpieza de logs se aplica a todo el log con formato JSON, incluidos los metadatos añadidos automáticamente por la función Lambda. Cada instancia de coincidencia de patrón se sustituye hasta que no se encuentren más coincidencias en ningún log. El uso de expresiones regulares ineficaces, como .*
, puede ralentizar la función Lambda. DdScrubbingRuleReplacement
- Sustituye el texto que coincide con DdScrubbingRule por el texto proporcionado.
Filtrado de logs (opcional)
ExcludeAtMatch
- No envíes logs que coincidan con la expresión regular proporcionada. Si un log coincide tanto con
ExcludeAtMatch
como con IncludeAtMatch
, se excluye. IncludeAtMatch
- Sólo envía logs que coinciden con la expresión regular proporcionada, no excluida por
ExcludeAtMatch
.
Las reglas de filtrado se aplican a todo el log con formato JSON, incluidos los metadatos que el Forwarder. añade automáticamente Sin embargo, las transformaciones aplicadas por pipelines de logs, que se producen después del envío de logs a Datadog, no pueden utilizarse para filtrar logs en el Forwarder. El uso de una expresión regular ineficaz, como .*
, puede ralentizar el Forwarder.
Los siguientes son algunos ejemplos de expresiones regulares que pueden utilizarse para el filtrado de logs:
- Incluye (o excluye) logs de la plataforma Lambda:
"(START|END) RequestId:\s
. El precedente "
es necesario para que coincida con el inicio del mensaje del log, que está en un blob JSON ({"message": "START RequestId...."}
). Datadog recomienda conservar los logs de REPORT
, ya que se utilizan para rellenar la lista de invocaciones en las vistas de funciones serverless. - Incluye sólo mensajes de error de CloudTrail:
errorMessage
. - Incluye sólo logs que contienen un código de error HTTP 4XX o 5XX:
\b[4|5][0-9][0-9]\b
. - Incluye sólo logs de CloudWatch cuando el campo
message
contiene un par clave/valor JSON específico: \"awsRegion\":\"us-east-1\"
.- El campo de mensaje de un evento de log de CloudWatch se codifica como una cadena. Por ejemplo,
{"awsRegion": "us-east-1"}
se codifica como {\"awsRegion\":\"us-east-1\"}
. Por lo tanto, el patrón que proporciones debe incluir \
caracteres de escape, como en el siguiente ejemplo: \"awsRegion\":\"us-east-1\"
.
Para probar diferentes patrones en tus logs, activa la limpieza de logs.
Avanzado (opcional)
SourceZipUrl
- No lo cambies a menos que sepas lo que estás haciendo. Sustituye la localización predeterminada del código fuente de la función.
PermissionsBoundaryArn
- ARN para la política de límites de permisos.
DdUsePrivateLink
(OBSOLETO)- Configurado como true (verdadero) para permitir el envío de logs y métricas a través de AWS PrivateLink. Consulta Conectarse a Datadog a través de AWS PrivateLink.
DdHttpproxyURL
- Configura las variables de entorno estándar del proxy web HTTP_PROXY y HTTPS_PROXY. Estos son los endpoints de URL que tu servidor proxy expone. No lo utilices en combinación con AWS Private Link. Asegúrate también de configurar
DdSkipSslValidation
como true (verdadero). DdNoproxy
- Configura la variable de entorno estándar del proxy web
NO_proxy
. Se trata de una lista separada por comas de los nombres de dominio que deben excluirse del proxy web. VPCSecurityGroupIds
- Lista separada por comas de los ID de grupo de seguridad de VPC. Se utiliza cuando AWS PrivateLink está habilitado.
VPCSubnetIds
- Lista separada por comas de los ID de subred de VPC. Se utiliza cuando AWS PrivateLink está habilitado.
AdditionalTargetLambdaArns
- Lista separada por comas de los ARN de Lambda que serán llamados de forma asíncrona con el mismo
event
que recibe el Datadog Forwarder. InstallAsLayer
- Determinar si se utiliza el flujo de instalación basado en capas o no. Configúralo como false (falso) para utilizar el flujo de instalación heredado, que instala una segunda función que copia el código del Forwarder desde GitHub a un bucket S3. Por defecto es true (verdadero).
LayerARN
- ARN de la capa que contiene el código del Forwarder. Si está vacío, el script utilizará la versión de la capa con la que se ha publicado el Forwarder. Por defecto está vacío.
Permisos
Para desplegar la pila de CloudFormation con las opciones predeterminadas, necesitas tener los permisos que se indican a continuación. Estos sirven para guardar tu clave de API Datadog como secreto, crear un bucket S3 para almacenar el código del Forwarder (archivo ZIP) y crear funciones Lambda (incluidos los roles de ejecución y los grupos de logs).
Sentencias IAM:
{
"Effect": "Allow",
"Action": [
"cloudformation:*",
"secretsmanager:CreateSecret",
"secretsmanager:TagResource",
"s3:CreateBucket",
"s3:GetObject",
"s3:PutEncryptionConfiguration",
"s3:PutBucketPublicAccessBlock",
"iam:CreateRole",
"iam:GetRole",
"iam:PassRole",
"iam:PutRolePolicy",
"iam:AttachRolePolicy",
"lambda:CreateFunction",
"lambda:GetFunction",
"lambda:GetFunctionConfiguration",
"lambda:GetLayerVersion",
"lambda:InvokeFunction",
"lambda:PutFunctionConcurrency",
"lambda:AddPermission",
"lambda:TagResource",
"logs:CreateLogGroup",
"logs:DescribeLogGroups",
"logs:PutRetentionPolicy"
],
"Resource": "*"
}
Las siguientes capacidades son necesarias para crear una pila de CloudFormation:
- CAPABILITY_AUTO_EXPAND, ya que la plantilla del Forwarder utiliza macros como la macro AWS SAM.
- CAPABILTY_IAM/NAMED_IAM, ya que el Forwarder crea roles IAM.
La pila de CloudFormation crea los siguientes roles IAM:
- Rol de Forwarder: rol de ejecución para que la función Lambda del Forwarder lea logs de S3, recupere tu clave de API de Datadog de Secrets Manager y escriba sus propios logs.
Sentencias IAM:
[
{
"Effect": "Allow",
"Action": [
"logs:CreateLogGroup",
"logs:CreateLogStream",
"logs:PutLogEvents"
],
"Resource": "*"
},
{
"Action": ["s3:GetObject"],
"Resource": "arn:aws:s3:::*",
"Effect": "Allow"
},
{
"Action": ["secretsmanager:GetSecretValue"],
"Resource": "<ARN of DdApiKeySecret>",
"Effect": "Allow"
}
]
ForwarderZipCopierRole
: rol de ejecución para la función Lambda ForwarderZipCopier para descargar el archivo ZIP de despliegue del Forwarder a un bucket S3.
Sentencias IAM:
[
{
"Effect": "Allow",
"Action": [
"logs:CreateLogGroup",
"logs:CreateLogStream",
"logs:PutLogEvents"
],
"Resource": "*"
},
{
"Action": ["s3:PutObject", "s3:DeleteObject"],
"Resource": "<S3Bucket to Store the Forwarder Zip>",
"Effect": "Allow"
},
{
"Action": ["s3:ListBucket"],
"Resource": "<S3Bucket to Store the Forwarder Zip>",
"Effect": "Allow"
}
]
Leer más
Más enlaces, artículos y documentación útiles: