#performance #monitoring #engine #parser #nagios #icinga2 #check

perfdata

解析和处理性能数据,用于Nagios、Icinga2等监控引擎

6个版本 (3个重大更新)

0.4.3 2023年8月19日
0.4.2 2022年5月16日
0.3.0 2022年5月5日
0.2.0 2022年1月24日
0.1.0 2022年1月21日

#1 in #nagios

MIT/Apache

52KB
1K SLoC

Perfdata (性能数据)

Github Tag Crates.io GH Actions Status Documentation

此库是为了满足解析和创建性能数据的基本需求而创建的,这些数据通常由Icinga2或Nagios等监控引擎的检查命令使用。

我在接近生产环境的软件中使用此库,但通常会将此库视为预稳定阶段,因为它仍在不断发展。

用法

通常,您需要在执行收集的数据后的监控引擎调用的检查命令中创建性能数据。

// simple label with a value
let perfdata = Perfdata::unit("label", 23);

// with warn, crit, min and max thresholds
let with_thresholds = Perfdata::unit("thresholds", 42)
    .with_warn(ThresholdRange::inside(33,50))
    .with_crit(ThresholdRange::above(50))
    .with_min(0)
    .with_max(100);

// check thresholds
if with_thresholds.is_warn() {
    println("{} in warning threshold", with_threshold.label())
}
if with_thresholds.is_crit() {
    println("{} in critical threshold", with_threshold.label())
}
   

Perfdata可以使用多个测量单位创建,并格式化为Nagios插件开发指南的规范。

// This will be formatted as 'seconds_label'=10s
Perfdata::seconds("seconds_label", 10);

// This will be formatted as 'percent_label'=50%
Perfdata::percent("percent_label", 50);

// This will be formatted as 'bytes_label'=23b
Perfdata::bytes("bytes_label", 23);

// This will be formatted as 'counter'=10c;@20:30;30;0;100
Perfdata::counter("counter", 10)
  .with_warn(ThresholdRange::inside(20,30))
  .with_crit(ThresholdRange::above_pos(30))
  .with_min(0)
  .with_max(100);

多个Perfdata点可以组合成一个PerfdataSet,它为监控检查提供了一些实用工具,最著名的是MonitoringStatus枚举。

// PerfdataSets can be built from iterators over Perfdata
let mut pds: PerfdataSet = [Perfdata::unit("this is fine", 42), Perfdata::percent("this is also fine")].iter().collect();
let critical = Perfdata::unit(100).with_crit(ThresholdRange::above(50));

// Additional perfdata can be added
pds.add(critical);

// This is MonitoringStatus::Critical
let status = pds.status;()

// Exit with code 2, interpreted by most monitoring engines as "critical" check result
std::process::exit(status.exit_code());

此库还提供了一个基本的解析器,用于处理由常见监控引擎的众多检查命令生成的性能数据。

let input = "'some perf'=42;@75:80;80";
let perfdata = Perfdata::try_from(input).unwrap();

通常,性能数据点以空格分隔的列表生成。可以使用PerfdataSet::try_from()进行解析;

let input = "'some perf'=42;66;75;0;100; 'foo'=23 bar=10"
let pds = PerfdataSet::try_from(input).unwrap();

许可证

根据您的选择,受Apache许可证版本2.0或MIT许可证的许可。除非您明确声明,否则根据Apache-2.0许可证定义的,您有意提交的任何贡献,均应按上述方式双重许可,而无需任何附加条款或条件。

依赖项

~0.3–0.8MB
~19K SLoC