Si todavía utilizas tus funciones de Lambda de Go con el tiempo de ejecución go1.x y no puedes migrar al tiempo de ejecución provided.al2, debes instrumentar mediante el Datadog Forwarder. De lo contrario, sigue las instrucciones de esta guía para instrumentar mediante la Extensión Lambda de Datadog.
Si despliegas tus funciones de Lambda en una VPC sin acceso a la Internet pública, puedes enviar datos con AWS PrivateLink para el sitio de Datadog datadoghq.com, o bien mediante un proxy, en caso de que uses cualquier otro sitio.

Instalación

El Complemento serverless de Datadog configura automáticamente tus funciones para enviar métricas, trazas (traces) y logs a Datadog mediante la Extensión Lambda de Datadog.

Para instalar y configurar el Complemento serverless de Datadog, sigue estos pasos:

Instala el Complemento serverless de Datadog:

serverless plugin install --name serverless-plugin-datadog

Actualiza tu archivo serverless.yml:

custom:
  datadog:
    site: <DATADOG_SITE>
    apiKeySecretArn: <DATADOG_API_KEY_SECRET_ARN>

Para rellenar los parámetros:

  • Reemplaza <DATADOG_SITE> por el sitio de Datadog al que quieres enviar la telemetría.
  • Reemplaza <DATADOG_API_KEY_SECRET_ARN> por el ARN del secreto de AWS siempre que hayas almacenado la clave de la API de Datadog de forma segura. La clave debe almacenarse en una cadena de texto sin formato (no en un blob JSON). El permiso secretsmanager:GetSecretValue es obligatorio. Para agilizar el testeo, puedes usar apiKey y configurar la clave de la API de Datadog en texto sin formato.

Para obtener más información y parámetros adicionales, consulta la documentación acerca del complemento.

  1. Instalar la Extensión Lambda de Datadog

    COPY --from=public.ecr.aws/datadog/lambda-extension:<TAG> /opt/. /opt/
    

    Reemplaza <TAG> por un número de versión específico (por ejemplo, 66) o por latest. Alpine también es compatible con números de versión específicos (como 66-alpine) o con latest-alpine. Puedes ver una lista completa de posibles etiquetas (tags) en el repositorio de Amazon ECR.

  2. Configurar las variables de entorno obligatorias

    • Configura DD_SITE como (asegúrate de haber seleccionado el sitio [SITE] correcto del lado derecho).
    • Configura DD_API_KEY_SECRET_ARN con el ARN del secreto de AWS siempre que hayas almacenado la clave de la API de Datadog de forma segura. La clave debe almacenarse en una cadena de texto sin formato (no en un blob JSON). El permiso secretsmanager:GetSecretValue es obligatorio. Para agilizar el testeo, puedes usar DD_API_KEY y configurar la clave de la API de Datadog en texto sin formato.
    • De manera opcional, puedes configurar DD_UNIVERSAL_INSTRUMENTATION: true para aprovechar las ventajas de las configuraciones avanzadas, como capturar las cargas útiles de solicitud y respuesta de Lambda e inferir tramos (spans) de APM de los eventos de Lambda entrantes.

Instalar la Extensión Lambda de Datadog

Añade la Lambda Layer de la Extensión Lambda de Datadog a tus funciones de Lambda, con el formato del ARN definido según tu región y arquitectura de AWS:

# Usa este formato para Lambda de x86 con un despliegue en regiones comerciales de AWS
arn:aws:lambda:<AWS_REGION>:464622532012:layer:Datadog-Extension:66

# Usa este formato para Lambda de arm64 con un despliegue en regiones comerciales de AWS
arn:aws:lambda:<AWS_REGION>:464622532012:layer:Datadog-Extension-ARM:66

# Usa este formato para Lambda de x86 con un despliegue en regiones GovCloud de AWS
arn:aws-us-gov:lambda:<AWS_REGION>:002406178527:layer:Datadog-Extension:66

# Usa este formato para Lambda de arm64 con un despliegue en regiones GovCloud de AWS
arn:aws-us-gov:lambda:<AWS_REGION>:002406178527:layer:Datadog-Extension-ARM:66

Reemplaza <AWS_REGION> por una región de AWS válida, como us-east-1.

Configurar las variables de entorno obligatorias

  • Configura DD_SITE como (asegúrate de haber seleccionado el sitio [SITE] correcto del lado derecho).
  • Configura DD_API_KEY_SECRET_ARN con el ARN del secreto de AWS siempre que hayas almacenado la clave de la API de Datadog de forma segura. La clave debe almacenarse en una cadena de texto sin formato (no en un blob JSON). El permiso secretsmanager:GetSecretValue es obligatorio. Para agilizar el testeo, puedes usar DD_API_KEY y configurar la clave de la API de Datadog en texto sin formato.

Instalar la biblioteca Lambda de Datadog

go get github.com/DataDog/datadog-lambda-go

Actualizar el código de la función de Lambda

package main

import (
    "context"
    "net/http"
    "time"

    ddlambda "github.com/DataDog/datadog-lambda-go"
    "github.com/aws/aws-lambda-go/events"
    "github.com/aws/aws-lambda-go/lambda"
    httptrace "gopkg.in/DataDog/dd-trace-go.v1/contrib/net/http"
    "gopkg.in/DataDog/dd-trace-go.v1/ddtrace/tracer"
)

func main() {
    // Envuelve tu controlador de Lambda
    lambda.Start(ddlambda.WrapFunction(myHandler, nil))
}

func myHandler(ctx context.Context, _ events.APIGatewayProxyRequest) (string, error) {
    // Rastrea una solicitud HTTP
    req, _ := http.NewRequestWithContext(ctx, "GET", "https://www.datadoghq.com", nil)
    client := http.Client{}
    client = *httptrace.WrapClient(&client)
    client.Do(req)

    // Envía una métrica personalizada
    ddlambda.Metric(
        "coffee_house.order_value",      // Nombre de la métrica
        12.45,                           // Valor de la métrica
        "product:latte", "order:online", // Etiquetas asociadas
    )

    // Crea un tramo personalizado
    s, _ := tracer.StartSpanFromContext(ctx, "child.span")
    time.Sleep(100 * time.Millisecond)
    s.Finish()
    return "ok", nil
}

}

¿Qué toca hacer ahora?

  • ¡Excelente! Ya puedes consultar métricas, logs y trazas en la página de inicio Serverless.
  • Activa la monitorización de amenazas para recibir alertas sobre los atacantes que tienen tu servicio como objetivo.
  • Consulta la guía de solución de problemas si tienes dificultades para recopilar la telemetría
  • Consulta las configuraciones avanzadas para saber cómo hacer lo siguiente:
    • conectar la telemetría mediante etiquetas;
    • recopilar telemetría para Amazon API Gateway, SQS, etc.;
    • capturar las cargas útiles de solicitud y respuesta de Lambda;
    • vincular los errores de tus funciones de Lambda con tu código fuente;
    • filtrar o borrar información confidencial de logs o trazas.

Referencias adicionales