collectd_graphite_grafana

Graphing/Monitoring mit collectd, graphite und grafana

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.

gentoo
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

Carbon

/etc/carbon/storage-schemas.conf
# 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 = .*

Graphite-web

  1. graphite initialisieren
  2. graphite api als uwsgi app definieren
  3. nginx seite definieren
  4. configs aktivieren, dienste neustarten
-
root@minipi:/usr/share/graphite-web# nano/etc/graphite/local_settings.py
(secret salt setzen)
 
root@minipi:/usr/share/graphite-web# graphite-manage migrate
/etc/uwsgi/apps-available/graphite.ini
[uwsgi]
processes = 2
uid = _graphite
gid = _graphite
chdir = /usr/share/graphite-web
file = graphite.wsgi
chmod-socket = 666
/etc/nginx/sites-available/graphite.conf
# /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
  • collectd_graphite_grafana.txt
  • Last modified: 2017/07/05 13:40
  • by brot