Skip to content

Noisy null values in metric point data_points #2725

@srikanthccv

Description

@srikanthccv

Noticed large number of None values from returned metric point data_points. Run this example for some time and you should notice it.

import random
import time
from typing import Iterable

from opentelemetry.metrics import (
    CallbackOptions,
    Observation,
    get_meter_provider,
    set_meter_provider,
)
from opentelemetry.sdk.metrics import MeterProvider
from opentelemetry.sdk.metrics.export import InMemoryMetricReader

reader = InMemoryMetricReader()
provider = MeterProvider(metric_readers=[reader])
set_meter_provider(provider)


values = ["v1", "v2", "v3", "v4"]


def observable_counter_func(options: CallbackOptions) -> Iterable[Observation]:
    yield Observation(1, {"k1": random.choice(values), "k2": random.choice(values)})


def observable_up_down_counter_func(
    options: CallbackOptions,
) -> Iterable[Observation]:
    yield Observation(-10, {"k2": random.choice(values), "k3": random.choice(values)})


def observable_gauge_func(options: CallbackOptions) -> Iterable[Observation]:
    yield Observation(9, {"k4": random.choice(values)})


meter = get_meter_provider().get_meter("getting-started", "0.1.2")

# Counter
counter = meter.create_counter("counter")
counter.add(1)

# Async Counter
observable_counter = meter.create_observable_counter(
    "observable_counter",
    [observable_counter_func],
)

# UpDownCounter
updown_counter = meter.create_up_down_counter("updown_counter")
updown_counter.add(1)
updown_counter.add(-5)

# Async UpDownCounter
observable_updown_counter = meter.create_observable_up_down_counter(
    "observable_updown_counter", [observable_up_down_counter_func]
)

# Histogram
histogram = meter.create_histogram("histogram")
histogram.record(99.9)

# Async Gauge
gauge = meter.create_observable_gauge("gauge", [observable_gauge_func])


while 1:

    metrics = reader.get_metrics_data().resource_metrics[0].scope_metrics[0].metrics
    for metric in metrics:
        data_points = list(metric.data.data_points)
        print(data_points)
    time.sleep(1)

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething isn't workingmetricssdkAffects the SDK package.

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions