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

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

Vorheriges Thema - Nächstes Thema

Tommy82

Zitat von: SabineT am 06 September 2017, 06:58:46
Wie schaut denn die Ausgabe von "free" bei deinem Cubie aus?

Zu iwconfig: so wie ich deine Ausgabe interpretiere verwendest du kein WLAN-Interface am Cubie. Da würde ich dann beim Attribute network-interfaces die Definition von wlan0 weg lassen.

Hi, free zeigt bei mir:
free
              total        used        free      shared  buff/cache   available
Mem:        2047136      131552      685728      107992     1229856     1794420
Swap:             0           0           0

In sysmon wird aber immer noch :
ram
Total: 1999.16 MB, Used: -2819.82 MB, -141.05 %, Free: 3616.93 MB
angezeigt

Network-interface hab ich mal auf
eth0:eth0:Ethernet
eingeschränkt
Fhem Cubitruck  Armbian Buster with Linux 5.3.9-sunxi
HM-CC_RT-DN, HM-Sec-RHS,HM-Sec-SD, HM-Sec-SCo,IT1500,1xIT GRR-3500 Fritz!Dect200,Powerline546E,Enigma2 Modul mit 3 Vu+,Wol Modul für WinServer2016 und WinServer 2019,FB6590
Allnetl Wandtablett mit FTUI

SabineT

Der Fehler ist meiner Meinung nach im 42_SYSMON.pm:

    if ($total > 2048) {
       $used_clean = $used;
       $ram = sprintf("Total: %.2f MB, Used: %.2f MB, %.2f %%, Free: %.2f MB", $total, $used_clean, ($used_clean / $
total * 100), ($free));
     } else {
       $used_clean = $used - $buffers - $cached;
       $ram = sprintf("Total: %.2f MB, Used: %.2f MB, %.2f %%, Free: %.2f MB", $total, $used_clean, ($used_clean / $
total * 100), ($free + $buffers + $cached));
     }


Dein Cubie hat nur 2GB RAM, daher wird im SYSMON "$used_clean = $used - $buffers - $cached;" verwendet, was dann zu dem negativen Wert führt. Diese Variante ist eigentlich für den Raspi gedacht.

@hexenmeister müsste da die Entscheidung welche Variante für die Berechnung verwendet wird anders treffen. Eventuell reicht es ja "buffers" (=Raspi) und "buff/cache" von der Titelzeile als Kriterium zu nehmen.

hexenmeister

Die Unterscheidung anhand der Titelzeile erscheint mir zu unsicher. Kann ja in jeder neuen Version anders werden.
Eine bahnbrechende Idee habe ich leider nicht. Evtl. per Attribut einstellen, ist aber auch nicht wirklich schön. Bin offen für Vorschläge.
Maintainer: MQTT_GENERIC_BRIDGE, SYSMON, SMARTMON, systemd_watchdog, MQTT, MQTT_DEVICE, MQTT_BRIDGE
Contrib: dev_proxy

Wernieman

Also wenn ich es bei meinem Raspi anschaue:
uname -m
armv7l


Könntest Du nach Prozessor wechseln. z.B: mein Arbeitspc gibt aus:
uname -m
x86_64
- 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

enno

Mein Cubietruck meldet:
armv7l


Mein Raspberry 1meldet:
armv6l


Mein Lenovo X61
x86_64


Einfacher FHEM Anwender auf Intel®NUC

hexenmeister

Aber reicht das denn? DIe Ausgaben sind verschieden wenigen wegen der Architektur, mehr je nach Distribution, oder nicht?
Maintainer: MQTT_GENERIC_BRIDGE, SYSMON, SMARTMON, systemd_watchdog, MQTT, MQTT_DEVICE, MQTT_BRIDGE
Contrib: dev_proxy

Wernieman

Dad ist die guuuute Frage.

Dieses gibt die Hardware an, also eine Art "CPU-Typ".

Die Ausgabe von Free ist eventuell Kernelspezifisch, wenn Du z.B. einen Kernel ohne swap baust, hast Du die SWAP-Zeile nicht ....
- 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

SabineT

#1477
Scheint also wirklich nicht so einfach zu sein. Vielleicht reicht ja folgende Variante:
$used_clean = $used - $buffers - $cached;
if (($total > 2048) || ($used_clean < 0)) {
       $used_clean = $used;
       $ram = sprintf("Total: %.2f MB, Used: %.2f MB, %.2f %%, Free: %.2f MB", $total, $used_clean, ($used_clean / $
total * 100), ($free));
     } else {
       $ram = sprintf("Total: %.2f MB, Used: %.2f MB, %.2f %%, Free: %.2f MB", $total, $used_clean, ($used_clean / $
total * 100), ($free + $buffers + $cached));
     }


Ob das dann ein richtiges Ergebnis liefert kann ich aber auch nicht garantieren.

SabineT

Wenn ich bei mir auf einem Raspi free abfrage bekomme ich übrigens folgendes Ergebnis:
             total       used       free     shared    buffers     cached
Mem:        947764     814536     133228      47900     227756     473656
-/+ buffers/cache:     113124     834640
Swap:       102396          0     102396

Da gibt's dann eine eigene Zeile mit den berichtigten Werten (-/+ buffers/cache:).

SabineT

Welche Variante richtig ist dürfte von der Version von procps abhängen, soweit ich das auf den folgenden Seiten herauslese:
https://serverfault.com/questions/85470/meaning-of-the-buffers-cache-line-in-the-output-of-free
https://askubuntu.com/questions/770108/what-do-the-changes-in-free-output-from-14-04-to-16-04-mean

D.h. ab Version 3.3.10 gilt die neue Variante. Für die Entscheidung in SYSMON müsste daher die Version vom free herangezogen werden (mit "free -V").

Wernieman

- 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

thuffir

Zitat von: hexenmeister am 07 September 2017, 08:11:00
Die Unterscheidung anhand der Titelzeile erscheint mir zu unsicher. Kann ja in jeder neuen Version anders werden.
Eine bahnbrechende Idee habe ich leider nicht. Evtl. per Attribut einstellen, ist aber auch nicht wirklich schön. Bin offen für Vorschläge.

Wie wäre es eigentlich statt free, /proc/meminfo auszuwerten. Die Angaben dort sind unabhängig von der Distribution. Oder irre ich mich dabei?

hexenmeister

Zitat von: thuffir am 08 September 2017, 12:19:02
Wie wäre es eigentlich statt free, /proc/meminfo auszuwerten. Die Angaben dort sind unabhängig von der Distribution. Oder irre ich mich dabei?
Das ist vermutlich der beste Weg. Muss jetzt nur noch Zeit finden (liegen gerade zu viele halbfertige Projekte rum).
Maintainer: MQTT_GENERIC_BRIDGE, SYSMON, SMARTMON, systemd_watchdog, MQTT, MQTT_DEVICE, MQTT_BRIDGE
Contrib: dev_proxy

TWART016

Das Sysmon Modul schreibt einige Logifles. Wie kann ich die wegbekommen?
           [-w local_tun[:remote_tun]] [user@]hostname [command]
           [-Q query_option] [-R address] [-S ctl_path] [-W host:port]
           [-l login_name] [-m mac_spec] [-O ctl_cmd] [-o option] [-p port]
           [-F configfile] [-I pkcs11] [-i identity_file] [-L address]
           [-D [bind_address:]port] [-E log_file] [-e escape_char]
usage: ssh [-1246AaCfGgKkMNnqsTtVvXxYy] [-b bind_address] [-c cipher_spec]
2017.09.14 20:18:28 1:     main::HandleTimeout                 called by fhem.pl (625)
2017.09.14 20:18:28 1:     main::SYSMON_Update                 called by fhem.pl (3039)
2017.09.14 20:18:28 1:     main::BlockingCall                  called by ./FHEM/42_SYSMON.pm (905)
2017.09.14 20:18:28 1:     main::BlockingStart                 called by FHEM/Blocking.pm (106)
2017.09.14 20:18:28 1:     main::SYSMON_blockingCall           called by FHEM/Blocking.pm (183)
2017.09.14 20:18:28 1:     main::SYSMON_obtainParameters       called by ./FHEM/42_SYSMON.pm (956)
2017.09.14 20:18:28 1:     main::SYSMON_obtainParameters_intern called by ./FHEM/42_SYSMON.pm (1129)
2017.09.14 20:18:28 1:     main::SYSMON_getNetworkInfo         called by ./FHEM/42_SYSMON.pm (1289)
2017.09.14 20:18:28 1:     main::SYSMON_isNetStatClass         called by ./FHEM/42_SYSMON.pm (2776)
2017.09.14 20:18:28 1:     main::SYSMON_execute                called by ./FHEM/42_SYSMON.pm (3627)
2017.09.14 20:18:28 1:     main::SYSMON_Exec                   called by ./FHEM/42_SYSMON.pm (3736)
2017.09.14 20:18:28 1:     main::SYSMON_Exec_Ssh               called by ./FHEM/42_SYSMON.pm (4049)
2017.09.14 20:18:28 1:     main::__ANON__                      called by ./FHEM/42_SYSMON.pm (4200)
2017.09.14 20:18:28 1: stacktrace:
2017.09.14 20:18:28 1: PERL WARNING: Use of uninitialized value $user in concatenation (.) or string at ./FHEM/42_SYSMON.pm line 4200.
2017.09.14 20:18:28 1:     main::HandleTimeout                 called by fhem.pl (625)
2017.09.14 20:18:28 1:     main::SYSMON_Update                 called by fhem.pl (3039)
2017.09.14 20:18:28 1:     main::BlockingCall                  called by ./FHEM/42_SYSMON.pm (905)
2017.09.14 20:18:28 1:     main::BlockingStart                 called by FHEM/Blocking.pm (106)
2017.09.14 20:18:28 1:     main::SYSMON_blockingCall           called by FHEM/Blocking.pm (183)
2017.09.14 20:18:28 1:     main::SYSMON_obtainParameters       called by ./FHEM/42_SYSMON.pm (956)
2017.09.14 20:18:28 1:     main::SYSMON_obtainParameters_intern called by ./FHEM/42_SYSMON.pm (1129)
2017.09.14 20:18:28 1:     main::SYSMON_getNetworkInfo         called by ./FHEM/42_SYSMON.pm (1289)
2017.09.14 20:18:28 1:     main::SYSMON_execute                called by ./FHEM/42_SYSMON.pm (2692)
2017.09.14 20:18:28 1:     main::SYSMON_Exec                   called by ./FHEM/42_SYSMON.pm (3736)
2017.09.14 20:18:28 1:     main::SYSMON_Exec_Ssh               called by ./FHEM/42_SYSMON.pm (4049)
2017.09.14 20:18:28 1:     main::__ANON__                      called by ./FHEM/42_SYSMON.pm (4200)

hexenmeister

SYSMON schreibt selbst keine Logfiles. Höchstens werden Einträge in FHEM-Log erzeugt.
In deinem Fall kann man erkennen, dass es versucht wird, irgendein Befehl per SSH abzusetzen, wasa ohne ngabe eines Benutzers (Attribut remote_user) nicht gelingt. Mehr kann ich ohne weiteren Angaben (oder Glaskugel) nicht erkennen.
Maintainer: MQTT_GENERIC_BRIDGE, SYSMON, SMARTMON, systemd_watchdog, MQTT, MQTT_DEVICE, MQTT_BRIDGE
Contrib: dev_proxy