collectd_graphite_grafana

This is an old revision of the document!


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# graphite-manage migrate
/etc/uwsgi/apps-available/graphite-api.ini
[uwsgi]
processes = 2
socket = localhost:8080
plugins = python27
module = graphite_api.app:app
home = /usr/share/graphite-web
/etc/nginx/sites-available/graphite.conf
# /etc/nginx/sites-available/graphite.conf
 
server {
    listen 80;
 
    location / {
        include uwsgi_params;
        uwsgi_pass localhost:8080;
    }
}
-
root@minipi:/home/pi# ln -sv /etc/uwsgi/apps-available/graphite-api.ini /etc/uwsgi/apps-enabled//etc/uwsgi/apps-enabled/graphite-api.ini’ ->/etc/uwsgi/apps-available/graphite-api.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# systemctl restart uwsgi
root@minipi:/home/pi# systemctl restart nginx
  • collectd_graphite_grafana.1491051155.txt.gz
  • Last modified: 2017/04/01 12:52
  • by brot