rrd2whisper: Daten von collectd konvertieren

Alle weiteren Dienste, die nicht in die drei oberen Foren gehören.
Antworten
reox
Beiträge: 2464
Registriert: 06.06.2006 22:09:47
Lizenz eigener Beiträge: MIT Lizenz

rrd2whisper: Daten von collectd konvertieren

Beitrag von reox » 29.12.2023 23:26:27

Ich würde gerne das rrd backend von collectd gegen Debiangraphite-carbon tauschen. Ich habe gesehen, dass es ein Tool aus Debianpython3-whisper gibt, um rrd files in whisper zu konvertieren. Nachdem ich die historischen Daten aus den rrd files nicht verlieren möchte, wäre das ne nette Sache wenn das ginge.
Allerdings streikt rrd2whisper, egal welches rrd file ich konvertieren will:

Code: Alles auswählen

$ rrd2whisper collectd/foobaz_host/memory/memory-free.rrd
Traceback (most recent call last):
  File "/usr/bin/rrd2whisper", line 86, in <module>
    rra_info['xff'] = rrd_info['rra[%d].xff' % i]
                      ~~~~~~~~^^^^^^^^^^^^^^^^^^^
KeyError: 'rra[0].xff'
Ich kann bestätigen, dass die RRD files (fast) alle keinen XFF gesetzt haben... Die manpage von collectd.conf meint zumindest, dass der default 0.1 sei: https://manpages.debian.org/bookworm/co ... n.html#XFF - die paar die einen haben, verwenden auch tatsächlich 0.1.
Also hab ich rrd2whisper gepatched, damit es diesen Fall erkennt:

Code: Alles auswählen

$ diff /usr/bin/rrd2whisper ./rrd2whisper
69a70
> xFilesFactor = options.xFilesFactor
86c87,91
<     rra_info['xff'] = rrd_info['rra[%d].xff' % i]
---
>     if f'rra[{i:d}].xff' not in rrd_info:
>         if not xFilesFactor:
>             raise SystemExit("[ERROR] XFF is not present and --xFilesFactor is not used!")
>     else:
>         rra_info['xff'] = rrd_info['rra[%d].xff' % i]
107d111
< xFilesFactor = options.xFilesFactor
Jetzt kommt allerdings der nächste Fehler:

Code: Alles auswählen

[ERROR] Higher precision archives' precision must evenly divide all lower precision archives' precision (archive1: 70, archive2: 500)
Ok, das ist verständlich, denn eine Anforderung von whisper.
Jetzt ist die Frage: Kann ich die rrd files nachträglich so bearbeiten, dass die RRAs dort den Anforderungen von whisper entsprechen?
Also es gibt rrdresize (https://manpages.debian.org/bookworm/rr ... .1.en.html) nur bin ich mir nicht ganz sicher wie das anzuwenden ist, vielleicht auch weil mir die Terminologie von RRD nicht ganz klar ist.
Ich hab hier zB ein RRD file mit folgenden Einstellungen:

Code: Alles auswählen

rrdtool info load.rrd | grep AVERAGE -A 4 | grep -E '(rows|pdp_per)'
rra[0].rows = 1200
rra[0].pdp_per_row = 1
rra[3].rows = 1235
rra[3].pdp_per_row = 7
rra[6].rows = 1210
rra[6].pdp_per_row = 50
rra[9].rows = 1202
rra[9].pdp_per_row = 223
rra[12].rows = 1201
rra[12].pdp_per_row = 2635
Step ist bei collectd immer auf 10 gesetzt.
Sehe ich das richtig, dass die Auflösung immer pdp_per_row*step ist und die speicherdauer rows*step*pdp_per_row? Also In whisper terminologie steht dann dort 10s:12000s,70s:85450s,... Wenn ich's richtig gerechnet habe sind das erst genau 200min und dann circa 24h, 7d, 31d und 366.25d.
Heißt, um die Daten konvertiert zu bekommen, muss nun die jeweils pdp_per_row so angepasst werden, dass es jeweils ein Vielfaches ist? Nun ist aber das Problem, dass rrdresize eben nicht pdp_per_row anpasst sondern die Reihen!
Die Frage wurde auf der Mailingliste vor einiger Zeit mal gestellt: https://rrd-users.oetiker.narkive.com/L ... dp-per-row
Offenbar nicht ganz trivial und das stimmt leider:
It took me half an hour to write this message, and it may still not be enough for you to understand.
Ich vermute mal, dass in den 15 Jahren auch kein Tool entwickelt wurde, das sowas automatisch macht?
Oder gibt es eine andere Möglichkeit die Daten zu konvertieren?

reox
Beiträge: 2464
Registriert: 06.06.2006 22:09:47
Lizenz eigener Beiträge: MIT Lizenz

Re: rrd2whisper: Daten von collectd konvertieren

Beitrag von reox » 15.01.2024 07:53:08

Also ich hab noch ein wenig weitergesucht, aber es scheint einfach nichts zu geben, wie man die Daten konvertieren kann. Ich denke, dass es möglich sein sollte, sich die aggregierten Werte auszurechnen (zu interpolieren) aber die Arbeit ist mir dann auch zu viel, für das ich dann genau 1 Jahr Werte erhalte...
Falls noch jemand sachdienliche Hinweise hat, gerne her damit!

Antworten