def detect_resource(project=""): """Return the default monitored resource based on the local environment. Args: project (str): The project ID to pass on to the resource (if needed) Returns: google.cloud.logging.Resource: The default resource based on the environment """ gke_cluster_name = retrieve_metadata_server(_GKE_CLUSTER_NAME) gce_instance_name = retrieve_metadata_server(_GCE_INSTANCE_ID) if all([env in os.environ for env in _GAE_ENV_VARS]): # App Engine Flex or Standard return _create_app_engine_resource() elif gke_cluster_name is not None: # Kubernetes Engine return _create_kubernetes_resource() elif all([env in os.environ for env in _LEGACY_FUNCTION_ENV_VARS]) or all( [env in os.environ for env in _FUNCTION_ENV_VARS]): # Cloud Functions return _create_functions_resource() elif all([env in os.environ for env in _CLOUD_RUN_ENV_VARS]): # Cloud Run return _create_cloud_run_resource() elif gce_instance_name is not None: # Compute Engine return _create_compute_resource() else: # use generic global resource return _create_global_resource(project)
def _create_app_engine_resource(): """Create a standardized App Engine resource. Returns: google.cloud.logging.Resource """ zone = retrieve_metadata_server(_ZONE_ID) project = retrieve_metadata_server(_PROJECT_NAME) resource = Resource( type="gae_app", labels={ "project_id": project, "module_id": os.environ.get(_GAE_SERVICE_ENV, ""), "version_id": os.environ.get(_GAE_VERSION_ENV, ""), "zone": zone if zone else "", }, ) return resource
def _create_compute_resource(): """Create a standardized Compute Engine resource. Returns: google.cloud.logging.Resource """ instance = retrieve_metadata_server(_GCE_INSTANCE_ID) zone = retrieve_metadata_server(_ZONE_ID) project = retrieve_metadata_server(_PROJECT_NAME) resource = Resource( type="gce_instance", labels={ "project_id": project, "instance_id": instance if instance else "", "zone": zone if zone else "", }, ) return resource
def _create_kubernetes_resource(): """Create a standardized Kubernetes resource. Returns: google.cloud.logging.Resource """ zone = retrieve_metadata_server(_ZONE_ID) cluster_name = retrieve_metadata_server(_GKE_CLUSTER_NAME) project = retrieve_metadata_server(_PROJECT_NAME) resource = Resource( type="k8s_container", labels={ "project_id": project, "location": zone if zone else "", "cluster_name": cluster_name if cluster_name else "", }, ) return resource
def _create_cloud_run_resource(): """Create a standardized Cloud Run resource. Returns: google.cloud.logging.Resource """ region = retrieve_metadata_server(_REGION_ID) project = retrieve_metadata_server(_PROJECT_NAME) resource = Resource( type="cloud_run_revision", labels={ "project_id": project, "service_name": os.environ.get(_CLOUD_RUN_SERVICE_ID, ""), "revision_name": os.environ.get(_CLOUD_RUN_REVISION_ID, ""), "location": region.split("/")[-1] if region else "", "configuration_name": os.environ.get(_CLOUD_RUN_CONFIGURATION_ID, ""), }, ) return resource
def _create_functions_resource(): """Create a standardized Cloud Functions resource. Returns: google.cloud.logging.Resource """ project = retrieve_metadata_server(_PROJECT_NAME) region = retrieve_metadata_server(_REGION_ID) if _FUNCTION_NAME in os.environ: function_name = os.environ.get(_FUNCTION_NAME) elif _CLOUD_RUN_SERVICE_ID in os.environ: function_name = os.environ.get(_CLOUD_RUN_SERVICE_ID) else: function_name = "" resource = Resource( type="cloud_function", labels={ "project_id": project, "function_name": function_name, "region": region.split("/")[-1] if region else "", }, ) return resource
def get_default_handler(self, **kw): """Return the default logging handler based on the local environment. Args: kw (dict): keyword args passed to handler constructor Returns: logging.Handler: The default log handler based on the environment """ gke_cluster_name = retrieve_metadata_server(_GKE_CLUSTER_NAME) if (_APPENGINE_FLEXIBLE_ENV_VM in os.environ or _APPENGINE_INSTANCE_ID in os.environ): return AppEngineHandler(self, **kw) elif gke_cluster_name is not None: return ContainerEngineHandler(**kw) else: return CloudLoggingHandler(self, **kw)
def get_metadata_server(metadata_key=None, **kwargs): if metadata_key is None: metadata_key = "" data = retrieve_metadata_server(metadata_key) logging.error(f"key: {metadata_key}, data:{data}")
def _call_fut(metadata_key): from google.cloud.logging_v2._helpers import retrieve_metadata_server return retrieve_metadata_server(metadata_key)