指標 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}— counterloaddensity_request_latency_ms{request_type, name}— histogramloaddensity_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— counterloaddensity.request.latency— histogram(ms)loaddensity.response.size— histogram(bytes)
每個儀器皆攜帶 request_type、name、outcome 屬性。
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", {}]
]}