Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
22 changes: 22 additions & 0 deletions openrelik_common/telemetry.py
Original file line number Diff line number Diff line change
Expand Up @@ -46,6 +46,8 @@ def strings(...):
import os

from google.auth import compute_engine
from google.auth import exceptions as auth_exceptions
from google.auth import transport
from google.cloud.trace_v2 import TraceServiceClient

from opentelemetry import trace
Expand All @@ -61,6 +63,22 @@ def strings(...):
from opentelemetry.sdk.trace.export import BatchSpanProcessor


def _get_gcp_project_id():
"""Returns the GCP Project ID as a string."""

auth_request = transport.requests.Request()

try:
project_id = compute_engine._metadata.get_project_id(auth_request)
return project_id
except auth_exceptions.TransportError as e:
logger = logging.get_logger("common-lib")
logger.error(
f"Could not get project_id from GCE metadata server: {e}"
)
return None


def is_enabled():
"""Returns True if telemetry is enabled.

Expand Down Expand Up @@ -111,8 +129,12 @@ def setup_telemetry(service_name: str):
# Explicitly pass credentials from the GKE Metadata Server
# This ignores GOOGLE_APPLICATION_CREDENTIALS
credentials = compute_engine.Credentials()
# We also require to provide the GCP project ID, or else the trace
# library will default back to ADC.
# https://github.com/GoogleCloudPlatform/opentelemetry-operations-python/blob/af5d0725de16c84417f993a21fea3f346e0780c7/opentelemetry-exporter-gcp-trace/src/opentelemetry/exporter/cloud_trace/__init__.py#L179
trace_client = TraceServiceClient(credentials=credentials)
trace_exporter = cloud_trace.CloudTraceSpanExporter(
project_id=_get_gcp_project_id(),
resource_regex=r"service.*",
client=trace_client
)
Expand Down
Loading