rrdtool to mysql

Gast #6049505
Lesenswert?

Hallo,
ich habe über eine andere Anwendungen eine rrd Datenbank.
Mit dem Befehl
1
rrdtool lastupdate *.rrd 
2
1574521961: 717
bekomme ich den letzen Wert. Diesen möchte ich nun in eine mysql 
datenbank bekommen. Wie kann ich dies regelmässig machen sobald sich der 
wert ändert?
Gast #6049901
Lesenswert?

Christobal M. schrieb:
> Der günstigste Ansatz wäre den SQL insert zum gleichen Zeitpunkt zu
> machen wie den in die RRD - das löst auch das Problem das "die rrd" beim
> insert was triggern soll, was imho nicht geht.

Könnte man so machen, aber wenn man wirklich den letzten Eintrag der RRD 
haben will muß man die RRD abfragen, da RRD nicht unbedingt mit dem 
update Befehl die Daten einschreibt. Das Einschreiben passiert nur beim 
"Herzschlag" (+einer maximalen Wartezeit) der RRD-Datenbank.
Gast #6050017
Lesenswert?

@linuxnewbie

Du musst leider viel mehr Details schreiben sonst hilft dir hier niemand

Willst du nur den letzten wert?
Kannst/kennst du mysql?
Kannst/kennst du rrd?
Willst du was programmieren (programmiersprache?) oder suchst du 
Bordmittel?
Automatisch oder von Hand?
Wer schreibt in die rrd und warum muss das in eine mysql?
Zyklisch updaten oder wie?

Deine Frage ist viel zu unklar um richtige tips geben zu koennen
Gast #6050040
Lesenswert?

Ich benötige ein bash script welches das erledigt. Also
1.rrd Last updated ausliest
2.den ausgelesen wert in eine MySQL Datenbank einfügt ggf. überprüft ob 
der Wert schon existiert bevor er eingefügt wird
Gast #6050048
Lesenswert?

Und was davon kannst du nicht? Oder fragst du nach einer komplettlösung?

Mysql kannst du problemlos per bash aufrufen: google bash mysql
Du brauchst nur die rddtool ausgabe einlesen/parsen und in ein replace 
statement (ist wie "update or insert") umwandel
Gast #6050053
Lesenswert?

Probier doch schon mal aus ob du ein replace-statement mit fixen werten 
ausgefuert bekommst oder bekommst du das auch schon nicht hin

Oder wie dudas rddtool ergebnis parsen kannst

Wie gesagt: wir wissen nicht was du kannst/kennst (schon mal ein bash 
script geschrieben?, mit mysql gearbeitet) und du wirst garantiert keine 
fertige lösung hier als antwort bekommen

Du könntest 5 jahre alt sein und das erste mal am computer sitzen oder 
seit 40 jahren im computerbusiness aber leider ohne shell kentnisse, wir 
wissen absolut nichts
Gast #6050054
Lesenswert?

Auf die schnelle als Denkanstoß
1
echo "insert into table (c1,c2) values ($(rrdtool lastupdate *.rrd|tail 
2
-1|sed 's/:/,/g'));"|mysql -u user -p pw meinedb

Ne DB und entsprechende Tabelle musst Dir schon vorher anlegen
Gast #6050199
Lesenswert?

Ich benötige ein komplettes Script welche Sprache ist prinzipiell 
egal..... Python und bash wäre von mir bevorzugt.....ich kann keine 
Programmierung deshalb Frage ich.....das Skript soll folgende Schritte 
nacheinander machen:

1.auslesen rrd Lastupdate
2.ist das Werte paar siehe oben vorhanden?
3.wenn ja nichts machen wenn nein in die Datenbank Einfügen
4.ende
#6050623
Lesenswert?

Linuxnewbe schrieb:
> Ich benötige ein komplettes Script

Hat dir bashfrickler zwei Posts weiter oben geliefert.

Wenn dir das in einer Zeile zu kompliziert ist, kannst du das auch auf 
mehrere Zeilen aufdröseln und mit Zwischenvariablen arbeiten.

Linuxnewbe schrieb:
> 2.ist das Werte paar siehe oben vorhanden?
> 3.wenn ja nichts machen wenn nein in die Datenbank Einfügen

Das kann mysql selber. Einfach einen passenden unique-Index anlegen.
Ein zweites Insert desselben Wertepaars (oder keys/timestamps) schlägt 
dann fehl. Die Fehlermeldung einfach ignorieren ==> es werden keine 
Dubletten angelegt.

Linuxnewbe schrieb:
> 4.ende

genau.
Gast #6051018
Lesenswert?

ich habe es nun als crontab versucht einzufügen:

*/30   * * sudo echo "insert into \`tabelle\` (\`time\`,\`value\`) 
values ($(rrdtool lastupdate tabelle.rrd |tail -1|sed 
's/:/,/g'));"|mysql -u user -ppw datenbank >>  /home/user/t.txt

allerdings passiert nichts....was ist falsch???? Ohne crontab 
funktioniert es tdellos danke dafür :)
#6051582
Lesenswert?

Die Time Spec hat zuwenig Sternchen.
du brauchst `m h dom mon dow`

also
1
*/30 *  * * *

und ob sudo in der crontab geht, hängt von der sudo-Config ab... Wenn 
das ein Passwort sehen will, wird cron keines eintippen.

Warum brauchst du sudo? gehört deine 'tabelle.rrd' dem user oder root?
Kannst du die nicht einfach für "user" lesbar machen?
echo, tail, sed brauchen kein root.
mysql auch nicht, das logt sich ja mit usernamen&passwort von der 
Kommandozeile beim mysql-server ein.

Dann:
Benutzt du die User-Crontab, oder die systemweite "/etc/crontab" ?
in der /etc/crontab ist nach dem "day of week"-Feld noch eine Spalte für 
den User, der das Kommando ausführen soll.

da könntest du einfach "root" angeben, und das sudo weglassen.

und was noch falsch sein könnte: Wenn du keinen absoluten Pfad zu deiner 
'tabelle.rrd' angegeben hast, sollte dein rrd2mysql.sh ganz am Anfang 
ein

cd /home/user

machen.
Gast #6054934
Lesenswert?

Ist es nen eigenes Programm was die RRD Daten erzeugt oder was 
vorgefertigtes ?

Wenn es was eigenes ist wehre es wesentlich sinnvoller gleich in die DB 
zu schreiben RRD kann das problemlos und die alten Daten kannst du auch 
in die DB übernehmen

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren