Graphite
[Graphite][grapihte] stellt eine alternative oder eigentlich den Nachfolger zu Collectd und RRD dar. Open Source Projekt
Was ist das¶
TSDB und API in einem. Geschrieben in python.
System¶
whisper¶
Das ist die eigentliche TSDB. Für jede Metrik die verarbeitet wurde gibt es eine wsp Datei. Metriken werden durch "." getrennt. Diese Trenner spiegeln dann die Verzeichnisstruktur wieder:
icinga2/
└── icinga2
├── host
│ └── hostalive
│ ├── metadata
│ │ ├── acknowledgement.wsp
│ │ ├── current_attempt.wsp
│ │ ├── downtime_depth.wsp
│ │ ├── execution_time.wsp
│ │ ├── latency.wsp
│ │ ├── max_check_attempts.wsp
│ │ ├── reachable.wsp
│ │ ├── state_type.wsp
│ │ └── state.wsp
│ └── perfdata
│ ├── pl
│ │ ├── crit.wsp
│ │ ├── value.wsp
│ │ └── warn.wsp
│ └── rta
│ ├── crit.wsp
│ ├── value.wsp
│ └── warn.wsp
└── services
[...]
carbon-cache¶
Caches stellen die (direkte) Schnittstelle zu den Whisper-Files. Über definierte Ports lassen sich Metriken einkippen bzw abfragen. Auf einer Nodes können mehrere caches laufen.
carbon-relay¶
Relays werden vor Caches geschalten. Sie können Als buffer eingesetzt werden um den Caches zeit zum Schreiben zu verschaffen. Relays haben Consistent Hashing integrirert. So verteilen sich metriken über caches hinweg.
Auf einer Node können mehrere Relays laufen
graphite-web¶
API
Features¶
Datein einliefern¶
Wenn man Daten einliefern will, ist das verdammt einfach
# echo "foo.bar 1 `date +%s`" | nc graphite.example.com 2003
Daten Rendern¶
http://graphite.example.com:8080/render?target=groupByNode(collect.host1_example_com.cpu.*,3,"avg")
Fazit¶
Pros¶
- Skalliert überhaupt im Gegensatz zu Collectd
- Natives Consisten Hashing
- HTTP API
- Einfache Datenstruktur
- Bereits vorhandener Puppet/Hiera code
Contras¶
- TSDB hat ein Flaches/"dummes" datenmodell
- Whisper erzeugt viele Dateien
- Updates erzeugen verdammt viele IOPs
- Mäßig wartbar