Mam kilka wykresów utworzonych przez RRDTool, które zbierały złe dane w czasie kilku godzin.Usuń dane z RRDTool
Jak mogę usunąć dane z RRD w tym okresie czasu, aby nie wyświetlały się?
Mam kilka wykresów utworzonych przez RRDTool, które zbierały złe dane w czasie kilku godzin.Usuń dane z RRDTool
Jak mogę usunąć dane z RRD w tym okresie czasu, aby nie wyświetlały się?
Najlepszy sposób znalazłem to zrobić ...
Jeśli chcesz uniknąć zapisywania i edytowania pliku xml, ponieważ może to zająć kilka wywołań IO pliku (w zależności od tego, ile masz złych danych), możesz również odczytać cały rrd w pamięci przy użyciu wartości pobierania i aktualizacji w -pamięć.
Zrobiłem podobne zadanie przy użyciu Pythona + rrdtool i skończyło się robi:
- odczytu RRD w pamięci w słowniku
- wartości poprawka w słowniku
- usunąć istniejące pliki RRD
- Utwórz nowy rrd o tej samej nazwie.
miałem podobny problem, gdzie chciałem wyrzucić najnowsze kilka godzin z moich baz rrdtool, więc napisałem krótki skrypt, aby zrobić to (przeprosiny dla niekonwencjonalnych nazwach zmiennych - styl kodowania dziedziczone z pracy , westchnienie):
#!/usr/bin/env python2
"""
Modify XML data generated by `rrdtool dump` such that the last update was at
the unixtime specified (decimal). Data newer than this is simply omitted.
Sample usage::
rrdtool dump foo.rrd \
| python remove_samples_newer_than.py 1414782122 \
| rrdtool restore - foo_trimmed.rrd
"""
import sys
assert sys.argv[1:], "Must specify maximum Unix timestamp in decimal"
iMaxUpdate = sys.argv[1]
for rLine in iter(sys.stdin.readline, ''):
if "<lastupdate>" in rLine:
# <lastupdate>1414782122</lastupdate> <!-- 2014-10-31 19:02:02 GMT -->
_, _, rData = rLine.partition("<lastupdate>")
rData, _, _ = rData.partition("</lastupdate")
iLastUpdate = int(rData)
assert iLastUpdate < iMaxUpdate, "Last update in RRD older than " \
"the time you provided, nothing to do"
print "<lastupdate>{0}</lastupdate>".format(iMaxUpdate)
elif "<row>" in rLine:
# <!-- 2014-10-17 20:04:00 BST/1413572640 --> <row><v>9.8244774011e+01</v><v>8.5748587571e-01</v><v>4.2046610169e+00</v><v>9.3016101695e+01</v><v>5.0000000000e-02</v><v>1.6652542373e-01</ v><v>1.1757062147e+00</v><v>1.6901226735e+10</v><v>4.2023108608e+09</v><v>2.1457537707e+08</v><v>3.9597816832e+09</v><v>6.8812800000e+05</v><v>3.0433198080e+09</v><v>6.0198912250e+06</v><v>2. 0000000000e+00</v><v>0.0000000000e+00</v></row>
rData, _, _ = rLine.partition("<row>")
_, _, rData = rData.partition("/")
rData, _, _ = rData.partition("--")
rData = rData.strip()
iUpdate = int(rData)
if iUpdate < iMaxUpdate:
print rLine,
else:
print rLine,
Pracowałem dla mnie. Mam nadzieję, że pomaga komuś innemu.
Jedynym, który zaproponował, co dokładnie edytować, był RobM. Próbowałem jego rozwiązanie i nie działało dla mnie w rrdtool 1.4.7
Moja baza danych używa AVERAGE, MAX i MIN. Zawiera DERIVE, GAUGE i COMPUTED. Przedziały: sekunda (70), minuta (70), godzina (25), dzień (367). Moje zadanie: usunąć ostatnią część (typowy powód: zegar cofnięty).
Zastosowałem rozwiązanie RobM: zmień na mój nowy czas zakończenia, usuń wszystkie po nim. Przywrócona baza danych wydawała się być normalna. Ale nie akceptuje nowych dodatków. Przeanalizowałem nowo utworzoną pustą bazę danych. I znalazłem w nim 70 sekund nagrań z NaN, tak samo przez minutę i godzinę.
Moje rozwiązanie robocze - jeśli usuwam rekordy w pewnym okresie, dodaję taką samą liczbę rekordów NaN w tym okresie, z poprawnym czasem pomniejszania. Wyjątek - dzienne zapisy są usuwane tylko bez dodatku. Jeśli okres zostanie pusty po usunięciu, wypełniam go rekordami NaN, które kończą się moim nowym czasem zakończenia (zaokrąglone do granicy okresu).
Jeśli otworzysz swoje rozwiązanie, założę się, że pomógłbyś wielu ludziom! – mscccc