|
16 | 16 | import os |
17 | 17 | import time |
18 | 18 |
|
| 19 | +import google.auth |
| 20 | +from google.auth.transport.grpc import AuthMetadataPlugin |
| 21 | +import google.auth.transport.requests |
| 22 | +import grpc |
19 | 23 | from opentelemetry import metrics, trace |
20 | | -from opentelemetry.exporter.cloud_monitoring import ( |
21 | | - CloudMonitoringMetricsExporter, |
| 24 | +from opentelemetry.exporter.otlp.proto.grpc.metric_exporter import ( |
| 25 | + OTLPMetricExporter, |
| 26 | +) |
| 27 | +from opentelemetry.exporter.otlp.proto.grpc.trace_exporter import ( |
| 28 | + OTLPSpanExporter, |
22 | 29 | ) |
23 | | -from opentelemetry.exporter.cloud_trace import CloudTraceSpanExporter |
24 | 30 | from opentelemetry.instrumentation.redis import RedisInstrumentor |
| 31 | +from opentelemetry.resourcedetector.gcp_resource_detector import ( |
| 32 | + GoogleCloudResourceDetector, |
| 33 | +) |
25 | 34 | from opentelemetry.sdk.metrics import MeterProvider |
26 | 35 | from opentelemetry.sdk.metrics.export import PeriodicExportingMetricReader |
| 36 | +from opentelemetry.sdk.resources import Resource, get_aggregated_resources |
27 | 37 | from opentelemetry.sdk.trace import TracerProvider |
28 | 38 | from opentelemetry.sdk.trace.export import BatchSpanProcessor |
29 | 39 | import redis |
30 | 40 | from redis.exceptions import ConnectionError, TimeoutError |
31 | 41 |
|
32 | 42 |
|
| 43 | +def init_telemetry(): |
| 44 | + """Initializes OpenTelemetry with OTLP Exporters and returns the SDK objects.""" |
| 45 | + credentials, project_id = google.auth.default( |
| 46 | + scopes=["https://www.googleapis.com/auth/cloud-platform"] |
| 47 | + ) |
| 48 | + request = google.auth.transport.requests.Request() |
| 49 | + auth_metadata_plugin = AuthMetadataPlugin( |
| 50 | + credentials=credentials, request=request |
| 51 | + ) |
| 52 | + channel_creds = grpc.composite_channel_credentials( |
| 53 | + grpc.ssl_channel_credentials(), |
| 54 | + grpc.metadata_call_credentials(auth_metadata_plugin), |
| 55 | + ) |
33 | 56 |
|
| 57 | + resource = get_aggregated_resources([GoogleCloudResourceDetector()]) |
| 58 | + if project_id: |
| 59 | + resource = resource.merge( |
| 60 | + Resource.create({"gcp.project_id": project_id}) |
| 61 | + ) |
34 | 62 |
|
35 | | -def init_telemetry(): |
36 | | - """Initializes OpenTelemetry with GCP Exporters and returns the SDK objects.""" |
37 | 63 | # 1. Initialize Tracing |
38 | | - tracer_provider = TracerProvider() |
| 64 | + tracer_provider = TracerProvider(resource=resource) |
39 | 65 | tracer_provider.add_span_processor( |
40 | | - BatchSpanProcessor(CloudTraceSpanExporter()) |
| 66 | + BatchSpanProcessor( |
| 67 | + OTLPSpanExporter( |
| 68 | + endpoint="telemetry.googleapis.com:443", |
| 69 | + credentials=channel_creds, |
| 70 | + ) |
| 71 | + ) |
41 | 72 | ) |
42 | 73 | trace.set_tracer_provider(tracer_provider) |
43 | 74 | tracer = trace.get_tracer("redis.client") |
44 | 75 |
|
45 | 76 | # 2. Initialize Metrics |
46 | | - metrics_exporter = CloudMonitoringMetricsExporter() |
| 77 | + metrics_exporter = OTLPMetricExporter( |
| 78 | + endpoint="telemetry.googleapis.com:443", |
| 79 | + credentials=channel_creds, |
| 80 | + ) |
47 | 81 | metric_reader = PeriodicExportingMetricReader( |
48 | 82 | metrics_exporter, export_interval_millis=10000 |
49 | 83 | ) |
50 | | - meter_provider = MeterProvider(metric_readers=[metric_reader]) |
| 84 | + meter_provider = MeterProvider( |
| 85 | + resource=resource, metric_readers=[metric_reader] |
| 86 | + ) |
51 | 87 | metrics.set_meter_provider(meter_provider) |
52 | 88 | meter = metrics.get_meter("redis.metrics") |
53 | 89 |
|
@@ -143,6 +179,7 @@ def smart_redis_call( |
143 | 179 | raise e |
144 | 180 | time.sleep((2**attempt) * 0.1) |
145 | 181 |
|
| 182 | + |
146 | 183 | if __name__ == "__main__": |
147 | 184 | tracer, redis_metrics, tracer_provider, meter_provider = init_telemetry() |
148 | 185 | redis_pool, redis_client = init_redis_pool() |
@@ -171,6 +208,6 @@ def smart_redis_call( |
171 | 208 | except Exception as e: |
172 | 209 | print(f"Error: {e}") |
173 | 210 |
|
174 | | - tracer_provider.force_flush() |
175 | | - meter_provider.force_flush() |
| 211 | + tracer_provider.shutdown() |
| 212 | + meter_provider.shutdown() |
176 | 213 | # [END memorystore_redis_client_side_metrics] |
0 commit comments