<div dir="ltr"><br><div class="gmail_extra"><br><div class="gmail_quote">On Tue, Oct 11, 2016 at 2:05 PM, Francesco Romani <span dir="ltr">&lt;<a href="mailto:fromani@redhat.com" target="_blank">fromani@redhat.com</a>&gt;</span> wrote:<br><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">Hi all,<br>
<br>
In the last 2.5 days I was exploring if and how we can integrate collectd and Vdsm.<br>
<br>
The final picture could look like:<br>
1. collectd does all the monitoring and reporting currently Vdsm does<br>
2. Engine consumes data from collectd<br>
3. Vdsm consumes *notifications* from collectd - for few but important tasks like Drive high water mark monitoring<br>
<br>
Benefits (aka: why to bother?):<br>
1. less code in Vdsm / long-awaited modularization of Vdsm<br>
2. better integration with the system, reuse of well-known components<br>
3. more flexibility in monitoring/reporting: collectd is special purpose existing solution<br>
4. faster, more scalable operation because all the monitoring can be done in C<br>
<br>
At first glance, Collectd seems to have all the tools we need.<br>
1. A plugin interface (<a href="https://collectd.org/wiki/index.php/Plugin_architecture" rel="noreferrer" target="_blank">https://collectd.org/wiki/<wbr>index.php/Plugin_architecture</a> and <a href="https://collectd.org/wiki/index.php/Table_of_Plugins" rel="noreferrer" target="_blank">https://collectd.org/wiki/<wbr>index.php/Table_of_Plugins</a>)<br>
2. Support for notifications and thresholds (<a href="https://collectd.org/wiki/index.php/Notifications_and_thresholds" rel="noreferrer" target="_blank">https://collectd.org/wiki/<wbr>index.php/Notifications_and_<wbr>thresholds</a>)<br>
3. a libvirt plugin <a href="https://collectd.org/wiki/index.php/Plugin:virt" rel="noreferrer" target="_blank">https://collectd.org/wiki/<wbr>index.php/Plugin:virt</a><br>
<br>
So, the picture is like<br>
<br>
1. we start requiring collectd as dependency of Vdsm<br>
2. we either configure it appropriately (collectd support config drop-ins: /etc/collectd.d) or we document our requirements (or both)<br>
3. collectd monitors the hosts and libvirt<br>
4. Engine polls collectd<br>
5. Vdsm listens from notifications<br>
<br>
Should libvirt deliver us the event we need (see <a href="https://bugzilla.redhat.com/show_bug.cgi?id=1181659" rel="noreferrer" target="_blank">https://bugzilla.redhat.com/<wbr>show_bug.cgi?id=1181659</a>),<br>
we can just stop using collectd notifications, everything else works as previously.<br>
<br>
Challenges:<br>
1. Collectd does NOT consider the plugin API stable (<a href="https://collectd.org/wiki/index.php/Plugin_architecture#The_interface.27s_stability" rel="noreferrer" target="_blank">https://collectd.org/wiki/<wbr>index.php/Plugin_architecture#<wbr>The_interface.27s_stability</a>)<br>
   so the plugins should be inclueded in the main tree, much like the modules of the linux kernel<br>
   Worth mentioning that the plugin API itself has a good deal of rough edges.<br>
   we will need to maintain this plugin ourselves, *and* we need to maintain our thin API<br>
   layer, to make sure the plugin loads and works with recent versions of collectd.<br>
2. the virt plugin is out of date, doesn&#39;t report some data we need: see <a href="https://github.com/collectd/collectd/issues/1945" rel="noreferrer" target="_blank">https://github.com/collectd/<wbr>collectd/issues/1945</a><br>
3. the notification message(s) are tailored for human consumption, those messages are not easy<br>
   to parse for machines.<br>
4. the threshold support in collectd seems to match values against constants; it doesn&#39;t seem possible<br>
   to match a value against another one, as we need to do for high water monitoring (capacity VS allocation).<br>
<br>
How I&#39;m addressing, or how I plan to address those challenges (aka action items):<br>
1. I&#39;ve been experimenting with out-of-tree plugins, and I managed develop, build, install and run<br>
   one out-of-tree plugin: <a href="https://github.com/mojaves/vmon/tree/master/collectd" rel="noreferrer" target="_blank">https://github.com/mojaves/<wbr>vmon/tree/master/collectd</a><br>
   The development pace of collectd looks sustainable, so this doesn&#39;t look such a big deal.<br>
   Furthermore, we can engage with upstream to merge our plugins, either as-is or to extend existing ones.<br>
2. Write another collectd plugin based on the Vdsm python code and/or my past accelerator executable project<br>
   (<a href="https://github.com/mojaves/vmon" rel="noreferrer" target="_blank">https://github.com/mojaves/<wbr>vmon</a>)<br>
3. patch the collectd notification code. It is yet another plugin<br>
   OR<br>
4. send notification from the new virt module as per #2, bypassing the threshold system. This move could preclude<br>
   the new virt module to be merged in the collectd tree.<br>
<br>
Current status of the action items:<br>
1. done BUT PoC quality<br>
2. To be done (more work than #1/possible dupe with github issue)<br>
3. need more investigation, conflicts with #4<br>
4. need more investigation, conflicts with #3<br>
<br>
All the code I&#39;m working on will be found on <a href="https://github.com/mojaves/vmon" rel="noreferrer" target="_blank">https://github.com/mojaves/<wbr>vmon</a><br>
<br>
Comments are appreciated<br></blockquote><div><br></div><div>This generally sounds like a good idea - and I hope it is coordinated with our efforts for monitoring (see [1], [2]).</div><div>Note that ages ago, ovirt-node actually had it already[3].</div><div><br></div><div>Few notes:</div><div>- I think the most compelling reason to move to collectd is actually to benefit from the already existing plugins that it already has, which will cover</div><div>a lot of the missing monitoring requirements and wishes we have (example: local disk usage on the host), as well as integrate it into</div><div>Engine monitoring (example: postgresql performance monitoring).</div><div>- You can&#39;t remove monitoring from VDSM - as it new VDSM may work against older Engine setups. You can gradually remove them. </div><div>I&#39;d actually begin with cleanup - there are some &#39;metrics&#39; that are simply not needed and should not be reported in the first place and</div><div>are there for historic reasons only. Remove them - from Engine first, from the DB and all, then later we can either send fake values or remove</div><div>from VDSM.</div><div>- If you are moving to collectd, as you can see from the metrics effort, we&#39;d really want to send it elsewhere - and Engine should consume it from there.</div><div>Metrics storages usually have a very nice REST UI with the ability to bring series with average, with different criteria (such as per hour, per minute or what not stats), etc.</div><div>- I agree with Nir about separating between our core business and the monitoring we do for extra. Keep in mind that some of the stats are for SLA and critical scheduling decisions as well.</div><div>- The libvirt collectd plugin is REALLY outdated. I think it may require significant work to bring it up to speed with our existing capabilities.</div><div>Y.</div><div><br></div><div><br></div><div>[1] <a href="https://sradcoblog.wordpress.com/2016/07/19/ovirt-metrics-elk/">https://sradcoblog.wordpress.com/2016/07/19/ovirt-metrics-elk/</a></div><div>[2] <a href="https://bronhaim.wordpress.com/2016/06/26/ovirt-metrics/">https://bronhaim.wordpress.com/2016/06/26/ovirt-metrics/</a></div><div>[3] <a href="https://github.com/oVirt/ovirt-node/blob/master/scripts/collectd.conf.in">https://github.com/oVirt/ovirt-node/blob/master/scripts/collectd.conf.in</a></div><div><br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">
<span class="gmail-HOEnZb"><font color="#888888"><br>
--<br>
Francesco Romani<br>
RedHat Engineering Virtualization R &amp; D<br>
Phone: 8261328<br>
IRC: fromani<br>
______________________________<wbr>_________________<br>
Devel mailing list<br>
<a href="mailto:Devel@ovirt.org">Devel@ovirt.org</a><br>
<a href="http://lists.ovirt.org/mailman/listinfo/devel" rel="noreferrer" target="_blank">http://lists.ovirt.org/<wbr>mailman/listinfo/devel</a><br>
</font></span></blockquote></div><br></div></div>