EEEEH
EEEEH

Reputation: 779

How to get execution ID for Google Cloud Functions triggered from HTTP?

I am trying to write logs to Logging from Python applications by using Cloud Logging API Cloud client library with "execution ID" that as same as google's default value.

enter image description here

logger setup:

from google.cloud import logging
from google.cloud.logging.resource import Resource


log_client = logging.Client()

# This is the resource type of the log
log_name = 'cloudfunctions.googleapis.com%2Fcloud-functions'

# Inside the resource, nest the required labels specific to the resource type
res = Resource(type="cloud_function",
               labels={
                   "function_name": "my-function",
                   "region": "asia-east2"
               })
logger = log_client.logger(log_name.format("my-project"))

write log:

logger.log_struct({"message": request.remote_addr}, resource=res, severity='INFO')

Upvotes: 2

Views: 2997

Answers (2)

Keegan Morrison
Keegan Morrison

Reputation: 31

I had the same issue using an older version of google-cloud-logging. I was able to get this functional using the default python logging module. In a cloud function running python 3.8 and google-cloud-logging==2.5.0, the executionId is correctly logged with logs, as well as the severity within stackdriver.

main.py:

# Imports the Cloud Logging client library
import google.cloud.logging
# Instantiates a client
client = google.cloud.logging.Client()

# Retrieves a Cloud Logging handler based on the environment
# you're running in and integrates the handler with the
# Python logging module. By default this captures all logs
# at INFO level and higher
client.get_default_handler()
client.setup_logging()


# Imports Python standard library logging
import logging
def hello_world(req):
  # Emits the data using the standard logging module
  logging.info('info')
  logging.warning('warn')
  logging.error('error')
  return ""

requirements.txt:

google-cloud-logging==2.5.0

Triggering this cloud function results in the following in stackdriver: python cloud function logging

Upvotes: 2

Rafael Lemos
Rafael Lemos

Reputation: 5819

It's currently not possible to do this using the purely the Cloud Function Framework itself, but you can try to extract the executionId from the request itself by using the following:

request.headers.get('function-execution-id')

I found an issue in Cloud Functions Github tracking the implementation of a native way to get those values, you can follow this thread for updates, if you'd like.

Upvotes: 3

Related Questions