##---------------------------------------------------------------------------
## Optional Package for fli4l 2.0.3                 (see http://www.fli4l.de)
##
## Package    :  opt_logshift
##
## Info       :  ./doc/deutsch/opt/logshift.txt
##
##
## Creation   :  22.07.02    Winfried Mueller
## Last Update:  01.08.02    Winfried Mueller
## Release    :  0.1.0
## State      :  exp
##
## Copyright (c) 2002 Winfried Mueller <wm@reintechnisch.de>
##
## This program is free software; you can redistribute it and/or modify
## it under the terms of the GNU General Public License as published by
## the Free Software Foundation; either version 2 of the License, or
## (at your option) any later version.
##---------------------------------------------------------------------------


Zusammenfassung
===============

Wer einen Disketten-Router ohne Festplatte oder andere Speichermedien
betreibt, hat das Problem, das die Logfiles nach wenigen Tagen das
Ramdrive zum berlaufen bringen. Ab dann kann nichts mehr in diese
Partition geschrieben werden. Abhilfe schafft nur, entweder kein Logging zu
betreiben oder regelmig die Logs zu lschen bzw. den Router neu zu booten.
Dieses Package stellt einen Mechanismus zur Verfgung, der immer die
Logs der letzten n Tage speichert und ltere Logs lscht. Somit
kann kein berlauf der Logfiles entstehen. Das Konzept ist hnlich
wie das unter Linux bekannte logrotate.


Abhngigkeiten
==============

Folgende Pakete werden zustzlich bentigt:
  - opt_easycron


Konzept
=======

Mit dem Shellscript logshift kann jedes beliebige File in einer
Verschiebekette gehalten werden. Hierzu ein Beispiel. Die Datei
/var/log/messages wird tglich mit logshift bearbeitet, wobei n
auf 5 gesetzt wird. Es enstehen nach 5 Tagen (=5 Aufrufen)
folgende Files:
/var/log/:
  messages
  messages.0
  messages.1
  messages.2
  messages.3
  messages.4

Bei jedem tglichen Aufruf wird messages.3 nach messages.4
geschoben, messages.2 nach messages.3 usw. Die Originaldatei
messages wird, nachdem sie in messages.0 gewandert ist,
zurckgesetzt. Sie fllt sich dann im Laufe des Tages mit den
aktuellen Logs. Die Datei messages.4 enthlt die Logs von vor
5 Tagen, messages.3 die von vor 4 Tagen usw.

Jeder weitere tgliche Aufruf lsst dann messages.4 herausfallen,
weil es durch messages.3 ersetzt wird. Es fllt also immer das
letzte Element der Verschiebekette heraus.

Der Aufruf von logshift erfolgt ber opt_easycron, typischerweise
tglich. Man kann hier fr jede Logdatei einen cron-Jobs anlegen.
Es knnen natrlich auch andere Zeitabstnde als tglich gewhlt
werden.

Die Anzahl der Files in der Verschiebekette wird logshift als
Parameter mitgegeben. Sie kann also fr jedes Logfile individuell
eingestellt werden. Man mu die Werte so whlen, dass der Speicher
auch unter ungnstigen Umstnden nicht berluft. Hier mu man
etwas experimentieren.


Konfiguration
=============

Das Paket logshift mu lediglich mit
  OPT_LOGSHIFT='yes'
eingeschaltet werden.

Jede weitere Konfiguration geschieht ber
die Konfigurationsdatei easycron. Dort mssen die logshift-Jobs
eingetragen werden. Die Aufrufsyntax des Shellscripts logshift
ist wie folgt:

logshift <file> <ShiftNumber>

Hier ist <file> die Datei, die man mit Logshift verwalten will
und <ShiftNumber> die Anzahl der Files, die erzeugt werden.

Ein typischer Aufruf in easycron knnte so aussehen:

  EASYCRON_1_CUSTOM=''
  EASYCRON_1_COMMAND='/usr/local/bin/logshift /var/log/messages 10'
  EASYCRON_1_TIME='0 3 * * *'

Hier wird jeden Tag um 3:00 Uhr das File /var/log/messages bearbeitet,
wobei die Verschiebekettenlnge 10 betrgt
(Files messages.0 - messages.10 werden erzeugt).



Beispielkonfigurationen
=======================

1. syslog und DNS-Log bearbeiten
--------------------------------

In diesem Beispiel werden nur das syslog und das DNS-Log bearbeitet,
weil dies oft die einzigen beiden Files sind, die viel Output
produzieren und den Speicher mit der Zeit zum berlauf bringen.

Das syslog wird so konfiguriert, dass es in /var/log/messages ausgegeben
wird.

File ./config/base.txt
  ...
  #------------------------------------------------------------------------------
  # optional package: syslogd
  #------------------------------------------------------------------------------
  OPT_SYSLOGD='yes'                    # start syslogd: yes or no
  SYSLOGD_DEST_N='2'                  # number of destinations
  SYSLOGD_DEST_1='*.* /dev/console'   # n'th prio & destination of syslog msgs
  SYSLOGD_DEST_2='*.* /var/log/messages'   # example: loghost 192.168.6.2
  ...


Das Paket logshift mu eingeschaltet werden.

File ./config/logshift.txt
  ...
  OPT_LOGSHIFT='yes'
  ...


Einige Cron-Jobs mssen angelegt werden. Es werden tglich 3:00 Uhr
die Aktionen vorgenommen. Die Verschiebekettenlnge betrgt bei
messages 30 und bei dns.log 10.

File ./config/easycron.txt
  ...
  EASYCRON_1_CUSTOM=''
  EASYCRON_1_COMMAND='/usr/local/bin/logshift /var/log/messages 30'
  EASYCRON_1_TIME='0 3 * * *'

  EASYCRON_2_CUSTOM=''
  EASYCRON_2_COMMAND='/usr/local/bin/logshift /usr/local/ens/ens.log 10'
  EASYCRON_2_TIME='0 3 * * *'
  ...


Bugs
====

1. Zwischen dem Kopieren des Logfiles und dem Zurcksetzen
besteht eine kurze Zeitspanne von wenigen ms, wo theoretisch Logs verloren
gehen knnen. Logs, die genau zwischen diesen beiden Befehlen eintreffen.
Mir ist kein Mechanismus bekannt, wie man das Logging fr die Zeitspanne
dieses Vorgangs unterbinden knnte. Praktisch drfte es aber uerst selten
zu Logverlusten kommen.


---------------------------------------------------------------------------

>> Schmerz ist das Lsegeld, das du freudig bezahlt hast,
   um nicht frei zu sein. (A Course in Miracles) <<