Duibonduil commited on
Commit
0d77048
·
verified ·
1 Parent(s): bdaabf1

Upload otlp_log.py

Browse files
aworld/logs/opentelemetry/otlp_log.py ADDED
@@ -0,0 +1,62 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import requests
2
+ from urllib.parse import urljoin
3
+ from opentelemetry.exporter.otlp.proto.http._log_exporter import OTLPLogExporter
4
+ from opentelemetry.exporter.otlp.proto.http import Compression
5
+ from opentelemetry.sdk._logs import LoggerProvider as SDKLoggerProvider
6
+ from opentelemetry.sdk._logs._internal import SynchronousMultiLogRecordProcessor
7
+ from opentelemetry.sdk._logs.export import BatchLogRecordProcessor
8
+
9
+ from ..log import LoggerProvider
10
+ class OTLPLoggerProvider(LoggerProvider):
11
+
12
+ def __init__(self,
13
+ backend: str = None,
14
+ base_url: str = None,
15
+ write_token: str = None,
16
+ **kwargs
17
+ ) -> None:
18
+ self._logger_provider = _build_otlp_privider(backend=backend,
19
+ base_url=base_url,
20
+ write_token=write_token)
21
+
22
+
23
+
24
+ def _build_otlp_privider(backend: str = None, base_url: str = None, write_token: str = None):
25
+ """Build the otlp provider.
26
+ Args:
27
+ backends: The backends to use.
28
+ write_token: The write token to use.
29
+ **kwargs: Additional keyword arguments to pass to the provider.
30
+ Returns:
31
+ The otlp provider.
32
+ """
33
+ backend = backend or "logfire"
34
+ if backend == "logfire":
35
+ log_exporter = _configure_logfire_exporter(write_token=write_token, base_url=base_url)
36
+ else:
37
+ raise ValueError(f"Unknown backend: {backend}")
38
+
39
+ otlp_log_processor = BatchLogRecordProcessor(log_exporter)
40
+ multi_log_processor = SynchronousMultiLogRecordProcessor()
41
+ multi_log_processor.add_log_record_processor(otlp_log_processor)
42
+ logger_provider = SDKLoggerProvider()
43
+ logger_provider.add_log_record_processor(multi_log_processor)
44
+ return logger_provider
45
+
46
+
47
+ def _configure_logfire_exporter(write_token: str, base_url: str = None) -> None:
48
+ """Configure the Logfire exporter.
49
+ Args:
50
+ write_token: The write token to use.
51
+ base_url: The base URL to use.
52
+ **kwargs: Additional keyword arguments to pass to the exporter.
53
+ """
54
+ base_url = base_url or "https://logfire-us.pydantic.dev"
55
+ headers = {'User-Agent': f'logfire/3.14.0', 'Authorization': write_token}
56
+ session = requests.Session()
57
+ session.headers.update(headers)
58
+ return OTLPLogExporter(
59
+ endpoint=urljoin(base_url, '/v1/logs'),
60
+ session=session,
61
+ compression=Compression.Gzip,
62
+ )