繁体   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