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

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

Vorheriges Thema - Nächstes Thema

Spezialtrick

Vielen Dank! Es funktioniert hervorragend auf dem Raspberry Pi!
FHEM - Debmatic - Zigbee2MQTT - Homekit

ulli

Auf dem BBB läuft jetzt auch alles wunderbar. Spitze danke!

Coole wäre natürlich auch noch folgende Kommandos auslösen zu können ohne sich umständlich  extra über SSH einloggen zu müssen.
- Shutdown/Power Off <shutdown -hP now>
- Reboot   <shutdown -r now>

zusätzliche Rechtevergabe ist unter folgendem Link beschrieben:
http://forum.fhem.de/index.php/topic,18200.0.html

Was meinst du hexenmeister?

hexenmeister

Hi ulli!

Schön, dass es jetzt läuft. :)
Machbar ist das mit dem Restart natürlich schon, allerdings wäre das in einem Statistikmodul definitiv fehl am Platz, nicht? ;)

Grüße,

Alexander


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

De.eM


hexenmeister

Moin!

Es gibt jetzt eine neue Version. Darin sind vor allem folgende Neuerungen enthalten:

Auswahl zu überwachener Ethernet-Schnittstellen
Attribut network-interfaces <name>[:<interface>[:<comment>]],...
Kommaseparierte Liste der Netzwerk-Interfaces, die überwacht werden sollen. Jeder Eintrag besteht aus dem Reading-Namen, dem Namen des Netwerk-Adapters und einem Kommentar für die HTML-Anzeige (s. SYSMON_ShowValuesHTML). Wird kein Dopelpunkt verwendet, wird der Wert gleichzeitig als Reading-Name und Interface-Name verwendet
Beispiel ethernet:eth0:Ethernet,wlan:wlan0:WiFi
   
Benutzerdefiniere Readings
Attribut user-defined <readingsName>:<Interval_Minutes>:<Comment>:<Cmd>,...
Diese kommaseparierte Liste definiert Einträge mit jeweils folgenden Daten: Reading-Name, Aktualisierungsinterval in Minuten, Kommentar und Betriebsystem-Commando
Die BS-Befehle werden entsprechend des angegebenen Intervals ausgeführt und als Readings mit den angegebenen Namen vermerkt. Kommentare werden für die HTML-Ausgaben (s. SYSMON_ShowValuesHTML) benötigt.
Alle Parameter sind nicht optional!
Es ist wichtig, dass die angegebenen Befehle schnell ausgeführt werden, denn in dieser Zeit wird der gesamte FHEM-Server blokiert!
Werden Ergebnisse der lang laufenden Operationen benöting, solten diese z.B als CRON-Job eingerichtet werden und in FHEM nur die davor gespeicherten Ausgaben visualisiert.

Beispiel: Anzeige der vorliegenden Paket-Aktualisierungen für das Betriebsystem:
In einem cron-Job wird folgendes täglich ausgeführt:
apt-get upgrade --dry-run| perl -ne '/(\d*)\s[upgraded|aktualisiert]\D*(\d*)\D*install|^ \S+.*/ and print "$1 aktualisierte, $2 neue Pakete"' 2>/dev/null > /opt/fhem/data/updatestatus.txt
Das Attribute uder-defined wird auf
sys_updates:1440:System Aktualisierungen:cat /opt/fhem/data/updatestatus.txt
gesetzt. Danach wird die Anzahl der verfügbaren Aktualisierungen täglich als Reading 'sys_updates' protokolliert.

Erweiterte Syntax für Attribut filesystems
filesystems <reading name>[:<mountpoint>[:<comment>]],...
Gibt die zu überwachende Dateisysteme an. Es wird eine kommaseparierte Liste erwartet.
Reading-Name wird bei der Anzeige und Logging verwendet, Mount-Point ist die Grundlage der Auswertung, Kommentar ist relevant für die HTML-Anzeige (s. SYSMON_ShowValuesHTML)
Beispiel: /boot,/,/media/usb1
oder: fs_boot:/boot,fs_root:/:Root,fs_usb1:/media/usb1:USB-Stick
Im Sinne der besseren Übersicht sollten zumindest Name und MountPoint angegeben werden.

Erweiterung der Funktion zur HTML-Ausgabe
SYSMON_ShowValuesHTML(<SYSMON-Instanz>[,<Liste>])
Das Modul definiert eine Funktion, die ausgewählte Readings in HTML-Format ausgibt.
Als Parameter wird der Name des definierten SYSMON-Geräts erwartet.
Der zweite Parameter ist optional und gibt eine Liste der anzuzeigende Readings im Format <ReadingName>[:<Comment>[:<Postfix>]] an.
Dabei gibt ReadingName den anzuzeigenden Reading an, der Wert aus Comment wird als der Anzeigename verwendet und Postfix wird nach dem eihentlichen Wert angezeigt (so können z.B. Einheiten wie MHz angezeigt werden).
Falls kein Comment angegeben ist, wird eine intern vordefinierte Beschreibung angegeben. Bei benutzerdefinierbaren Readings wird ggf. Comment aus der Definition verwendet.
Werd keine Liste angegeben, wird eine vordefinierte Auswahl verwendet (alle Werte).

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


Komplette (deutsche) Hilfe ist im Modul bereits enthalten. Diee kann mit folgendem Script ins eigen FHEM integriert werden:
perl contrib/commandref_join.pl

Suche testbereite Freiwillige  ;)

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

kvo1

RPi1: mit CUL: HM-CC-RT-DN,HM-ES-PMSw1-Pl,HM-LC-BL1-FM,HM-LC-Bl1PBU-FM,HM-LC-SW1-PL2,HM-SCI-3-FM,HM-SEC-SC-2,KFM-Sensor
RPi2: Viessmann(optolink) mit 99_VCONTROL.pm,
Cubietruck: Wheezy / Apache / Owncloud
Cubietruck: Armbian(Jessie) / fhem 5.7 / LMS 7.9
RPi3: (Test) mit 7" Touch  &  HM-MOD-RPI-PCB

hexenmeister

Hi!

Das Modul und die Plots sind eingecheckt.  ;D


Grüße,

Alexander

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

sweetie-pie

Hallo,

nettes Modul, teste gerade auf einem Atom-Board.

Linux 2.6.32-55-generic #117-Ubuntu SMP Tue Dec 3 17:34:52 UTC 2013 i686 GNU/Linux


Irgendwie wollen die Dateisysteme und die CPU-Werte nicht wirklich:


fhemuptime           89468
~ /srv               not available
eth0_diff            RX: 0.01 MB, TX: 0.01 MB, Total: 0.02 MB
eth0                 RX: 1463.34 MB, TX: 880.44 MB, Total: 2343.78 MB
uptime_text          9 days, 23 hours, 14 minutes
cpu_bogomips         
idletime_text        27 days, 16 hours, 13 minutes (277.64 %)
~ /boot              Total: 111 MB, Used: 64 MB, 62 %, Available: 41 MB at /boot
swap                 Total: 2535.99 MB, Used: 0.00 MB,  0.00 %, Free: 2535.99 MB
uptime               861262
~                    Total:  MB, Used:  MB,  %, Available:  MB at
loadavg              1.90 1.99 2.01
idletime             2391201 277.64 %
fhemuptime_text      1 days, 00 hours, 51 minutes
ram                  Total: 2003.65 MB, Used: 718.56 MB, 35.86 %, Free: 1285.09 MB
~ /tmp               not available


define sysmon_STAT SYSMON 1 1 1 1
attr sysmon_STAT event-on-update-reading cpu_temp,cpu_temp_avg,cpu_freq,eth0_diff,loadavg,ram,fs_.*
attr sysmon_STAT filesystems /boot,/,/tmp,/srv
attr sysmon_STAT network-interfaces eth0:eth0:Ethernet
attr sysmon_STAT room zzTestzone


Die alternative Schreibweise habe ich gleichfalls ohne Erfolg probiert:
attr sysmon_STAT filesystems fs_boot:/boot:Boot, fs_root:/:Root, fs_tmp:/tmp:Temp, fs_data:/srv:Daten

Dabei ist mir aufgefallen, dass es wohl hier generell ein Problem gibt, wenn hinter dem Komma kein Leerzeichen ist. Ohne Leerezichen erhaltre ich gar keine Ausgabe, mit wird mir wie oben zumindest Boot ausgegeben. Ich weiß nicht wo du dir die Werte herholst, aber hier mal meine Mountpoints. Dev-Mapper übrigens wg. Raid, Verschlüsselung und LVM.

$ mount
/dev/mapper/myCVG-myCVroot on / type ext4 (rw,errors=remount-ro)
/dev/mapper/myCVG-myCVtmp on /tmp type ext4 (rw)
/dev/sda1 on /boot type ext2 (rw)
/dev/mapper/myCVG-myCVdata on /srv type ext4 (rw)


und hier dazu mal der Speicherplatz:

df -h
Dateisystem            Größe Benut  Verf Ben% Eingehängt auf
/dev/mapper/myCVG-myCVroot
                       19G  8,3G  9,2G  48% /
/dev/mapper/myCVG-myCVtmp
                      4,6G  139M  4,3G   4% /tmp
/dev/sda1             111M   64M   41M  62% /boot
/dev/mapper/myCVG-myCVdata
                      891G  618G  228G  74% /srv


Gruß
  Holger

hexenmeister

Hi Holger!

Ein Atom-Board habe ich nicht, müssen wir ggf. 'blind' versuchen.

Mit CPU-Daten ist klar, das Program kennt dafür keine Methode. Ich leider auch nicht, wenn Du mir sagen kannst, wie man diese Werte programmtechnisch beschaffen kann, baue ich dies gerne ein.

Mit filesystem sehe ich den Fehler auch. Ich rufe z.B. "df /sys -m" auf. Bei Dir sind die Bezeichnungen so lang, dass die Zeilen umgebrochen werden, womit das Programm nicht klar kommt. Außer beim /boot. Dort wird nicht umgebrochen, daher funktioniert das.

baue mal folgende Zeile ein :
if (index($filesystems[0], $fs) < 0) { shift @filesystems; }
FHEM/42_SYSMON.pm, Zeile 830, zwischen
shift @filesystems;

und
  if (index($filesystems[0], $fs) >= 0) # check if filesystem available -> gives failure on console
Ist jedoch ungetestet, schaue mir heute abend genauer an.

Leerzeichen nach dem komma sollten eig. egal sein ( split(/,\s*/, ... ).

Grüße,

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

Wernieman

Sorry fürs OT aber:

Verstehe ich es richtig, das Dir (für Linux) nur die Möglichkeiten für die Statistikerstellungen fehlen?
D.h. wenn man die sagt, wie Statistiken erstellt werden könnten (incl. Pseudokodeschnipsel), könntest Du es einbauen?
- 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

ZitatD.h. wenn man die sagt, wie Statistiken erstellt werden könnten (incl. Pseudokodeschnipsel), könntest Du es einbauen?
Genau so meine ich das ;)

Gewisse Voraussetzungen gibt es natürlich schon:
Die Operation darf nicht allzu lange Zeit brauchen und nicht zu viel Last auf der Maschine erzeugen.
Auch sollte sie mit gewöhnlichen Installationen auskommen (also keine Sondervoraussetzungen etc.)
Aber erstmal her damit, dann sehen wir weiter :)

Da ich die betroffene Hardware wahrscheinlich nicht haben werde, müsste sich jemand auch zum Testen bereit erklären  ;D
Maintainer: MQTT_GENERIC_BRIDGE, SYSMON, SMARTMON, systemd_watchdog, MQTT, MQTT_DEVICE, MQTT_BRIDGE
Contrib: dev_proxy

sweetie-pie

Hallo,

danke, habe es gerade getestet:

fs_root              Total:  MB, Used:  MB,  %, Available:  MB at
fs_data              Total: 911994 MB, Used: 632645 MB, 74 %, Available: 233022 MB at /srv
fs_temp              Total: 4694 MB, Used: 139 MB, 4 %, Available: 4317 MB at /tmp
fs_boot              Total: 111 MB, Used: 64 MB, 62 %, Available: 41 MB at /boot


Root will irgendwie noch nicht.
attr sysmon_STAT filesystems fs_root:/:Root,fs_boot:/boot:Boot,fs_data:/srv:Daten,fs_temp:/tmp:Temp

Was mich eben etwas irritiert hat, ist dass die fs-Werte nicht in den Readings auftauchen, sondern nur in der List. Ist das Absicht?

Ich habe übrigens gerade mal an das df noch ein "h" angehängt. Ich persönlich finde bei meinen Werten sieht das schöner aus.  ;)
fs_data              Total: 891G MB, Used: 618G MB, 74 %, Available: 228G MB at /srv
fs_temp              Total: 4.6G MB, Used: 139M MB, 4 %, Available: 4.3G MB at /tmp
fs_boot              Total: 111M MB, Used: 64M MB, 62 %, Available: 41M MB at /boot


Gruß
Holger




hexenmeister

Hi!

Das ist komisch, was liefert denn "df / -m"?

Zitatdass die fs-Werte nicht in den Readings auftauchen, sondern nur in der List. Ist das Absicht?
Ne, sie sollten da sein. Beides wird auf die gleiche Weise aufbereitet. Hast Du mit get update versucht?

ZitatIch habe übrigens gerade mal an das df noch ein "h" angehängt. Ich persönlich finde bei meinen Werten sieht das schöner aus.
Mag sein. Das hat jedoch ein kleines Nachteil: die Werte werden auch zum Zeichnen benutzt. Bei Dir werden die Plots z.T. nur Müll anzeigen. ;)

Grüße,

Alexander

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

sweetie-pie

Hallo,

ZitatDas ist komisch, was liefert denn "df / -m"?

df / -m
Dateisystem           1M‐Blöcke   Benutzt Verfügbar Ben% Eingehängt auf
/dev/mapper/myCVG-myCVroot
                         18773      8478      9342  48% /


Zu den Readings:
Update habe ich gemacht.

Nochmal zu den CPU-Werten:
Ich weiß nicht wo Du derzeit die Werte herholst und welche Plattformen du alles unterstützen möchtest, aber ein guter Ansatz wäre da z.B. http://www.linuxhowtos.org/System/procstat.htm. Soweit ich weiß holen auch Tools wie top und iostat hier ihre Werte raus...

Gruß
Holger

arnoL

Zitat von: hexenmeister am 12 Januar 2014, 22:03:46
Suche testbereite Freiwillige  ;)

bin da auch schon ne Weile mit dabei.
Nach dem letzten Update die Tage hab ich aber erst mal nicht die Ausgabe von sysmon angeschaut.
Bei meinem heutigen Blick darauf suchte ich erst mal verzweifelt mein WLAN.
Irgendwann dann später auch als seperates Attr gefunden und tut nun wieder.

Was mich aber im Logfile etwas stört ist:
df: `/media/usb1': No such file or directory
df: no file systems processed
Use of uninitialized value in index at ./FHEM/42_SYSMON.pm line 830.
Use of uninitialized value $rPostfix in concatenation (.) or string at ./FHEM/42_SYSMON.pm line 992.


Gut, den Eintrag usb1 hab ich bei filesystems rausgenommen. Ist ja nichts dran.
Aber ist das die Ursache für den Rest der Fehlermeldung?

Wenn ein Medium (filesystem) abgefragt wird, welches nicht verfügber ist (warum auch immer), müsste
man das Log nicht unbedingt zumüllen.
Oder hat das einen anderen Hintergrund?

Gruß
Arno