<br><br><div class="gmail_quote">On Thu, Nov 15, 2012 at 6:58 PM, Sandy Walsh <span dir="ltr"><<a href="mailto:sandy.walsh@rackspace.com" target="_blank">sandy.walsh@rackspace.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">





<div>
<div style="direction:ltr;font-size:10pt;font-family:Courier New">
<b style="font-family:Tahoma;font-size:small">From:</b><span style="font-family:Tahoma;font-size:small"> Doug Hellmann [<a href="mailto:doug.hellmann@dreamhost.com" target="_blank">doug.hellmann@dreamhost.com</a>]</span><br>

<div style="font-size:16px;font-family:Times New Roman">
<div style="direction:ltr"><font face="Tahoma" color="#000000"><b>Sent:</b> Thursday, November 15, 2012 5:51 PM</font></div><div class="im">
<div style="direction:ltr"><br>
</div>
<div style="direction:ltr">On Thu, Nov 15, 2012 at 4:04 PM, Sandy Walsh
<span dir="ltr"><<a href="mailto:sandy.walsh@rackspace.com" target="_blank">sandy.walsh@rackspace.com</a>></span> wrote:</div>
</div><div>
<div class="gmail_quote"><div class="im">
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
<div><br>
</div>
So this should be a Ceilometer notifier, that lives in the Ceilometer code base and is a nova.conf --notification_driver setting for whomever deploys it. This implies there are two ways to get notifications out of Nova:<br>

1. via the Rabbit Notifier with an external Worker/Consumer (preferred for monitoring/usage/billing)<br>
2. via a specific Notifier (like <a href="https://github.com/openstack/nova/blob/master/nova/openstack/common/notifier/log_notifier.py" target="_blank">
https://github.com/openstack/nova/blob/master/nova/openstack/common/notifier/log_notifier.py</a>)<br>
</blockquote>
<div><br>
</div>
<div>> We're talking specifically about values like disk I/O, CPU stats, etc. That data isn't generated as part of</div>
<div>>  a notification, that's why we're having to poll for it. What we're looking for is a solution that doesn't involve</div>
<div>>  ceilometer importing part of nova's code *in an unsupported way*, as it does now. Some of the options</div>
<div>>  presented involve new network-based communication between the existing ceilometer agent and the</div>
<div>>  compute agent (RPC or REST, in different directions). None of those is really optimal, because we don't</div>
<div>>  want to burden the compute agent with lots of calls asking for stats, either for metering or for monitoring. I</div>
<div>>  think the option the ceilometer team is favoring at the moment is making the hypervisor library in nova a</div>
<div>>  public API, so we can use it without fear of the API changing in unannounced ways. That would let us keep</div>
<div>>  the hypervisor polling in a separate daemon from the hypervisor management. There are details to work out</div>
<div>>  about how such a separate library would be implemented.</div>
<div><br>
</div>
</div><div>I don't know how some shops would feel about putting an api server on their compute nodes. </div></div></div></div></div></div></blockquote><div><br></div><div>It wont' be an API server. We just need the nova team to agree that other projects consume some part of the virtualization library so that the API of that library doesn't change without warning.</div>
<div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div><div style="direction:ltr;font-size:10pt;font-family:Courier New"><div style="font-size:16px;font-family:Times New Roman">
<div><div class="gmail_quote">
<div><br>
</div>
<div>I'd use the same approach we use everywhere else in OpenStack, make the data collection portion of the hypervisor a plug-in. Each plug-in in the chain can add a new data section to the dictionary sent up for transmission. Out of the box we would send the
 basic stuff that is sent today. Other deployments might add some ceilometer/hypervisor specific modules to gather other things.</div></div></div></div></div></div></blockquote><div><br></div><div>What event is triggering that transmission, though? There's nothing doing it currently.</div>
<div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div><div style="direction:ltr;font-size:10pt;font-family:Courier New"><div style="font-size:16px;font-family:Times New Roman">
<div><div class="gmail_quote">
<div><br>
</div>
<div>--collection_drivers=nova.virt.xen.Collector, ceilometer.xen.FunkyStuff</div>
<div>or, if you're a libvirt shop:</div>
<div>
<div>--collection_drivers=nova.virt.kvm.Collector, ceilometer.kvm.FunkyStuff, mylib.Grabbit</div>
</div><div class="im">
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
<div><br>
</div>
<div>>So with nova-compute losing it's direct database access, then 2-3 DB<br>
>accesses per notification is not going to be a runner - all the<br>
>information we're talking about extracting here will I think have to<br>
>be available from the hypervisor, possibly mixed in with some cached<br>
>data retrieved by ceilo from the nova-api (e.g. on every polling cycle<br>
>we wouldn't want to go back to the nova-api to figure out the instance<br>
>flavor name, if that's not directly exposed by nova-compute but is<br>
>needed for metering purposes).<br>
<br>
</div>
The big requirement for it today is for network information, which is already being cached in the Quantum driver.
</blockquote>
<div><br>
</div>
<div>> Quantum's knowledge about network stats does not differentiate between internal and external traffic. It's</div>
<div>> still useful for monitoring, but metering stats have to be collected somewhere else.</div>
<div><br>
</div>
</div><div>Wouldn't the approach described above work in this case too? The caching currently used is for the IP address allocation (which nearly all notifications include, rightly or wrongly). I'd need to talk to the guys about how bandwidth usage is collected today.
 Stay tuned.</div><div class="im">
<div> </div>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
If we can separate the network and the compute notifications I think we're ok. Likewise with storage. The downside is we wouldn't be getting these notifications as atomic updates and that can lead to race conditions. But, so long as the time stamps are accurate
 within reason (NTP), we should be ok there. If we're dropping events we've got bigger issues to deal with. </blockquote>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
<br>
Another possibility we're exploring is having a read-only mirror of the production database for this sort of stuff. That could be the "best practice" in these tight situations. But that's a story for another time :)<br>

<br>
So, we need to revisit the notification format wrt versioning, structure, payload size, content and overhead. Getting the data out and doing something with it is easily do-able via a worker/consumer or a proprietary notifier (and with no impact on nova core).<br>

</blockquote>
<div><br>
</div>
<div>> I'm not sure why any of that is necessary to solve this problem?</div>
<div><br>
</div>
</div><div>Well, you're talking about a different problem now ... so no, it's not necessary for that. But still needed overall imho :)</div>
<div><br>
</div>
<div>I was specifically talking about lifecycle notifications, in which case atomic snapshots of state are desired. Regardless, separating notifications for network, storage and compute would be generally good things I think.</div>
</div></div></div></div></div></blockquote><div><br></div><div>We're getting notifications from quantum for networking and from nova for compute (although not as frequently as we would like). We are working with the cinder team on notifications there, too, but I don't know if that patch landed yet.</div>
<div><br></div><div>Doug</div><div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div><div style="direction:ltr;font-size:10pt;font-family:Courier New"><div style="font-size:16px;font-family:Times New Roman">
<div><div class="gmail_quote"><span class="HOEnZb"><font color="#888888">
<div><br>
</div>
<div>-S</div>
<div><br>
</div>
</font></span></div>
</div>
</div>
</div>
</div>

<br>_______________________________________________<br>
OpenStack-dev mailing list<br>
<a href="mailto:OpenStack-dev@lists.openstack.org">OpenStack-dev@lists.openstack.org</a><br>
<a href="http://lists.openstack.org/cgi-bin/mailman/listinfo/openstack-dev" target="_blank">http://lists.openstack.org/cgi-bin/mailman/listinfo/openstack-dev</a><br>
<br></blockquote></div><br>