Monitor Google Cloud Run managed
Google Cloud Run managed is a compute platform for running containers in a serverless environment. To monitor services running on Google Cloud Run managed using Dynatrace, you need to integrate OneAgent within your containerized application.
Support for Cloud Run managed in the first generation and second generation execution environments is currently limited to Java only.
Integrate Dynatrace into your containers
There are several ways to build and deploy containers to Cloud Run, such as with Cloud Build.
While the instructions to integrate Dynatrace may differ depending on the technology stack used to build and deploy, the integration of Dynatrace independently follows the same approach:
Add necessary OneAgent binaries to your container image (for example, by either downloading from REST API or copying from the OneAgent image layer).
Configure OneAgent with the necessary connection parameters and additional options such as custom tags.
Enable process injection for automatic instrumentation of your workloads.
Prerequisites
Before you begin, you need to take care of the following:
-
Get an access token to download the Dynatrace OneAgent with
InstallerDownload
scope. For details on access tokens, see Dynatrace API - Tokens and authentication.In the procedures that follow, replace
<DT_TOKEN>
with your actual access token. -
Get the environment ID. For details on environment IDs, see Environment ID.
In the procedures that follow, replace
<DT_ENV_ID>
with your actual environment ID. -
Get your Dynatrace API endpoint as defined by your Environment URL or alternatively an ActiveGate address.
In the procedures that follow, replace
<DT_ENV_FQDN>
with the actual Dynatrace API endpoint. -
Install gcloud CLI
After you have completed the above prerequisites, follow one of these procedures (select a tab) to integrate Dynatrace into your containers.
Integrate into cloud built with cloudbuild.yaml
Add the OneAgent installer to a Docker image
Requires Docker version 17.05+
Open your Dockerfile and add the following lines to the application image after the last FROM
.
1ARG DT_API_URL="<DT_ENV_FQDN>/api"2ARG DT_API_TOKEN="<DT_TOKEN>"3ARG DT_ONEAGENT_OPTIONS="flavor=default&include=java"4ENV DT_HOME="/opt/dynatrace/oneagent"5RUN apt-get update && \6 apt-get install -y wget && \7 apt-get install unzip && \8 mkdir -p "$DT_HOME" && \9 wget -O "$DT_HOME/oneagent.zip" "$DT_API_URL/v1/deployment/installer/agent/unix/paas/latest?Api-Token=$DT_API_TOKEN&$DT_ONEAGENT_OPTIONS" && \10 unzip -d "$DT_HOME" "$DT_HOME/oneagent.zip" && \11 rm "$DT_HOME/oneagent.zip"12ENV LD_PRELOAD /opt/dynatrace/oneagent/agent/lib64/liboneagentproc.so13# Run the web service on container startup.14ENTRYPOINT ["java", "-jar", "/hello-world.jar"]
Make sure to substitute the placeholders with your actual values.
<DT_ENV_FQDN>
is your actual Dynatrace API endpoint as described in the Prerequisites.<DT_TOKEN>
is your actual token as described in the Prerequisites.
- Technology support is enabled via
include
parameters. For Alpine Linux–based environments, useflavor=musl&include=java
. - The
wget
andunzip
commands above might fail if they aren't provided by the base image.
A sample Dockerfile as provided by Google via the Getting Started guide on Google Cloud Run with Java, adapted with the instructions provided above.
1# Use the official maven/Java 11 image to create a build artifact.2# https://hub.docker.com/_/maven3FROM maven:3-jdk-11-slim AS build-env45# Set the working directory to /app6WORKDIR /app7# Copy the pom.xml file to download dependencies8COPY pom.xml .9# Copy local code to the container image.10COPY src ./src1112# Download dependencies and build a release artifact.13RUN mvn package -DskipTests1415# Use OpenJDK for base image.16# https://hub.docker.com/_/openjdk17# https://docs.docker.com/develop/develop-images/multistage-build/#use-multi-stage-builds18FROM openjdk:11-jre-slim1920# Copy the jar to the production image from the builder stage.21COPY --from=build-env /app/target/hello-world-*.jar /hello-world.jar2223# Get and enable Dynatrace24ARG DT_API_URL="<DT_ENV_FQDN>/api"25ARG DT_API_TOKEN="<DT_TOKEN>"26ARG DT_ONEAGENT_OPTIONS="flavor=default&include=java"27ENV DT_HOME="/opt/dynatrace/oneagent"28RUN apt-get update && \29 apt-get install -y wget && \30 apt-get install unzip && \31 mkdir -p "$DT_HOME" && \32 wget -O "$DT_HOME/oneagent.zip" "$DT_API_URL/v1/deployment/installer/agent/unix/paas/latest?Api-Token=$DT_API_TOKEN&$DT_ONEAGENT_OPTIONS" && \33 unzip -d "$DT_HOME" "$DT_HOME/oneagent.zip" && \34 rm "$DT_HOME/oneagent.zip"35ENV LD_PRELOAD /opt/dynatrace/oneagent/agent/lib64/liboneagentproc.so36# Run the web service on container startup.37ENTRYPOINT ["java", "-jar", "/hello-world.jar"]
Adjust your Google Cloud Build configuration file
Open your cloudbuild.yaml file and add the following environment variables and bash commands to the build step:
1# Build the container image2 - name: 'gcr.io/cloud-builders/docker'3 args: ['build', '-t', 'gcr.io/<GCP_PROJECT_ID>/<YOUR_IMAGE_NAME_AND_TAG>', '.']4 # Push the container image to Container Registry5 - name: 'gcr.io/cloud-builders/docker'6 args: ['push', 'gcr.io/<GCP_PROJECT_ID>/<YOUR_IMAGE_NAME_AND_TAG>']
Add the following lines to your args in your deploy step:
1# Deploy container image to Cloud Run2 - name: 'gcr.io/google.com/cloudsdktool/cloud-sdk'3 entrypoint: gcloud4 args:5 - beta6 - run7 - deploy8 - $_SERVICE_NAME9 - --allow-unauthenticated10 - --image=gcr.io/<GCP_PROJECT_ID>/<YOUR_IMAGE_NAME_AND_TAG>11 - --region=$_GCP_REGION12 - --execution-environment=<ENVIRONMENT>13 - --project=$_PROJECT14 - --set-env-vars=15 DT_TAGS=$_SERVICE_NAME,16 DT_LOGLEVELCON=debug
Make sure to substitute the placeholders with your actual values.
<GCP_PROJECT_ID>
is the name of your Google Cloud project<YOUR_IMAGE_NAME_AND_TAG>
is the name and the tag of your image to be built<ENVIRONMENT>
is the execution environment you want to use. Valid options aregen1
for first generation andgen2
for second generation.
You can change the DT_TAGS
environment variable to another value as needed.
Build and deploy your Cloud Run Service
Edit and run this command:
1gcloud builds submit \2 <SAMPLE_NAME> \3 --project <GCP_PROJECT_ID> \4 --substitutions \5 "_API_KEY=<DT_TOKEN>,\6 _TENANT_NAME=<DT_ENV_ID>,\7 _TENANT_FQDN=<DT_ENV_FQDN>,\8 _IMAGE_NAME_AND_TAG=<YOUR_IMAGE_NAME_AND_TAG>,\9 _SERVICE_NAME=<YOUR_SERVICE_NAME>,\10 _PROJECT=<GCP_PROJECT_ID>,\11 _GCP_REGION=<GCP_REGION>,\" \12 --config cloudbuild.yaml
Make sure to substitute the placeholders with your actual values.
<SAMPLE_NAME>
is the name of your Cloud Run Service<GCP_PROJECT_ID>
is the name of your Google Cloud project<YOUR_IMAGE_NAME_AND_TAG>
is the name and the tag of your image to be built
Additional configuration
You can use additional environment variables to configure, for example, troubleshooting or advanced networking settings.
Name | Description |
---|---|
Networking | |
DT_NETWORK_ZONE | Specifies to use a network zone. For details, see Network zones. |
DT_PROXY | When using a proxy, use this environment variable to pass proxy credentials. For details, see Set up OneAgent on containers for application-only monitoring |
Additional metadata for Process Grouping / Service Detection | |
DT_LOCALTOVIRTUALHOSTNAME | Multiple containers are sometimes detected as a single instance (localhost), leading to various problems in, for example, service detection or availability alerts. Use this environment variable to define a unique name for your container instance. For details, see Service detection and naming |
DT_APPLICATIONID | Some technologies don't provide unique application names. In such cases, use this environment variable to provide a unique name. For details, see Service detection and naming |
DT_TAGS | Applies custom tags to your process group |
DT_CUSTOM_PROP | Applies custom metadata to your process group |
DT_CLUSTER_ID | If the process group detection rules won't work for your use-case, use this environment variable to group all processes with the same value. |
DT_NODE_ID | If the process group detection rules won't work for your use-case, use this environment variable to separate process group instances |
Troubleshooting | |
DT_LOGSTREAM | Set this variable with stdout to configure agent to log errors into console. To see additional agent logs set the log level with DT_LOGLEVELCON as below. |
DT_LOGLEVELCON | Use this environment variable to define the console log level. Valid options are NONE , SEVERE , INFO in order to increase log level. |
DT_AGENTACTIVE | true or false to enable or disable OneAgent. |
Verify that the integration was successful
After the build and deploy, you should start seeing your Cloud Run service in Dynatrace.
Verify via service overview
Check your service's overview within Dynatrace for your instrumented application.
The service will show up in Dynatrace after running the newly built version and calling it at least once via, for example, a webrequest.
Verify via host overview
You can filter for containers in the host overview to filter by Monitoring Mode with Standalone/PaaS
.
Known limitations
-
No host metrics for Gen1
The first generation of the GCR execution environment, also referred to as Gen1, comes with intentionally increased security limitations. As a consequence, some OneAgent functionalities cannot work in this runtime and are not available. For example, metrics on the Hosts page such as
CPU Usage
andMemory Usage
are not available. -
GCR instances detected as hosts
GCR execution environments are currently displayed on the Hosts page, with proper detection of GCP properties and the memory limit of each of these runtime (container) instances, not on the Container groups page. Container metrics are not available.
-
Possible startup overhead
Because each revision of Google Cloud Run scales automatically to the number of container instances needed to handle incoming requests, such cold starts might appear more often than on other environments, thus increasing overall startup overhead.
Update OneAgent
Each time you want to leverage a new version of Dynatrace OneAgent, you must rebuild and redeploy.
If you've specified a default OneAgent installation version for new hosts and applications using OneAgent update settings, your application will be automatically monitored by the defined default version of OneAgent.
Uninstall OneAgent
To uninstall OneAgent from application-only monitoring, remove references from your application or Docker image and redeploy the application.