Ein Modul zur Erfassen von diversen RPi/Linux-Statistiken (SYSMON)

Begonnen von hexenmeister, 06 Dezember 2013, 17:44:38

Vorheriges Thema - Nächstes Thema

hexenmeister

@holzwurm83

Hi!

Zitatbei mir läuft Fhem auf einem MacMini Server. Kann ich das Modul auch für den Mac Server verwenden?
Keine Ahnung, ausprobieren. ;) Ist ja auch Linux-artig, oder nicht? Dann müsste einiges gehen. Ansonsten gilt das übliche Angebot: wenn Du mir sagst, wie ich auf die fehlende Daten (CPU etc.) komme, baue ich ein.

Grüße,

Alexander
Maintainer: MQTT_GENERIC_BRIDGE, SYSMON, SMARTMON, systemd_watchdog, MQTT, MQTT_DEVICE, MQTT_BRIDGE
Contrib: dev_proxy

hexenmeister

@det.

ich bekomme die Daten zu idle time über cat /proc/uptime
Ich wüsste nicht, dass hier die CPU-Daten getrennt ausgegben werden. Wie sieht bei dir diese Ausgabe aus?
Ggf. wie komme ich auf die getrennte CPU-Kern-Daten?

Grüße,

Alexander

Maintainer: MQTT_GENERIC_BRIDGE, SYSMON, SMARTMON, systemd_watchdog, MQTT, MQTT_DEVICE, MQTT_BRIDGE
Contrib: dev_proxy

det.

@ hexenmeister,
Die Daten siehst Du unten in meinem Post (hatte da nur die Zeitstempel weg editiert, sonst ist es direkt die Ausgabe auf dem Bildschirm)
Da sind bei cpu_bogomips 1819.52 1819.52 die Werte zweimal, für jeden Kern  vom Cubie2 im Gegensatz zum RPI, da steht nur cpu_bogomips 2.0. Ist nicht schlimm, da passe ich das Reading an und teile den idletime Wert durch 2.
LG
det.

hexenmeister

@det.

nee, ich meine, was liefert cat /proc/uptime
Ich befürchte, da kommen die Daten bereit kumuliert.
BogoMips kommt ja pro CPU, idle time scheinbar nicht.
Maintainer: MQTT_GENERIC_BRIDGE, SYSMON, SMARTMON, systemd_watchdog, MQTT, MQTT_DEVICE, MQTT_BRIDGE
Contrib: dev_proxy

arnoL

Zitat von: hexenmeister am 19 Januar 2014, 21:02:31
Mit WLAN verstehe ich nicht, bei mir tut es. Heißt WLAN-Adapter wlan0? Stelle bitte (nach dem morgigen Update) global loglevel auf 5 und mache get update auf SYSMON. Im log sollte zu sehen sein, welche Adapter eingelesen werden.
ich schrub ja schon, dass es mit attr network-interfaces wlan0 wieder geht.
Ich hatte das jetzt so verstanden, dass man dieses attr wohl nicht mehr extra definieren müsste.

mit "global loglevel auf 5" meintest du möglicherweise verbose 5 ?
Hab das mal gemacht. Puh, verdammt gesprächig das!
Was ich dabei entdeckt hab:
defined(@array) is deprecated at ./FHEM/42_SYSMON.pm line 835, <$fh> line 211.
(Maybe you should just omit the defined()?)
defined(@array) is deprecated at ./FHEM/42_SYSMON.pm line 955, <$fh> line 211.
(Maybe you should just omit the defined()?)
defined(@array) is deprecated at ./FHEM/42_SYSMON.pm line 1019, <$fh> line 211.
(Maybe you should just omit the defined()?)
Useless use of a constant (1.09861228866811) in void context at ./FHEM/42_SYSMON.pm line 953, <$fh> line 211.
Useless use of string in void context at ./FHEM/42_SYSMON.pm line 953, <$fh> line 211.
Subroutine trim redefined at ./FHEM/42_SYSMON.pm line 1137, <$fh> line 211.


Im Übrigen ist das update schon durch!
Vielleicht wäre es noch hilfreich ab Zeile 1877 noch wlan ins Spiel zu bringen.

Was an dieser Stelle auch mal gesagt(geschrieben!) werden muss:
Grandiose Arbeit, echt.
Knapp 2000 Zeilen Code!
Das muss dir, außer den Machern hinter FHEM, erst mal einer nachmachen.
Danke


Gruß
Arno

hexenmeister

Hallo arno!

Schön zu hören, dass mein Modul nützlich ist :)

Deine Version ist doch älter, diese Warnungen sollten ab morgigen Update nicht mehr kommen. Ggf. kannst Du die Version von GitHub nehmen, dann hast Du gleich die aktuelle.

Ich meinte aber nicht diese Ausgaben, sondern Debug-Log von SYSMON. Diesen kann man am besten so anzeigen:
tail -n1000  log/fhem-2014-01.log | grep SYSMON
ggf. Log-Pfad anpassen.
Ist aber egal, ich habe den Fehler gefunden, einen ziemlich fetten sogar. Daher danke für den guten Hinweis  :D
Die WLAN-Angaben sollten jetzt auch ohne Attribut kommen, würde ich jedoch trotzdem empfehlen, genau zu definieren.

Das WLAN-Beispiel habe ich in die Doku aufgenommen.

Grüße,

Alexander

Maintainer: MQTT_GENERIC_BRIDGE, SYSMON, SMARTMON, systemd_watchdog, MQTT, MQTT_DEVICE, MQTT_BRIDGE
Contrib: dev_proxy

Wernieman

@hexenmeister:
Könntest Du mir vom raspi/FritxBox folgendes posten:

vmstat -s

Bitte den Befehl und nicht die Datei ;o)
- Bitte um Input für Output
- When there is a Shell, there is a Way
- Wann war Dein letztes Backup?

Wie man Fragen stellt: https://tty1.net/smart-questions_de.html

arnoL

Hallo Wernieman,
bei mir gibt der Befehl folgendes aus:

root@raspberrypi:/home/pi# vmstat -s
       448176 K total memory
       339160 K used memory
       239524 K active memory
        74636 K inactive memory
       109016 K free memory
        83804 K buffer memory
       187128 K swap cache
       102396 K total swap
            0 K used swap
       102396 K free swap
      1352784 non-nice user cpu ticks
            0 nice user cpu ticks
       920444 system cpu ticks
    185062073 idle cpu ticks
        14828 IO-wait cpu ticks
         3114 IRQ cpu ticks
        68892 softirq cpu ticks
            0 stolen cpu ticks
       142205 pages paged in
      2998432 pages paged out
            0 pages swapped in
            0 pages swapped out
   1426511781 interrupts
    206967867 CPU context switches
   1388223315 boot time                                                                                                                                                 
       293685 forks                                                                                                                                                     
root@raspberrypi:/home/pi#


sysmon sagt:
Readings
cpu_bogomips 2.00 2014-01-20 17:11:16
cpu_freq 700 2014-01-20 17:11:16
cpu_temp 45.46 2014-01-20 17:11:16
cpu_temp_avg 45.3 2014-01-20 17:11:16
fhemuptime 66815 2014-01-20 17:11:16
fhemuptime_text 0 days, 18 hours, 33 minutes 2014-01-20 17:11:16
idletime 1987243 98.82 % 2014-01-20 17:11:16
idletime_text23 days, 00 hours, 00 minutes (98.82 %)  2014-01-20 17:11:16
loadavg 0.02 0.07 0.05 2014-01-20 17:11:16
ram Total: 437.67 MB, Used: 66.64 MB, 15.23 %, Free: 371.04 MB 2014-01-20 17:11:16
swap Total: 100.00 MB, Used: 0.00 MB, 0.00 %, Free: 100.00 MB 2014-01-20 17:11:16
uptime 2010960 2014-01-20 17:11:16
uptime_text 23 days, 06 hours, 36 minutes 2014-01-20 17:11:16
wlan0 RX: 425.95 MB, TX: 81.53 MB, Total: 507.48 MB 2014-01-20 17:11:16
wlan0_diff RX: 0.02 MB, TX: 0.00 MB, Total: 0.02 MB 2014-01-20 17:11:16


Vielleicht hilft dir das erst mal weiter.


Gruß
Arno

hexenmeister

Hi!

vmstat -s auf meinem Raspberry Pi:


       496948 K total memory
       484780 K used memory
       159512 K active memory
       299208 K inactive memory
        12168 K free memory
        54768 K buffer memory
       310784 K swap cache
       102396 K total swap
            0 K used swap
       102396 K free swap
      7958321 non-nice user cpu ticks
            0 nice user cpu ticks
      1669936 system cpu ticks
     68485465 idle cpu ticks
       416293 IO-wait cpu ticks
        53657 IRQ cpu ticks
       317737 softirq cpu ticks
            0 stolen cpu ticks
     94986698 pages paged in
     99718084 pages paged out
            0 pages swapped in
            0 pages swapped out
   2696797266 interrupts
    118743551 CPU context switches
   1389386535 boot time
       427964 forks


FritzBox mag vmstat gar nicht erst >:(

Grüße,

Alexander
Maintainer: MQTT_GENERIC_BRIDGE, SYSMON, SMARTMON, systemd_watchdog, MQTT, MQTT_DEVICE, MQTT_BRIDGE
Contrib: dev_proxy

arnoL

Zitat von: hexenmeister am 20 Januar 2014, 00:14:16
Deine Version ist doch älter, diese Warnungen sollten ab morgigen Update nicht mehr kommen.

Oh, Ok.
Hab jetzt die aktuelle.
Was ich nun noch fand (war in vorheriger Version wohl auch schon):
Use of uninitialized value $rName in hash element at ./FHEM/42_SYSMON.pm line 1005.
Use of uninitialized value $rName in hash element at ./FHEM/42_SYSMON.pm line 1007.
Use of uninitialized value $rName in string eq at ./FHEM/42_SYSMON.pm line 1008.
Use of uninitialized value $rName in hash element at ./FHEM/42_SYSMON.pm line 1005.
Use of uninitialized value $rName in hash element at ./FHEM/42_SYSMON.pm line 1007.
Use of uninitialized value $rName in string eq at ./FHEM/42_SYSMON.pm line 1008.


Edit:
ebenso macht
define sysv1 weblink htmlCode {SYSMON_ShowValuesHTML('sysmon')}

nicht mehr mit.
    define sysv2 weblink htmlCode {SYSMON_ShowValuesHTML('sysmon', ('date:Datum', 'cpu_temp:CPU Temperatur: °C', 'cpu_freq:CPU Frequenz: MHz'))}

geht.

Gruß
Arno

hexenmeister

ne, wir haben irgendwie definitiv nicht die gleiche Versionen. Nachstellen kann ich auch nicht, bei mir funktioniert alles.

Date: 21.01.2014 00:45:11
CPU temperature: 48.69 °C
CPU frequency: 900 MHz
BogoMIPS: 2.00
System up time: 10 days, 03 hours, 02 minutes
FHEM up time: 0 days, 05 hours, 54 minutes
Load average: 0.17 0.19 0.17
RAM: Total: 485.30 MB, Used: 119.25 MB, 24.57 %, Free: 366.05 MB
swap: Total: 100.00 MB, Used: 0.00 MB, 0.00 %, Free: 100.00 MB
Ethernet: RX: 3184.77 MB, TX: 2651.00 MB, Total: 5835.77 MB
Filesystem /boot: Total: 56 MB, Used: 19 MB, 34 %, Available: 38 MB at /boot
Root: Total: 7340 MB, Used: 3396 MB, 49 %, Available: 3602 MB at /
USB-Stick: Total: 30344 MB, Used: 13637 MB, 48 %, Available: 15144 MB at /media/usb1
System Aktualisierungen: 3 aktualisierte, 0 neue Pakete


Internals CFGFN

DEF htmlCode {SYSMON_ShowValuesHTML('sysmon')}
LINK  {SYSMON_ShowValuesHTML('sysmon')}
NAME sysv1
NR     445
STATE initialized
TYPE weblink
WLTYPE htmlCode


Denke, ich habe trotzdem die Stelle gefungen und habe eine Sicherheitsabfrage eingebaut. Probiere mal die Version von GitHub (oder morgen per update). Ich hoffe, dann läuft alles wieder vernünftig. Ansonsten werde ich wohl eine Menge Debugausgaben einbauen müssen.

Grüße,

Alexander
Maintainer: MQTT_GENERIC_BRIDGE, SYSMON, SMARTMON, systemd_watchdog, MQTT, MQTT_DEVICE, MQTT_BRIDGE
Contrib: dev_proxy

Wernieman

#131
@hexenmeister
ich merke gerade, das ich bei meinem Server (allerdings über mrtg) die Ausgabe von vmstat verwende, anstatt direkt auf die Fieles zuzugreifen. Würde aber, da eben eventuell nicht verfügbar, etwas "Schmalz" in die direkte Auswertung investieren.

vmstat verarbeitet auch folgende Datei:
"/proc/stat"

Könnte ich davon auch eine Ausgabe bekommen?

Hintergrund:
Ich plahne dir zu sagen, wie Du die CPU-Ticks Monitoren kannst. Linux verarbeitet alle Programme Tikweise, Zeitschleifen weise. Die Verwendung von diesen Zeitschleifen werden per Zähler Monitort. Bei meinem X86-Sytem z.B.
cpu  23210 11226 9241 146752 17194 2 587 0 0 0
cpu0 10762 6584 2619 81395 2703 0 74 0 0 0
cpu1 12448 4642 6622 65357 14490 2 513 0 0 0

Die Reihenfolge der Ausgaben sagt:
    user: normal processes executing in user mode
    nice: niced processes executing in user mode
    system: processes executing in kernel mode
    idle: twiddling thumbs
    iowait: waiting for I/O to complete
    irq: servicing interrupts
    softirq: servicing softirqs

Wenn Du also alle Zahlen zusammenzählst, dann hast Du die Zeitschleifen seit Systemstart. Wenn Du Dir die Zahlen merkst und nach 5 Minuten eben subtrahierst, weist Du, was das System in der Zeit gemacht hat. Wenn dan idle=0, ist das System auf Anschlag. Bei max iowait/system/irq hat das System ein internes Problem, sprich HW-Bodleneck. bei max bei nice ... Du lässt ein Programm auf Anschlag laufen ....
Nett ist, das per /proc/stat es nicht nur für das Gesammtsystem (cpu), sondern auch Aufgeschlüsselt über die cpu´s zu kriegen ist (hier cpu0,1)

Möchte nur sichergehen, das auf ARM die Ausgaben Ähnlich sind.

Sorry das ich hier zu dozieren angefangen habe ;o)

Edit:
Für weitere Informationen der stats-Datei:
http://www.linuxhowtos.org/System/procstat.htm
- Bitte um Input für Output
- When there is a Shell, there is a Way
- Wann war Dein letztes Backup?

Wie man Fragen stellt: https://tty1.net/smart-questions_de.html

hexenmeister

Hi!

cat /proc/stat liefert bei Raspberry Pi:
cpu  8650444 0 1824704 75796752 451568 58656 333961 0 0 0
cpu0 8650444 0 1824704 75796752 451568 58656 333961 0 0 0
intr 3411715173 0 0 0 46295640 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 3335092477 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 68190 1 0 0 0 0 0 0 0 0 1 0 21818981 0 0 0 0 0 130 8439753 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
ctxt 131140556
btime 1389386535
processes 471944
procs_running 1
procs_blocked 0
softirq 195118742 139120483 22624786 189545 6576040 1041164 0 16579155 0 22900 8964669


und bei FritzBox:
cpu  4715585 742418 4194166 386265552 306505 1442288 2626396 0 0
cpu0 4715585 742418 4194166 386265552 306505 1442288 2626396 0 0
intr 2052484533 0 0 0 1303023575 7371303 0 0 0 1 0 0 0 0 0 15224925 0 0 501390521 0 0 0 0 0 0 0 205898223 0 0 18572073 91501 462162 4081 0 0 0 446167 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
ctxt 2569538098
btime 1386331620
processes 724716
procs_running 3
procs_blocked 0


ZitatSorry das ich hier zu dozieren angefangen habe ;o)
Ne, ne. War durchaus interessant ;)

Grüße,

Alexander

Maintainer: MQTT_GENERIC_BRIDGE, SYSMON, SMARTMON, systemd_watchdog, MQTT, MQTT_DEVICE, MQTT_BRIDGE
Contrib: dev_proxy

Wernieman

Also .....

Hier als Beispiel dein FritzBox-Output verwendet:
cpu  4715585 742418 4194166 386265552 306505 1442288 2626396 0 0
cpu0 4715585 742418 4194166 386265552 306505 1442288 2626396 0 0
intr 2052484533 0 0 0 1303023575 7371303 0 0 0 1 0 0 0 0 0 15224925 0 0 501390521 0 0 0 0 0 0 0 205898223 0 0 18572073 91501 462162 4081 0 0 0 446167 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
ctxt 2569538098
btime 1386331620
processes 724716
procs_running 3
procs_blocked 0


folgende "ist-Stand" Werte sind wichtig, ohne Berechnungen 1:1 übernehmen:
processes 724716
procs_running 3
procs_blocked 0


Folgendes muß "berechnet werden, hier als Beispiel für cpu, aber gut wäre für jede CUP (also auch 0,1 ... auch wenn Deine Rechner nur eine CPU (0) haben)
cpu  4715585 742418 4194166 386265552 306505 1442288 2626396 0 0
Die Werte in der Reihenfolge übernehmen, die überzähligen einfach "vergessen" (können hier auf Virtuallisierungs-Hosts keine Rücksicht nehmen)
neuCPUuser, neuCPUnice, neuCPUsystem, neuCPUidle, neuCPUiowait, neuCPUirq, CPUsoftirq
Dieses sind auch IST-Stände und sollten so gespeichert werden (z.B. altCPUuser), da wir sie bei jeder Abfrage wieder brauchen

Dann kann nach jedem Polling die Belastung der CPU wie folgt ermittelt werden
CPUuser = neuCPUuser - altCPUuser (für alle anderen analog)
GesammtCPU = CPUuser + CPUnice + CPUsystem + CPUidle + CPUiowait + CPUirq + CPUsoftirq

Dann ergibt sich für jeden Wert als Belastung seit der letzten Abfrage:
ProzCPUuser = (CPUuser / GesammtCPU) * 100

Es ist nicht sooo intuitiv zu verstehen, aber wie oben geschrieben, dieses ergibt eine 100% Aussage, was das System zwischen den Pollinganzahlen gemacht hat. Und zwar genau, während z.B. die Ist-Abfragen immer nur den Zustand BEIM Polling ausgibt.

Ist es so verständlich? Weiß jetzt nur nicht, wie man es in FHEM integrieren kann ....
- Bitte um Input für Output
- When there is a Shell, there is a Way
- Wann war Dein letztes Backup?

Wie man Fragen stellt: https://tty1.net/smart-questions_de.html

hexenmeister

A-ha! Verstehe. Dürfte nicht sehr schwierig sein.
Du möchtest alle Einzelwerte auch sehen, zusätzlich zum GesamtCPU, richtig?
Maintainer: MQTT_GENERIC_BRIDGE, SYSMON, SMARTMON, systemd_watchdog, MQTT, MQTT_DEVICE, MQTT_BRIDGE
Contrib: dev_proxy