Instrumentación de aplicaciones serverless de Go
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.
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.
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.
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
Más enlaces, artículos y documentación útiles: