If you are running multiple containers per Google Cloud Run application, Datadog recommends using the Datadog sidecar: Instrument Google Cloud Run.
Google Cloud Run is a fully managed serverless platform for deploying and scaling container-based applications. Datadog provides monitoring and log collection for Cloud Run through the Google Cloud integration. Datadog also provides a solution for instrumenting your Cloud Run applications with a purpose-built Agent to enable tracing, custom metrics, and direct log collection.
The serverless-init application wraps your process and executes it as a subprocess. It starts a DogStatsD listener for metrics and a Trace Agent listener for traces. It collects logs by wrapping the stdout/stderr streams of your application. After bootstrapping, serverless-init then launches your command as a subprocess.
To get full instrumentation, ensure you are calling datadog-init as the first command that runs inside your Docker container. You can do this through by setting it as the entrypoint, or by setting it as the first argument in 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.
실행할 명령이 datadog-init 인수로 전달되는 한, 전체 계측을 받을 수 있습니다.
참고: Go 코드를 자동으로 계측하는 도구인 Orchestrion을 사용할 수도 있습니다. Orchestrion은 비공개 베타 버전입니다. 자세한 내용을 보려면 Orchestrion 리포지토리에서 GitHub 이슈를 열거나 지원팀에 문의하세요.
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.
The following command deploys the service and allows any external connection to reach it. In this example, your service listening is set to port 8080. Ensure that this port number matches the exposed port inside of your Dockerfile.
Once the deployment is completed, your metrics and traces are sent to Datadog. In Datadog, navigate to Infrastructure > Serverless to see your serverless metrics and traces.
Advanced Tracing: The Datadog Agent already provides some basic tracing for popular frameworks. Follow the advanced tracing guide for more information.
Logs: If you use the Google Cloud integration, your logs are already being collected. Alternatively, you can set the DD_LOGS_ENABLED environment variable to true to capture application logs through the serverless instrumentation directly.
Custom Metrics: You can submit custom metrics using a DogStatsD client. For monitoring Cloud Run and other serverless applications, use distribution metrics. Distributions provide avg, sum, max, min, and count aggregations by default. On the Metric Summary page, you can enable percentile aggregations (p50, p75, p90, p95, p99) and also manage tags. To monitor a distribution for a gauge metric type, use avg for both the time and space aggregations. To monitor a distribution for a count metric type, use sum for both the time and space aggregations.
This integration depends on your runtime having a full SSL implementation. If you are using a slim image, you may need to add the following command to your Dockerfile to include certificates.
RUN apt-get update && apt-get install -y ca-certificates