Skip to content

Commit 6b0f4b5

Browse files
committed
Add support for logs and resources.
1 parent 4124b9b commit 6b0f4b5

File tree

3 files changed

+72
-32
lines changed

3 files changed

+72
-32
lines changed

opentelemetry-configurator-gcp/src/opentelemetry/configurator/gcp/gcloud_env.py

Lines changed: 10 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -32,32 +32,14 @@ def _is_likely_gke():
3232
return ('KUBERNETES_SERVICE_HOST' in os.environ)
3333

3434

35-
_NOT_GOOGLE_CLOUD = 'NOT_GCLOUD'
36-
_GAE = 'GOOGLE_APP_ENGINE'
37-
_CLOUD_RUN = 'CLOUD_RUN'
38-
_GKE = 'GKE'
39-
_GCE = 'GCE'
40-
41-
_detected_environ = None
42-
43-
def _detect_environ():
44-
global _detected_environ
45-
if _detected_environ is not None:
46-
return _detected_environ
47-
if not _can_resolve_metadata_server():
48-
_detected_environ = _NOT_GOOGLE_CLOUD
49-
elif _is_likely_gae():
50-
_detected_environ = _GAE
51-
elif _is_likely_gke():
52-
_detected_environ = _GKE
53-
elif _is_likely_cloud_run():
54-
_detected_environ = _CLOUD_RUN
55-
elif _is_likely_gce():
56-
_detected_environ = _GCE
57-
else:
58-
_detected_environ = _NOT_GOOGLE_CLOUD
59-
return _detected_environ
60-
61-
6235
def is_running_on_gcp():
63-
return _detect_environ() != _NOT_GOOGLE_CLOUD
36+
return (
37+
_can_resolve_metadata_server() and
38+
(
39+
_is_likely_gke() or
40+
_is_likely_cloud_run() or
41+
_is_likely_gce() or
42+
_is_likely_gae()
43+
)
44+
)
45+
Lines changed: 51 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,53 @@
1+
import sys
2+
import os
3+
import os.path
4+
import logging
5+
from opentelemetry.exporter.cloud_logging import (
6+
CloudLoggingExporter,
7+
)
8+
from opentelemetry._logs import set_logger_provider
9+
from opentelemetry.sdk import environment_variables as otel_env_vars
10+
from opentelemetry.sdk._logs import LoggerProvider, LoggingHandler
11+
from opentelemetry.sdk._logs.export import BatchLogRecordProcessor
12+
13+
14+
_LEVEL_NAME_TO_LEVEL = {
15+
'info': logging.INFO,
16+
'error': logging.ERROR,
17+
'debug': logging.DEBUG,
18+
'warning': logging.WARNING,
19+
}
20+
21+
22+
def _get_entrypoint_script_name():
23+
main_script_path = sys.argv[0]
24+
if not main_script_path:
25+
main_script_path = sys.executable
26+
simple_script_name = os.path.basename(main_scripot_path).rstrip('.py')
27+
return simple_script_name
28+
29+
30+
def _get_log_name():
31+
log_name = os.getenv('OTEL_GCP_LOG_NAME')
32+
if log_name:
33+
return log_name
34+
return _get_entrypoint_script_name()
35+
36+
37+
def _get_log_level():
38+
level = os.getenv(otel_env_vars.OTEL_LOG_LEVEL)
39+
if level is None:
40+
return logging.INFO
41+
level_value = _LEVEL_NAME_TO_LEVEL.get(level)
42+
if level_value is None:
43+
return logging.INFO
44+
return level_value
45+
146

247
def configure_logs_exporter(resource=None):
3-
# TODO:...
4-
pass
48+
provider = LoggerProvider(resource=resource)
49+
provider.add_log_record_processor(BatchLogRecordProcessor(
50+
CloudLoggingExporter(default_log_name=_get_log_name())))
51+
set_logger_provider(provider)
52+
handler = LoggingHandler(level=_get_log_level(), logger_provider=provider)
53+
logging.getLogger().addHandler(handler)
Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,13 @@
1+
from opentelemetry.sdk import resources as otel_resources_sdk
2+
from opentelemetry.resourcedetector import gcp_resource_detector
3+
14

25
def get_resource(include_gcp_detector=False):
3-
# TODO: ...
4-
pass
6+
detectors = [
7+
otel_resources_sdk.OTELResourceDetector(),
8+
otel_resources_sdk.ProcessResourceDetector(),
9+
otel_resources_sdk.OsResourceDetector(),
10+
]
11+
if include_gcp_detector:
12+
detectors.append(gcp_resource_detector.GoogleCloudResourceDetector())
13+
return otel_resources_sdk.get_aggregated_resources(detectors)

0 commit comments

Comments
 (0)