Forum: PC-Programmierung rrdtool to mysql


von linuxnewbi (Gast)


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?

von PittyJ (Gast)


Lesenswert?

Früher haben wir immer 'insert' genommen.
https://en.wikipedia.org/wiki/Insert_(SQL)

von Zeno (Gast)


Lesenswert?

Genau so wie man jeden anderen Wert in die MySQL bekommt. Wo ist da das 
Problem?

von Linuxnewbe (Gast)


Lesenswert?

Das es Automatisch gehen soll also Brauch ich ein Skript

von PittyJ (Gast)


Lesenswert?

Di gibt es doch auch etwas von Wikipedia
https://en.wikipedia.org/wiki/Bash_(Unix_shell)

von Christobal M. (c_m_1)


Lesenswert?

Ich gehe mal davon aus, dass sich die RRD nicht von alleine füllt.
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.

von Zeno (Gast)


Lesenswert?

Linuxnewbe schrieb:
> Das es Automatisch gehen soll also Brauch ich ein Skript

Dann schreib Dir eins.

von Zeno (Gast)


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.

von cppbert3 (Gast)


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

von Dirk B. (dirkb2)


Lesenswert?

Ein cron-job im Takt vom Heartbeat der RRD kann das machen.
Evtl. mit einem kleinen Offset.

von Linuxnewbe (Gast)


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

von Dirk B. (dirkb2)


Lesenswert?

Linuxnewbe schrieb:
> Ich benötige ein bash script welches das erledigt.

warum bash?
warum nicht perl, tcl oder python oder eine andere Scriptsprache?

Welcher Interpreter benutzt wird steht doch in der ersten Zeile vom 
Script (Shebang)

Und Cron ruft dieses Script ja nur auf

: Bearbeitet durch User
von cppbert3 (Gast)


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

von cppbert3 (Gast)


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

von bashfrickler (Gast)


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

von cppbert3 (Gast)


Lesenswert?

Besser ein Replace statement, er moechte ja replacen - wobei das auch 
nicht wirklich klar ist

von Linuxnewbe (Gast)


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

von Εrnst B. (ernst)


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.

von cppbert3 (Gast)


Lesenswert?

Oder das REPLACE Statement von Mysql

von linuxnewbi (Gast)


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 :)

von Dirk B. (dirkb2)


Lesenswert?

wie wäre es, das Ganze in eine Datei zu schreiben (z.B. rrd2mysql.sh) 
und dann nur noch den Scriptnamen in der Crontab anzugeben.

Mit welchen Rechten läuft das ab?

von linuxnewbi (Gast)


Lesenswert?

die dateirechte sind -rwxr-xr-x 1 user gruppe 238 Nov 24 21:30 
rrd2mysql.sh

crontab zeile ist

*/30   * * sudo /home/user/rrd2mysql.sh >> /home/user/t.txt

von Εrnst B. (ernst)


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.

: Bearbeitet durch User
von Dirk B. (dirkb2)


Lesenswert?

Ich weiß nicht ob bashfrickler das getestet hat, aber bei mir gibt 
rrd /lastupdate/ mehr Informationen raus, nämlich die Namen für die 
Einträge.

rrdtool lastupdate *.rrd
1
Name
2
3
1574521961: 717

von bashfrickler (Gast)


Lesenswert?

Naja, das soll ja das tail -1 ausregeln, aber es sollte ja nur ein 
Denkanstoss in einer Schönwetterprogrammierung sein.

von K. J. (Gast)


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

von Linuxnewbe (Gast)


Lesenswert?

Wenn ihr "bashfrickler" noch helfen könnt zu lösen wenn

Lastupdate

1574521961: 717 564

Ausgibt wie ich das in die mit sed aufteilen kann werde ich mich 
bedanken für die Hilfe hier ;)

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.