NEWS
[gelöst] Leistungswerte der Hardware auslesen und anzeigen
-
Moin, Moin,
Homoran zeigt hier des öfteren schöne Grafiken mit allerlei Leistungswerten diverser Hardware.
Bin vor kurzem vom Raspberry 3 auf einen Gigabyte Brix 3150 umgestiegen, da komme ich mit dem RPI-Monitor wohl nicht weit.
Ich hatte eigentlich vor, den XEN-Server zu benutzen, der war auch schon installiert und lief, aber mit meinem Halbwissen blieben
zu viele Fragen offen.
Es ist also eine Debian-Minimal-Installation geworden, (ohne Desktop), dann IoBroker installiert, läuft super.
Hardware: Gigabyte Brix 3150 mit 8 GB RAM und 120 GB SSD.
Das aktive System ist noch der Raspi, da kann ich immer nachsehen, wie ich was eingerichtet habe, bevor ich RFLink, Raspberrymatic
umstecke.
Jetzt möchte ich auch die Leistungswerte haben, etwa analog zum RPI-Monitor.
Ich habe lm-sensors installiert, kriege aber letztendlich nur die CPU-Temperatur heraus.
Auf Homorans Rat den RPI-Monitor installiert, Fehlermeldungen im Log ohne Ende. Ja, welchen von den angezeigten Werten kann man nun
vertrauen und welche sind bloß Müll ??? RPI-Monitor wieder runtergeschmissen.
Homoran schrieb mir dazu schon:
Her damit, ich arbeite gerade an verschiedener Hardware um da Daten zum Status herauszubekommen.
Im Moment bin ich beim Cubie, weil da einiges geht, auch Ladestrom, Akkukapazität usw.
und das als js-Legastheniker
Seltsamerweise geht auch einiges mit dem Pi-Adapter, andere Werte sind unter system.host…
Bitte, Homoran, wo finde ich "system.host" ???? Dazu fehlen mir ein paar Gehirnwindungen.
In IoBroker ? Im Linux ? Ist das eine Datei oder ein Verzeichnis ?
Grüße und Danke Ingo
-
Hallo Ingo,
Wenn du unter Objekte den Expertenmodus aktivierst siehst du auch Datenpunkte des Systems.
Dort gibt es auch system.host.HostName.diverse.werte
Sieh dir das mal an.
Fehlermeldungen im Log ohne Ende `
Du musst in der konfig vom rpi Adapter die raspi spezifischen datenpunkte deaktivieren!Zu dem blauen Zitat gehört aber auch deins vorweg
@Ingo:Wie bekommt man diese Werte in den IoBroker, eine Anleitung, wie man unter Debian an diese Werte herankommt, hatte ich
vor ein paar Tagen vor mir, muß ich noch mal suchen. `
Diese Anleitung wollte ich gerne haben.Die Views oder Widgets kann ich gerne mal posten, wenn ich am PC bin.
Gruß
Rainer
-
Bei mir läuft das Hauptsystem auf einer VM (esxi) unter Ubuntu.
Ich frage per Skript die Zustände ab und schreibe sie in Datenpunkten:
uptime und Load 1,5,15:
!
// ermittelt auf Linuxrechner die Uptime und die Systemauslastung // mit dem Linux Befehl: uptime // // Beduetung der Werte: // http://www.selflinux.org/selflinux/html/information_basic02.html ! // getestet unter Ubuntu 16.04 mit deutscher Ausgabe ! var pfad = "Systeminfos.host" + "."; var cronStr = "*/1 * * * *"; var abfrageAverageLoad = "uptime"; var abfrageUptime = "uptime -s"; ! var forceCreation = false; ! var datenpunkte = { 'uptime': { "init":0, "common": { name: 'uptime', desc: 'uptime', type: 'number', unit: 'Tag(e)', role: 'value' } }, 'Load_Average.load_average_01_min': { "init":0, "common": { name: 'mittlere Systemauslastung in der letzten Minute', desc: 'mittlere Systemauslastung in der letzten Minute', type: 'number', unit: '', role: 'value' } }, 'Load_Average.load_average_05_min': { "init":0, "common": { name: 'mittlere Systemauslastung in den letzten 5 Minuten', desc: 'mittlere Systemauslastung in den letzten 5 Minuten, zum Zeitpunkt der Abfrage', type: 'number', unit: '', role: 'value' } }, 'Load_Average.load_average_15_min': { "init":0, "common": { name: 'mittlere Systemauslastung in den letzten 15 Minuten', desc: 'mittlere Systemauslastung in den letzten 15 Minuten, zum Zeitpunkt der Abfrage', type: 'number', unit: '', role: 'value' } } }; ! function deltaDays(date1, date2) { // Delta in Tagen zwischen zwei Tagen. Format des Datums: "2016-04-26" if(!date1.match(/\d{4}-\d{1,2}-\d{1,2}/) || !date2.match(/\d{4}-\d{1,2}-\d{1,2}/)) { log("function deltaDays() hat ein ungültiges Datumsformat erhalten","warn"); log("Skript liefert ggf. ein ungültiges ergebnis"); return -1; } date1 = date1.split("-"); date2 = date2.split("-"); if(!date1 || !date2) return null; var check1 = new Date(date1[0], date1[1], date1[2]); var check2 = new Date(date2[0], date2[1], date2[2]); return Math.round(Math.abs(check1 - check2) / (1000 * 60 * 60 * 24 )); } ! function createDp() { var name; var init; var common; for (var dp in datenpunkte) { name = pfad + dp; init = datenpunkte[dp].init; common = datenpunkte[dp].common; createState(name, init , forceCreation, common); } } ! function writeDp(arr) { setState(pfad + 'Load_Average.load_average_01_min',parseFloat(arr[0])); setState(pfad + 'Load_Average.load_average_05_min',parseFloat(arr[1])); setState(pfad + 'Load_Average.load_average_15_min',parseFloat(arr[2])); } ! // Average Load mit uptime auslesen function getAverage() { exec(abfrageAverageLoad, function(err, stdout, stderr) { if (err) { log(err); return; } stdout = stdout.replace(/(.)+load average: /, ""); stdout = stdout.replace(/,/g,"."); stdout = stdout.split(". "); //log(stdout); writeDp(stdout); }); } ! // Uptime mit uptime auslesen function getUptime() { exec(abfrageUptime, function(err, stdout, stderr) { if (err) { log(err); return; } stdout = stdout.split(" "); var now = formatDate(new Date(), "YYYY-MM-DD"); setState(pfad + 'uptime',deltaDays(stdout[0],now)); }); } ! function getData() { getAverage(); getUptime(); } ! // regelmässige Wiederholungen // ----------------------------------------------------------------------------- schedule(cronStr, getData); ! // main // ----------------------------------------------------------------------------- function main() { getData(); } ! // Start Skript: // ----------------------------------------------------------------------------- ! createDp(); setTimeout(main, 500); !
Auslastung der Fesplatte:
!
// ermittelt auf Linuxrechner den Festplattenspeicher // mit dem Linux Befehl: df // // Beduetung der Werte: // http://www.selflinux.org/selflinux/html/information_basic02.html ! // getestet unter Ubuntu 16.04 mit deutscher Ausgabe von "df" ! // df / -h auf der Kosole muss folgende Tabelle ausgeben: ! // # df / -h // Dateisystem Größe Benutzt Verf. Verw% Eingehängt auf // /dev/mapper/ubuntu1604server--vg-root 34G 2,8G 29G 9% / ! var pfad = "Systeminfos.host.HD" + "."; var cronStr = "*/30 * * * *"; var abfrage ="df / -m"; ! var forceCreation = true; ! var datenpunkte = { 'HD_1_gesamt': { "init":0, "common": { name: 'Festplattenspeicher gesamt', desc: 'Festplattenspeicher gesamt', type: 'number', unit: 'GByte', role: 'value' } }, 'HD_2_benutzt': { "init":0, "common": { name: 'Festplattenspeicher benutzt', desc: 'Festplattenspeicher benutzt', type: 'number', unit: 'GByte', role: 'value' } }, 'HD_3_frei': { "init":0, "common": { name: 'Festplattenspeicher frei', desc: 'Festplattenspeicher frei', type: 'number', unit: 'GByte', role: 'value' } }, 'HD_4_verwendet': { "init":"", "common": { name: 'verwendeter Festplattenspeicher in %', desc: 'verwendeter Festplattenspeicher in %', type: 'number', unit: '%', role: 'value' } } }; ! function createDp() { var name; var init; var common; for (var dp in datenpunkte) { name = pfad + dp; init = datenpunkte[dp].init; common = datenpunkte[dp].common; createState(name, init , forceCreation, common); } } ! function writeDp(arr) { var wert; var i = 0; for (var dp in datenpunkte) { wert = arr[i++]; if (i !== 4 ) { wert = Math.round(wert/1024*10)/10; } else { wert = parseInt(wert); } setState(pfad + dp,wert); } } ! function freeHD() { exec(abfrage, function(err, stdout, stderr) { if (err) { log(err); return; } stdout = stdout.replace(/.+\n/, ""); // alle Zeichen vor dem ersten cr log(stdout); stdout = stdout.replace(/[\S]+[ ]+/, ""); stdout = stdout.replace("%", ""); stdout = stdout.split(/[ ]+/g); //log(stdout); writeDp(stdout); }); } ! // regelmässige Wiederholungen // ----------------------------------------------------------------------------- schedule(cronStr, freeHD); ! // main // ----------------------------------------------------------------------------- function main() { freeHD(); } ! // Start Skript: // ----------------------------------------------------------------------------- ! createDp(); setTimeout(main, 500); !
Speicher:
!
// ermittelt auf Linuxrechner den Speicherverbrauch // mit dem Linux Befehl: free // // Beduetung der Werte: // http://www.selflinux.org/selflinux/html/information_basic02.html ! // getestet unter Ubuntu 16.04 mit deutscher Ausgabe von "free -m" ! // free -m auf der Kosole muss folgende Tabelle ausgeben: ! //# free -m // gesamt benutzt frei gemns. Puffer/Cache verfügbar //Speicher: 7966 1238 5916 10 812 6624 //Auslagerungsspeicher: 8187 0 8187 ! var pfad = "Systeminfos.host.Speicher" + "."; var cronStr = "*/1 * * * *"; ! var forceCreation = false; ! var datenpunkte = { 'Speicher_1_gesamt': { "init":0, "common": { name: 'Speicher gesamt, der für das System verfügbar ist', desc: 'Speicher gesamt, der für das System verfügbar ist (ohne Kernel)', type: 'number', unit: 'MByte', role: 'value' } }, 'Speicher_2_benutzt': { "init":0, "common": { name: 'Speicher benutzt', desc: 'Speicher benutzt', type: 'number', unit: 'MByte', role: 'value' } }, 'Speicher_3_frei': { "init":0, "common": { name: 'Speicher frei', desc: 'Speicher frei', type: 'number', unit: 'MByte', role: 'value' } }, 'Speicher_4_gemeinsam': { "init":0, "common": { name: 'gemeinsamer Speicher für Prozesse', desc: 'gemeinsamer Speicher für Prozesse', type: 'number', unit: 'MByte', role: 'value' } }, 'Speicher_5_Buffer_Cache': { "init":0, "common": { name: 'Speicher als Cache', desc: 'Speicher als Cache', type: 'number', unit: 'MByte', role: 'value' } }, 'Speicher_6_verfügbar': { "init":0, "common": { name: 'verfügbarer Speicher', desc: 'verfügbarer Speicher', type: 'number', unit: 'MByte', role: 'value' } }, 'Auslagerungsspeicher_1_gesamt': { "init":0, "common": { name: 'Auslagerungsspeicher gesamt', desc: 'Auslagerungsspeicher gesamt', type: 'number', unit: 'MByte', role: 'value' } }, 'Auslagerungsspeicher_2_benutzt': { "init":0, "common": { name: 'Auslagerungsspeicher benutzt', desc: 'Auslagerungsspeicher benutzt', type: 'number', unit: 'MByte', role: 'value' } }, 'Auslagerungsspeicher_3_frei': { "init":0, "common": { name: 'Auslagerungsspeicher frei', desc: 'Auslagerungsspeicher frei', type: 'number', unit: 'MByte', role: 'value' } } }; ! function createDp() { var name; var init; var common; for (var dp in datenpunkte) { name = pfad + dp; init = datenpunkte[dp].init; common = datenpunkte[dp].common; createState(name, init , forceCreation, common); } } ! function writeDp(arr) { var i = 0; for (var dp in datenpunkte) { var wert = parseInt(arr[i++]); setState(pfad + dp,wert); //log(dp+": "+ wert + " #" + typeof(wert)); } } ! // Speicher mit "free -m" auslesen function freeMem() { exec('free -m', function(err, stdout, stderr) { if (err) { log(err); return; } stdout = stdout.replace(/[\D]+/, ""); // alle Zeichen vor der ersten Ziffer entfernen stdout = stdout.split(/[\D]+/g); // alle nicht-Ziffern als Trennzeichen für das Array verwenden (im Block) //log(stdout); writeDp(stdout); }); } ! // regelmässige Wiederholungen // ----------------------------------------------------------------------------- schedule(cronStr, freeMem); ! // main // ----------------------------------------------------------------------------- function main() { freeMem(); } ! // Start Skript: // ----------------------------------------------------------------------------- ! createDp(); setTimeout(main, 500); !
Installierte Version von node.js:
! ````
var pfad = "Systeminfos.ioBroker" + ".";
var cronStr = "*/30 * * * *";
! var abfrage = "nodejs -v";
! var idNodejsVersion = pfad + 'node_js_Version';
! createState(idNodejsVersion, "", {
name: 'node.js Version',
desc: 'node.js Version (abgefragt mit nodejs -v)',
type: 'string',
unit: '',
role: 'value'
});! function abfrageVersion() {
exec(abfrage, function(err, stdout, stderr) {
if (err) {
log(err,"error");
return;
}
//log(stdout);
setStateDelayed(idNodejsVersion,stdout,100);
});
}
! function abfragen() {
abfrageVersion();
}
! // regelmässige Wiederholungen
// -----------------------------------------------------------------------------
schedule(cronStr, abfragen);
! // main
// -----------------------------------------------------------------------------
function main() {
abfragen();
}
! // Start Skript:
// -----------------------------------------------------------------------------
! setTimeout(main, 500);
! ````usw.
Die Skripte sind unter Ubuntu 16.04 getestet. Sie starten die Abfrage unter Linux und die Rückmeldung wird ausgewertet.
-
Und eine Variante der Darstellung:
-
Hallo ruhr70,
Selbst schuld, wenn du dich hier meldest
Du hast ja das script zum auslesen der ioBroker Prozesse geschrieben.
Kannst du das um die Hintergrundprozesse wie redis-server und mysqld oder influxd erweitern?
…und %cpu used... aus dem header von top
Oder mir per PN erklären, wie du da ran kommst.
Gruß
Rainer
-
Und hier mal mein momentaner Stand beim Cubietruck
Da kommen noch die Werte vom Akkumanagement dazu.
Muss aber einen zweiten cubie mit Akku fertigmachen.
Gruß
Rainer
-
Hallo ruhr70,
Selbst schuld, wenn du dich hier meldest
Du hast ja das script zum auslesen der ioBroker Prozesse geschrieben.
Kannst du das um die Hintergrundprozesse wie redis-server und mysqld oder influxd erweitern?
…und %cpu used... aus dem header von top `
Was hältst Du von Arbeitsteilung
Du postest die Linux-Abfragen und ich schreib das Skript welches die Werte parst. :mrgreen:
-
Danke, kapiert.
Schau dir mal an:
http://www.gargi.org/showthread.php?122 … s-auslesen
Ich habe dies installiert, kriege letztendlich dies angezeigt:
Grüße Ingo
-
mmh… das sieht sehr individuell aus und dürfte bei jedem Rechner eine andere Ausgabe erzeugen.
Hat auch nicht hiermit zu tun oder:
` > Kannst du das um die Hintergrundprozesse wie redis-server und mysqld oder influxd erweitern?
…und %cpu used... aus dem header von top `
Sollen wir damit nicht anfangen?
-
Hallo ruhr70,
da haben sich zwei Anfragen überschnitten!
Das letzte war für mich.
Sollen wir damit nicht anfangen? `
Ja!Was hältst Du von Arbeitsteilung
Du postest die Linux-Abfragen und ich schreib das Skript welches die Werte parst. `
gerne, aber genau das weiß ich ja nichtNicht lachen, aber du fragst doch auch irgendwie mit grep(?) nach "io." ab, oder?
und dann zusätzlich (wenn ich es jetzt langsam richtig lerne mit | und "redis-server" und "| influxd | mysqld" ?????
nur so rein theoretisch von einem js-Legastheniker :oops:
Gruß
Rainer
-
, aber du fragst doch auch irgendwie mit grep(?) nach "io." ab, oder?
und dann zusätzlich (wenn ich es jetzt langsam richtig lerne mit | und "redis-server" und "| influxd | mysqld" ????? `
He he…. deswegen ja die Arbeitsteilung... das Parsen bekomme ich noch hin...
die Linux Abfragen muss ich mir auch jedes Mal zusammensuchen.
Die ioBroker Prozesse frage ich so ab:
`ps -A aux --sort -pmem | grep " [i]o.*"`[/i]
-
-
Hallo ruhr70
ps -A aux --sort -pcpu | grep "redis-server"
Hier kommen leider zwei:
root@ioBroker-Cubie:~# ps -A aux --sort -pcpu | grep "mysqld" mysql 1295 1.9 8.2 363056 171120 ? Sl Feb21 348:11 /usr/sbin/mysqld --basedir=/usr --datadir=/var/lib/mysql --plugin-dir=/usr/lib/mysql/plugin --user=mysql --log-error=/var/log/mysql/error.log --pid-file=/var/run/mysqld/mysqld.pid --socket=/var/run/mysqld/mysqld.sock --port=3306 root 732 0.0 0.0 1440 104 ? S Feb21 0:00 /bin/sh /usr/bin/mysqld_safe root 2680 0.0 0.0 5624 2000 pts/0 S+ 11:39 0:00 grep mysqld
Die header von top versuche ich gleich noch
Gruß
Rainer
-
Die header von top versuche ich gleich noch `
google hilft, aber kann das sein:top -bn1 | grep "Cpu(s)" | sed "s/.*, *\([0-9.]*\)%* id.*/\1/" | awk '{print 100 - $1"%"}'
da kommt bei mir 97% raus.
oder muss das noch durch die Zahl der Kerne geteilt werden?
EDIT:
oben ist anscheinend Mist, das hier scheint zu funktionieren:
top -d 0.5 -b -n2 | grep "Cpu(s)"|tail -n 1 | awk '{print $2}'
EDIT2:
Auf dem Pine64 mit influxDB:
brokerio@ioBroker_Pine64:~$ ps -A aux --sort -pcpu | grep "influxd" influxdb 9822 2.4 7.0 830996 144164 ? Ssl 2016 3416:05 /usr/bin/influxd -config /etc/influxdb/influxdb.conf root 15502 1.1 2.0 1200848 41692 ? Sl Feb24 144:51 io.influxdb.0 brokerio 4550 0.0 0.0 6148 944 pts/0 S+ 12:04 0:00 grep influxd
EDIT3:
der code bei Edit bringt nur die CPU-Usage durch User-Programme, dieses hier:
top -d 0.5 -b -n2 | grep "Cpu(s)"|tail -n 1 | awk '{print $2 + $3 + $4}'
bringt zusätzlich noch die System und die Nice - Programme (addiert)
Gruß
Rainer
-
mhhh… wird schwierig...
michael@ubuntu1604server:~/dhtest-master$ top -d 0.5 -b -n2 | grep "Cpu(s)"|tail -n 1 | awk '{print $2}' top: ungültiges Verzögerungsintervall »0.5« michael@ubuntu1604server:~/dhtest-master$ michael@ubuntu1604server:~/dhtest-master$ top -d 0.5 -b -n2 | grep "Cpu(s)"|tail -n 1 | awk '{print $2 + $3 + $4}' top: ungültiges Verzögerungsintervall »0.5« michael@ubuntu1604server:~/dhtest-master$
-
Ubuntu!
ungültiges Verzögerungsintervall »0.5« `
Das Verzögerungsintervall ist notwendig, das tatsächlich die Abfrage ohne Verzögerung falsch hohe Werte liefert.Habe (leider wäre gelogen) kein Ubuntu zum Testen.
Klappt es bei dir mit Ganzzahlen?
Gruß
Rainer
-
michael@ubuntu1604server:~/dhtest-master$ top -d 1 -b -n2 | grep "Cpu(s)"|tail -n 1 | awk '{print $2 + $3 + $4}' michael@ubuntu1604server:~/dhtest-master$ top -d 1 -b -n2 | grep "Cpu(s)"|tail -n 1 | awk '{print $2}' michael@ubuntu1604server:~/dhtest-master$
kein Fehler
keine Ausgabe
-
kein Fehler
keine Ausgabe ` :shock:
Habe das bei dir rauskopiert:
root@ioBroker-Cubie:~# top -d 1 -b -n2 | grep "Cpu(s)"|tail -n 1 | awk '{print $2 + $3 + $4}' 88 root@ioBroker-Cubie:~# top -d 1 -b -n2 | grep "Cpu(s)"|tail -n 1 | awk '{print $2}' 31,9 root@ioBroker-Cubie:~#
wie sieht denn bei dir der Header im Ubuntu-top aus?
-
Groß, Kleinschreibung?
-
root?
Gruß
Rainer
-
-
Bin vor kurzem vom Raspberry 3 auf einen Gigabyte Brix 3150 umgestiegen, da komme ich mit dem RPI-Monitor wohl nicht weit.
Es ist also eine Debian-Minimal-Installation geworden, (ohne Desktop), dann IoBroker installiert, läuft super.
Hardware: Gigabyte Brix 3150 mit 8 GB RAM und 120 GB SSD.
swerte haben, etwa analog zum RPI-Monitor.
Ich habe lm-sensors installiert, kriege aber letztendlich nur die CPU-Temperatur heraus.
Auf Homorans Rat den RPI-Monitor installiert.. `
Hab ihn auch, Unterschied: ubuntu Server und 4Gb RAM.Läuft auch Top. BT-Script läuft und RFlink.
Fehler hatte ich auch mit RPI Adapter. Hab dann paar Werte deaktiviert, die Fehler zeigten. Ob die anderen Werte korrekt sind, ist zu bezweifeln: kleinste CPU Geschwindigkeit ist zu klein.
lm-sensors muss ich mal ausprobieren.
-
Moin, Moin,
ich habe mich jetzt stundenlang durch die JavaScript-Anleitung gewühlt.
Die Scripte von ruhr70 habe ich eingearbeitet bekommen, sie liefern mir
unter Objecte auch brauchbare Resultate.
Beim Starten der Scripts gab es keine Fehlermeldungen, also sollte es unter Debian
auch funktionieren.
Mein Dank an ruhr70 dafür !
Mein Gott, was steckt da Arbeit drin.
Gibt es noch mehr Scripte dazu von dir ?
Grüße Ingo