diff --git a/build.gradle b/build.gradle index 409ba68c..74b8e716 100644 --- a/build.gradle +++ b/build.gradle @@ -205,6 +205,7 @@ subprojects { opentelemetry_autoconfigure_spi : "io.opentelemetry:opentelemetry-sdk-extension-autoconfigure-spi:${openTelemetryVersion}", opentelemetry_agent_extension : "io.opentelemetry.javaagent:opentelemetry-javaagent-extension-api:${openTelemetryInstrumentationVersion}-alpha", opentelemetry_otlp_exporter : "io.opentelemetry:opentelemetry-exporter-otlp:${openTelemetryVersion}", + opentelemetry_logging_exporter : "io.opentelemetry:opentelemetry-exporter-logging:${openTelemetryVersion}", opentelemetry_gcp_resources : "io.opentelemetry.contrib:opentelemetry-gcp-resources:${openTelemetryContribVersion}-alpha", spring_boot_starter_web : "org.springframework.boot:spring-boot-starter-web:${springWebVersion}", spring_cloud_starter_openfeign : "org.springframework.cloud:spring-cloud-starter-openfeign:${springOpenFeignVersion}", diff --git a/examples/metrics/build.gradle b/examples/metrics/build.gradle index d9a7df48..cecaf1ae 100644 --- a/examples/metrics/build.gradle +++ b/examples/metrics/build.gradle @@ -35,5 +35,9 @@ dependencies { implementation(libraries.opentelemetry_sdk_metrics) implementation(libraries.google_cloud_monitoring) implementation project(':exporter-metrics') - runtimeOnly(libraries.opentelemetry_gcp_resources) + implementation(libraries.opentelemetry_gcp_resources) + // required by resource detection + implementation(libraries.opentelemetry_autoconfigure_spi) + // this helps in debugging as it outputs all export to std out + implementation(libraries.opentelemetry_logging_exporter) } diff --git a/examples/metrics/run_as_cloud-run-job.sh b/examples/metrics/run_as_cloud-run-job.sh index e4fec279..e2a484aa 100755 --- a/examples/metrics/run_as_cloud-run-job.sh +++ b/examples/metrics/run_as_cloud-run-job.sh @@ -14,39 +14,42 @@ # See the License for the specific language governing permissions and # limitations under the License. # -CONTAINER_REGISTRY=cloud-run-applications -REGISTRY_LOCATION=us-central1 +ARTIFACT_REPOSITORY=cloud-run-applications +JOB_NAME=job-metrics-export -if [[ -z "${GOOGLE_CLOUD_PROJECT}" ]]; then - echo "GOOGLE_CLOUD_PROJECT environment variable not set" - exit 1 -fi - -if [[ -z "${GOOGLE_APPLICATION_CREDENTIALS}" ]]; then - echo "GOOGLE_APPLICATION_CREDENTIALS environment variable not set" - exit 1 -fi - -if [[ -z "${GOOGLE_CLOUD_RUN_REGION}" ]]; then - echo "GOOGLE_CLOUD_RUN_REGION environment variable not set" - exit 1 -fi +# Verify necessary environment variables are set +echo "${GOOGLE_CLOUD_PROJECT:?${UNSET_WARNING}}" +echo "${GOOGLE_APPLICATION_CREDENTIALS:?${UNSET_WARNING}}" +echo "${GOOGLE_CLOUD_RUN_REGION:?${UNSET_WARNING}}" echo "ENVIRONMENT VARIABLES VERIFIED" -echo "CREATING CLOUD ARTIFACT REPOSITORY" -gcloud artifacts repositories create ${CONTAINER_REGISTRY} --repository-format=docker --location=${REGISTRY_LOCATION} --description="Sample applications to run on Google Cloud Run" -echo "CREATED ${CONTAINER_REGISTRY} in ${REGISTRY_LOCATION}" +# Safety check to verify if repository already exists. +if gcloud artifacts repositories describe ${ARTIFACT_REPOSITORY} \ + --location="${GOOGLE_CLOUD_RUN_REGION}" +then + echo "Repository ${ARTIFACT_REPOSITORY} already exists." +else + echo "CREATING CLOUD ARTIFACT REPOSITORY" + gcloud artifacts repositories create ${ARTIFACT_REPOSITORY} --repository-format=docker --location=${GOOGLE_CLOUD_RUN_REGION} --description="Sample applications to run on Google Cloud Run" + echo "CREATED ${ARTIFACT_REPOSITORY} in ${GOOGLE_CLOUD_RUN_REGION}" +fi echo "BUILDING SAMPLE APP IMAGE" -gradle clean jib --image "${REGISTRY_LOCATION}-docker.pkg.dev/${GOOGLE_CLOUD_PROJECT}/${CONTAINER_REGISTRY}/metrics-export-java" - -echo "CREATING A CLOUD RUN JOB TO RUN THE CONTAINER" -gcloud run jobs create job-metrics-export \ - --image "${REGISTRY_LOCATION}-docker.pkg.dev/${GOOGLE_CLOUD_PROJECT}/${CONTAINER_REGISTRY}/metrics-export-java" \ - --max-retries 5 \ - --region ${GOOGLE_CLOUD_RUN_REGION} \ - --project="${GOOGLE_CLOUD_PROJECT}" +gradle clean jib --image "${GOOGLE_CLOUD_RUN_REGION}-docker.pkg.dev/${GOOGLE_CLOUD_PROJECT}/${ARTIFACT_REPOSITORY}/metrics-export-java" + +# Safety check to verify if the job already exists +if gcloud run jobs describe ${JOB_NAME} --region="${GOOGLE_CLOUD_RUN_REGION}" +then + echo "Job ${JOB_NAME} already exists" +else + echo "CREATING A CLOUD RUN JOB TO RUN THE CONTAINER" + gcloud run jobs create job-metrics-export \ + --image="${GOOGLE_CLOUD_RUN_REGION}-docker.pkg.dev/${GOOGLE_CLOUD_PROJECT}/${ARTIFACT_REPOSITORY}/metrics-export-java" \ + --max-retries=5 \ + --region="${GOOGLE_CLOUD_RUN_REGION}" \ + --project="${GOOGLE_CLOUD_PROJECT}" +fi echo "SETTING CLOUD RUN JOB REGION" gcloud config set run/region "${GOOGLE_CLOUD_RUN_REGION}" diff --git a/examples/metrics/src/main/java/com/google/cloud/opentelemetry/example/metrics/MetricsExporterExample.java b/examples/metrics/src/main/java/com/google/cloud/opentelemetry/example/metrics/MetricsExporterExample.java index 6a6d8a52..fd463f03 100644 --- a/examples/metrics/src/main/java/com/google/cloud/opentelemetry/example/metrics/MetricsExporterExample.java +++ b/examples/metrics/src/main/java/com/google/cloud/opentelemetry/example/metrics/MetricsExporterExample.java @@ -28,10 +28,14 @@ import io.grpc.ManagedChannelBuilder; import io.opentelemetry.api.metrics.LongCounter; import io.opentelemetry.api.metrics.Meter; +import io.opentelemetry.contrib.gcp.resource.GCPResourceProvider; +import io.opentelemetry.exporter.logging.LoggingMetricExporter; import io.opentelemetry.sdk.metrics.SdkMeterProvider; import io.opentelemetry.sdk.metrics.export.MetricExporter; import io.opentelemetry.sdk.metrics.export.PeriodicMetricReader; +import io.opentelemetry.sdk.resources.Resource; import java.io.IOException; +import java.time.Duration; import java.util.Random; public class MetricsExporterExample { @@ -75,13 +79,20 @@ private static MetricConfiguration generateMetricExporterConfig(boolean useDefau } private static void setupMetricExporter(MetricConfiguration metricConfiguration) { + GCPResourceProvider resourceProvider = new GCPResourceProvider(); MetricExporter metricExporter = GoogleCloudMetricExporter.createWithConfiguration(metricConfiguration); + MetricExporter metricDebugExporter = LoggingMetricExporter.create(); METER_PROVIDER = SdkMeterProvider.builder() + .setResource(Resource.create(resourceProvider.getAttributes())) .registerMetricReader( PeriodicMetricReader.builder(metricExporter) - .setInterval(java.time.Duration.ofSeconds(30)) + .setInterval(Duration.ofSeconds(30)) + .build()) + .registerMetricReader( + PeriodicMetricReader.builder(metricDebugExporter) + .setInterval(Duration.ofSeconds(30)) .build()) .build(); diff --git a/examples/spring/build.gradle b/examples/spring/build.gradle index 21aa591d..cc4c54c3 100644 --- a/examples/spring/build.gradle +++ b/examples/spring/build.gradle @@ -78,7 +78,7 @@ dependencies { // auto exporter makes Google Cloud exporters available to autoconfigure module implementation project(':exporter-auto') // this helps in debugging as it outputs all export to std out - implementation 'io.opentelemetry:opentelemetry-exporter-logging:1.33.0' + implementation(libraries.opentelemetry_logging_exporter) } test {