Prometheus metrics model, registry, and OpenMetrics text exporter for MoonBit.
moon add guiqi695/moon-prometheus-sdk@0.1.0///|
fn main raise {
let registry = @prometheus.Registry::new()
let requests = @prometheus.Counter::new(
"http_requests_total",
help="Total HTTP requests",
)
let in_flight = @prometheus.Gauge::new(
"in_flight_requests",
help="Requests currently being served",
)
let latency = @prometheus.Histogram::new(
"http_request_duration_seconds",
[0.01, 0.05, 0.1, 0.5, 1.0],
help="HTTP request latency",
unit="seconds",
)
registry.register_counter(requests)
registry.register_gauge(in_flight)
registry.register_histogram(latency)
in_flight.inc()
requests.inc()
latency.observe(0.042)
in_flight.dec()
println(@prometheus.encode(registry))
}moon run examples/basiclet c = @prometheus.Counter::new("http_requests_total", help="Total HTTP requests")
c.inc()
c.add(5.0)
let g = @prometheus.Gauge::new("in_flight_requests", help="In-flight requests")
g.inc()
g.dec()
g.set(42.0)
let h = @prometheus.Histogram::new(
"http_request_duration_seconds",
[0.005, 0.01, 0.025, 0.05, 0.1, 0.25, 0.5, 1.0, 2.5, 5.0, 10.0],
help="Request duration",
unit="seconds",
)
h.observe(0.047)let descriptor = @prometheus.Descriptor::new(
"http_responses_total",
CounterKind,
help="Responses by outcome and status",
variable_label_names=["outcome", "code"],
)
let responses = @prometheus.CounterVec::new(descriptor, cardinality_limit=32)
responses.with_labels({ "outcome": "ok", "code": "200" }).inc()
responses.with_label_values(["error", "500"]).add(2.0)
registry.register_counter_vec(responses)// 显式 Registry(推荐用于库和多租户场景)
let registry = @prometheus.Registry::new()
let handle = registry.register_counter(my_counter)
ignore(registry.unregister(handle))
// 进程级默认 Registry(小型单 owner 应用)
let reg = @prometheus.default_registry()
let h = reg.register_counter_with_handle(my_counter)let build = @prometheus.BuildInfoCollector::new(
"0.1.0",
revision="abc123",
target="native",
)
ignore(registry.register_collector(build.collector()))let response = @prometheus.handle_metrics(
registry,
accept="application/openmetrics-text; version=1.0.0",
)
// 将 response.status、response.headers、response.body 写入 HTTP 框架moon run cmd/metrics_demo --target native
curl -i http://127.0.0.1:9464/metricsmoon update
moon check --target all
moon build --target all
moon test --target native
moon run examples/basicMOON_BIN=moon GO_BIN=go PROMTOOL_BIN=promtool bash scripts/acceptance.shPACKAGE_VERSION=0.1.0 bash scripts/published_package_smoke.sh| target | Linux | macOS | Windows |
|---|---|---|---|
| Wasm / Wasm-GC / JavaScript | 支持 | 支持 | 支持 |
| native | 支持(POSIX/pthread) | 支持(POSIX/pthread) | 当前不支持 |
bash scripts/acceptance.sh
moon publish --dry-run
moon publish
PACKAGE_VERSION=0.1.0 bash scripts/published_package_smoke.shfn encode_registry(registry : Registry, format : ExpositionFormat) -> EncodedExposition raise EncodingErrorfn encode_snapshot(snapshot : GatherSnapshot, format : ExpositionFormat) -> EncodedExposition raise EncodingErrorfn negotiated_metrics_response(accept : String?, prometheus_body : String, openmetrics_body : String) -> MetricsResponseInstall
Download zipPrometheus metrics model, registry, and OpenMetrics text exporter for MoonBit.