opentelemetry-python icon indicating copy to clipboard operation
opentelemetry-python copied to clipboard

Gauge read at startup then disapears

Open Filigran-Automation opened this issue 8 months ago • 2 comments

Describe your environment

OS: debian Python version: 3.11.2 SDK version: 1.31 & 1.24 API version: 1.31 & 1.24

What happened?

I expect the following code to show both gauge & counter every 1s in the console (or when scrapped by prometheus client) but it does not. counter is always there. gauge is there when launching the script (very first seconds) then disapears.


import random
import time

from prometheus_client import start_http_server

from opentelemetry.exporter.prometheus import PrometheusMetricReader
from opentelemetry.metrics import get_meter_provider, set_meter_provider
from opentelemetry.sdk.metrics import MeterProvider
from opentelemetry.sdk.metrics.export import (
    ConsoleMetricExporter,
    PeriodicExportingMetricReader,
)

# Start Prometheus client
start_http_server(port=8000, addr="0.0.0.0")
# Exporter to export metrics to Prometheus
prefix = "MyAppPrefix"
reader = PrometheusMetricReader(prefix)
reader2 = PeriodicExportingMetricReader(ConsoleMetricExporter(), export_interval_millis=1_000)
# Meter is responsible for creating and recording metrics
set_meter_provider(MeterProvider(metric_readers=[reader, reader2]))
meter = get_meter_provider().get_meter("view-name-change", "0.1.2")

my_counter = meter.create_counter("my.counter")
my_gauge = meter.create_gauge("my.gauge")

while 1:
    my_gauge.set(random.randint(1, 10))
    my_counter.add(random.randint(1, 10))
    time.sleep(61)

Steps to Reproduce

run the script above

Expected Result

gauge to be exported properly

Actual Result

gauge is not exported properly

Additional context

No response

Would you like to implement a fix?

No

Filigran-Automation avatar Mar 27 '25 15:03 Filigran-Automation

This is the expected behavior no? Like, gauge uses LastValueAggregation, it will be exported when you have a new value to export, like when you call gauge.set() again

emdneto avatar Apr 03 '25 15:04 emdneto

Hi @Filigran-Automation -- have you looked at using an ObservableGauge instead?

pmcollins avatar Apr 07 '25 17:04 pmcollins