RRDTool und die entsprechenden Graphing-Tools sind etwas altbacken - und das ständige generieren der PNGs belastet die CPU (gerade bei nem Raspi unschön). Neuere Alternativen können die Daten dynamisch graphen. Eines der hübschen Graphing-Tools ist Grafana. Das hat als eines der unterstüzten Datenquellen graphite/carbon. Das ist ein Python basierter Dienst, der einerseits die Daten in Zeitbasierten Datenbanken (mit automatischer Alterung/Mittelung/…) speichert und ist andererseits ein Webservice um die Daten auszulesen und auszuwerten.
Fehlen nurnoch Datenquellen. Als alternative für die von munin gesammelten Daten bietet sich collectd an. Der Umfang der “Sensoren” ist ähnlich, die Konfiguration mit hilfe von Plugins wenig aufwendig. Neben den fertigen Tools gibt es auch einfache Librarys die einem das senden an Daten an graphite erleichtern, z.B. die Python library graphitesend.
Da collectd die Datensammlung übernimmt, muss es auf jedem Host installiert werden, der später im Monitoring zu sehen sein soll. collectd ist hier aber dank der Plugin-Architektur sehr flexibel und für alle Linuxe verfügbar.
nas brot # grep COLLECT /etc/portage/make.conf COLLECTD_PLUGINS="aggregation df interface irq load memory swap syslog apcups chrony cpu disk hddtemp md netlink network nfs processes sensors smart thermal uptime users virt write_graphite" nas brot # emerge -av collectd
Graphite ist aufgeteilt in mehrere Teile, Carbon kümmert sich um das Speichern der Daten, Graphite stellt eine Web-API zur verfügung um die Daten zu queryen bzw diese zu aggregieren. Beide Teile sind in Python geschrieben, was heißt dass für Graphite auch ein Webserver benötigt wird. Da bei mir die Dienste auf einem Raspbery Pi Zero laufen werden, ist die Installation auf Debian vorgenommen. Als Webserver wird der recht sparsame nginx verwendet.
root@minipi:/home/pi# apt install graphite-carbon graphite-web nginx-full uwsgi uwsgi-plugin-python
# Schema definitions for Whisper files. Entries are scanned in order, # and first match wins. This file is scanned for changes every 60 seconds. # # [name] # pattern = regex # retentions = timePerPoint:timeToStore, timePerPoint:timeToStore, ... # Carbon's internal metrics. This entry should match what is specified in # CARBON_METRIC_PREFIX and CARBON_METRIC_INTERVAL settings [carbon] pattern = ^carbon\. retentions = 60:90d [collectd] pattern = ^collectd.* retentions = 10s:1h,1m:1d,10m:1y,1h:10y [default_1min_for_1day] pattern = .*
root@minipi:/usr/share/graphite-web# nano/etc/graphite/local_settings.py (secret salt setzen) root@minipi:/usr/share/graphite-web# graphite-manage migrate
[uwsgi] processes = 2 uid = _graphite gid = _graphite chdir = /usr/share/graphite-web file = graphite.wsgi chmod-socket = 666
# /etc/nginx/sites-available/graphite.conf server { listen 80; location / { include uwsgi_params; uwsgi_pass unix:/run/uwsgi/app/graphite/socket; } }
root@minipi:/home/pi# ln -sv /etc/uwsgi/apps-available/graphite.ini /etc/uwsgi/apps-enabled/ ‘/etc/uwsgi/apps-enabled/graphite.ini’ -> ‘/etc/uwsgi/apps-available/graphite.ini’ root@minipi:/home/pi# ln -sv /etc/nginx/sites-available/graphite.conf /etc/nginx/sites-enabled/ ‘/etc/nginx/sites-enabled/graphite.conf’ -> ‘/etc/nginx/sites-available/graphite.conf’ root@minipi:/home/pi# rm /etc/nginx/sites-enabled/default root@minipi:/home/pi# sudo -u _graphite graphite-manage syncdb --noinput root@minipi:/home/pi# systemctl restart uwsgi root@minipi:/home/pi# systemctl restart nginx
Grafana soll, wie auch der Rest der Software, auf einem Raspberry Pi laufen. Die Grafana-Pakete gibt es allerdings nicht für raspian, und die debian unstable pakete wollen auf einem rpi1 nicht so ohne weiteres laufen. Aber es gibt abhilfe: Ein Github Projekt für grafana auf Raspberys inkl dazugehörigem repository
apt install apt-transport-https curl curl https://bintray.com/user/downloadSubjectPublicKey?username=bintray | sudo apt-key add - echo "deb https://dl.bintray.com/fg2it/deb-rpi-1b jessie main" | sudo tee -a /etc/apt/sources.list.d/grafana.list apt update apt install grafana