Sinnvolle Nutzung des FileLog

Begonnen von stobor, 28 Juli 2016, 14:30:04

Vorheriges Thema - Nächstes Thema

stobor

Wie sollte man sinnvoller Weise die Log-Dateien splitten?

Ich ereige derzeit täglich neue Log-Dateien. Beispiel:

define FileLog_Regensensor FileLog ./log/Klima/Regensensor-%Y-%m-%d.log Regensensor

Allerdings wird dann in der FHEM Web-Oberfläche die Liste der vorhandenen Logs schnell sehr lang (natürlich abhängig von der Anzahl der verwendeten Geräte).
Hat die Größe der Log-Dateien einen Einfluss auf die render-Geschwindigkeit der darauf basierenden Graphen? Das könnte dann sicherlich insb. bei mobiler Verwendung interessant sein.
Oder werden immer nur die Daten des gerade angezeigten Zeitfensters an den Client übertragen?
Intel NUC (Ubuntu 22.04.2 LTS (GNU/Linux 5.15.0-113-generic x86_64))  mit CUL V3.2 (FW 1.57 CUL868) für FS20 und CCU3 für HM(IP) + Arduino Mega (Firmata) - FHEM Revision: 29534 - FS20, HM(IP), MQTT, Philips HUE, ModBus

Otto123

Ich würde so wenig wie möglich splitten.
ich würde mir mehr Gedanken machen was geloggt wird, dann bleibt das Logfile erfahrungsgemäß relativ klein.

Also nur die Werte loggen die man braucht, meist plappern die Sensoren ja viel Zeug was nicht interessant ist.
Nur Loggen wenn sich Werte ändern.

Gruß Otto
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

betateilchen

#2
Bei mir gibt es zwei Logs. (ok, es sind zwei DbLogs, aber die Frage ist ja unabhängig von der Log-Technik)


  • Eines mit Werten, die nicht länger als drei Tage gespeichert werden.
  • Eines mit Werten, die ich länger speichern möchte.

Im ersten Log sind z.B. die Temperaturwerte aus den einzelnen Räumen der Wohnung. Mich interessiert nicht, wie warm mein Wohnzimmer vor drei Wochen am Mittwoch um 14:27 Uhr war. Grundsätzlich werden per regexp auch nur die Werte geloggt, die ich überhaupt brauche, weil irgendwelche plots erzeugt daraus erzeugt werden.

(.*:Diesel.*|.*:lumi.*|.*:measured|temp.*|.*:desired.*|.*:actuator.*|.*:valve.*|.*:temperature.*|.*:humidity.*|.*:pressure.*|out_Regen.*:.*|gtag.*)


Dieses Logfile wird jede Nacht bereinigt, in dem alle Werte älter als drei Tage gelöscht werden.

Im zweiten Log befinden sich derzeit ausschließlich zwei devices, die pro Tag jeweils einen Wert liefern.
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

stobor

Ich speichere eigentlich auch relativ übersichtlich.

Beispiele:

fhem.fcg:
define FileLog_Bewegungsmelder_Carport_West FileLog ./log/Bewegungsmelder/Bewegungsmelder_Carport_West-%Y-%m-%d.log Bewegungsmelder_Carport_West
attr FileLog_Bewegungsmelder_Carport_West fm_type [{"id":"graph-light","title":"On\/Off","min":"0","max":"1","col":"7f7f00","h":1}]
attr FileLog_Bewegungsmelder_Carport_West logtype text
attr FileLog_Bewegungsmelder_Carport_West room Aussen

log-Ausgabe:
2016-07-14_09:02:17 Bewegungsmelder_Carport_West off
2016-07-14_09:10:53 Bewegungsmelder_Carport_West on
2016-07-14_09:13:40 Bewegungsmelder_Carport_West on
2016-07-14_09:18:49 Bewegungsmelder_Carport_West off
2016-07-14_09:20:32 Bewegungsmelder_Carport_West on
2016-07-14_09:22:36 Bewegungsmelder_Carport_West on
2016-07-14_09:27:36 Bewegungsmelder_Carport_West off


fhem.cfg:
define FileLog_KlimaOG FileLog ./log/Klima/KlimaOG-%Y-%m.log KlimaOG:T:.*
attr FileLog_KlimaOG fm_type [{"id":"graph-temp","title":"Temperature","min":"auto:0","max":"auto:20","col":"a80000","h":2},{"id":"graph-humi","title":"Humidity","min":"auto:0","max":"auto:100","col":"00005f","h":2}]
attr FileLog_KlimaOG logtype temp4hum6:Temp/Hum,text
attr FileLog_KlimaOG room Klima

log-Ausgabe:
2016-07-22_14:46:52 KlimaOG T: 24.7  H: 65.6  Bat: ok
2016-07-22_15:12:57 KlimaOG T: 24.7  H: 65.7  Bat: ok
2016-07-22_16:46:52 KlimaOG T: 24.9  H: 65.4  Bat: ok
2016-07-22_17:44:15 KlimaOG T: 24.7  H: 64.9  Bat: ok
2016-07-22_17:49:28 KlimaOG T: 24.7  H: 66  Bat: ok
2016-07-22_17:54:41 KlimaOG T: 24.6  H: 66.5  Bat: ok
2016-07-22_18:05:07 KlimaOG T: 24.4  H: 67.7  Bat: ok
2016-07-22_18:15:33 KlimaOG T: 24.5  H: 69.3  Bat: ok
2016-07-22_18:41:38 KlimaOG T: 24.2  H: 70.1  Bat: ok


Wie kann/sollte ich das denn eindampfen?
Werden denn immer die kompletten Logs vom Client geladen? Oder nur die gerade benötigten Datenfragmente?
Intel NUC (Ubuntu 22.04.2 LTS (GNU/Linux 5.15.0-113-generic x86_64))  mit CUL V3.2 (FW 1.57 CUL868) für FS20 und CCU3 für HM(IP) + Arduino Mega (Firmata) - FHEM Revision: 29534 - FS20, HM(IP), MQTT, Philips HUE, ModBus

betateilchen

Zitat von: stobor am 28 Juli 2016, 20:30:08
Werden denn immer die kompletten Logs vom Client geladen?

Erkläre mal bitte, was Du damit meinst...
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

stobor

Mich würde interessieren, ob der Client (PC/Tablet/...) immer die komplette Log-Datei geschickt bekommen, um dann Client-seitig die Graphen etc zu generieren, obwohl der Graph vielleicht nur einen Tag anzeigt (das Log aber bspw. ein ganzes Jahr beinhaltet), oder og der Server schon vorher nur den relevanten Datenteil übermittelt. Letzteres wäre natürlich deutlich effektiver und kostet bspw. bei mobilen Geräten deutlich weniger.
Intel NUC (Ubuntu 22.04.2 LTS (GNU/Linux 5.15.0-113-generic x86_64))  mit CUL V3.2 (FW 1.57 CUL868) für FS20 und CCU3 für HM(IP) + Arduino Mega (Firmata) - FHEM Revision: 29534 - FS20, HM(IP), MQTT, Philips HUE, ModBus

betateilchen

Zitat von: stobor am 28 Juli 2016, 21:15:55
um dann Client-seitig die Graphen etc zu generieren, obwohl der Graph vielleicht nur einen Tag anzeigt

Wie kommst Du darauf, dass die Grafik clientseitig erzeugt wird?
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

justme1968

der client bekommt die daten geschickt die er für die aktuelle zoom stufe braucht. wenn du einen tag anzeigst dann maximal das. wenn du ein jahr anzeigst maximal etwa drei mal so viel punkte wie dein plot breit ist. das ist zumindest bei fhemweb so. wie die anderen frontends das machen weiß ich nicht.
hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

https://github.com/sponsors/justme-1968

betateilchen

Zitat von: justme1968 am 28 Juli 2016, 22:30:45
der client bekommt die daten geschickt die er für die aktuelle zoom stufe braucht.

aber das sind doch schon aufbereitete SVG Daten und nicht mehr Datensätze aus dem Logfile?
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

justme1968

ja. das stimmt. es sind keine log zeilen mehr sondern (teilweise) aufbereitete daten.
hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

https://github.com/sponsors/justme-1968

Otto123

Zitat von: betateilchen am 28 Juli 2016, 22:41:52
aber das sind doch schon aufbereitete SVG Daten und nicht mehr Datensätze aus dem Logfile?
Insofern ist es für den Client egal, ob die Daten in einem Logfile von einem Tag oder einem Jahr sind, wenn der aktuelle Tag angezeigt wird.
Die Last mit dem Logfile entsteht nicht am Client sondern auf dem Server wo FHEM läuft.
Und genau an der Stelle merkt man ob das Logfile "effizient" ist oder SVG Plot aus einem Haufen Datenmüll ein paar Zahlen rausfiltern muss.
Und genau dort setzt man das Tuning an - und da finde ich viele kleine Logfiles schlechter als eines mit dem interessanten Zeitbereich in die Vergangenheit. Und der alte Kram kann einfach weg, entweder in die Tonne oder auf den "Dachboden"  8)

Gruß Otto
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

Tedious

Ich habe mein Fhemlog auf sehr niedrigem verbose-Level, da läuft nur sehr wenig rein. Der Rest läuft in eine SQL-DB (via DBlog) auf einem externen Rechner. Per AT schicke ich jede Nachtein

set myDbLog deleteOldDays 2

raus und dünne die DB aus (2 Tage), im Anschluss kommt ein

set myDbLog reopen .

Jeden morgen um 5 läuft denn ein optimize-Statement auf die DB

optimize table fhem.history

Das hält die Logs schön klein, da kommen trotz sehr vieler loggenden Devices (Revolt, LaCrosse, Sysmon, etc) weniger als 80MB pro Monat zusammen.
FHEM auf Proxmox-VM (Intel NUC) mit 4xMapleCUN (433,3x868) und Jeelink, HUE, MiLight, Max!, SonOff, Zigbee, Alexa, uvm...

KernSani

Zitat von: Otto123 am 28 Juli 2016, 18:45:42
Nur Loggen wenn sich Werte ändern
Ergänzend hierzu: Nur Loggen, wenn die Wertänderungen relevant sind. Mich interessiert beispielsweise eine Änderung der Temperatur um 0,1 Grad nicht...

Grüße,

Oli
RasPi: RFXTRX, HM, zigbee2mqtt, mySensors, JeeLink, miLight, squeezbox, Alexa, Siri, ...