14 releases

new 0.0.6-dev.0 Mar 2, 2026
0.0.5 Aug 12, 2025
0.0.4-alpha.1 Feb 19, 2025
0.0.3-alpha.1 Jun 5, 2024
0.0.1-alpha.9 Jul 31, 2023

#232 in Debugging

Download history 390/week @ 2025-11-09 783/week @ 2025-11-16 639/week @ 2025-11-23 322/week @ 2025-11-30 391/week @ 2025-12-07 198/week @ 2025-12-14 249/week @ 2025-12-21 439/week @ 2025-12-28 788/week @ 2026-01-04 508/week @ 2026-01-11 553/week @ 2026-01-18 221/week @ 2026-01-25 131/week @ 2026-02-01 272/week @ 2026-02-08 281/week @ 2026-02-15 270/week @ 2026-02-22

963 downloads per month
Used in 3 crates (via holochain_metrics)

MIT/Apache

110KB
2K SLoC

Project Forum Chat

License: MIT License: Apache-2.0

High-level Rust integration of opentelemetry metrics and InfluxDB.

Examples

Easy, zero-configuration InfluxDB as a child process

let tmp = tempfile::tempdir().unwrap();

// create our meter provider
let (_influxive, meter_provider) = influxive::influxive_child_process_meter_provider(
    influxive::InfluxiveChildSvcConfig::default()
        .with_database_path(Some(tmp.path().to_owned())),
    influxive::InfluxiveMeterProviderConfig::default(),
).await.unwrap();

// register our meter provider
opentelemetry_api::global::set_meter_provider(meter_provider);

// create a metric
let m = opentelemetry_api::global::meter("my.meter")
    .f64_histogram("my.metric")
    .init();

// make a recording
m.record(3.14, &[]);

Connecting to an already running InfluxDB system process

// create our meter provider
let meter_provider = influxive::influxive_external_meter_provider_token_auth(
    influxive::InfluxiveWriterConfig::default(),
    influxive::InfluxiveMeterProviderConfig::default(),
    "http://127.0.0.1:8086",
    "my.bucket",
    "my.token",
);

// register our meter provider
opentelemetry_api::global::set_meter_provider(meter_provider);

// create a metric
let m = opentelemetry_api::global::meter("my.meter")
    .f64_histogram("my.metric")
    .init();

// make a recording
m.record(3.14, &[]);

Writing to an influx file

// create our meter provider
let meter_provider = influxive::influxive_file_meter_provider(
    influxive::InfluxiveWriterConfig::create_with_influx_file(std::path::PathBuf::from("my-metrics.influx")),
    influxive::InfluxiveMeterProviderConfig::default(),
);

// register our meter provider
opentelemetry_api::global::set_meter_provider(meter_provider);

// create a metric
let m = opentelemetry_api::global::meter("my.meter")
    .f64_histogram("my.metric")
    .init();

// make a recording
m.record(3.14, &[]);

// Read and use data in "my-metrics.influx"

Core types for influxive crates. The main point of this crate is to expose

the [MetricWriter] trait to be used by downstream influxive crates.

Example [Metric] type creation:

let _metric = influxive_core::Metric::new(std::time::SystemTime::now(), "my.name")
    .with_field("field.bool", true)
    .with_field("field.float", 3.14)
    .with_field("field.signed", -42)
    .with_field("field.unsigned", 42)
    .with_field("field.string", "string.value")
    .with_tag("tag.bool", true)
    .with_tag("tag.float", 3.14)
    .with_tag("tag.signed", -42)
    .with_tag("tag.unsigned", 42)
    .with_tag("tag.string", "string.value");

Run influxd as a child process.

Example

use influxive_core::Metric;
use influxive_child_svc::*;

let tmp = tempfile::tempdir().unwrap();

let influxive = InfluxiveChildSvc::new(
    InfluxiveChildSvcConfig::default()
        .with_database_path(Some(tmp.path().to_owned())),
).await.unwrap();

influxive.write_metric(
    Metric::new(
        std::time::SystemTime::now(),
        "my.metric",
    )
    .with_field("value", 3.14)
    .with_tag("tag", "test-tag")
);

Influxive system download utility.

Download influxive DB binary if not present in PATH.

Opentelemetry metrics bindings for influxive-child-svc.

Example

use influxive_writer::*;
use std::sync::Arc;

// create an influxive writer
let writer = InfluxiveWriter::with_token_auth(
    InfluxiveWriterConfig::default(),
    "http://127.0.0.1:8086",
    "my.bucket",
    "my.token",
);

// register the meter provider
opentelemetry_api::global::set_meter_provider(
    influxive_otel::InfluxiveMeterProvider::new(
        Default::default(),
        Arc::new(writer),
    )
);

// create a metric
let m = opentelemetry_api::global::meter("my.meter")
    .f64_histogram("my.metric")
    .init();

// make a recording
m.record(3.14, &[]);

Writer

Rust utility for efficiently writing metrics to InfluxDB. Metrics can be written directly to a running InfluxDB instance or written to a Line Protocol file on disk that can be pushed to InfluxDB using Telegraf.

Example

Writing to a running InfluxDB instance

use influxive_core::Metric;
use influxive_writer::*;

let writer = InfluxiveWriter::with_token_auth(
    InfluxiveWriterConfig::default(),
    "http://127.0.0.1:8086",
    "my.bucket",
    "my.token",
);

writer.write_metric(
    Metric::new(
        std::time::SystemTime::now(),
        "my.metric",
    )
    .with_field("value", 3.14)
    .with_tag("tag", "test-tag")
);

Writing to a file on disk

use influxive_core::Metric;
use influxive_writer::*;

let path = std::path::PathBuf::from("my-metrics.influx");
let config = InfluxiveWriterConfig::create_with_influx_file(path.clone());
// The file backend ignores host/bucket/token
let writer = InfluxiveWriter::with_token_auth(config, "", "", "");

writer.write_metric(
    Metric::new(
        std::time::SystemTime::now(),
        "my.metric",
    )
    .with_field("value", 3.14)
    .with_tag("tag", "test-tag")
);

// Now you can read and use the metrics file `my-metrics.influx`

Dependencies

~16–38MB
~483K SLoC