Skip to content

Commit 10d8c86

Browse files
authored
Update metrics example with resource detection (#370)
* Add logging exporter to root gradle file * Udpate dependency declaration * Add resource detection to metrics sample * Add safety checks to prevent errors * Update script to run application in cloud run
1 parent f29adf6 commit 10d8c86

File tree

5 files changed

+49
-30
lines changed

5 files changed

+49
-30
lines changed

build.gradle

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -205,6 +205,7 @@ subprojects {
205205
opentelemetry_autoconfigure_spi : "io.opentelemetry:opentelemetry-sdk-extension-autoconfigure-spi:${openTelemetryVersion}",
206206
opentelemetry_agent_extension : "io.opentelemetry.javaagent:opentelemetry-javaagent-extension-api:${openTelemetryInstrumentationVersion}-alpha",
207207
opentelemetry_otlp_exporter : "io.opentelemetry:opentelemetry-exporter-otlp:${openTelemetryVersion}",
208+
opentelemetry_logging_exporter : "io.opentelemetry:opentelemetry-exporter-logging:${openTelemetryVersion}",
208209
opentelemetry_gcp_resources : "io.opentelemetry.contrib:opentelemetry-gcp-resources:${openTelemetryContribVersion}-alpha",
209210
spring_boot_starter_web : "org.springframework.boot:spring-boot-starter-web:${springWebVersion}",
210211
spring_cloud_starter_openfeign : "org.springframework.cloud:spring-cloud-starter-openfeign:${springOpenFeignVersion}",

examples/metrics/build.gradle

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -35,5 +35,9 @@ dependencies {
3535
implementation(libraries.opentelemetry_sdk_metrics)
3636
implementation(libraries.google_cloud_monitoring)
3737
implementation project(':exporter-metrics')
38-
runtimeOnly(libraries.opentelemetry_gcp_resources)
38+
implementation(libraries.opentelemetry_gcp_resources)
39+
// required by resource detection
40+
implementation(libraries.opentelemetry_autoconfigure_spi)
41+
// this helps in debugging as it outputs all export to std out
42+
implementation(libraries.opentelemetry_logging_exporter)
3943
}

examples/metrics/run_as_cloud-run-job.sh

Lines changed: 30 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -14,39 +14,42 @@
1414
# See the License for the specific language governing permissions and
1515
# limitations under the License.
1616
#
17-
CONTAINER_REGISTRY=cloud-run-applications
18-
REGISTRY_LOCATION=us-central1
17+
ARTIFACT_REPOSITORY=cloud-run-applications
18+
JOB_NAME=job-metrics-export
1919

20-
if [[ -z "${GOOGLE_CLOUD_PROJECT}" ]]; then
21-
echo "GOOGLE_CLOUD_PROJECT environment variable not set"
22-
exit 1
23-
fi
24-
25-
if [[ -z "${GOOGLE_APPLICATION_CREDENTIALS}" ]]; then
26-
echo "GOOGLE_APPLICATION_CREDENTIALS environment variable not set"
27-
exit 1
28-
fi
29-
30-
if [[ -z "${GOOGLE_CLOUD_RUN_REGION}" ]]; then
31-
echo "GOOGLE_CLOUD_RUN_REGION environment variable not set"
32-
exit 1
33-
fi
20+
# Verify necessary environment variables are set
21+
echo "${GOOGLE_CLOUD_PROJECT:?${UNSET_WARNING}}"
22+
echo "${GOOGLE_APPLICATION_CREDENTIALS:?${UNSET_WARNING}}"
23+
echo "${GOOGLE_CLOUD_RUN_REGION:?${UNSET_WARNING}}"
3424

3525
echo "ENVIRONMENT VARIABLES VERIFIED"
3626

37-
echo "CREATING CLOUD ARTIFACT REPOSITORY"
38-
gcloud artifacts repositories create ${CONTAINER_REGISTRY} --repository-format=docker --location=${REGISTRY_LOCATION} --description="Sample applications to run on Google Cloud Run"
39-
echo "CREATED ${CONTAINER_REGISTRY} in ${REGISTRY_LOCATION}"
27+
# Safety check to verify if repository already exists.
28+
if gcloud artifacts repositories describe ${ARTIFACT_REPOSITORY} \
29+
--location="${GOOGLE_CLOUD_RUN_REGION}"
30+
then
31+
echo "Repository ${ARTIFACT_REPOSITORY} already exists."
32+
else
33+
echo "CREATING CLOUD ARTIFACT REPOSITORY"
34+
gcloud artifacts repositories create ${ARTIFACT_REPOSITORY} --repository-format=docker --location=${GOOGLE_CLOUD_RUN_REGION} --description="Sample applications to run on Google Cloud Run"
35+
echo "CREATED ${ARTIFACT_REPOSITORY} in ${GOOGLE_CLOUD_RUN_REGION}"
36+
fi
4037

4138
echo "BUILDING SAMPLE APP IMAGE"
42-
gradle clean jib --image "${REGISTRY_LOCATION}-docker.pkg.dev/${GOOGLE_CLOUD_PROJECT}/${CONTAINER_REGISTRY}/metrics-export-java"
43-
44-
echo "CREATING A CLOUD RUN JOB TO RUN THE CONTAINER"
45-
gcloud run jobs create job-metrics-export \
46-
--image "${REGISTRY_LOCATION}-docker.pkg.dev/${GOOGLE_CLOUD_PROJECT}/${CONTAINER_REGISTRY}/metrics-export-java" \
47-
--max-retries 5 \
48-
--region ${GOOGLE_CLOUD_RUN_REGION} \
49-
--project="${GOOGLE_CLOUD_PROJECT}"
39+
gradle clean jib --image "${GOOGLE_CLOUD_RUN_REGION}-docker.pkg.dev/${GOOGLE_CLOUD_PROJECT}/${ARTIFACT_REPOSITORY}/metrics-export-java"
40+
41+
# Safety check to verify if the job already exists
42+
if gcloud run jobs describe ${JOB_NAME} --region="${GOOGLE_CLOUD_RUN_REGION}"
43+
then
44+
echo "Job ${JOB_NAME} already exists"
45+
else
46+
echo "CREATING A CLOUD RUN JOB TO RUN THE CONTAINER"
47+
gcloud run jobs create job-metrics-export \
48+
--image="${GOOGLE_CLOUD_RUN_REGION}-docker.pkg.dev/${GOOGLE_CLOUD_PROJECT}/${ARTIFACT_REPOSITORY}/metrics-export-java" \
49+
--max-retries=5 \
50+
--region="${GOOGLE_CLOUD_RUN_REGION}" \
51+
--project="${GOOGLE_CLOUD_PROJECT}"
52+
fi
5053

5154
echo "SETTING CLOUD RUN JOB REGION"
5255
gcloud config set run/region "${GOOGLE_CLOUD_RUN_REGION}"

examples/metrics/src/main/java/com/google/cloud/opentelemetry/example/metrics/MetricsExporterExample.java

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,10 +28,14 @@
2828
import io.grpc.ManagedChannelBuilder;
2929
import io.opentelemetry.api.metrics.LongCounter;
3030
import io.opentelemetry.api.metrics.Meter;
31+
import io.opentelemetry.contrib.gcp.resource.GCPResourceProvider;
32+
import io.opentelemetry.exporter.logging.LoggingMetricExporter;
3133
import io.opentelemetry.sdk.metrics.SdkMeterProvider;
3234
import io.opentelemetry.sdk.metrics.export.MetricExporter;
3335
import io.opentelemetry.sdk.metrics.export.PeriodicMetricReader;
36+
import io.opentelemetry.sdk.resources.Resource;
3437
import java.io.IOException;
38+
import java.time.Duration;
3539
import java.util.Random;
3640

3741
public class MetricsExporterExample {
@@ -75,13 +79,20 @@ private static MetricConfiguration generateMetricExporterConfig(boolean useDefau
7579
}
7680

7781
private static void setupMetricExporter(MetricConfiguration metricConfiguration) {
82+
GCPResourceProvider resourceProvider = new GCPResourceProvider();
7883
MetricExporter metricExporter =
7984
GoogleCloudMetricExporter.createWithConfiguration(metricConfiguration);
85+
MetricExporter metricDebugExporter = LoggingMetricExporter.create();
8086
METER_PROVIDER =
8187
SdkMeterProvider.builder()
88+
.setResource(Resource.create(resourceProvider.getAttributes()))
8289
.registerMetricReader(
8390
PeriodicMetricReader.builder(metricExporter)
84-
.setInterval(java.time.Duration.ofSeconds(30))
91+
.setInterval(Duration.ofSeconds(30))
92+
.build())
93+
.registerMetricReader(
94+
PeriodicMetricReader.builder(metricDebugExporter)
95+
.setInterval(Duration.ofSeconds(30))
8596
.build())
8697
.build();
8798

examples/spring/build.gradle

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -78,7 +78,7 @@ dependencies {
7878
// auto exporter makes Google Cloud exporters available to autoconfigure module
7979
implementation project(':exporter-auto')
8080
// this helps in debugging as it outputs all export to std out
81-
implementation 'io.opentelemetry:opentelemetry-exporter-logging:1.33.0'
81+
implementation(libraries.opentelemetry_logging_exporter)
8282
}
8383

8484
test {

0 commit comments

Comments
 (0)