mirror of
https://github.com/open-telemetry/opentelemetry-python-contrib.git
synced 2025-08-01 17:34:38 +08:00

* adding README adding sample app adding examples readme fixing lint errors linting examples updating readme tls_config example excluding examples adding examples to exclude in all linters adding isort.cfg skip changing isort to path ignoring yml only adding it to excluded directories in pylintrc only adding exclude to directory removing readme.rst and adding explicit file names to ignore adding the rest of the files adding readme.rst back adding to ignore glob instead reverting back to ignore list converting README.md to README.rst * addressing readme comments * adding link to spec for details on aggregators * updating readme * adding python-snappy to setup.cfg
154 lines
3.8 KiB
Python
154 lines
3.8 KiB
Python
import logging
|
|
import random
|
|
import sys
|
|
import time
|
|
from logging import INFO
|
|
|
|
import psutil
|
|
|
|
from opentelemetry import metrics
|
|
from opentelemetry.exporter.prometheus_remote_write import (
|
|
PrometheusRemoteWriteMetricsExporter,
|
|
)
|
|
from opentelemetry.sdk.metrics import MeterProvider
|
|
from opentelemetry.sdk.metrics.export.aggregate import (
|
|
HistogramAggregator,
|
|
LastValueAggregator,
|
|
MinMaxSumCountAggregator,
|
|
SumAggregator,
|
|
)
|
|
from opentelemetry.sdk.metrics.view import View, ViewConfig
|
|
|
|
logging.basicConfig(stream=sys.stdout, level=logging.INFO)
|
|
logger = logging.getLogger(__name__)
|
|
|
|
metrics.set_meter_provider(MeterProvider())
|
|
meter = metrics.get_meter(__name__)
|
|
exporter = PrometheusRemoteWriteMetricsExporter(
|
|
endpoint="http://cortex:9009/api/prom/push",
|
|
headers={"X-Scope-Org-ID": "5"},
|
|
)
|
|
metrics.get_meter_provider().start_pipeline(meter, exporter, 1)
|
|
testing_labels = {"environment": "testing"}
|
|
|
|
|
|
# Callback to gather cpu usage
|
|
def get_cpu_usage_callback(observer):
|
|
for (number, percent) in enumerate(psutil.cpu_percent(percpu=True)):
|
|
labels = {"cpu_number": str(number)}
|
|
observer.observe(percent, labels)
|
|
|
|
|
|
# Callback to gather RAM usage
|
|
def get_ram_usage_callback(observer):
|
|
ram_percent = psutil.virtual_memory().percent
|
|
observer.observe(ram_percent, {})
|
|
|
|
|
|
requests_counter = meter.create_counter(
|
|
name="requests",
|
|
description="number of requests",
|
|
unit="1",
|
|
value_type=int,
|
|
)
|
|
|
|
request_min_max = meter.create_counter(
|
|
name="requests_min_max",
|
|
description="min max sum count of requests",
|
|
unit="1",
|
|
value_type=int,
|
|
)
|
|
|
|
request_last_value = meter.create_counter(
|
|
name="requests_last_value",
|
|
description="last value number of requests",
|
|
unit="1",
|
|
value_type=int,
|
|
)
|
|
|
|
requests_size = meter.create_valuerecorder(
|
|
name="requests_size",
|
|
description="size of requests",
|
|
unit="1",
|
|
value_type=int,
|
|
)
|
|
|
|
requests_size_histogram = meter.create_valuerecorder(
|
|
name="requests_size_histogram",
|
|
description="histogram of request_size",
|
|
unit="1",
|
|
value_type=int,
|
|
)
|
|
requests_active = meter.create_updowncounter(
|
|
name="requests_active",
|
|
description="number of active requests",
|
|
unit="1",
|
|
value_type=int,
|
|
)
|
|
|
|
meter.register_sumobserver(
|
|
callback=get_ram_usage_callback,
|
|
name="ram_usage",
|
|
description="ram usage",
|
|
unit="1",
|
|
value_type=float,
|
|
)
|
|
|
|
meter.register_valueobserver(
|
|
callback=get_cpu_usage_callback,
|
|
name="cpu_percent",
|
|
description="per-cpu usage",
|
|
unit="1",
|
|
value_type=float,
|
|
)
|
|
|
|
|
|
counter_view1 = View(
|
|
requests_counter,
|
|
SumAggregator,
|
|
label_keys=["environment"],
|
|
view_config=ViewConfig.LABEL_KEYS,
|
|
)
|
|
counter_view2 = View(
|
|
request_min_max,
|
|
MinMaxSumCountAggregator,
|
|
label_keys=["os_type"],
|
|
view_config=ViewConfig.LABEL_KEYS,
|
|
)
|
|
|
|
counter_view3 = View(
|
|
request_last_value,
|
|
LastValueAggregator,
|
|
label_keys=["environment"],
|
|
view_config=ViewConfig.UNGROUPED,
|
|
)
|
|
size_view = View(
|
|
requests_size_histogram,
|
|
HistogramAggregator,
|
|
label_keys=["environment"],
|
|
aggregator_config={"bounds": [20, 40, 60, 80, 100]},
|
|
view_config=ViewConfig.UNGROUPED,
|
|
)
|
|
meter.register_view(counter_view1)
|
|
meter.register_view(counter_view2)
|
|
meter.register_view(counter_view3)
|
|
meter.register_view(size_view)
|
|
|
|
# Load generator
|
|
num = random.randint(0, 1000)
|
|
while True:
|
|
# counters
|
|
requests_counter.add(num % 131 + 200, testing_labels)
|
|
request_min_max.add(num % 181 + 200, testing_labels)
|
|
request_last_value.add(num % 101 + 200, testing_labels)
|
|
|
|
# updown counter
|
|
requests_active.add(num % 7231 + 200, testing_labels)
|
|
|
|
# value observers
|
|
requests_size.record(num % 6101 + 100, testing_labels)
|
|
requests_size_histogram.record(num % 113, testing_labels)
|
|
logger.log(level=INFO, msg="completed metrics collection cycle")
|
|
time.sleep(1)
|
|
num += 9791
|