Große FileLog-Dateien verkleinern

Begonnen von Jogi, 07 Juni 2017, 13:33:25

Vorheriges Thema - Nächstes Thema

Jogi

Hallo zusammen,
ich habe einige Temperaturfühler unter FHEM laufen, die ich protokolliere und plotte.
Jetzt werden diese Dateien mit der Zeit sehr, sehr groß und belasten das System. Daher würde ich sie gerne verkleinern.
ICH WEIß, dass es die Möglichkeit gibt Daten dadurch zu reduzieren, dass man nicht jeden Wert speichert, sondern nur dann, wenn sich ein Wert ändert. ich habe die Beiträge dazu gelesen und möchte das auch irgendwann -wenn ich Zeit habe- mal ändern.
Aber vorab muss oder möchte ich mir anders behelfen, daher suche ich nach einem Weg, wie ich diese Dateien verkleinern kann.
Meine Idee war, die Datei mit FileZilla oder Putty zu öffnen, die ganzen Daten bis auf zwei Zeilen zu löschen und dann wieder abzuspeichern. So wollte ich mir erst einmal Zeit verschaffen.
Allerdings stoße ich damit an meine Grenzen. Wenn ich die Datei mit FileZilla öffne und editiere, wird sie nicht wieder zurück geschrieben. Das ist wahrscheinloch ein Rechte-Problem. Ich habe dann versucht es mit Putty zu machen. Allerdings ist der Nano-Editor für so was nicht geeignet. Dazu ist die Datei (aktuell 139MB) zu groß.
Daher zwei Fragen: Gibt es eine Möglichkeit das so zu lösen, wie ich es möchte, also die Datei dadurch zu verkleinern, das man Teile daraus löscht? Wie?
Gibt es die Möglichkeit -ähnliche wie bei FHEM.log- das so einzustellen, dass nach X Tagen eine neue Datei erzeugt wird?

Ich möchte noch mal betonen, dass ich weiß, dass das nicht die sauberste Lösung ist, aber für den Übergang würde ich es gerne so versuchen, weil es für mich schneller geht, als alle Messungen umzustellen.

Danke für Tipps.

Wuppi68

1) einfach die Datei umbenenne und via gzip dann verkleinern ...

mv <Logfile> <Logfile>.bak
gzip <Logfile>.bak


2) oder wenn Du es unbedingt mit einem Editor machen möchtest ...

vi <LogFile>
<n>dd
:w
:x


<Logfile> ist Dein Dateiname
<n> ist die Anzahl an Zeilen die Du löschen möchtest

gegeben falls musst Du noch einmal FHEM neu starten, damit das Log wieder angelegt wird
FHEM unter Proxmox als VM

Otto123

#2
Hi,

als Beispiel um bestimmte Zeilen im Log zu löschen.
Als irgendein User am Terminal angemeldet:sudo cat /opt/fhem/log/fhem-2015-08.log |grep -v "LGTV" > /opt/fhem/log/fhem-2015-08.txt 
Damit wird das Logfile neu geschrieben und alle Zeilen mit LGTV werden ausgelassen (Option -v)
Wann das Ergebnis gut aussieht:


sudo rm /opt/fhem/log/fhem-2015-08.log  # Oder umbenennen
sudo mv /opt/fhem/log/fhem-2015-08.txt /opt/fhem/log/fhem-2015-08.log 
sudo chown fhem:dialout /opt/fhem/log/fhem-2015-08.log 


Pfade und Namen musst Du natürlich anpassen!

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

amenomade

ZitatGibt es die Möglichkeit -ähnliche wie bei FHEM.log- das so einzustellen, dass nach X Tagen eine neue Datei erzeugt wird?
Es gibt die Möglichkeit Dateien pro Jahr / Monat / Woche / Tag, usw zu definieren. Einfach in CommandREF schauen
https://fhem.de/commandref_DE.html#FileLog

Zitat<filename> können %-wildcards der POSIX strftime-Funktion des darunterliegenden OS enthalten (siehe auch strftime Beschreibung). Allgemein gebräuchliche Wildcards sind:

    %d Tag des Monats (01..31)
    %m Monat (01..12)
    %Y Jahr (1970...)
    %w Wochentag (0..6); beginnend mit Sonntag (0)
    %j Tag des Jahres (001..366)
    %U Wochennummer des Jahres, wobei Wochenbeginn = Sonntag (00..53)
    %W Wochennummer des Jahres, wobei Wochenbeginn = Montag (00..53)

FHEM ersetzt %L mit dem Wert des global logdir Attributes.
Bevor %V für ISO 8601 Wochennummern verwendet werden, muss überprüft werden, ob diese Funktion durch das Brriebssystem unterstützt wird (Es kann sein, dass %V nicht umgesetzt wird, durch einen Leerstring ersetzt wird oder durch eine falsche ISO-Wochennummer dargestellt wird - besonders am Jahresanfang) Bei der Verwendung von %V muss gleichzeitig für das Jahr ein %G anstelle von %Y benutzt werden.
Falls man readonly spezifiziert, dann wird die Datei nur zum visualisieren verwendet, und nicht zum Schreiben geöffnet.
Beispiele:

    define lamplog FileLog %L/lamp.log lamp
    define wzlog FileLog ./log/wz-%Y-%U.log wz:(measured-temp|actuator).*
    Mit ISO 8601 Wochennummern falls unterstützt:
    define wzlog FileLog ./log/wz-%G-%V.log wz:(measured-temp|actuator).*
Pi 3B, Alexa, CUL868+Selbstbau 1/2λ-Dipol-Antenne, USB Optolink / Vitotronic, Debmatic und HM / HmIP Komponenten, Rademacher Duofern Jalousien, Fritz!Dect Thermostaten, Proteus

Otto123

Und es gibt auch noch die Möglichkeit alten Mist automatisch zu entfernen:
https://fhem.de/commandref_DE.html#nrarchive  8)
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

Wernieman

Wenn es umbedingt manuel erfolgen soll, kann man per konsole auch automatisch löschen lassen.

z.B. jede 8. Zeile löschen:
Zitatsed 'n;n;n;n;n;n;n;d;'
genaue Info über Bedienung von sed siehe Man-Page
man sed

Gerade große Files sollte man per Konsolen-Tools bearbeiten, da dieses dann doch deutlich einfacher geht.
- 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

Jogi

Vielen Dank für die Tipps!

Ich werde das mal abarbeiten.

Und irgendwann  ;) mache ich es dann mal vernünftig .

Standarduser

Falls Du doch irgendwann den manuellen Weg gehen möchtest oder musst:
Du könntest auch den Midnight Commander installieren ($sudo apt-get install mc) und dann dessen Editor über Putty benutzen.
Den rufst Du mit "mcedit <Dateiname>" auf.
Ich finde das Teil super handlich.