|
16 | 16 |
|
17 | 17 | logger = logging.getLogger(__name__) |
18 | 18 |
|
| 19 | +# Custom export pipeline - only create if specific env vars exist |
| 20 | +pipeline_meter = None |
| 21 | +if os.environ.get('SERVICE_NAME') and os.environ.get('DEPLOYMENT_ENVIRONMENT_NAME'): |
| 22 | + from opentelemetry.sdk.resources import Resource |
| 23 | + from opentelemetry.sdk.metrics import MeterProvider |
| 24 | + from opentelemetry.sdk.metrics.export import PeriodicExportingMetricReader |
| 25 | + from opentelemetry.exporter.otlp.proto.grpc.metric_exporter import OTLPMetricExporter |
| 26 | + from opentelemetry.semconv.resource import ResourceAttributes |
| 27 | + |
| 28 | + service_name = os.environ.get('SERVICE_NAME') |
| 29 | + deployment_env = os.environ.get('DEPLOYMENT_ENVIRONMENT_NAME') |
| 30 | + pipeline_resource = Resource.create({ |
| 31 | + #ResourceAttributes.DEPLOYMENT_ENVIRONMENT_NAME maps to dimension 'deployment.name' so "deployment.environment.name" used |
| 32 | + #to assign value correctly. |
| 33 | + ResourceAttributes.SERVICE_NAME: service_name, |
| 34 | + "deployment.environment.name": deployment_env |
| 35 | + }) |
| 36 | + |
| 37 | + pipeline_metric_exporter = OTLPMetricExporter(endpoint="localhost:4317") |
| 38 | + pipeline_metric_reader = PeriodicExportingMetricReader( |
| 39 | + exporter=pipeline_metric_exporter, |
| 40 | + export_interval_millis=1000 |
| 41 | + ) |
| 42 | + |
| 43 | + pipeline_meter_provider = MeterProvider( |
| 44 | + resource=pipeline_resource, |
| 45 | + metric_readers=[pipeline_metric_reader] |
| 46 | + ) |
| 47 | + |
| 48 | + pipeline_meter = pipeline_meter_provider.get_meter("myMeter") |
| 49 | + |
| 50 | + |
19 | 51 | #python equivalent of Meter meter = GlobalOpenTelemetry.getMeter("myMeter"); for custom metrics. |
20 | 52 | meter = metrics.get_meter("myMeter") |
21 | 53 | agent_based_counter = meter.create_counter("agent_based_counter", unit="1", description="agent export counter") |
22 | 54 | agent_based_histogram = meter.create_histogram("agent_based_histogram", description="agent export histogram") |
23 | 55 | agent_based_gauge = meter.create_up_down_counter("agent_based_gauge", unit="1", description="agent export gauge") |
24 | 56 |
|
| 57 | +# Create pipeline metrics only if pipeline exists |
| 58 | +custom_pipeline_counter = None |
| 59 | +custom_pipeline_histogram = None |
| 60 | +custom_pipeline_gauge = None |
| 61 | +if pipeline_meter: |
| 62 | + custom_pipeline_counter = pipeline_meter.create_counter("custom_pipeline_counter", unit="1", description="pipeline export counter") |
| 63 | + custom_pipeline_histogram = pipeline_meter.create_histogram("custom_pipeline_histogram", description="pipeline export histogram") |
| 64 | + custom_pipeline_gauge = pipeline_meter.create_up_down_counter("custom_pipeline_gauge", unit="1", description="pipeline export gauge") |
25 | 65 |
|
26 | 66 | should_send_local_root_client_call = False |
27 | 67 | lock = threading.Lock() |
@@ -63,6 +103,11 @@ def aws_sdk_call(request): |
63 | 103 | agent_based_histogram.record(random.randint(100, 1000), {"Operation": "histogram"}) |
64 | 104 | agent_based_gauge.add(random.randint(-10, 10), {"Operation": "gauge"}) |
65 | 105 |
|
| 106 | + if pipeline_meter: |
| 107 | + custom_pipeline_counter.add(1, {"Operation": "pipeline_counter"}) |
| 108 | + custom_pipeline_histogram.record(random.randint(100, 1000), {"Operation": "pipeline_histogram"}) |
| 109 | + custom_pipeline_gauge.add(random.randint(-10, 10), {"Operation": "pipeline_gauge"}) |
| 110 | + |
66 | 111 | bucket_name = "e2e-test-bucket-name" |
67 | 112 |
|
68 | 113 | # Add a unique test ID to bucketname to associate buckets to specific test runs |
|
0 commit comments