Neben der Serverüberwachung mit Icinga/Nagios habe ich bisher immer Munin verwendet. Munin zeichnet Graphen z.B. für die aktuelle Serverlast (Load) oder die Belegung der Festplatten. Leider skaliert Munin nicht besonders gut. In festen Intervallen fragt Munin die verbundenen Clients nach neuen Daten und rendert neue Grafiken. Das dauert leider einigermaßen lang.

Eine ressourcensparendere Alternative ist collectd (https://collectd.org/).

Die Installation ist sehr einfach:

apt-get install collectd

Um eine zentrale Instanz zu schaffen, die Daten von anderen Systemen einsammelt reicht folgende Konfiguration auf dem Master aus:

#/etc/collectd/collectd.conf

FQDNLookup true
LoadPlugin logfile
LoadPlugin rrdtool
LoadPlugin network

Listen "10.0.0.1"

DataDir "/var/lib/collectd/rrd"

Include "/etc/collectd/filters.conf"
Include "/etc/collectd/thresholds.conf"

Auf den Clients installiert man collectd ebenfalls, hier reicht folgende Konfiguration:

#/etc/collectd/collectd.conf

FQDNLookup true
LoadPlugin logfile
LoadPlugin network

LoadPlugin cpu
LoadPlugin df
LoadPlugin disk
LoadPlugin ethstat
LoadPlugin interface
LoadPlugin load
LoadPlugin memory
LoadPlugin processes
LoadPlugin swap
LoadPlugin users

Server "10.0.0.1"

DataDir "/var/lib/collectd/rrd"

Include "/etc/collectd/filters.conf"
Include "/etc/collectd/thresholds.conf"

Mittels /etc/init.d/collectd restart müssen nun alle Instanzen einmal neu gestartet werden und das lustige Datensammeln beginnt.

Leider liefert collectd keine so schöne Oberfläche zur Darstellung mit. Es gibt zwar ein paar CGI-Scripte und mittlerweile auch eine PHP-Variante, aber mit der gewohnten Munin-Darstellung können beide nicht mithalten, auch wenn einige Funktionen dabei sind die Munin nicht mitbringt.

Abhilfe hier schafft Facette. Hierbei handelt es sich um ein relativ junges Projekt, welches auch andere Datenquellen neben collectd unterstützt. Auf der Projektwebsite (https://facette.io/) kann ein fertiges Debianpaket heruntergeladen werden. Wer lieber selbst baut benötigt folgende Dependencies:

apt-get install build-essential golang-go librrd-dev pkg-config npm nodejs-legacy pandoc

Der Quellcode kann über die Github-Seite des Projekts (https://github.com/facette/facette|https://github.com/facette/facette) bezogen werden.

Vor der ersten Nutzung muss Facette zunächst mit collectd verheiratet werden:

#/etc/facette/providers/collectd.json

{
"connector": {
"type": "rrd",
"path": "/var/lib/collectd/rrd",
"pattern": "(?P[^/]+)/(?P.+).rrd"
},

"filters": [
{ "action": "sieve", "target": "metric", "pattern": "/average$" },
{ "action": "rewrite", "target": "metric", "pattern": "/average$", "into": "" },
{ "action": "rewrite", "target": "metric", "pattern": "/", "into": "." },
{ "action": "rewrite", "target": "metric", "pattern": "^cpu-(\d+)\.cpu-(.+)\.value$", "into": "cpu.$1.$2" },
{ "action": "rewrite", "target": "metric", "pattern": "^df-(.+)\.df_complex-(.+)\.value", "into": "df.$1.$2" },
{ "action": "rewrite", "target": "metric", "pattern": "^disk-(.+)\.disk_(.+)", "into": "disk.$1.$2" },
{ "action": "rewrite", "target": "metric", "pattern": "^entropy\.entropy", "into": "entropy" },
{ "action": "rewrite", "target": "metric", "pattern": "^interface-(.+)\.if_(.+)\.(.+)$", "into": "net.$1.$2.$3" },
{ "action": "rewrite", "target": "metric", "pattern": "^irq.irq-(.+)\.value$", "into": "irq.$1" },
{ "action": "rewrite", "target": "metric", "pattern": "^load\.load", "into": "load" },
{ "action": "rewrite", "target": "metric", "pattern": "^memory\.memory-(.+)\.value$", "into": "memory.$1" },
{ "action": "rewrite", "target": "metric", "pattern": "^processes\.ps_state-(.+)\.value$", "into": "proc.state.$1" },
{ "action": "rewrite", "target": "metric", "pattern": "^processes\.(.+)\.value$", "into": "proc.$1" },
{ "action": "rewrite", "target": "metric", "pattern": "^swap\.swap-(.+)\.value$", "into": "swap.$1" },
{ "action": "rewrite", "target": "metric", "pattern": "^swap\.swap_io-(.+)\.value$", "into": "swap.io.$1" },
{ "action": "rewrite", "target": "metric", "pattern": "^users\.users\.value", "into": "users.count" }
]
}

Nach dem Start über /etc/init.d/facette start kann man mit der weiteren Einrichtung unter http://localhost:12003 beginnen.

Da Facette auch noch andere Datenquellen unterstützt muss man nun zunächst die gewünschten Graphen definieren. Hierbei helfen Metric- und Source-Gruppen. Außerdem können Templates für Graphen definiert werden. Dies erleichtert es zumindest einheitliche Graphen zu erzeugen, da man nur noch Platzhalter auffüllen braucht. Die erzeugten Graphen lassen sich dann zu einer Collection zusammenfassen, die dann über die Startseite von Facette abgerufen werden können.

Details zur Templateerstellung finden sich unter: https://blog.facette.io/2015/03/23/dive-into-facette-graph-templates/

Wirklich schön ist das alles aber noch nicht gelöst. Wenn man sehr viele Maschinen verwalten möchte sollte man sich daher ein wenig mit der verfügbaren API (http://docs.facette.io/api/|http://docs.facette.io/api/) befassen um die Einrichtung zu automatisieren.

Die Mühe lohnt sich jedenfalls. Die Graphen sind optisch recht hübsch und zeigen vor allem die jeweiligen exakten Werte an, wenn man mit der Maus darüber fährt. Außerdem können einzelne Elemente dynamisch ein- und ausgeblendet werden, was die Übersichtlichkeit sehr verbessert.

Next Post Previous Post