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

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

Vorheriges Thema - Nächstes Thema

Joachim

Moin Alexander,
ich habe jetzt mal etwas mit smartctl herumexperimentiert, und mir ein paar Gedanken gemacht.
Meine Idee wäre eine 2-Stufige Lösung.
Unterbau für beide Stufen sollte ein regelmäßiger Selbsttest der Festplatte sein,
also z.B. diese Eintrag in der smartd.conf:
/dev/sda -a -o on -S on -s (S/../.././02|L/../../6/03)
täglich um 2:00 Uhr ein kurzer Selbsttest, und jeden Sonntag um 3:00 ein langer Selbsttest.

1. Stufe analog zu System Akualiesierungen mit user-defined machen, also
- cronjob mit folgendem Befehl erstellen:
smartctl -H /dev/sda | grep overall > /opt/fhem/data/smart.txt
und ein user-defined Attribut mit
smart:1:SMART:cat /opt/fhem/data/smart.txt
dann hat man schoneinmal ein Event auf das man triggern kann (PASSED/FAILED!)
(schöner wäre, wenn nur PASSED oder FAILED! in der smart.txt drinnenstehen würde)

2. Stufe auch wieder einen Cronjob erstellen:
smartctl -A /dev/sda > /opt/fhem/data/smart1.txt
und über ein Attribut die Zeile/Zeilen in ein Reading schreiben, die man überwachen möchte.
Als Beispiel:
folgender Inhalt in smart1.txt:
smartctl 6.4 2014-10-07 r4002 [armv7l-linux-3.4.104-sunxi] (local build)
Copyright (C) 2002-14, Bruce Allen, Christian Franke, www.smartmontools.org

=== START OF READ SMART DATA SECTION ===
SMART Attributes Data Structure revision number: 16
Vendor Specific SMART Attributes with Thresholds:
ID# ATTRIBUTE_NAME          FLAG     VALUE WORST THRESH TYPE      UPDATED  WHEN_FAILED RAW_VALUE
  1 Raw_Read_Error_Rate     0x002f   200   200   051    Pre-fail  Always       -       0
  3 Spin_Up_Time            0x0027   181   181   021    Pre-fail  Always       -       1941
  4 Start_Stop_Count        0x0032   100   100   000    Old_age   Always       -       36
  5 Reallocated_Sector_Ct   0x0033   200   200   140    Pre-fail  Always       -       0
  7 Seek_Error_Rate         0x002e   200   200   000    Old_age   Always       -       0
  9 Power_On_Hours          0x0032   100   100   000    Old_age   Always       -       191
10 Spin_Retry_Count        0x0032   100   253   000    Old_age   Always       -       0
11 Calibration_Retry_Count 0x0032   100   253   000    Old_age   Always       -       0
12 Power_Cycle_Count       0x0032   100   100   000    Old_age   Always       -       36
192 Power-Off_Retract_Count 0x0032   200   200   000    Old_age   Always       -       27
193 Load_Cycle_Count        0x0032   200   200   000    Old_age   Always       -       9
194 Temperature_Celsius     0x0022   112   105   000    Old_age   Always       -       35
196 Reallocated_Event_Count 0x0032   200   200   000    Old_age   Always       -       0
197 Current_Pending_Sector  0x0032   200   200   000    Old_age   Always       -       0
198 Offline_Uncorrectable   0x0030   200   200   000    Old_age   Offline      -       0
199 UDMA_CRC_Error_Count    0x0032   200   200   000    Old_age   Always       -       0
200 Multi_Zone_Error_Rate   0x0008   200   200   000    Old_age   Offline      -       0

Ich möchte ID 1, 3, 5 und 197 überwachen und loggen/plotten.
dafür setze ich das Attribut SMART
attr mein_SYSMON SYSMON SMART 1,3,5,197
und es werden folgende Events erzeugt:

2014-11-19 16:20:11 SYSMON mein_SYSMON SMART___1: Raw_Read_Error_Rate     0x002f   200   200   051    Pre-fail  Always       -       0
2014-11-19 16:20:11 SYSMON mein_SYSMON SMART___3: Spin_Up_Time            0x0027   181   181   021    Pre-fail  Always       -       1941
2014-11-19 16:20:11 SYSMON mein_SYSMON SMART___5: Reallocated_Sector_Ct   0x0033   200   200   140    Pre-fail  Always       -       0
2014-11-19 16:20:11 SYSMON mein_SYSMON SMART_197: Current_Pending_Sector  0x0032   200   200   000    Old_age   Always       -       0

Hintergedanke dabei ist, dass ich die Values mit im Auge behalten möchte, um auf Änderungen reagieren zu können, bevor S.M.A.R.T feststellt, dass ein Plattenausfall in den nächsten 24 Stunden zu erwarten ist.
siehe:
http://www.heise.de/newsticker/meldung/Google-Studie-zur-Ausfallursache-von-Festplatten-147178.html
https://www.usenix.org/legacy/event/fast07/tech/full_papers/pinheiro/pinheiro.pdf

Gruß Joachim
FHEM aktuellste Version auf FB 7570 und 7390 mit Zebradem Toolbox Freetz
FHEM auf Raspberry
1-Wire mit LinkUSBi und Rs-Pi ds2482-800  1-Wire-9 Board; Max mit Cube, HMLAN
div. 1-Wire Sensoren; MAX-Thermostaten; Homematic-Komponenten, Zehnder KWL über RS-232

hexenmeister

Hallo Joachim,

die Zweistufigkeit finde ich gut. Auch zu den Ausgaben bin ich derselben Meinung. Was mir noch nicht ganz gefällt, ist das SMART-Attribut. Den möchte ich irgendwie generischer haben. Meine Überlegung wäre eine Erweiterung des Syntax für die user-defined.
Also statt user-defined <readingsName>:<Interval_Minutes>:<Comment>:<Cmd>,... etwas wie
user-defined <readingsName>:<Interval_Minutes>:<Comment>:<Cmd>[:<RegEx>],...
Beispiel für SMART:
attr user-defined smart:600:SMART:cat smart.txt:^\s*(1|3|5|197)\s+(\S+)\s+(\S+)\s+(\S+)\s+(\S+)\s+(\S+)\s+(\S+)\s+(\S+)\s+(\S+)\s+(\S+)

Sieht natürlich wild aus, damit könnte man aber solche Aufgaben lösen. Was ich noch nicht weiß, ist wie man das in die EInzelreadings aufsplittet. Die Erste Gruppe an den namen anhängen? Name im Format smart_$0 erlauben? RegEx für jede gewünschte Zeile einzeln angeben?

Was meinst Du?

Grüße,

Alexander


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

Joachim

Moin Alexander,

Teil 1 funktioniert bei mir schon, so wie oben beschrieben.
Den 2. Teil würde ich am Zeilenvorschub aufteilen, hatte ich probehalber auch schon probiert, gibt nur einen irrsinnig langen Eintrag bei user-defined.
Wenn man dann noch weitere user-defined Readings hat, kommt da keiner mehr mit klar.
deshalb der Vorschlag mit dem Attribut.
Die wichtigen Werte, die man loggen könnte wären:
ID ........................................................................VALUE...........THRESH...................................WHEN_FAILED
1    Raw_Read_Error_Rate    0x002f    200    200    051    Pre-fail   Always    -        0
dann könnten man darauf triggern.

Gruß Joachim
FHEM aktuellste Version auf FB 7570 und 7390 mit Zebradem Toolbox Freetz
FHEM auf Raspberry
1-Wire mit LinkUSBi und Rs-Pi ds2482-800  1-Wire-9 Board; Max mit Cube, HMLAN
div. 1-Wire Sensoren; MAX-Thermostaten; Homematic-Komponenten, Zehnder KWL über RS-232

hexenmeister

Das ist ja das Problem mit irre-langen Strings...

Wie wäre es mit der einführung von zusätzlichen Attributen in der Form:
user-defined-<ReadingName> <Interval_Minutes>:<Comment>:<Cmd>[:<RegEx>]?

Oder man lässt mit dem RegEx in dem Attribut ganz und bereitet die Werte in einzelnen Dateien extra auf (mit einem kleinen Perl-Programmchen, gerufen per cron. Eingabe-Parameter: RegEx-Muster).

Bin unentschlossen...

Grüße,

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

Joachim

Kein Stress,
Wenn meine nächsten Nachtschichten einigermaßen ruhig sind, bastel ich mal was.

Gruß Joachim
FHEM aktuellste Version auf FB 7570 und 7390 mit Zebradem Toolbox Freetz
FHEM auf Raspberry
1-Wire mit LinkUSBi und Rs-Pi ds2482-800  1-Wire-9 Board; Max mit Cube, HMLAN
div. 1-Wire Sensoren; MAX-Thermostaten; Homematic-Komponenten, Zehnder KWL über RS-232

Joachim

Moin Alexander,
habe zwar noch nichts gebastelt, ich habe mir über das Konzept Gedanken gemacht.
ZitatDen möchte ich irgendwie generischer haben.
Das macht Sinn, dazu die Umsetzung, erst mal in Kladde:
gegeben ist eine beliebige Text-Datei mit
- einer beliebigen Anzahl an Zeilen (die Zeilenanzahl ändert sich zur Laufzeit nicht).
- einer beliebigen Anzahl an Spalten (die Spaltenanzahl ändert sich zur Laufzeit auch nicht).
Also z.B. wie bei smartctl (aber nicht auf smartctl festgelegt).
Damit ersparen wir uns das
Zitat
Oder man lässt mit dem RegEx in dem Attribut ganz und bereitet die Werte in einzelnen Dateien extra auf (mit einem kleinen Perl-Programmchen, gerufen per cron. Eingabe-Parameter: RegEx-Muster).
denn wir wissen ja, dass in Zeile 8, Spalte 2 ATTRIBUTE_NAME mit Raw_Read_Error_Rate belegt ist, und in Spalte 4,6,9 die von uns gewünschten Daten stehen.
Wenn wir zur "Laufzeit" neue Attribute erstellen können (ich weiß nicht, ob das geht), dann könnte man für jede Textdatei ein eigenes user-datei-(x) erstellen, und wäre die langen Verkettungen los.
also ähnlich Deinem Vorschlag:
user-datei-<x> <Interval_Minutes>:<Comment>:<Zeile>:<Spalte,Spalte,....,Spalte>]
Der "Eltenprozess" dazu wäre dann nur noch ein durch Kommata getrennter Verweis auf die menge der "Kindreadings", also:

attr mySysmon SYSMON user-datei updatestatus:1 smart:1 smartwerte:3 ........usw.

dabei wird vorrausgesetzt, dass der Pfad zur Datei immer ./data/ ist.
damit hätten wir 5 user-datei-(x) Attribute, in diesem Fall:
user-datei-updatestatus
user-datei-smart
user-datei-smartwerte-1
user-datei-smartwerte-2
user-datei-smartwerte-3

Wie oben schon gesagt ist das so erstmal ein Hirngespinst, und ich werde mal versuchen, das in den nächsten Nachtschichten, die ich habe, zusammenzustümpern.

Gruß Joachim
FHEM aktuellste Version auf FB 7570 und 7390 mit Zebradem Toolbox Freetz
FHEM auf Raspberry
1-Wire mit LinkUSBi und Rs-Pi ds2482-800  1-Wire-9 Board; Max mit Cube, HMLAN
div. 1-Wire Sensoren; MAX-Thermostaten; Homematic-Komponenten, Zehnder KWL über RS-232

hexenmeister

Klingt schon ganz gut. Das mit Dateien und Zeilen/Spalten gefällt mit noch nicht ganz. Vor allem die Festlegung auf Dateien. Mit RexEx ist man flexibler. Aber schwieriger zu erstellen und zu verstehen.

Ich werde in den nächsten Tagen auch darübr nachdenken.
Bin sicher, wir finden zusammen eine gute Lösung ;)
Maintainer: MQTT_GENERIC_BRIDGE, SYSMON, SMARTMON, systemd_watchdog, MQTT, MQTT_DEVICE, MQTT_BRIDGE
Contrib: dev_proxy

carlos

Hallo,
Ich habe ma eine Frage:
Wie kann ich denn zusätzlich zu den default Werten noch die userreadings Werte anzeigen?
Oder kann man irgendwo festlegen welches die default Werte sind?

Ich habe es so gemacht, geht das nicht auch in einem weblink define?

# Anzeige der Readings zum Einbinden in ein 'Raum'.
define SysValues1 weblink htmlCode {SYSMON_ShowValuesHTML('sysmon')}
attr SysValues1 group RPi
attr SysValues1 room 00_PI-B

define SysValues2 weblink htmlCode {SYSMON_ShowValuesHTML('sysmon',('cpu_temp:CPU Temperatur: °C', 'Hostname:Hostname', 'IP:IP', 'Kernel:Kernel', 'fhem_version:FHEM Version'))}
attr SysValues2 group RPi
attr SysValues2 room 00_PI-B



Das sieht dann so aus:

Gruß Carlos



FHEM svn auf Intel NUC mit proxmox,1 UDOO, 3 Raspberry Pi, signalduino, nanoCUL, div. Homematic Komponenten, toom Baumarkt Funksteckdosen, einige sonoffs, hue, shelly

hexenmeister

Für die Default-Werte ist keine Definitionsmöglichkeit vorhanden (wozu auch?).

Zitatgeht das nicht auch in einem weblink define?
Doch, Du musst eben, die Namen der "Default-Werte" zusätzlich zu Deinen eigenen mitangeben. Welche das sind habe ich jetzt natürlich nicht im Kopf. Schau mal im Quellcode nach (Modul 42_SYSMON.pm; Suche nach SYSMON_ShowValuesHTML).

Grüße,

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

Wernieman

Mal eine kleine Frage "Nebenbei" ... da smart doch schon ein etwas "größeres" Pojekt, warum lagert Ihr es nicht in ein eigenes Modul aus?

Dann ist es auch einfacher zu Erklären, das die smartmontools für das Modul installiert sein müssen ....

Braucht Ihr noch sonstige Infos über smartmon? Kann man Euch dabei "helfen"?
- 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

Zitat von: Wernieman am 03 Dezember 2014, 15:45:36
Mal eine kleine Frage "Nebenbei" ... da smart doch schon ein etwas "größeres" Pojekt, warum lagert Ihr es nicht in ein eigenes Modul aus?

Hm... Da hast Du eigentlich Recht...

ZitatBraucht Ihr noch sonstige Infos über smartmon? Kann man Euch dabei "helfen"?
Vielen Dank! Sehr gerne, mit Deiner Erfahrung. Ich selbst besitze zu dem Thema nur ein (un)gesundes Halbwissen. ;) Findest Du die vorgeschlagene Vorgehensweise so sinnvoll? Sonstige Vorschläge/Kritik/Kommentare?
Ich werde dann (allerdings nicht in den nächsten Wochen, wegen sehr wenig Zeit) gerne einen entsprechenden Modul erstellen.

Grüße,

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

Wernieman

Also ... ich würde nicht gerne ein 2 Stufiges verhalten, d.h. externen Cron-Job und interne Verarbeitung, durchführen.

smartctrl braucht zwar root-Rechte, aber aber z.B. sudo kann selbst einem nichtpreviligiertem User die rechte gegeben werden.

Die Frage ist eigentlich, ws wollt Ihr damit erreichen?
- 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

Zweistufig ist natürlich nicht das gelbe vom ei, ist aber ein kompromiss, um fhem nicht zu lange zu blockieren. Oder kann man damit rechnen, dass smartctl immer nur sehr kurz ausgeführt wird?

Der Zweck des ganzen ist, denke ich, rechtzeitig zu erkennen, wenn sich der Zustand die Platte signifikant verschlechtert. Wie würdest Du dabei vorgehen?
Maintainer: MQTT_GENERIC_BRIDGE, SYSMON, SMARTMON, systemd_watchdog, MQTT, MQTT_DEVICE, MQTT_BRIDGE
Contrib: dev_proxy

tupol

Hallo,

ich habe zwar inzwischen FHEM von meiner Fritz!Box geschmissen aber die CPU Temperatur bekommt man im neuen OS über
ctlmgr_ctl r cpu status/StatTemperature

Man erhält die letzten 24 h kommasepariert im 6 Minutentakt. Der erste Wert ist der letzte 6 Minutentakt.

Tommy82

Hi,
ich habe jetzt auch mal auf meinem Cubietruck sysmon installiert, und hätte da jetzt zwei fragen zu, zum einen wird unter SysValues das
ZitatDate:    06.12.2014 21:31:36
angezeigt, allerdings seh ich unter sysmon kein entsprechendes reading, woher kommen die Werte? Würde das Datum gerne mit in eine readigsgroup ausgeben.

Das zweite ist das ich bei boot und ssd keine Werte ausgegeben bekomme, was hab ich da falsch definiert?
im Nand liegt der Boot, das restliche system auf meiner ssd.
Internals:
   DEF        1 1 1 10
   INTERVAL_BASE 60
   INTERVAL_MULTIPLIERS 1 1 1 10
   NAME       sysmon
   NR         256
   STATE      Active
   TYPE       SYSMON
   Readings:
     2014-12-06 21:36:31   cpu1_freq       912
     2014-12-05 23:30:58   cpu_bogomips    1819.39
     2014-12-06 21:36:31   cpu_freq        912
     2014-12-06 21:36:31   cpu_temp        34.60
     2014-12-06 21:36:31   cpu_temp_avg    34.8
     2014-12-06 21:36:31   eth0            RX: 2540.72 MB, TX: 265.05 MB, Total: 2805.77 MB
     2014-12-06 21:36:31   eth0_diff       RX: 0.76 MB, TX: 0.11 MB, Total: 0.87 MB
     2014-12-06 21:36:31   eth0_ip         addr:192.168.188.47
     2014-12-06 21:36:31   fhemuptime      79592
     2014-12-06 21:36:31   fhemuptime_text 0 days, 22 hours, 06 minutes
     2014-12-06 21:30:29   fs_boot         Total: 0 MB, Used: 0 MB, 0 %, Available: 0 MB at /dev/nand (not available)
     2014-12-06 21:30:29   fs_root         Total: 112675 MB, Used: 1456 MB, 2 %, Available: 105497 MB at /
     2014-12-06 21:30:29   fs_ssd          Total: 0 MB, Used: 0 MB, 0 %, Available: 0 MB at /dev/sda1 (not available)
     2014-12-06 21:36:31   idletime        538146 99.03 %
     2014-12-06 21:36:31   idletime_text   6 days, 05 hours, 29 minutes (99.03 %)
     2014-12-06 21:36:31   loadavg         0.00 0.01 0.05
     2014-12-05 23:30:58   perl_version    5.014002
     2014-12-06 21:36:31   power_ac_stat   1 1 4.996 258
     2014-12-06 21:36:31   power_ac_text   ac: present / online, voltage: 4.996 V, current: 258 mA, 1.3 W
     2014-12-06 21:36:31   power_battery_info battery info: n/a , capacity: n/a %, status: n/a , health: n/a , total capacity: n/a mAh
     2014-12-06 21:36:31   power_battery_stat 0 0 0 0 0
     2014-12-06 21:36:31   power_battery_text battery: absent / offline, voltage: 0 V, current: 0 mA, 0 W, capacity: 0 %
     2014-12-06 21:36:31   power_usb_stat  0 0 0.015 0
     2014-12-06 21:36:31   power_usb_text  usb: absent / offline, voltage: 0.015 V, current: 0 mA, 0 W
     2014-12-06 21:36:31   ram             Total: 1999.16 MB, Used: 91.83 MB, 4.59 %, Free: 1907.33 MB
     2014-12-06 21:36:31   stat_cpu        804079 0 199293 53522593 672 75 606258
     2014-12-06 21:36:31   stat_cpu0       164349 0 87494 26638816 491 57 588520
     2014-12-06 21:36:31   stat_cpu0_diff  49 0 29 5860 0 0 130
     2014-12-06 21:36:31   stat_cpu0_percent 0.81 0.00 0.48 96.57 0.00 0.00 2.14
     2014-12-06 21:36:31   stat_cpu0_text  user: 0.81 %, nice: 0.00 %, sys: 0.48 %, idle: 96.57 %, io: 0.00 %, irq: 0.00 %, sirq: 2.14 %
     2014-12-06 21:36:31   stat_cpu1       639729 0 111799 26883776 180 18 17738
     2014-12-06 21:36:31   stat_cpu1_diff  205 0 43 5849 0 0 6
     2014-12-06 21:36:31   stat_cpu1_percent 3.36 0.00 0.70 95.84 0.00 0.00 0.10
     2014-12-06 21:36:31   stat_cpu1_text  user: 3.36 %, nice: 0.00 %, sys: 0.70 %, idle: 95.84 %, io: 0.00 %, irq: 0.00 %, sirq: 0.10 %
     2014-12-06 21:36:31   stat_cpu_diff   255 0 72 11709 0 0 135
     2014-12-06 21:36:31   stat_cpu_percent 2.10 0.00 0.59 96.20 0.00 0.00 1.11
     2014-12-06 21:36:31   stat_cpu_text   user: 2.10 %, nice: 0.00 %, sys: 0.59 %, idle: 96.20 %, io: 0.00 %, irq: 0.00 %, sirq: 1.11 %
     2014-12-06 21:36:31   swap            n/a
     2014-12-06 21:36:31   uptime          271704
     2014-12-06 21:36:31   uptime_text     3 days, 03 hours, 28 minutes
     2014-12-06 21:36:31   wlan0           RX: 0.00 MB, TX: 0.00 MB, Total: 0 MB
     2014-12-06 21:36:31   wlan0_diff      RX: 0.00 MB, TX: 0.00 MB, Total: 0.00 MB
Attributes:
   event-on-update-reading cpu_temp,cpu_temp_avg,cpu_freq,eth0_diff,loadavg,ram,fs_.*
   filesystems fs_boot:/dev/nand:Boot,fs_root:/:Root,fs_ssd:/dev/sda1:SSD
   network-interfaces eth0:eth0:Ethernet,wlan0:wlan0:WiFi


Danke
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