Temporalio.Extensions.Gcp.CloudRun.OpenTelemetry 1.19.0

Prefix Reserved
dotnet add package Temporalio.Extensions.Gcp.CloudRun.OpenTelemetry --version 1.19.0
                    
NuGet\Install-Package Temporalio.Extensions.Gcp.CloudRun.OpenTelemetry -Version 1.19.0
                    
This command is intended to be used within the Package Manager Console in Visual Studio, as it uses the NuGet module's version of Install-Package.
<PackageReference Include="Temporalio.Extensions.Gcp.CloudRun.OpenTelemetry" Version="1.19.0" />
                    
For projects that support PackageReference, copy this XML node into the project file to reference the package.
<PackageVersion Include="Temporalio.Extensions.Gcp.CloudRun.OpenTelemetry" Version="1.19.0" />
                    
Directory.Packages.props
<PackageReference Include="Temporalio.Extensions.Gcp.CloudRun.OpenTelemetry" />
                    
Project file
For projects that support Central Package Management (CPM), copy this XML node into the solution Directory.Packages.props file to version the package.
paket add Temporalio.Extensions.Gcp.CloudRun.OpenTelemetry --version 1.19.0
                    
#r "nuget: Temporalio.Extensions.Gcp.CloudRun.OpenTelemetry, 1.19.0"
                    
#r directive can be used in F# Interactive and Polyglot Notebooks. Copy this into the interactive tool or source code of the script to reference the package.
#:package Temporalio.Extensions.Gcp.CloudRun.OpenTelemetry@1.19.0
                    
#:package directive can be used in C# file-based apps starting in .NET 10 preview 4. Copy this into a .cs file before any lines of code to reference the package.
#addin nuget:?package=Temporalio.Extensions.Gcp.CloudRun.OpenTelemetry&version=1.19.0
                    
Install as a Cake Addin
#tool nuget:?package=Temporalio.Extensions.Gcp.CloudRun.OpenTelemetry&version=1.19.0
                    
Install as a Cake Tool

Google Cloud Run Worker OpenTelemetry Support

This extension adds OpenTelemetry defaults for Temporal workers running on Google Cloud Run, primarily in worker pools. Temporal metrics and traces are exported over OTLP/gRPC to a local OpenTelemetry Collector sidecar; the collector is responsible for Google Cloud resource detection, authentication, and export.

Add the Temporalio.Extensions.Gcp.CloudRun.OpenTelemetry package from NuGet. For example, using the dotnet CLI:

dotnet add package Temporalio.Extensions.Gcp.CloudRun.OpenTelemetry

Quick Start

Call ApplyGoogleCloudRunOpenTelemetryDefaults on the client connect options before connecting, and dispose the returned handle after the worker stops:

using System.Diagnostics;
using Temporalio.Client;
using Temporalio.Extensions.Gcp.CloudRun.OpenTelemetry;
using Temporalio.Worker;

var connectOptions = new TemporalClientConnectOptions("my-namespace.a1b2c.tmprl.cloud:7233")
{
    Namespace = "my-namespace",
    // ... Temporal Cloud API key / mTLS credentials ...
};

// Applies tracing + metrics defaults and returns a handle owning the tracer provider.
using var telemetry = connectOptions.ApplyGoogleCloudRunOpenTelemetryDefaults();

var client = await TemporalClient.ConnectAsync(connectOptions);

using var worker = new TemporalWorker(
    client,
    new TemporalWorkerOptions("my-task-queue").
        AddWorkflow<MyWorkflow>().
        AddActivity(MyActivities.DoThing));

// Cloud Run allows 10 seconds from SIGTERM before terminating the instance. Track how much of
// that window worker shutdown consumes so trace flushing uses only the time that remains.
var shutdownStarted = new TaskCompletionSource<Stopwatch>(
    TaskCreationOptions.RunContinuationsAsynchronously);
using var registration = shutdownToken.Register(
    () => shutdownStarted.TrySetResult(Stopwatch.StartNew()));

try
{
    await worker.ExecuteAsync(shutdownToken);
}
catch (OperationCanceledException) when (shutdownToken.IsCancellationRequested)
{
    // SIGTERM cancellation is the expected shutdown path.
}
finally
{
    shutdownStarted.TrySetResult(Stopwatch.StartNew());
    var elapsed = (await shutdownStarted.Task).Elapsed;
    var flushTimeout = TimeSpan.FromSeconds(10) - elapsed;
    if (flushTimeout > TimeSpan.Zero)
    {
        await telemetry.FlushAsync(flushTimeout);
    }
}

ApplyGoogleCloudRunOpenTelemetryDefaults:

  • Adds the Temporal TracingInterceptor to the client interceptors (it applies to workers created from the client too).
  • Creates an OTLP gRPC trace exporter and tracer provider registered against the four TracingInterceptor activity sources.
  • Configures Core SDK metrics through a TemporalRuntime and sets it on the connect options, replacing any runtime already set.

Defaults

The OTLP collector endpoint is resolved from GoogleCloudRunOpenTelemetryOptions.CollectorEndpoint, then OTEL_EXPORTER_OTLP_ENDPOINT, then http://localhost:4317.

The OpenTelemetry service name is resolved from GoogleCloudRunOpenTelemetryOptions.ServiceName, then OTEL_SERVICE_NAME, then CLOUD_RUN_WORKER_POOL, then K_SERVICE, then temporal-worker.

Core SDK metrics export every 60 seconds by default. This matches the coordinated Temporal SDK Google Cloud Run default and the upstream OpenTelemetry SDK default, and is above Google Cloud's five-second minimum export interval. Override it with MetricsExportInterval:

using var telemetry = connectOptions.ApplyGoogleCloudRunOpenTelemetryDefaults(
    new GoogleCloudRunOpenTelemetryOptions
    {
        CollectorEndpoint = "http://localhost:4317",
        ServiceName = "payments-worker",
        MetricsExportInterval = TimeSpan.FromSeconds(60),
    });

Collector Sidecar

Run the Google-Built OpenTelemetry Collector as a sidecar in the Cloud Run service, listening on localhost:4317.

Export cumulative metrics directly to Google Managed Service for Prometheus without a collector batch processor: a batch processor can combine a periodic export with a shutdown-time export into a single Google Monitoring request and cause a Duplicate TimeSeries rejection. Traces can and should keep a dedicated batch processor.

Shutdown

Cloud Run workers are long-running, so this extension does not flush automatically. On shutdown, stop the worker first, catch the expected cancellation from ExecuteAsync, then call FlushAsync from a finally block within the remaining termination grace period. Dispose the handle afterward (disposing also flushes). Core SDK metrics have no explicit flush API and are exported periodically by the runtime.

Product Compatible and additional computed target framework versions.
.NET net5.0 was computed.  net5.0-windows was computed.  net6.0 was computed.  net6.0-android was computed.  net6.0-ios was computed.  net6.0-maccatalyst was computed.  net6.0-macos was computed.  net6.0-tvos was computed.  net6.0-windows was computed.  net7.0 was computed.  net7.0-android was computed.  net7.0-ios was computed.  net7.0-maccatalyst was computed.  net7.0-macos was computed.  net7.0-tvos was computed.  net7.0-windows was computed.  net8.0 was computed.  net8.0-android was computed.  net8.0-browser was computed.  net8.0-ios was computed.  net8.0-maccatalyst was computed.  net8.0-macos was computed.  net8.0-tvos was computed.  net8.0-windows was computed.  net9.0 was computed.  net9.0-android was computed.  net9.0-browser was computed.  net9.0-ios was computed.  net9.0-maccatalyst was computed.  net9.0-macos was computed.  net9.0-tvos was computed.  net9.0-windows was computed.  net10.0 was computed.  net10.0-android was computed.  net10.0-browser was computed.  net10.0-ios was computed.  net10.0-maccatalyst was computed.  net10.0-macos was computed.  net10.0-tvos was computed.  net10.0-windows was computed. 
.NET Core netcoreapp2.0 was computed.  netcoreapp2.1 was computed.  netcoreapp2.2 was computed.  netcoreapp3.0 was computed.  netcoreapp3.1 was computed. 
.NET Standard netstandard2.0 is compatible.  netstandard2.1 was computed. 
.NET Framework net461 was computed.  net462 was computed.  net463 was computed.  net47 was computed.  net471 was computed.  net472 was computed.  net48 was computed.  net481 was computed. 
MonoAndroid monoandroid was computed. 
MonoMac monomac was computed. 
MonoTouch monotouch was computed. 
Tizen tizen40 was computed.  tizen60 was computed. 
Xamarin.iOS xamarinios was computed. 
Xamarin.Mac xamarinmac was computed. 
Xamarin.TVOS xamarintvos was computed. 
Xamarin.WatchOS xamarinwatchos was computed. 
Compatible target framework(s)
Included target framework(s) (in package)
Learn more about Target Frameworks and .NET Standard.

NuGet packages

This package is not used by any NuGet packages.

GitHub repositories

This package is not used by any popular GitHub repositories.

Version Downloads Last Updated
1.19.0 78 9/14/2026