指標 Exporter

概觀

LoadDensity 內含三個可觀測性 sink,掛上 Locust 的 request 事件,逐請求送出指標。三者皆 lazy load,並以選用 extras 提供。

Prometheus

安裝:pip install je_load_density[prometheus]

from je_load_density import start_prometheus_exporter
start_prometheus_exporter(port=9646, addr="127.0.0.1")

指標:

  • loaddensity_requests_total{request_type, name, outcome} — counter

  • loaddensity_request_latency_ms{request_type, name} — histogram

  • loaddensity_response_bytes{request_type, name} — histogram

預設僅綁 loopback。要對 Docker / Kubernetes scraping target 開放,請改傳 addr="0.0.0.0"

InfluxDB

僅用標準函式庫,無需額外套件。可選 UDP(fire-and-forget)或 HTTP(含 token)。

from je_load_density import start_influxdb_sink

# InfluxDB UDP listener
start_influxdb_sink(transport="udp", host="127.0.0.1", port=8089)

# HTTPS write API
start_influxdb_sink(
    transport="http",
    url="https://eu-central-1-1.aws.cloud2.influxdata.com/api/v2/write?org=...&bucket=...",
    token="...",
)

HTTP transport 會拒絕非 http:// / https:// 的 URL。

OpenTelemetry

安裝:pip install je_load_density[opentelemetry]

from je_load_density import start_opentelemetry_exporter
start_opentelemetry_exporter(
    endpoint="http://otel-collector:4317",
    service_name="loaddensity",
    export_interval_ms=5000,
)

送出的儀器:

  • loaddensity.requests — counter

  • loaddensity.request.latency — histogram(ms)

  • loaddensity.response.size — histogram(bytes)

每個儀器皆攜帶 request_typenameoutcome 屬性。

Stop helpers

每個 start_* 都有對應的 stop_*,會卸下 listener(並 shutdown OTel provider)。Prometheus HTTP server 因 prometheus_client 沒提供 stop hook,只能繼續執行。

動作 JSON

{"load_density": [
  ["LD_start_prometheus_exporter", {"port": 9646, "addr": "127.0.0.1"}],
  ["LD_start_test", {...}],
  ["LD_stop_prometheus_exporter", {}]
]}