Instrumentación de las Cloud Run Functions de primera generación

Información general

Esta page (página) explica cómo recopilar trazas, métricas de traces (trazas), métricas de tiempo de ejecución y métricas personalizadas de tus funciones de Cloud Run (primera generación), anteriormente denominadas Cloud Functions.

Migración a funciones de Cloud Run de la segunda generación
Datadog recomienda utilizar las funciones de Cloud Runde segunda generación, que ofrecen un rendimiento mejorado, un mejor escalado y una mejor monitorización con Datadog.

Google ha integrado funcones de Cloud Run en la interfaz de usuario de Cloud Run. A partir de agosto de 2025, solo será posible crear funciones de la primera generación con Google Cloud CLI, la API o Terraform. Datadog recomienda actualizar tu función de Cloud Run para obtener más características y compatibilidad con Datadog.
¿Has configurado tu integración de Google Cloud? Datadog recomienda configurar la integración, que recopila métricas y logs de servicios de Google Cloud, antes de proceder a la instrumentación. Recuerda añadir el rol de visualizador de activos de la nube a tu cuenta de servicios y habilitar la API del inventario de activos de la nube en Google Cloud.

Configuración

  1. Configura la integración de Google Cloud.
  2. Habilita la recopilación de logs con el Método Dataflow para recopilar tus logs de Cloud Function.
  3. Configura el rastreo, las métricas de tiempo de ejecución y las métricas personalizadas para el tiempo de ejecución de tu función.
  1. Instalar dependencias. Ejecuta los siguientes comandos:

    npm install @datadog/serverless-compat
    npm install dd-trace
    

    Datadog recomienda anclar las versiones de paquete y actualizar periódicamente a las últimas versiones de @datadog/serverless-compat y de dd-trace para asegurarte de tener acceso a las mejoras y correcciones de errores.

    Para obtener más información, consulta Rastreo de aplicaciones Node.js.

  2. Inicia la capa de compatibilidad serverless de Datadog e inicializa el rastreador de Node.js. Añade las siguientes líneas al archivo de punto de entrada de tu aplicación principal (por ejemplo, app.js):

    require('@datadog/serverless-compat').start();
    
    // This line must come before importing any instrumented module.
    const tracer = require('dd-trace').init()
    
  3. (Opcional) Habilita las métricas del tiempo de ejecución. Consulta Métricas del tiempo de ejecución de Node.js.

  4. (Opcional) Habilita métricas personalizadas. Consulta Envío de métricas: DogStatsD.

  1. Instalar dependencias. Ejecuta los siguientes comandos:

    pip install datadog-serverless-compat
    pip install ddtrace
    

    Datadog recomienda utilizar las últimas versiones de datadog-serverless-compat y de ddtrace para asegurarte de tener acceso a las mejoras y correcciones de errores.

    Para obtener más información, consulta Rastreo de aplicaciones de Python.

  2. Inicializa el rastreador de Datadog Python y la capa de compatibilidad serverless. Añade las siguientes líneas al archivo de punto de entrada de tu aplicación principal:

    from datadog_serverless_compat import start
    from ddtrace import tracer, patch_all
    
    start()
    patch_all()
    
  3. (Opcional) Habilita las métricas en tiempo de ejecución. Consulta Métricas en tiempo de ejecución de Python.

  4. (Opcional) Habilita métricas personalizadas. Consulta Envío de métricas: DogStatsD.

  1. Instala dependencias. Descarga el rastreador de Java Datadog y la capa de compatibilidad serverless:

    Descarga dd-java-agent.jar y dd-serverless-compat-java-agent.jar que contienen los últimos archivos de clase del rastreador, a una carpeta que sea accesible por tu usuario de Datadog:

    wget -O /path/to/dd-java-agent.jar 'https://dtdg.co/latest-java-tracer'
    wget -O /path/to/dd-serverless-compat-java-agent.jar 'https://dtdg.co/latest-serverless-compat-java-agent'
    

    Para conocer formas alternativas de descargar el agente, consulta la documentación del Datadog Java Agent.

    Datadog recomienda utilizar las últimas versiones tanto de datadog-serverless-compat como de dd-java-agent para asegurarte de tener acceso a las mejoras y correcciones de errores.

  2. Inicializa el rastreador de Java Datadog y la capa de compatibilidad serverless. Añade JAVA_TOOL_OPTIONS a tu variable de entorno en tiempo de ejecución:

    Implementa e instrumenta en forma automática el rastreador de Java configurando la variable de entorno del tiempo de ejecución para instrumentar tu función de la nube de Java con el rastreador de Datadog Java y la capa de compatibilidad serverless.

    NombreValor
    JAVA_TOOL_OPTIONS-javaagent:/path/to/dd-serverless-compat-java-agent.jar -javaagent:/path/to/dd-java-agent.jar
  3. (Opcional) Habilita métricas de tiempo de ejecución. Consulta Métricas en tiempo de ejecución de Java.

  4. (Opcional) Habilita métricas personalizadas. Consulta Envío de métricas: DogStatsD.

  1. Instala dependencias. Ejecuta los siguientes comandos:

    go get github.com/DataDog/datadog-serverless-compat-go/datadogserverlesscompat
    go get gopkg.in/DataDog/dd-trace-go.v1/ddtrace/tracer
    

    Datadog recomienda anclar las versiones de los paquetes y actualizar periódicamente a las últimas versiones de datadog-serverless-compat-go/datadogserverlesscompat y dd-trace (traza)-go.v1/ddtrace/trace (traza) para asegurarte de tener acceso a las mejoras y correcciones de errores.

    Para obtener más información, consulta Rastreo de aplicaciones de Go y Capa de compatibilidad serverless de Datadog para Go.

  2. Inicia la capa de compatibilidad serverless de Datadog e inicializa el rastreador de Go. Añade las siguientes líneas al archivo de punto de entrada de tu aplicación principal (por ejemplo, main.go):

       import (
           "github.com/DataDog/datadog-go/statsd"
           "github.com/DataDog/datadog-serverless-compat-go/datadogserverlesscompat"
           "gopkg.in/DataDog/dd-trace-go.v1/ddtrace/tracer"
       )
    
       func init() {
          datadogserverlesscompat.Start()
          tracer.Start(tracer.WithAgentAddr("127.0.0.1:8126"))
          dogstatsdClient, _ = statsd.New("127.0.0.1:8125")
          functions.HTTP("helloHTTP", helloHTTP)
       }
    
  3. (Opcional) Habilita métricas en tiempo de ejecución. Consulta Métricas en tiempo de ejecución de Go.

  4. (Opcional) Habilita métricas personalizadas. Consulta Envío de métricas: DogStatsD.

  1. Despliega tu función. Utiliza gcloud o Google Console para desplegar tu función de Cloud Run de primera generación:

    Sigue las instrucciones de la Despliega una función de Cloud Run (primera generación) para utilizar gcloud function deploy <FUNCTION_NAME> --no-gen2 para desplegar una función de Cloud Run de primera generación.

    Utiliza la marca de --source para apuntar al directorio de tu código de la función con dd-java-agent.jar y dd-serverless-compat-java-agent.jar en el nivel superior.

    Para obtener más información, consulta la documentación despliegue de funciones de gcloud de Google Cloud para obtener más marcas para el comando de gcloud.

  2. Configura la entrada de Datadog. Añade las siguientes variables de entorno a la configuración de la aplicación de tus funciones:

    NombreValor
    DD_API_KEYTu clave de API de Datadog.
    DD_SITETu sitio Datadog. Por ejemplo, .
  3. Configura el etiquetado de servicios unificados. Puedes recopilar métricas de tu Cloud Run Function instalando la integración de Google Cloud. Para correlacionar estas métricas con tus traces (trazas), primero configura las tags (etiquetas) env, service y version en tu recurso en Google Cloud. A continuación, configura las siguientes variables de entorno. Puedes añadir tags (etiquetas) personalizadas como DD_TAGS.

    NombreValor
    DD_ENVCómo deseas etiquetar tu variable de entorno para Etiquetado de servicios unificados. Por ejemplo, prod.
    DD_SERVICECómo deseas etiquetar tu servicio para Etiquetado de servicios unificados.
    DD_VERSIONCómo deseas etiquetar tu versión para Etiquetado de Servicios Unificados.
    DD_TAGSTus tags (etiquetas) personalizadas separadas por comas. Por ejemplo, key1:value1,key2:value2.
    DD_SITESitio de Datadog - Configura esta tag (etiqueta) si estás en un sitio diferente. El valor Predeterminado es US1 datadoghq.com
  4. Añade etiqueta de servicio en el panel de información. Etiqueta tu entidad GCP con la etiqueta service para correlacionar tus trazas con tu servicio:

    Añade el mismo valor de DD_SERVICE a una etiqueta service en tu función de nube, dentro del panel de información de tu función.

    NombreValor
    serviceEl nombre de tu servicio que coincida con la variable de entorno DD_SERVICE.

    Para obtener más información sobre cómo añadir etiquetas, consulta la documentación Configura etiquetas para servicios de Google Cloud.

Ejemplos de funciones

Los siguientes ejemplos contienen una función de ejemplo con el rastreo y las métricas configuradas.

// Example of a simple Cloud Run Function with traces and custom metrics
// dd-trace must come before any other import.
const tracer = require('dd-trace').init()

require('@datadog/serverless-compat').start();

const functions = require('@google-cloud/functions-framework');

function handler(req, res) {
   tracer.dogstatsd.increment('dd.function.sent', 1, {'runtime':'nodejs'});
   return res.send('Welcome to Datadog💜!');
}
const handlerWithTrace = tracer.wrap('example-span', handler)

functions.http('httpexample',  handlerWithTrace)

module.exports = handlerWithTrace
# Example of a simple Cloud Run Function with traces and custom metrics
import functions_framework
import ddtrace
from datadog import initialize, statsd

ddtrace.patch(logging=True)
initialize(**{'statsd_port': 8125})

@ddtrace.tracer.wrap()
@functions_framework.http
def dd_log_forwader(request):
   with ddtrace.tracer.trace('sending_trace') as span:
      span.set_tag('test', 'ninja')
      statsd.increment('dd.function.sent', tags=["runtime:python"])
   return "Welcome To Datadog! 💜"
// Example of a simple Cloud Run Function with traces and custom metrics
package com.example;

import com.google.cloud.functions.HttpFunction;
import com.google.cloud.functions.HttpRequest;
import com.google.cloud.functions.HttpResponse;
import java.io.BufferedWriter;
import com.timgroup.statsd.NonBlockingStatsDClientBuilder;
import com.timgroup.statsd.StatsDClient;

public class Example implements HttpFunction {
  @Override
  public void service(HttpRequest request, HttpResponse response) throws Exception {
    StatsDClient Statsd = new NonBlockingStatsDClientBuilder()
            .hostname("localhost")
            .port(8125)
            .build();
    BufferedWriter writer = response.getWriter();
    Statsd.incrementCounter("dd.function.sent", new String[]{"runtime:java"});
    writer.write("Welcome to Datadog!");
  }
}

También puedes instalar el rastreador utilizando la siguiente dependencia de Maven:

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>cloudfunctions</groupId>
    <artifactId>http-function</artifactId>
    <version>1.0-SNAPSHOT</version>

    <properties>
        <maven.compiler.release>17</maven.compiler.release>
    </properties>

    <dependencies>
        <dependency>
            <groupId>com.google.cloud.functions</groupId>
            <artifactId>functions-framework-api</artifactId>
            <version>1.0.1</version>
        </dependency>
        <dependency>
            <groupId>com.datadoghq</groupId>
            <artifactId>java-dogstatsd-client</artifactId>
            <version>4.4.3</version>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>3.8.1</version>
                <configuration>
                    <excludes>
                        <exclude>.google/</exclude>
                    </excludes>
                </configuration>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-antrun-plugin</artifactId>
                <version>1.8</version>
                <executions>
                    <execution>
                        <phase>initialize</phase>
                        <configuration>
                            <tasks>
                                <get src="https://dtdg.co/latest-serverless-compat-java-agent" dest="dd-serverless-compat-java-agent.jar" />
                                <get src="https://dtdg.co/latest-java-tracer" dest="dd-java-agent.jar" />
                            </tasks>
                        </configuration>
                        <goals>
                            <goal>run</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>

        </plugins>
    </build>
</project>
# Example of a simple Cloud Run Function with traces and custom metrics
package cloud_function

import (
    "fmt"
    "log"
    "net/http"

    "github.com/DataDog/datadog-go/statsd"
    "github.com/DataDog/datadog-serverless-compat-go/datadogserverlesscompat"
    _ "github.com/GoogleCloudPlatform/functions-framework-go/funcframework"
    "github.com/GoogleCloudPlatform/functions-framework-go/functions"
    "gopkg.in/DataDog/dd-trace-go.v1/ddtrace/tracer"
)

var dogstatsdClient *statsd.Client

func init() {
    err := datadogserverlesscompat.Start()
    log.Println("Starting datadog serverless compat: ", err)
    tracer.Start(tracer.WithAgentAddr("127.0.0.1:8126"))
    dogstatsdClient, _ = statsd.New("127.0.0.1:8125")
    functions.HTTP("helloHTTP", helloHTTP)
}

// helloHTTP is an HTTP Cloud Function with a request parameter.
func helloHTTP(w http.ResponseWriter, r *http.Request) {
    span := tracer.StartSpan("TEST-SPAN")
    defer span.Finish()

    err := dogstatsdClient.Incr("nina.test.counter", []string{"runtime:go"}, 1)
    if err != nil {
        log.Println("Error incrementing dogstatsd counter: ", err)
    }
    fmt.Fprint(w, "Hello Datadog!")
}

¿Qué toca hacer ahora?

Solucionar problemas

Activa logs de depuración

Puedes recopilar logs de depuración para solucionar problemas. Para configurar logs de depuración, utiliza las siguientes variables de entorno:

DD_TRACE_DEBUG
Activa (true) o desactiva (false) el registro de depuración para la biblioteca de Datadog Tracing. El valor predeterminado es false.

Valores: true, false

DD_LOG_LEVEL
Configura el nivel de registro para la capa de compatibilidad serverless de Datadog. El valor predeterminado es info.

Valores: trace, debug, info, warn, error, critical, off