<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<style type="text/css" style="display:none;"> P {margin-top:0;margin-bottom:0;} </style>
</head>
<body dir="ltr">
<div style="font-family: Calibri, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0); background-color: rgba(0, 0, 0, 0);">
<div></div>
<div><span style="font-family: Calibri, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0); background-color: rgba(0, 0, 0, 0);">I found Python, Java, and Perl plugins to be too heavyweight for a minimal installation, yet found I was writing too much
 code with C, so I decided to write a library for easily creating Collectd plugins in Rust:
</span><a href="https://github.com/nickbabcock/collectd-rust-plugin" id="LPNoLPLPlnk183485"><span style="font-family: Calibri, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0); background-color: rgba(0, 0, 0, 0);">https://github.com/nickbabcock/collectd-rust-plugin</span></a><br>
<br>
</div>
<div></div>
<div></div>
<div><span style="font-family: Calibri, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0); background-color: rgba(0, 0, 0, 0);">Some features:</span></div>
<div></div>
<div><span style="font-family: Calibri, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0); background-color: rgba(0, 0, 0, 0);">- No unnecessary allocations when submitting / receiving values, logging</span></div>
<div><span style="font-family: Calibri, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0); background-color: rgba(0, 0, 0, 0);">- Register multiple plugin instances</span></div>
<div><span style="font-family: Calibri, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0); background-color: rgba(0, 0, 0, 0);">- Automatic deserialization of plugin configs</span></div>
<div><span style="font-family: Calibri, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0); background-color: rgba(0, 0, 0, 0);">- Deployment: compile against collectd version and scp to server</span></div>
<div><span style="font-family: Calibri, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0); background-color: rgba(0, 0, 0, 0);">- Referenced Rust libraries are statically linked<br>
<br>
</span></div>
<div></div>
<div><span style="font-family: Calibri, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0); background-color: rgba(0, 0, 0, 0);">In the repo plugins directory, I show a few examples of what a plugin looks like, including a Load plugin and a minimal
 WriteGraphite plugin.</span></div>
<div></div>
<div><span style="font-family: Calibri, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0); background-color: rgba(0, 0, 0, 0);">My original impetus for this was that I wanted to monitor a subset of docker instances by name and, as far I know, no current
 system monitoring tool does this (cgroup is close but far from perfect).<br>
<br>
</span></div>
<div></div>
<div><span style="font-family: Calibri, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0); background-color: rgba(0, 0, 0, 0);">Couple of downsides to note:<br>
</span></div>
<div></div>
<div><span style="font-family: Calibri, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0); background-color: rgba(0, 0, 0, 0);">- Resulting plugins are larger than C plugins. The largest C plugin (amqp.so at 71KB) is smaller than the smallest Rust
 plugin (200KB with all debugging symbols stripped). This size difference is exasperated when additional Rust libraries are referenced, but  it's still manageable (the docker plugin uses 10 (large) Rust projects and is 1MB stripped)</span></div>
<div><span style="font-family: Calibri, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0); background-color: rgba(0, 0, 0, 0);">- This is not an official collectd project, so the only supported versions are the ones I test on (5.4, 5.5, 5.7, 5.8).<br>
<br>
</span></div>
<div></div>
<div><span style="font-family: Calibri, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0); background-color: rgba(0, 0, 0, 0);">Anyways, I just wanted to drop a line here to make people aware of another alternative to submitting values to collectd.
 I've been using this library with great success for the past couple months and was curious if there were any thoughts or suggestions?<br>
<br>
-Nick<br>
</span></div>
<br>
</div>
</body>
</html>