77import psutil
88
99from opentelemetry import metrics
10+
11+ from opentelemetry .metrics import (
12+ Observation ,
13+ get_meter_provider ,
14+ set_meter_provider ,
15+ )
1016from opentelemetry .exporter .prometheus_remote_write import (
1117 PrometheusRemoteWriteMetricsExporter ,
1218)
1319from opentelemetry .sdk .metrics import MeterProvider
14- from opentelemetry .sdk .metrics .export .aggregate import (
15- HistogramAggregator ,
16- LastValueAggregator ,
17- MinMaxSumCountAggregator ,
18- SumAggregator ,
19- )
20- from opentelemetry .sdk .metrics .view import View , ViewConfig
20+ from opentelemetry .sdk .metrics .export import PeriodicExportingMetricReader
2121
2222logging .basicConfig (stream = sys .stdout , level = logging .INFO )
2323logger = logging .getLogger (__name__ )
2424
25- metrics .set_meter_provider (MeterProvider ())
26- meter = metrics .get_meter (__name__ )
25+
26+ testing_labels = {"environment" : "testing" }
27+
2728exporter = PrometheusRemoteWriteMetricsExporter (
2829 endpoint = "http://cortex:9009/api/prom/push" ,
2930 headers = {"X-Scope-Org-ID" : "5" },
3031)
31- metrics .get_meter_provider ().start_pipeline (meter , exporter , 1 )
32- testing_labels = {"environment" : "testing" }
33-
32+ reader = PeriodicExportingMetricReader (exporter ,1000 )
33+ provider = MeterProvider (metric_readers = [reader ])
34+ metrics .set_meter_provider (provider )
35+ meter = metrics .get_meter (__name__ )
3436
3537# Callback to gather cpu usage
3638def get_cpu_usage_callback (observer ):
3739 for (number , percent ) in enumerate (psutil .cpu_percent (percpu = True )):
3840 labels = {"cpu_number" : str (number )}
39- observer . observe (percent , labels )
41+ yield Observation (percent , labels )
4042
4143
4244# Callback to gather RAM usage
4345def get_ram_usage_callback (observer ):
4446 ram_percent = psutil .virtual_memory ().percent
45- observer . observe (ram_percent , {})
47+ yield Observation (ram_percent , {})
4648
4749
4850requests_counter = meter .create_counter (
4951 name = "requests" ,
5052 description = "number of requests" ,
5153 unit = "1" ,
52- value_type = int ,
5354)
5455
5556request_min_max = meter .create_counter (
5657 name = "requests_min_max" ,
5758 description = "min max sum count of requests" ,
5859 unit = "1" ,
59- value_type = int ,
6060)
6161
6262request_last_value = meter .create_counter (
6363 name = "requests_last_value" ,
6464 description = "last value number of requests" ,
6565 unit = "1" ,
66- value_type = int ,
6766)
6867
69- requests_size = meter .create_valuerecorder (
70- name = "requests_size" ,
71- description = "size of requests" ,
72- unit = "1" ,
73- value_type = int ,
74- )
75-
76- requests_size_histogram = meter .create_valuerecorder (
77- name = "requests_size_histogram" ,
78- description = "histogram of request_size" ,
79- unit = "1" ,
80- value_type = int ,
81- )
82- requests_active = meter .create_updowncounter (
68+ requests_active = meter .create_up_down_counter (
8369 name = "requests_active" ,
8470 description = "number of active requests" ,
8571 unit = "1" ,
86- value_type = int ,
8772)
8873
89- meter .register_sumobserver (
90- callback = get_ram_usage_callback ,
74+ meter .create_observable_counter (
75+ callbacks = [ get_ram_usage_callback ] ,
9176 name = "ram_usage" ,
9277 description = "ram usage" ,
9378 unit = "1" ,
94- value_type = float ,
9579)
9680
97- meter .register_valueobserver (
98- callback = get_cpu_usage_callback ,
81+ meter .create_observable_up_down_counter (
82+ callbacks = [ get_cpu_usage_callback ] ,
9983 name = "cpu_percent" ,
10084 description = "per-cpu usage" ,
10185 unit = "1" ,
102- value_type = float ,
103- )
104-
105-
106- counter_view1 = View (
107- requests_counter ,
108- SumAggregator ,
109- label_keys = ["environment" ],
110- view_config = ViewConfig .LABEL_KEYS ,
111- )
112- counter_view2 = View (
113- request_min_max ,
114- MinMaxSumCountAggregator ,
115- label_keys = ["os_type" ],
116- view_config = ViewConfig .LABEL_KEYS ,
11786)
11887
119- counter_view3 = View (
120- request_last_value ,
121- LastValueAggregator ,
122- label_keys = ["environment" ],
123- view_config = ViewConfig .UNGROUPED ,
124- )
125- size_view = View (
126- requests_size_histogram ,
127- HistogramAggregator ,
128- label_keys = ["environment" ],
129- aggregator_config = {"bounds" : [20 , 40 , 60 , 80 , 100 ]},
130- view_config = ViewConfig .UNGROUPED ,
131- )
132- meter .register_view (counter_view1 )
133- meter .register_view (counter_view2 )
134- meter .register_view (counter_view3 )
135- meter .register_view (size_view )
88+ request_latency = meter .create_histogram ("request_latency" )
13689
13790# Load generator
13891num = random .randint (0 , 1000 )
@@ -145,9 +98,7 @@ def get_ram_usage_callback(observer):
14598 # updown counter
14699 requests_active .add (num % 7231 + 200 , testing_labels )
147100
148- # value observers
149- requests_size .record (num % 6101 + 100 , testing_labels )
150- requests_size_histogram .record (num % 113 , testing_labels )
101+ request_latency .record (num % 92 ,testing_labels )
151102 logger .log (level = INFO , msg = "completed metrics collection cycle" )
152103 time .sleep (1 )
153104 num += 9791
0 commit comments