#prometheus #encoder #json #text #docs #latest #json-encoder

prometheus-json-encoder

prometheus crate 的 JSON 编码器实现:https://docs.rs/prometheus/latest/prometheus/

1 个不稳定版本

0.1.1 2022年7月15日
0.1.0 2022年7月15日

#51 in #latest

Apache-2.0

17KB
266 行代码(不包括注释)

prometheus-json-encoder

实现了用于 prometheus 0.13.0JsonEncoder 对象。

基本示例

use opentelemetry::{global, KeyValue, sdk::Resource};
use opentelemetry_prometheus::PrometheusExporter;
use prometheus_json_encoder::JsonEncoder;

fn init_meter() -> PrometheusExporter {
    opentelemetry_prometheus::exporter()
        .with_resource(Resource::new(vec![KeyValue::new("R", "V")]))
        .init()
}

fn main(){
    let exporter = init_meter();
    let meter = global::meter("my-app");

    // Use two instruments
    let counter = meter
        .u64_counter("a.counter")
        .with_description("Counts things")
        .init();
    let recorder = meter
        .i64_value_recorder("a.value_recorder")
        .with_description("Records values")
        .init();

    counter.add(100, &[KeyValue::new("key", "value1")]);
    counter.add(100, &[KeyValue::new("key", "value2")]);
    counter.add(100, &[KeyValue::new("key2", "value")]);
    recorder.record(100, &[KeyValue::new("key", "value")]);

    // Encode data as text or protobuf
    let encoder = JsonEncoder::new();
    let metric_families = exporter.registry().gather();
    let mut result = Vec::new();
    encoder.encode(&metric_families, &mut result);
    println!("format :\n{}", encoder.format_type());
    println!("{:?}", result);
    let test = std::str::from_utf8(&result).unwrap();
    println!("{}", test)
    
}


依赖关系

~4–10MB
~110K SLoC