-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy patho11y.py
More file actions
122 lines (101 loc) · 4.81 KB
/
o11y.py
File metadata and controls
122 lines (101 loc) · 4.81 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
import logging
import os
from typing import Optional
from opentelemetry import metrics, trace
from opentelemetry.sdk.metrics.export import AggregationTemporality
from opentelemetry.sdk.metrics import Counter, Histogram, UpDownCounter
from opentelemetry._logs import set_logger_provider
from opentelemetry.exporter.otlp.proto.grpc._log_exporter import OTLPLogExporter
from opentelemetry.exporter.otlp.proto.grpc.metric_exporter import OTLPMetricExporter
from opentelemetry.exporter.otlp.proto.grpc.trace_exporter import OTLPSpanExporter
from opentelemetry.sdk._logs import LoggerProvider, LoggingHandler
from opentelemetry.sdk._logs.export import BatchLogRecordProcessor, ConsoleLogExporter
from opentelemetry.sdk.metrics import MeterProvider
from opentelemetry.sdk.metrics.export import ConsoleMetricExporter, PeriodicExportingMetricReader
from opentelemetry.sdk.resources import Resource
from opentelemetry.sdk.trace import TracerProvider
from opentelemetry.sdk.trace.export import BatchSpanProcessor, ConsoleSpanExporter
from dotenv import load_dotenv
load_dotenv()
EXPORTER_OTLP_ENDPOINT = os.getenv("OTEL_ENDPOINT","https://otel.highlight.io:4317")
print("OTEL Endpoint is: ", EXPORTER_OTLP_ENDPOINT)
# read the HIGHLIGHT_PROJECT_ID from the environment variable
HIGHLIGHT_PROJECT_ID = os.getenv("HIGHLIGHT_PROJECT_ID", "EMPTY")
print("HIGHLIGHT_PROJECT_ID is: ", HIGHLIGHT_PROJECT_ID)
import sys
def create_logger(service_name: str, environment: Optional[str] = "production", local_debug: bool = False) -> logging.Logger:
if environment is None:
environment = "production"
commit = os.getenv("RENDER_GIT_COMMIT", "unknown")
resource = Resource.create(
{
"service.name": service_name,
"highlight.project_id": HIGHLIGHT_PROJECT_ID,
"environment": environment,
"commit": commit
}
)
logger_provider = LoggerProvider(resource=resource)
set_logger_provider(logger_provider)
exporter = OTLPLogExporter(endpoint=EXPORTER_OTLP_ENDPOINT, insecure=True) if not local_debug else ConsoleLogExporter()
logger_provider.add_log_record_processor(BatchLogRecordProcessor(exporter))
logger = logging.getLogger(service_name)
logger.setLevel(logging.DEBUG)
handler = LoggingHandler(level=logging.DEBUG, logger_provider=logger_provider)
logger.addHandler(handler)
# Add console handler for stdout
console_handler = logging.StreamHandler(sys.stdout)
console_handler.setLevel(logging.DEBUG)
if commit:
formatter = logging.Formatter('commit: ' + commit + ' - %(asctime)s - %(name)s - %(levelname)s - %(message)s')
else:
formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')
console_handler.setFormatter(formatter)
logger.addHandler(console_handler)
return logger
def create_tracer(
service_name: str,
environment: Optional[str] = "production",
local_debug: bool = False
) -> trace.Tracer:
if environment is None:
environment = "production"
commit = os.getenv("RENDER_GIT_COMMIT", "unknown")
provider = TracerProvider(resource=Resource.create(
{
"service.name": service_name,
"highlight.project_id": HIGHLIGHT_PROJECT_ID,
"environment": environment,
"commit": commit
}
))
processor = BatchSpanProcessor(OTLPSpanExporter(endpoint=EXPORTER_OTLP_ENDPOINT, insecure=True)) if not local_debug else BatchSpanProcessor(ConsoleSpanExporter())
provider.add_span_processor(processor)
trace.set_tracer_provider(provider)
tracer = trace.get_tracer(service_name)
return tracer
def get_meter(service_name: str, environment: Optional[str] = "production", local_debug: bool = False) -> metrics.Meter:
if environment is None:
environment = "production"
commit = os.getenv("RENDER_GIT_COMMIT", "unknown")
preferred_temporality: dict[type, AggregationTemporality] = {
Counter: AggregationTemporality.DELTA,
UpDownCounter: AggregationTemporality.DELTA,
Histogram: AggregationTemporality.DELTA,
}
readers = [PeriodicExportingMetricReader(exporter=OTLPMetricExporter(endpoint=EXPORTER_OTLP_ENDPOINT, insecure=True, preferred_temporality=preferred_temporality))]
if local_debug:
readers.append(PeriodicExportingMetricReader(exporter=ConsoleMetricExporter(
preferred_temporality=preferred_temporality
), export_interval_millis=1000))
provider = MeterProvider(resource=Resource.create(
{
"service.name": service_name,
"highlight.project_id": HIGHLIGHT_PROJECT_ID,
"environment": environment,
"commit": commit
}
), metric_readers=readers)
metrics.set_meter_provider(provider)
meter = metrics.get_meter(service_name)
return meter