Google Cloud Run est une plateforme sans serveur entièrement gérée qui permet d’effectuer le déploiement et le scaling d’applications basées sur des conteneurs. La surveillance et la collecte de logs Cloud Run est assurée par Datadog via l’intégration Google Cloud. Datadog fournit également une solution visant à instrumenter vos applications Cloud Run avec un Agent spécialement conçu pour activer le tracing, les métriques custom et la collecte directe de logs.
L’application serverless-init utilise un wrapper pour incorporer votre processus et l’exécute en tant que sous-processus. Elle initie un écouteur DogStatsD pour les métriques ainsi qu’un écouteur d’Agent de trace pour les traces. Elle recueille les logs en utilisant un wrapper pour incorporer les flux stdout/stderr de votre application. Une fois le bootstrap terminé, serverless-init exécute votre commande en tant que sous-processus.
Pour bénéficier d’une instrumentation complète, assurez-vous d’appeler datadog-init dans la première commande exécutée au sein de votre conteneur Docker. Pour ce faire, définissez-la comme point d’entrée ou comme premier argument dans CMD.
Change the entrypoint to wrap your application in the Datadog serverless-init process.
Note: If you already have an entrypoint defined inside your Dockerfile, see the alternative configuration.
ENTRYPOINT["/app/datadog-init"]
Execute your binary application wrapped in the entrypoint. Adapt this line to your needs.
If you require your entrypoint to be instrumented as well, you can swap your entrypoint and CMD arguments instead. For more information, see How serverless-init works.
Change the entrypoint to wrap your application in the Datadog serverless-init process.
Note: If you already have an entrypoint defined inside your Dockerfile, see the alternative configuration.
ENTRYPOINT["/app/datadog-init"]
Execute your binary application wrapped in the entrypoint, launched by the Datadog trace library. Adapt this line to your needs.
If you require your entrypoint to be instrumented as well, you can swap your entrypoint and CMD arguments instead. For more information, see How serverless-init works.
Change the entrypoint to wrap your application in the Datadog serverless-init process.
Note: If you already have an entrypoint defined inside your Dockerfile, see the alternative configuration.
ENTRYPOINT["/app/datadog-init"]
Execute your binary application wrapped in the entrypoint. Adapt this line to your needs.
If you require your entrypoint to be instrumented as well, you can swap your entrypoint and CMD arguments instead. For more information, see How serverless-init works.
Change the entrypoint to wrap your application in the Datadog serverless-init process.
Note: If you already have an entrypoint defined inside your Dockerfile, see the alternative configuration.
If you require your entrypoint to be instrumented as well, you can swap your entrypoint and CMD arguments instead. For more information, see How serverless-init works.
As long as your command to run is passed as an argument to datadog-init, you will receive full instrumentation.
Note: You can also use Orchestrion, a tool for automatically instrumenting Go code. Orchestrion is in private beta. For more information, open a GitHub issue in the Orchestrion repo, or contact Support.
Add the following instructions and arguments to your Dockerfile.
# For alpine or arm64 builds, refer to the explanation sectionCOPY --from=datadog/serverless-init:1 / /app/RUN chmod +x /app/dotnet.sh && /app/dotnet.shENVDD_SERVICE=datadog-demo-run-dotnetENVDD_ENV=datadog-demoENVDD_VERSION=1ENTRYPOINT["/app/datadog-init"]CMD["dotnet","helloworld.dll"]
Copy the Datadog serverless-init into your Docker image.
COPY --from=datadog/serverless-init:1 / /app/
Copy the Datadog .NET tracer into your Docker image.
For linux/amd64, include the following:
RUN chmod +x /app/dotnet.sh && /app/dotnet.sh
For other architecture types, configure your Dockerfile like so:
# For arm64 use datadog-dotnet-apm-2.57.0.arm64.tar.gz# For alpine use datadog-dotnet-apm-2.57.0-musl.tar.gzARG TRACER_VERSIONADD https://github.com/DataDog/dd-trace-dotnet/releases/download/v${TRACER_VERSION}/datadog-dotnet-apm-${TRACER_VERSION}.tar.gz /tmp/datadog-dotnet-apm.tar.gzRUN mkdir -p /dd_tracer/dotnet/ && tar -xzvf /tmp/datadog-dotnet-apm.tar.gz -C /dd_tracer/dotnet/ && rm /tmp/datadog-dotnet-apm.tar.gz
Change the entrypoint to wrap your application in the Datadog serverless-init process.
Note: If you already have an entrypoint defined inside your Dockerfile, see the alternative configuration.
ENTRYPOINT["/app/datadog-init"]
Execute your binary application wrapped in the entrypoint. Adapt this line to your needs.
If you already have an entrypoint defined inside your Dockerfile, you can instead modify the CMD argument.
# For alpine or arm64 builds, refer to tracer installation of the explanation sectionCOPY --from=datadog/serverless-init:1 / /app/RUN chmod +x /app/dotnet.sh && /app/dotnet.shENVDD_SERVICE=datadog-demo-run-dotnetENVDD_ENV=datadog-demoENVDD_VERSION=1CMD["/app/datadog-init","dotnet","helloworld.dll"]
If you require your entrypoint to be instrumented as well, you can swap your entrypoint and CMD arguments instead. For more information, see How serverless-init works.
# For alpine or arm64 builds, refer to tracer installation of the explanation sectionCOPY --from=datadog/serverless-init:1 / /app/RUN chmod +x /app/dotnet.sh && /app/dotnet.shENVDD_SERVICE=datadog-demo-run-dotnetENVDD_ENV=datadog-demoENVDD_VERSION=1ENTRYPOINT["/app/datadog-init"]CMD["your_entrypoint.sh","dotnet","helloworld.dll"]
As long as your command to run is passed as an argument to datadog-init, you will receive full instrumentation.
This environment variable is needed for trace propagation to work properly in Cloud Run. Ensure that you set this variable for all Datadog-instrumented downstream services.
ENVDD_TRACE_PROPAGATION_STYLE=datadog
Change the entrypoint to wrap your application in the Datadog serverless-init process.
Note: If you already have an entrypoint defined inside your Dockerfile, see the alternative configuration.
ENTRYPOINT ["/app/datadog-init"]
Execute your binary application wrapped in the entrypoint. Adapt this line to your needs.
If you require your entrypoint to be instrumented as well, you can swap your entrypoint and CMD arguments instead. For more information, see How serverless-init works.
As long as your command to run is passed as an argument to datadog-init, you will receive full instrumentation.
Add the following instructions and arguments to your Dockerfile.
COPY --from=datadog/serverless-init:1 /datadog-init /app/datadog-initADD https://github.com/DataDog/dd-trace-php/releases/latest/download/datadog-setup.php /datadog-setup.phpRUN php /datadog-setup.php --php-bin=allENVDD_SERVICE=datadog-demo-run-phpENVDD_ENV=datadog-demoENVDD_VERSION=1ENTRYPOINT["/app/datadog-init"]# use the following for an Apache and mod_php based imageRUN sed -i "s/Listen 80/Listen 8080/" /etc/apache2/ports.confEXPOSE 8080CMD["apache2-foreground"]# use the following for an Nginx and php-fpm based imageRUN ln -sf /dev/stdout /var/log/nginx/access.log && ln -sf /dev/stderr /var/log/nginx/error.logEXPOSE 8080CMD php-fpm; nginx -g daemon off;
Note: The datadog-init entrypoint wraps your process and collects logs from it. To get logs working properly, ensure that your Apache, Nginx, or PHP processes are writing output to stdout.
Change the entrypoint to wrap your application in the Datadog serverless-init process.
Note: If you already have an entrypoint defined inside your Dockerfile, see the alternative configuration.
ENTRYPOINT["/app/datadog-init"]
Execute your application.
Use the following for an apache and mod_php based image:
RUN sed -i "s/Listen 80/Listen 8080/" /etc/apache2/ports.confEXPOSE 8080CMD["apache2-foreground"]
Use the following for an nginx and php-fpm based image:
If you already have an entrypoint defined inside your Dockerfile, and you are using an Apache and mod_php based image, you can instead modify the CMD argument.
If you require your entrypoint to be instrumented as well, you can swap your entrypoint and CMD arguments instead. For more information, see How serverless-init works.
COPY --from=datadog/serverless-init:1 /datadog-init /app/datadog-initADD https://github.com/DataDog/dd-trace-php/releases/latest/download/datadog-setup.php /datadog-setup.phpRUN php /datadog-setup.php --php-bin=allENVDD_SERVICE=datadog-demo-run-phpENVDD_ENV=datadog-demoENVDD_VERSION=1ENTRYPOINT["/app/datadog-init"]# use the following for an Apache and mod_php based imageRUN sed -i "s/Listen 80/Listen 8080/" /etc/apache2/ports.confEXPOSE 8080CMD["your_entrypoint.sh","apache2-foreground"]# use the following for an Nginx and php-fpm based imageRUN ln -sf /dev/stdout /var/log/nginx/access.log && ln -sf /dev/stderr /var/log/nginx/error.logEXPOSE 8080CMD your_entrypoint.sh php-fpm; your_entrypoint.sh nginx -g daemon off;
As long as your command to run is passed as an argument to datadog-init, you will receive full instrumentation.
Une fois le conteneur créé et envoyé à votre registre, il ne vous reste plus qu’à définir les variables d’environnement requises pour l’Agent Datadog :
DD_API_KEY : correspond à la clé d’API Datadog, qui sert à envoyer les données à votre compte Datadog. Elle doit être configurée en tant que secret Google Cloud pour éviter tout problème de confidentialité et de sécurité.
DD_SITE : correspond à l’endpoint et au site Web Datadog. Sélectionnez votre site Web situé à droite de cette page, à savoir datadoghq.com.
DD_TRACE_ENABLED : à définir sur true pour activer le tracing.
DD_TRACE_PROPAGATION_STYLE : à définir sur datadog pour utiliser la propagation de contexte et la corrélation des traces et des logs.
Pour découvrir d’autres variables d’environnement ainsi que leur fonction, consultez la section Configurations supplémentaires.
La commande suivante déploie le service et permet à n’importe quelle connexion externe de l’atteindre. Définissez DD_API_KEY en tant que variable d’environnement et le port d’écoute de service sur 8080.
Une fois le déploiement terminé, vos métriques et traces sont envoyées à Datadog. Accédez à Infrastructure->Serverless dans Datadog pour consulter vos métriques et traces sans serveur.
Tracing avancé : l’Agent Datadog offre déjà un tracing de base pour les frameworks populaires. Suivez le guide de tracing avancé pour en savoir plus.
Logs : si vous utilisez l’intégration Google Cloud, vos logs sont déjà recueillis. Vous pouvez également définir la variable d’environnement DD_LOGS_ENABLED sur true pour recueillir les logs d’application directement via l’instrumentation sans serveur.
Métriques custom : vous pouvez envoyer des métriques custom à l’aide d’un client DogStatsd. Pour surveiller les applications Cloud Run et d’autres applications sans serveur, utilisez des métriques de distribution. Les distributions fournissent par défaut les agrégations avg, sum, max, min et count. Sur la page Metric Summary, vous pouvez activer les agrégations par centile (p50, p75, p90, p95, p99) et gérer les tags. Pour surveiller une distribution pour une métrique de type gauge, utilisez avg à la fois pour les agrégations temporelle et spatiale. Pour surveiller une distribution pour une métrique de type count, utilisez sum à la fois pour les agrégations temporelle et spatiale.
Si cette variable est définie sur true, les logs (stdout et stderr) sont envoyés à Datadog. Valeur par défaut : false.
DD_LOGS_INJECTION
Lorsqu’elle est définie sur true, cette variable enrichit tous les logs avec des données de tracing pour les loggers pris en charge en Java, Node, .NET et PHP. Consultez la documentation supplémentaire relative à Python, Go et Ruby.
DD_TRACE_SAMPLE_RATE
Permet de contrôler les taux d’échantillonnage 0.0 et 1.0 de l’ingestion de traces.
Pour que cette intégration fonctionne, votre runtime doit disposer d’une implémentation SSL complète. Si vous utilisez une image légère, vous devrez peut-être ajouter la commande suivante à votre Dockerfile afin d’inclure des certificats.
RUN apt-get update && apt-get install -y ca-certificates