[英]How to avoid exceptions with open telemetry + zipkin + python if service is not available?
[英]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.