簡體   English   中英

在 Open Telemetry Python 中更新 ObservableGauge

[英]Update ObservableGauge in Open Telemetry Python

我正在使用 opentelemetry-api 1.14 和 opentelemetry-sdk 1.14。 我知道如何創建和使用 Counter 和 ObservableGauge 工具。 但是,我需要在整個應用程序中以類似於計數器使用其 add 方法的方式更新和設置儀表。 我在下面有工作代碼,但在這個工作代碼中,儀表在 9 處是靜態的。

import time
""" API is the interface that you should interact with."""
from opentelemetry import metrics
"""
SDK is the implementation. Only access SDK during initialization, startup, and shutdown.
"""
from opentelemetry.sdk.metrics.export import PeriodicExportingMetricReader, ConsoleMetricExporter
from opentelemetry.sdk.metrics import MeterProvider
from opentelemetry.sdk.resources import Resource

def initialize():
    resource = Resource(attributes={"service.name": "otel-test"})
    readers = []

    # Console Exporter
    exporter = ConsoleMetricExporter() 
    reader1 = PeriodicExportingMetricReader(exporter, export_interval_millis=5000) 
    readers.append(reader1)

    provider = MeterProvider(metric_readers=readers, resource=resource) 
    metrics.set_meter_provider(provider) 

initialize()

provider = metrics.get_meter_provider()
meter =  provider.get_meter("my-demo-meter")

simple_counter = meter.create_counter("simple_counter", description="simply increments each loop")
# Async Gauge
def observable_gauge_func(options):
    yield metrics.Observation(9, {})
simple_gauge = meter.create_observable_gauge("simple_gauge", [observable_gauge_func])

# How can I update simple_gauge in main
def main():
    loop_counter = 0
    while True:
        print(loop_counter)
        loop_counter += 1
        simple_counter.add(1)
        # How can I update simple_gauge here?
        time.sleep(5)

main()

我不確定這是否是實現 ObservableGauge 工具的最佳模式,但考慮到我的問題中描述的要求(即更新主函數中的儀表),這是我用來為我的應用程序實現它的方法。 考慮到在線的 ObservableGauge 儀器示例很少,它值得提供。

import time
import random
""" API is the interface that you should interact with."""
from opentelemetry import metrics
"""
SDK is the implementation. Only access SDK during initialization, startup, and shutdown.
"""
from opentelemetry.sdk.metrics.export import PeriodicExportingMetricReader, ConsoleMetricExporter
from opentelemetry.sdk.metrics import MeterProvider
from opentelemetry.sdk.resources import Resource

def initialize():
    resource = Resource(attributes={"service.name": "otel-test"})
    readers = []

    # Console Exporter
    exporter = ConsoleMetricExporter() 
    reader1 = PeriodicExportingMetricReader(exporter, export_interval_millis=5000) 
    readers.append(reader1)

    provider = MeterProvider(metric_readers=readers, resource=resource) 
    metrics.set_meter_provider(provider) 

initialize()

provider = metrics.get_meter_provider()
meter =  provider.get_meter("my-demo-meter")

simple_counter = meter.create_counter("simple_counter", description="simply increments each loop")
def create_simple_gauge(signal):
    # Async Gauge
    def observable_gauge_func(options):
        yield metrics.Observation(signal.get_current_value(), {"simple_attribute": signal.attribute})
    simple_gauge = meter.create_observable_gauge("simple_gauge", [observable_gauge_func])
    return simple_gauge


class Signal:
    def __init__(self, attribute):
        self.attribute = attribute

    def set_current_value(self, i):
        self.current_value = i
    
    def get_current_value(self):
        return self.current_value

# How can I update the simple_gauge here?
def main():
    loop_counter = 0
    simple_signal = Signal("simple_attribute")
    create_simple_gauge(simple_signal)
    while True:
        print(loop_counter)
        loop_counter += 1
        simple_counter.add(1)

        randint = random.randint(0, 5)
        print(randint)
        simple_signal.set_current_value(randint)

        time.sleep(5)

main()

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM