Instrumentación de aplicaciones serverless de Go mediante el Datadog Forwarder
Configuración necesaria
Si todavía no lo hiciste:
Una vez que tengas instalada la integración de AWS y el Datadog Forwarder, sigue estos pasos para instrumentar tu aplicación de modo que envíe métricas, logs y trazas a Datadog.
Configuración
Instalar
Ejecuta el siguiente comando para instalar la biblioteca Lambda de Datadog de forma local:
go get github.com/DataDog/datadog-lambda-go
Instrumentar
Sigue estos pasos para instrumentar la función:
Define la variable de entorno DD_FLUSH_TO_LOG
y DD_TRACE_ENABLED
como true
.
Importa los paquetes necesarios en el archivo mediante la declaración del controlador de tu función de Lambda.
package main
import (
"github.com/aws/aws-lambda-go/lambda"
"github.com/DataDog/datadog-lambda-go"
"gopkg.in/DataDog/dd-trace-go.v1/ddtrace/tracer"
httptrace "gopkg.in/DataDog/dd-trace-go.v1/contrib/net/http"
)
Envuelve el controlador de tu función de Lambda con la envoltura de la biblioteca Lambda de Datadog.
func main() {
// Wrap your lambda handler like this
lambda.Start(ddlambda.WrapHandler(myHandler, nil))
/* OR with manual configuration options
lambda.Start(ddlambda.WrapHandler(myHandler, &ddlambda.Config{
BatchInterval: time.Second * 15
APIKey: "my-api-key",
}))
*/
}
Utiliza las bibliotecas incluidas para crear tramos (spans) adicionales, conectar logs y trazas y trasladar el contexto de rastreo a otros servicios.
func myHandler(ctx context.Context, event MyEvent) (string, error) {
// Trace an HTTP request
req, _ := http.NewRequestWithContext(ctx, "GET", "https://www.datadoghq.com", nil)
client := http.Client{}
client = *httptrace.WrapClient(&client)
client.Do(req)
// Connect your Lambda logs and traces
currentSpan, _ := tracer.SpanFromContext(ctx)
log.Printf("my log message %v", currentSpan)
// Create a custom span
s, _ := tracer.StartSpanFromContext(ctx, "child.span")
time.Sleep(100 * time.Millisecond)
s.Finish()
}
Subscribir
Suscribe la función de Lambda del Datadog Forwarder a cada uno de los grupos de logs de tu función para enviar métricas, trazas y logs a Datadog.
- Instala el Datadog Forwarder si todavía no lo hiciste.
- Suscribe el Datadog Forwarder a los grupos de logs de tu función.
Etiquetar
Aunque es opcional, Datadog recomienda etiquetar las aplicaciones serverless con las etiquetas (tags) env
, service
y version
para el etiquetado de servicios unificado.
Explorar
Una vez que tienes tu función configurada según los pasos anteriores, puedes consultar tus métricas, logs y trazas en la página de inicio de Serverless.
Monitorizar la lógica de negocio personalizada
Si quieres enviar una métrica personalizada, consulta el siguiente código de ejemplo:
package main
import (
"github.com/aws/aws-lambda-go/lambda"
"github.com/DataDog/datadog-lambda-go"
)
func main() {
// Envuelve tu función de controlador
lambda.Start(ddlambda.WrapHandler(myHandler, nil))
}
func myHandler(ctx context.Context, event MyEvent) (string, error) {
// 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
)
// Envía una métrica personalizada con marca de tiempo
ddlambda.MetricWithTimestamp(
"coffee_house.order_value", // Nombre de la métrica
12.45, // Valor de la métrica
time.Now(), // Marca de tiempo, debe estar dentro de los últimos 20 minutos
"product:latte", "order:online" // Etiquetas asociadas
)
req, err := http.NewRequest("GET", "http://example.com/status")
// Añade los encabezados de rastreo distribuido de Datadog
ddlambda.AddTraceHeaders(ctx, req)
client := http.Client{}
client.Do(req)
}
Obtén más información sobre el envío de métricas personalizadas.
Referencias adicionales
Más enlaces, artículos y documentación útiles: