Die Standard-Methode für die Integration eigener Erweiterungen sind neue Plugins. Neben der bevorzugten Programmiersprache C können sie auch Perl und Python sowie Java verwenden. Wie alles in Collectd ist auch die Unterstützung hierfür in Plugins implementiert. So bettet beispielsweise das Perl-Plugin, ähnlich dem »mod_perl«-Modul von Apache, einen Perl-Interpreter in den Daemon ein. Der Vorteil gegenüber dem periodischen Ausführen eines Skriptes liegt darin, dass der Code nur einmalig interpretiert und in Zwischencode übersetzt werden muss und dann im Speicher bleibt. Listing 5 zeigt ein in Perl geschriebenes Beispiel-Plugin. Es registriert einen Lese-Callback, der dann vom Daemon pro Intervall einmal aufgerufen wird. Innerhalb der Callback-Funktion ist beliebiger Code möglich, der die gewünschten Werte abfragt. Eine Übersicht über die allgemeine Architektur von Plugins findet sich im Wiki auf der Seite „Plugin architecture“ [13]. Details zu der genauen API findet sich in den entsprechenden Handbuchseiten zu den dazugehörigen Plugins. Weiter gibt es die Möglichkeit, mit externen Programmen zu interagieren. Mit dem ExecPlugin lassen sich Skripte oder Anwendungen ausführen, die über ihre Standardausgabe und ein einfaches Text-Protokoll mit dem Daemon kommunizieren. Details dazu auf [14]. Daneben bietet das Unixsock-Plugin einen UNIX Domain Socket an, über den der Anwender mit dem gleichen Protokoll ebenfalls mit dem Daemon kommunizieren kann. Letzteres wird beispielsweise von dem Programm »collectd‑nagios« genutzt. Es dient als Schnittstelle zu Nagios [15]. Es fragt von Collectd gesammelte Werte ab, interpretiert diese an Hand von Schwellwerten, die von Nagios übergeben werden und liefert einen Rückgabewert, den Nagios deuten kann. (jcb/ofr)
Listing 5: Beispiel-Plugin in Perl
package Collectd::Plugin::Magic; use Collectd qw( :all ); sub magic_read { my $vl = { plugin => 'magic', type => 'gauge', type_instance => 'magic_level', values => [Magic‑>getCurrentLevel()] }; plugin_dispatch_values($vl); } plugin_register(TYPE_READ, 'magic','magic_read');
Der Autor
Sebastian Harl ist Diplom-Informatikerund arbeitet am Department Informatik an der UniversitätErlangen-Nürnberg. Er ist seit mehreren Jahren im Open-Source-Umfeld tätig. Neben der aktiven Unterstützung zahlreicher Veranstaltungen ist er als Entwickler für Debian und Collectd aktiv und wirkt an einigen anderen Open-Source-Projekten mit (etwaRRDtool, liboping).
Infos
[1] Collectd: http://collectd.org
[2] Collectd Plugins: http://collectd.org/wiki/index.php/Table_of_Plugins
[3] Überblick über die Installation von und erste Schritte mit Collectd: http://collectd.org/wiki/index.php/First_steps
[4] Download-Seite für Collectd: http://collectd.org/download.shtml
[5] RRDtool: http://oss.oetiker.ch/rrdtool/
[6] Handbuchseite zu der Konfigurationsdatei undden zur Verfügung stehenden Konfigurationsparameter von Collectd: http://collectd.org/documentation/manpages/collectd.conf.5.shtml
[7] Übersicht über das Netzwerk-Plugin: http://collectd.org/wiki/index.php/Networking_introduction
[8] Handbuchseite zur Datei »types.db«: http://collectd.org/documentation/manpages/types.db.5.shtml
[9] Handbuchseite des „snmp“ Plugins: http://collectd.org/documentation/manpages/collectd‑snmp.5.shtml
[10] Beispielkonfigurationen für das „snmp“ Plugin: http://collectd.org/wiki/index.php/Plugin:SNMP/Config
[11] Handbuchseite des „tail“ Plugins: http://collectd.org/documentation/manpages/collectd.conf.5.shtml#plugin_tail
[12] Beispielkonfigurationen für das „tail“ Plugin: http://collectd.org/wiki/index.php/Plugin:Tail/Config
[13] Überblick über die Architektur von CollectdPlugins: http://collectd.org/wiki/index.php/Plugin_architecture
[14] Handbuchseite des „exec“ Plugins: http://collectd.org/documentation/manpages/collectd‑exec.5.shtml
[15] Nagios: http://www.nagios.org