I just committed a rather substantial patch to Ganglia 3.1.0 trunk which
will affect the way that gmond 3.1.x is deployed. I am posting this to both
the developer list and the general list so that all will be aware of the
changes and why they are important. The primary purpose for the patch was to
remove all of the built in metrics out of the gmond binary and allow them to be
built as loadable modules. The following is a more detailed list of what has
changed. Hopefully from a user perspective, gmond will continue to work as it
has in the past. But going forward, it will be much more flexible with regards
to the core set of metrics.
* All built-in metrics have been removed from the gmond binary
- A new set of core metric modules have been created that represent the same
set metrics that gmond has always gathered. These new core modules are
mod_cpu.so, mod_disk.so, mod_load.so, mod_mem.so, mod_net.so, mod_proc.so and
mod_sys.so. Each of these modules is basically a wrapper around the metric
functions that exist in libmetrics. Being wrappers, they still make the same
metric function calls as have always been made. And since libmetrics contains
all of the platform specific metric code, the metric function calls made by the
core modules will continue to do the right thing for all of the platforms that
have been previously supported.
- There is also an extra module called core_metrics which contains the
heartbeat, location and gexec metrics. Even though this module could be
dynamically loaded in the same manner as the others, it is always statically
linked simply because gmond would not be able to function properly without
these metrics so there is no real reason to allow these metrics to be
dynamically loaded.
- Some additional configuration has been added to the gmond.conf file.
Because the core metrics are now implemented as modules, this requires a module
configuration block that instructs gmond to load each module. A set of module
blocks has been added to the default gmond.conf file.
* All metric specific metadata definitions have been removed from protocol.x
- With the refactoring of the XDR data and removal of the builtin metrics,
there is no longer any need for XDR to have intimate knowledge of the core
metrics. Therefore the metric structure array and enum have been removed and
are now part of the core metric modules themselves.
* --enable-static-build statically links the core metric modules
- Building gmond statically will statically link not only APR, expat and
libconfuse, it will also statically link all of the core metric modules into
the gmond binary. The result should be a gmond binary that looks and feels
just like the old 3.0.x statically linked gmond binary. The one exception is
that a module statement is still required in the gmond.conf file. The
difference between the module configuration block for dynamically loaded
modules and the module blocks for statically linked modules is whether or not a
path to the .so is included. The configure script and makefiles have been
modified to detect --enable-static-build and build the default gmond.conf file
appropriately.
* --enable-static-build + --enable-python statically links the python module
- One of the downsides of building gmond 3.1.x statically was that doing so
would disable all of the dynamically loadable module capability. The reason
for this is the need for both gmond and the pluggable modules to dynamically
link with libapr1. However, if both --enable-static-build and --enable-python
are specified during configure, a gmond binary will be built with mod_python
statically linked. This provides gmond with the ability to continue to load
and run python metric modules in the same manner as the non-static build. In
other words, even though statically linking gmond will disable pluggable C
interface modules, python pluggable modules will still continue to work.
* All metrics carry a group designation
- Now that all metrics have been implemented as loadable modules, the metrics
have also been assigned to groups. The XML that is produced by gmond and
gmetad will carry an <EXTRA_DATA GROUP="blah"> tag that defines which group
each metric belongs to. This will allow the web front end to be enhanced to
filter metrics so that they can be display by group rather than all metric
graphs appearing on the same page.
These changes should make gmond much more flexible when it comes to extending
or replacing not only the core metrics but also new metrics. I have attached
the wish list that was compiled a couple of months ago which updates the items
that I consider to be done. As I mentioned at our meet-up a few weeks ago, we
need to identify which of the remaining items must be addressed before shipping
3.1.0 and get those completed. I would like to see us ship a 3.1.0 release as
soon as possible.
Brad
Done
------------------
- C module interface as DSO
- mod_python Python module interface
- Dynamically link libraries like expat, apr, libconfuse
- Add TITLE attribute to the XDR data to communicate a human readable name
- Add a GROUP attribute to the XDR data
This would allow metrics to declare the category that they belong to. The
category should be added at the metric definition level and not in the
.conf file.
- Reimplement the built in metrics as C interface modules
- A cleaner XDR encoding:
The current encoding scheme embeds too much information about which metrics
gmond collects. The encoding scheme should treat all metrics the same: as
just "a metric". The encoding should not care if the metric is
metric_cpu_speed, metric_swap_total or a user-defined "gmetric" one.
- Flexible method of adding extra metric metadata.
We could include extra metadata, not just "alias"/"title". For example,
some
metrics have a natural minimum and maximum value. Perhaps coming up with an
extendable way of encoding metric metadata so future changes can be included
without loosing backwards compatibility.
- Re-organization of RPM packages (libganglia, gmond-python ?)
GMond To Do
------------------------
- Gmond module repository
- Implement a perl module interface
- Implement a PHP module interface
- Implement a Ruby module interface
- Metric packing:
Simply that a UDP packet can contain multiple metrics (using the usual XDR
stream decoding) up to the size of a UDP packet. This would help reduce
the overheads when sending many metric updates concurrently. It also
preserves the current gmond behaviour where it sends metric updates in
a single UDP packet.
- Support for counters (metrics with +ve slope)
This shouldn't require much work (from memory, make sure the slope-type
information is preserved and patch gmetad to create RRD files with the
correct options). Currently Ganglia doesn't actually support custom
counter metrics, which is an awkward limitation.
- gmond switching to a non-blocking IO model.
If there's a large number of metric updates then gmond must process them
"quickly" or they will be lost. If this happens whilst gmond is sending XML
data to gmetad there's may be a delay, increasing the risk of metric
update messages being lost. Switching to a non-blocking IO model would
allow
gmond to respond preferentially to the incoming UDP messages.
-* Remove the 4T limit on ganglia metric results
-* Modify all byte count metric to 8 bytes ints
GMetad To Do
------------------------------
- Support for new RRDTool which allows graphs to have dynamic sizes
- Gilad's stacked graphs
- Changing the units of default metrics to their base
For example disk_free's base unit should be bytes, not GB as rrdtool will
automatically append G,M,K etc.)
- Better support for bigger less frequent updates
one packet every 20 seconds per host for all data?
- Multi PB disk limit
- Better on disk RRD perf (tmpfs is an OK workaround)
-* Name RRD directories based on UUID generated by client gmond
has of MAC address? something else? So that renaming hosts, updating DNS or
hosts files don't result in history for the phyiscal gmond client being
lost.
- Integration of gexec/authd ?
- Expand gstat nodelist parameter query options (i.e. return all hosts
with <10% iowait, etc.)
- Interface stats in bits? Self awareness of interface capablity for %
util stats for network.
- Something like a unique per-gmond instance identifier
To help with multi-homing and DNS issues and so the IP address is no
longer the index key. There was discussion of this under the subject
"Overriding hostname" on the Ganglia-general list.
- Give some metrics priority and have them updated more frequently in their
RRDs than others.
- Allow for some sort of in memory RRD (never written to disk) as an
alternative storage for very extreme cases.
- Let the users manage different IO bound pools for their metrics
For extreme cases one based on tmpfs. So that they can be tied correctly
to the right kind of storage IO capabilities for the frequency needed.
- Add more memory metrics
slab, buffers, dirty, writeback, cache_clean (= cached -
dirty+writeback)), mapped, free
Web interface
-------------------------------
- Numerous custom graphs enhancements (Alex Balk, Timothy Witham, others)
- Web frontend face lift
- Mouse over result graphs
- Default cluster view uses text-only per host squares
loading 1700 little graphs chews too much browser
- Better icons.
The current highly-compressed JPEG files for the icons look horrible!
Line-art perhaps suffers worst from JPEG compression artifacts. Could we
not
use either PNGs or (preferably) SVG?
- Add an option to allow switching to SVG in-line RRDTool graphs.
This should be pretty easy to add as a config option. I think support for
SVG in current browsers is now "good enough". A half-way modern version of
RRDTool can generate SVG versions of the graphs, which should look much
better.
- Have some standard way of describing custom graphs.
There currently isn't a standard way of producing custom graphs; "custom"
here means adding support for host-specific and cluster-specific graphs and
also some framework for describing those custom graphs. I have a
solution, that (at least) has merit in both existing and working. Perhaps
it
isn't ideal, but the Ganglia web front-end should provide at least some
standard hooks if not an actual framework.
- Have the option to switch off displaying all the single-metric graphs.
If you have ~300 metrics, the little graphs at the page bottom are all but
useless. They slow down the loading of the page without adding much
insight.
(I have a simple patch that allows a user to choose whether they want to see
these graphs.)
- Fix the pie-chart-generating code.
The current pie-chart code is a bit ugly and can plot things incorrectly
under certain circumstances. There must be some nicer graph plotting
packages out there...
-------------------------------------------------------------------------
SF.Net email is sponsored by:
Check out the new SourceForge.net Marketplace.
It's the best place to buy or sell services
for just about anything Open Source.
http://ad.doubleclick.net/clk;164216239;13503038;w?http://sf.net/marketplace
_______________________________________________
Ganglia-developers mailing list
Ganglia-developers@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/ganglia-developers