- Mitglied seit
- 10 Mai 2006
- Beiträge
- 15,274
- Punkte für Reaktionen
- 1,751
- Punkte
- 113
Oft stellt man in eigenen Skripten ja fest, daß es schon schön wäre, wenn man einige Informationen nur für eine gewisse Zeit festhalten könnte, damit man bei Problemen auf diese Informationen zurückgreifen kann. Tritt kein Problem auf, interessieren diese Daten eigentlich nicht weiter.
Ein Schreiben solcher Daten ins Syslog macht dieses Protokoll schnell unübersichtlich, wenn es sich z.B. um das Protokollieren von irgendwelchen Zuständen im Fünf-Sekunden-Takt handelt und auch das Schreiben in eine eigene Datei, die man dann auf eine passende Anzahl von Zeilen begrenzt (mit wc -l und entsprechendem Kürzen der Datei, wenn die gewünschte Zeilenanzahl überschritten ist), ist zwar eine mögliche Lösung, aber bei variabler Zeilenlänge kann man auch nie exakt sagen, wieviel Platz solch eine Datei am Ende benötigt ... außerdem ist der Aufwand für eine solche Lösung (sowohl beim Schreiben des Skripts als auch zur Ausführungszeit) recht hoch.
Solange die protokollierten Daten volatil sind, hat sich in der Programmierung für solche Zwecke eigentlich ein Ringpuffer eingebürgert. Das ist am Ende nur eine Datenstruktur fester Länge, in der man an der nächsten "freien" Stelle einfach seine Daten hinterlegt und den Zeiger auf diese freie Stelle anschließend so ändert, daß er hinter die neu gespeicherten Daten zeigt - damit dort der nächste Eintrag abgelegt werden kann. Wird das Ende des reservierten Platzes erreicht, beginnt die Speicherung wieder am Beginn der Struktur und überschreibt somit die ältesten Einträge.
AVM stellt mit der originalen Firmware eine sehr einfache Methode zur Verfügung, wie man so einen Ringpuffer in Gestalt einer Datei realisieren kann. Ich würde vermuten, daß dieses Prinzip bei AVM mit dem Eventlog irgendwann einmal begann, inzwischen nutzen mehrere AVM-Komponenten (voipd, multid) dieses Prinzip.
Mit dem Kommando "showshringbuf protocol" kann man einerseits die Daten im Ringpuffer in eine lesbare Form bringen (das Datum und die Uhrzeit werden automatisch zu jedem Eintrag im Buffer gespeichert) und andererseits kann man dieses Kommando auch problemlos einsetzen, um in einen eigenen Ringpuffer zu schreiben. Wenn man mit dem AVM-Kommando versucht in ein nicht existierendes Protokoll zu schreiben, wird automatisch eine Pufferdatei mit einer Größe von 8 KByte angelegt. Das kann ja durchaus ausreichend sein, andererseits ist das selbst AVM (z.B. beim voipd) zu wenig und so muß es ja auch noch eine Möglichkeit geben, eine etwas größere Datei zu verwenden.
Dazu muß man tatsächlich nur eine Datei passender Größe im Pfad /var der FRITZ!Box mit einem entsprechenden Namen anlegen, diese Ringpufferdateien folgen mit ihren Namen dem Schema "/var/.srb_protocol":
Damit wird ein neuer Ringpuffer für das Protokoll mit dem Namen "mylog" und einer Größe von 32 KByte angelegt. In dieses Protokoll kann man jetzt seine eigenen Daten schreiben, die Datenstruktur wird automatisch initialisiert:
Der Aufruf mit Option "-i" schreibt den Inhalt der Standardeingabe in den Ringpuffer, für jede Zeile der Eingabe wird ein Eintrag erzeugt. Auslesen läßt sich der Inhalt mit dem zweiten o.a. Kommando.
Jetzt hat diese Datei allerdings ein Problem ... beim Initialisieren der Dateistrukturen wird die Länge der Datei nicht richtig berücksichtigt. Wir schauen uns mal die hexadezimale Darstellung einer frisch erzeugten Datei an (die AVM-Busybox enthält kein hexdump-Applet, also braucht man eine eigene dafür - also nur zum Ansehen in diesem Falle):
Das ist erst einmal nicht unerwartet, in der Datei stehen ausschließlich binäre Nullen. Nachdem wir die ersten Daten hineingeschrieben haben, sieht das schon etwas anders aus:
Wenn man sich jetzt eine beliebige dieser Dateien in der Box unter dem Pfad /var/.srb_* ansieht, stellt man fest, daß die ersten vier Byte immer identisch sind, damit ist die Annahme zu rechtfertigen, das wäre die "Signatur" eines solchen Ringpuffers. Das zweite "Wort" (wir reden hier von 32-Bit-Integerzahlen, die jeweils vier Byte belegen) ist der Offset des ältesten Eintrags im Puffer, hier startet die Ausgabe in aufsteigender Reihenfolge der Einträge. Das dritte Wort ist dann der Offset des letzten geschriebenen Eintrags und das vierte der Zeiger auf den nächsten freien Platz. Spannender wird es jetzt beim fünften Wort in der Datei (wenn das zweite Wort hexadezimal 0x14 ist, besteht der "Kopf" so eines Ringpuffers offenbar aus fünf 32-Bit-Werten und danach werden die Daten gespeichert) ... dort steht offenbar bei anderen Ringpuffer-Dateien der maximale Wert eines Offsets oder auch die Gesamtgröße der Datei minus eins. Bei unserem neuen Puffer steht dort aber ein sehr hoher (vorzeichenlos interpretierter) Wert und somit führen bei dieser Datei auch Schreiboperationen, die über das Dateiende bei 32K hinausgehen würden, zu einem "Segmentation fault". Das können wir aber leicht korrigieren, indem wir ab Verschiebung 16 in der Datei die richtige Größe eintragen. Da man dann auch gleich die Strukturen mit initialisieren kann, ergibt sich in etwa folgendes Skript für das Anlegen eines solchen Ringpuffers:
Wenn wir dieses Skript jetzt "initshringbuf" nennen (und es ausführbar machen nach dem Speichern), dann ergibt sich folgendes:
Ok, der Beginn unserer Datei sieht erst einmal richtig aus, mal sehen, was das showshringbuf-Kommando dazu jetzt meint:
Offenbar ein "leerer Ringpuffer", der angezeigte Eintrag am Offset 0x14 ist m.E. nicht zu vermeiden, denn irgendein Offset muß ja im Header stehen. Sowie wir jetzt Daten in den Puffer schreiben, sieht das auch schon wieder besser aus:
Das sieht doch schon sehr gut aus ... bleibt uns noch der Test, ob das mit dem "wrap around" beim Erreichen der max. Größe der Datei auch funktioniert, dazu erstellen wir uns aber eine kleinere Datei, damit die Ausgabe nicht zu lang wird:
Wie man im Hexdump schön sehen kann, landet das "echte Speichern" der 1000. Zeile irgendwo hinter dem Anfang unseres Puffers von 1 KB und unsere Ausgabe mit "showshringbuf" zeigt das trotzdem in ordentlich aufsteigender Folge an, weil nach dem Eintrag für Zeile 994 wieder von vorne in der Datei begonnen wird.
Sofern das alles ohne irgendwelche Fehlermeldungen abgearbeitet wird, funktioniert es offenbar wie erwartet und wir sind jetzt in der Lage, diese Ringpuffer-Speicherung nicht nur mit der Standardgröße von 8 KByte zu verwenden, sondern mit jeder (sinnvollen) Größe, die wir brauchen.
Der Vorteil dieses Vorgehens mit dem Einsatz von "showshringbuf" ist es (für mich), daß man sich nicht selbst darum kümmern muß, wie groß die Protokoll-Datei maximal werden darf (wenn sie im tmpfs liegt und mit steigender Größe den verfügbaren Speicher verringert) und daß man gleichzeitig unnötige Schreiboperationen auf persistente Speicher (z.B. USB-Sticks) vermeiden kann, solange man die protokollierten Daten eigentlich nicht dauerhaft speichern will.
Im Syslog kann man (eine Busybox mit syslogd mal vorausgesetzt) zwar auch in einen Ringpuffer protokollieren, dort gehen aber - nach meiner Ansicht - dann wirklich wichtige Informationen unter bzw. durch die erneute Verwendung des Platzes verloren, wenn man mit entsprechender Frequenz eigene Daten protokollieren will.
Der Ringpuffer-Ansatz von AVM ermöglicht es, diese Daten "nach Typ" getrennt zu protokollieren. Für mich persönlich spielt es auch noch eine Rolle, daß diese Protokollierung aus Skript-Files heraus eben auch mit AVM-Bordmitteln möglich ist, ohne daß man dazu weitere Programme in binärer Form bräuchte.
PS: Sollte das Wissen um diese Möglichkeit schon "Allgemeingut" sein, füge ich eine Quellenangabe hinzu. Andererseits hat mir eine große Internet-Suchmaschine für "showshringbuf" keine zählbaren Ergebnisse geliefert ... daher gehe ich mal davon aus, daß das noch nirgendwo so dokumentiert wurde.
Ein Schreiben solcher Daten ins Syslog macht dieses Protokoll schnell unübersichtlich, wenn es sich z.B. um das Protokollieren von irgendwelchen Zuständen im Fünf-Sekunden-Takt handelt und auch das Schreiben in eine eigene Datei, die man dann auf eine passende Anzahl von Zeilen begrenzt (mit wc -l und entsprechendem Kürzen der Datei, wenn die gewünschte Zeilenanzahl überschritten ist), ist zwar eine mögliche Lösung, aber bei variabler Zeilenlänge kann man auch nie exakt sagen, wieviel Platz solch eine Datei am Ende benötigt ... außerdem ist der Aufwand für eine solche Lösung (sowohl beim Schreiben des Skripts als auch zur Ausführungszeit) recht hoch.
Solange die protokollierten Daten volatil sind, hat sich in der Programmierung für solche Zwecke eigentlich ein Ringpuffer eingebürgert. Das ist am Ende nur eine Datenstruktur fester Länge, in der man an der nächsten "freien" Stelle einfach seine Daten hinterlegt und den Zeiger auf diese freie Stelle anschließend so ändert, daß er hinter die neu gespeicherten Daten zeigt - damit dort der nächste Eintrag abgelegt werden kann. Wird das Ende des reservierten Platzes erreicht, beginnt die Speicherung wieder am Beginn der Struktur und überschreibt somit die ältesten Einträge.
AVM stellt mit der originalen Firmware eine sehr einfache Methode zur Verfügung, wie man so einen Ringpuffer in Gestalt einer Datei realisieren kann. Ich würde vermuten, daß dieses Prinzip bei AVM mit dem Eventlog irgendwann einmal begann, inzwischen nutzen mehrere AVM-Komponenten (voipd, multid) dieses Prinzip.
Mit dem Kommando "showshringbuf protocol" kann man einerseits die Daten im Ringpuffer in eine lesbare Form bringen (das Datum und die Uhrzeit werden automatisch zu jedem Eintrag im Buffer gespeichert) und andererseits kann man dieses Kommando auch problemlos einsetzen, um in einen eigenen Ringpuffer zu schreiben. Wenn man mit dem AVM-Kommando versucht in ein nicht existierendes Protokoll zu schreiben, wird automatisch eine Pufferdatei mit einer Größe von 8 KByte angelegt. Das kann ja durchaus ausreichend sein, andererseits ist das selbst AVM (z.B. beim voipd) zu wenig und so muß es ja auch noch eine Möglichkeit geben, eine etwas größere Datei zu verwenden.
Dazu muß man tatsächlich nur eine Datei passender Größe im Pfad /var der FRITZ!Box mit einem entsprechenden Namen anlegen, diese Ringpufferdateien folgen mit ihren Namen dem Schema "/var/.srb_protocol":
Code:
root@FB7490:~ $ dd if=/dev/zero of=/var/.srb_mylog bs=1024 count=32
32+0 records in
32+0 records out
32768 bytes (32.0KB) copied, 0.000740 seconds, 42.2MB/s
root@FB7490:~ $ ls -la /var/.srb_mylog
-rw-rw---- 1 root root 32768 Jun 8 18:16 /var/.srb_mylog
Code:
root@FB7490:~ $ echo "New ring buffer log created" | showshringbuf -i mylog
root@FB7490:~ $ showshringbuf mylog
2015-06-08 18:18:23.888 - New ring buffer log created
Jetzt hat diese Datei allerdings ein Problem ... beim Initialisieren der Dateistrukturen wird die Länge der Datei nicht richtig berücksichtigt. Wir schauen uns mal die hexadezimale Darstellung einer frisch erzeugten Datei an (die AVM-Busybox enthält kein hexdump-Applet, also braucht man eine eigene dafür - also nur zum Ansehen in diesem Falle):
Code:
root@FB7490:~ $ dd if=/dev/zero of=/var/.srb_mylog bs=1024 count=32
32+0 records in
32+0 records out
32768 bytes (32.0KB) copied, 0.000732 seconds, 42.7MB/s
root@FB7490:~ $ ls -la /var/.srb_mylog
-rw-rw---- 1 root root 32768 Jun 8 19:44 /var/.srb_mylog
root@FB7490:~ $ hexdump /var/.srb_mylog
00000000 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................|
*
00008000
Code:
root@FB7490:~ $ echo -e "line1\nline2\nline3" | showshringbuf -i mylog
root@FB7490:~ $ hexdump /var/.srb_mylog
00000000 f9 13 66 8e 00 00 00 14 00 00 00 3a 00 00 00 4d |..f........:...M|
00000010 ff ff ff ff 2a 55 75 d4 90 00 07 4c b7 00 00 00 |....*Uu....L....|
00000020 06 6c 69 6e 65 31 00 2a 55 75 d4 90 00 07 4c e8 |.line1.*Uu....L.|
00000030 00 00 00 06 6c 69 6e 65 32 00 2a 55 75 d4 90 00 |....line2.*Uu...|
00000040 07 4d 05 00 00 00 06 6c 69 6e 65 33 00 00 00 00 |.M.....line3....|
00000050 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................|
*
00008000
root@FB7490:~ $
Code:
#! /bin/sh
#
# create a ring buffer file with the specified name and size
#
name=$1
size=$2
if [ ${#name} -eq 0 -o ${#size} -eq 0 ]; then
echo "Usage: initshringbuf <logname> <size in KB>" 1>&2
exit 1
fi
file=/var/.srb_$name
maxoff=$(( size * 1024 - 1 ))
dd if=/dev/zero of=$file bs=1024 count=$size
# signature
echo -ne "\\xF9\\x13\\x66\\x8E" | dd if=/proc/self/fd/0 of=$file bs=4 count=1 conv=notrunc seek=0 2>/dev/null
# first entry
echo -ne "\\x00\\x00\\x00\\x14" | dd if=/proc/self/fd/0 of=$file bs=4 count=1 conv=notrunc seek=1 2>/dev/null
# last entry
echo -ne "\\x00\\x00\\x00\\x14" | dd if=/proc/self/fd/0 of=$file bs=4 count=1 conv=notrunc seek=2 2>/dev/null
# next entry
echo -ne "\\x00\\x00\\x00\\x14" | dd if=/proc/self/fd/0 of=$file bs=4 count=1 conv=notrunc seek=3 2>/dev/null
maxoff=$(printf "%08x" $maxoff)
maxstr=""
while [ ${#maxoff} -gt 0 ]; do
maxstr="${maxstr}\\\\x${maxoff:0:2}"
maxoff="${maxoff:2}"
done
# max. offset
eval echo -ne "$maxstr" | dd if=/proc/self/fd/0 of=$file bs=4 count=1 conv=notrunc seek=4 2>/dev/null
Code:
root@FB7490:~ $ initshringbuf mylog 16
root@FB7490:~ $ hexdump /var/.srb_mylog
00000000 f9 13 66 8e 00 00 00 14 00 00 00 14 00 00 00 14 |..f.............|
00000010 00 00 3f ff 00 00 00 00 00 00 00 00 00 00 00 00 |..?.............|
00000020 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................|
*
00004000
Code:
root@FB7490:~ $ showshringbuf mylog
1970-01-01 01:00:00.000 -
Code:
root@FB7490:~ $ echo -e "line1\nline2\nline3" | showshringbuf -i mylog
root@FB7490:~ $ showshringbuf mylog
2015-06-08 20:06:31.348 - line1
2015-06-08 20:06:31.348 - line2
2015-06-08 20:06:31.348 - line3
root@FB7490:~ $ hexdump /var/.srb_mylog
00000000 f9 13 66 8e 00 00 00 14 00 00 00 3a 00 00 00 4d |..f........:...M|
00000010 00 00 3f ff 2a 55 75 d9 a7 00 05 4f e7 00 00 00 |..?.*Uu....O....|
00000020 06 6c 69 6e 65 31 00 2a 55 75 d9 a7 00 05 50 0e |.line1.*Uu....P.|
00000030 00 00 00 06 6c 69 6e 65 32 00 2a 55 75 d9 a7 00 |....line2.*Uu...|
00000040 05 50 2e 00 00 00 06 6c 69 6e 65 33 00 00 00 00 |.P.....line3....|
00000050 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................|
*
00004000
Code:
root@FB7490:~ $ initshringbuf mylog 1
root@FB7490:~ $ time sh -c "i=0; while [ \$i -lt 1000 ]; do let i=i+1; echo \"line \$i\" | showshringbuf -i mylog; done"
real 0m 15.90s
user 0m 6.78s
sys 0m 11.01s
root@FB7490:~ $ showshringbuf mylog
2015-06-08 20:19:49.772 - line 957
2015-06-08 20:19:49.787 - line 958
2015-06-08 20:19:49.802 - line 959
2015-06-08 20:19:49.817 - line 960
2015-06-08 20:19:49.833 - line 961
2015-06-08 20:19:49.848 - line 962
2015-06-08 20:19:49.864 - line 963
2015-06-08 20:19:49.879 - line 964
2015-06-08 20:19:49.895 - line 965
2015-06-08 20:19:49.910 - line 966
2015-06-08 20:19:49.925 - line 967
2015-06-08 20:19:49.941 - line 968
2015-06-08 20:19:49.956 - line 969
2015-06-08 20:19:49.972 - line 970
2015-06-08 20:19:49.988 - line 971
2015-06-08 20:19:50.003 - line 972
2015-06-08 20:19:50.019 - line 973
2015-06-08 20:19:50.034 - line 974
2015-06-08 20:19:50.050 - line 975
2015-06-08 20:19:50.065 - line 976
2015-06-08 20:19:50.082 - line 977
2015-06-08 20:19:50.096 - line 978
2015-06-08 20:19:50.111 - line 979
2015-06-08 20:19:50.126 - line 980
2015-06-08 20:19:50.142 - line 981
2015-06-08 20:19:50.157 - line 982
2015-06-08 20:19:50.172 - line 983
2015-06-08 20:19:50.188 - line 984
2015-06-08 20:19:50.204 - line 985
2015-06-08 20:19:50.219 - line 986
2015-06-08 20:19:50.235 - line 987
2015-06-08 20:19:50.251 - line 988
2015-06-08 20:19:50.267 - line 989
2015-06-08 20:19:50.282 - line 990
2015-06-08 20:19:50.297 - line 991
2015-06-08 20:19:50.313 - line 992
2015-06-08 20:19:50.329 - line 993
2015-06-08 20:19:50.345 - line 994
2015-06-08 20:19:50.360 - line 995
2015-06-08 20:19:50.376 - line 996
2015-06-08 20:19:50.392 - line 997
2015-06-08 20:19:50.406 - line 998
2015-06-08 20:19:50.421 - line 999
2015-06-08 20:19:50.436 - line 1000
root@FB7490:~ $ hexdump /var/.srb_mylog
00000000 f9 13 66 8e 00 00 00 ae 00 00 00 82 00 00 00 99 |..f.............|
00000010 00 00 03 ff 2a 55 75 dc c6 00 05 80 d8 00 00 00 |....*Uu.........|
00000020 09 6c 69 6e 65 20 39 39 35 00 2a 55 75 dc c6 00 |.line 995.*Uu...|
00000030 05 be ee 00 00 00 09 6c 69 6e 65 20 39 39 36 00 |.......line 996.|
00000040 2a 55 75 dc c6 00 05 fb e5 00 00 00 09 6c 69 6e |*Uu..........lin|
00000050 65 20 39 39 37 00 2a 55 75 dc c6 00 06 35 91 00 |e 997.*Uu....5..|
00000060 00 00 09 6c 69 6e 65 20 39 39 38 00 2a 55 75 dc |...line 998.*Uu.|
00000070 c6 00 06 6f fc 00 00 00 09 6c 69 6e 65 20 39 39 |...o.....line 99|
00000080 39 00 2a 55 75 dc c6 00 06 a9 cf 00 00 00 0a 6c |9.*Uu..........l|
00000090 69 6e 65 20 31 30 30 30 00 00 75 dc c5 00 0b 8a |ine 1000..u.....|
000000a0 bc 00 00 00 09 6c 69 6e 65 20 39 35 36 00 2a 55 |.....line 956.*U|
000000b0 75 dc c5 00 0b c7 d2 00 00 00 09 6c 69 6e 65 20 |u..........line |
000000c0 39 35 37 00 2a 55 75 dc c5 00 0c 04 e8 00 00 00 |957.*Uu.........|
000000d0 09 6c 69 6e 65 20 39 35 38 00 2a 55 75 dc c5 00 |.line 958.*Uu...|
000000e0 0c 3e fe 00 00 00 09 6c 69 6e 65 20 39 35 39 00 |.>.....line 959.|
000000f0 2a 55 75 dc c5 00 0c 7a 51 00 00 00 09 6c 69 6e |*Uu....zQ....lin|
00000100 65 20 39 36 30 00 2a 55 75 dc c5 00 0c b8 3e 00 |e 960.*Uu.....>.|
00000110 00 00 09 6c 69 6e 65 20 39 36 31 00 2a 55 75 dc |...line 961.*Uu.|
00000120 c5 00 0c f2 e8 00 00 00 09 6c 69 6e 65 20 39 36 |.........line 96|
00000130 32 00 2a 55 75 dc c5 00 0d 2f b3 00 00 00 09 6c |2.*Uu..../.....l|
00000140 69 6e 65 20 39 36 33 00 2a 55 75 dc c5 00 0d 6b |ine 963.*Uu....k|
00000150 07 00 00 00 09 6c 69 6e 65 20 39 36 34 00 2a 55 |.....line 964.*U|
00000160 75 dc c5 00 0d a8 9d 00 00 00 09 6c 69 6e 65 20 |u..........line |
00000170 39 36 35 00 2a 55 75 dc c5 00 0d e5 f4 00 00 00 |965.*Uu.........|
00000180 09 6c 69 6e 65 20 39 36 36 00 2a 55 75 dc c5 00 |.line 966.*Uu...|
00000190 0e 20 f2 00 00 00 09 6c 69 6e 65 20 39 36 37 00 |. .....line 967.|
000001a0 2a 55 75 dc c5 00 0e 5e c5 00 00 00 09 6c 69 6e |*Uu....^.....lin|
000001b0 65 20 39 36 38 00 2a 55 75 dc c5 00 0e 99 e3 00 |e 968.*Uu.......|
000001c0 00 00 09 6c 69 6e 65 20 39 36 39 00 2a 55 75 dc |...line 969.*Uu.|
000001d0 c5 00 0e d8 3c 00 00 00 09 6c 69 6e 65 20 39 37 |....<....line 97|
000001e0 30 00 2a 55 75 dc c5 00 0f 13 fe 00 00 00 09 6c |0.*Uu..........l|
000001f0 69 6e 65 20 39 37 31 00 2a 55 75 dc c6 00 00 0e |ine 971.*Uu.....|
00000200 fa 00 00 00 09 6c 69 6e 65 20 39 37 32 00 2a 55 |.....line 972.*U|
00000210 75 dc c6 00 00 4a bf 00 00 00 09 6c 69 6e 65 20 |u....J.....line |
00000220 39 37 33 00 2a 55 75 dc c6 00 00 87 d6 00 00 00 |973.*Uu.........|
00000230 09 6c 69 6e 65 20 39 37 34 00 2a 55 75 dc c6 00 |.line 974.*Uu...|
00000240 00 c5 53 00 00 00 09 6c 69 6e 65 20 39 37 35 00 |..S....line 975.|
00000250 2a 55 75 dc c6 00 01 00 6e 00 00 00 09 6c 69 6e |*Uu.....n....lin|
00000260 65 20 39 37 36 00 2a 55 75 dc c6 00 01 40 a1 00 |e 976.*Uu....@..|
00000270 00 00 09 6c 69 6e 65 20 39 37 37 00 2a 55 75 dc |...line 977.*Uu.|
00000280 c6 00 01 79 df 00 00 00 09 6c 69 6e 65 20 39 37 |...y.....line 97|
00000290 38 00 2a 55 75 dc c6 00 01 b4 2d 00 00 00 09 6c |8.*Uu.....-....l|
000002a0 69 6e 65 20 39 37 39 00 2a 55 75 dc c6 00 01 ef |ine 979.*Uu.....|
000002b0 c7 00 00 00 09 6c 69 6e 65 20 39 38 30 00 2a 55 |.....line 980.*U|
000002c0 75 dc c6 00 02 2c f5 00 00 00 09 6c 69 6e 65 20 |u....,.....line |
000002d0 39 38 31 00 2a 55 75 dc c6 00 02 67 ab 00 00 00 |981.*Uu....g....|
000002e0 09 6c 69 6e 65 20 39 38 32 00 2a 55 75 dc c6 00 |.line 982.*Uu...|
000002f0 02 a2 c9 00 00 00 09 6c 69 6e 65 20 39 38 33 00 |.......line 983.|
00000300 2a 55 75 dc c6 00 02 df f7 00 00 00 09 6c 69 6e |*Uu..........lin|
00000310 65 20 39 38 34 00 2a 55 75 dc c6 00 03 1d 5b 00 |e 984.*Uu.....[.|
00000320 00 00 09 6c 69 6e 65 20 39 38 35 00 2a 55 75 dc |...line 985.*Uu.|
00000330 c6 00 03 59 81 00 00 00 09 6c 69 6e 65 20 39 38 |...Y.....line 98|
00000340 36 00 2a 55 75 dc c6 00 03 98 b4 00 00 00 09 6c |6.*Uu..........l|
00000350 69 6e 65 20 39 38 37 00 2a 55 75 dc c6 00 03 d5 |ine 987.*Uu.....|
00000360 8d 00 00 00 09 6c 69 6e 65 20 39 38 38 00 2a 55 |.....line 988.*U|
00000370 75 dc c6 00 04 12 fe 00 00 00 09 6c 69 6e 65 20 |u..........line |
00000380 39 38 39 00 2a 55 75 dc c6 00 04 50 56 00 00 00 |989.*Uu....PV...|
00000390 09 6c 69 6e 65 20 39 39 30 00 2a 55 75 dc c6 00 |.line 990.*Uu...|
000003a0 04 8b b4 00 00 00 09 6c 69 6e 65 20 39 39 31 00 |.......line 991.|
000003b0 2a 55 75 dc c6 00 04 c8 b2 00 00 00 09 6c 69 6e |*Uu..........lin|
000003c0 65 20 39 39 32 00 2a 55 75 dc c6 00 05 06 a1 00 |e 992.*Uu.......|
000003d0 00 00 09 6c 69 6e 65 20 39 39 33 00 2a 55 75 dc |...line 993.*Uu.|
000003e0 c6 00 05 44 64 00 00 00 09 6c 69 6e 65 20 39 39 |...Dd....line 99|
000003f0 34 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |4...............|
00000400
Sofern das alles ohne irgendwelche Fehlermeldungen abgearbeitet wird, funktioniert es offenbar wie erwartet und wir sind jetzt in der Lage, diese Ringpuffer-Speicherung nicht nur mit der Standardgröße von 8 KByte zu verwenden, sondern mit jeder (sinnvollen) Größe, die wir brauchen.
Der Vorteil dieses Vorgehens mit dem Einsatz von "showshringbuf" ist es (für mich), daß man sich nicht selbst darum kümmern muß, wie groß die Protokoll-Datei maximal werden darf (wenn sie im tmpfs liegt und mit steigender Größe den verfügbaren Speicher verringert) und daß man gleichzeitig unnötige Schreiboperationen auf persistente Speicher (z.B. USB-Sticks) vermeiden kann, solange man die protokollierten Daten eigentlich nicht dauerhaft speichern will.
Im Syslog kann man (eine Busybox mit syslogd mal vorausgesetzt) zwar auch in einen Ringpuffer protokollieren, dort gehen aber - nach meiner Ansicht - dann wirklich wichtige Informationen unter bzw. durch die erneute Verwendung des Platzes verloren, wenn man mit entsprechender Frequenz eigene Daten protokollieren will.
Der Ringpuffer-Ansatz von AVM ermöglicht es, diese Daten "nach Typ" getrennt zu protokollieren. Für mich persönlich spielt es auch noch eine Rolle, daß diese Protokollierung aus Skript-Files heraus eben auch mit AVM-Bordmitteln möglich ist, ohne daß man dazu weitere Programme in binärer Form bräuchte.
PS: Sollte das Wissen um diese Möglichkeit schon "Allgemeingut" sein, füge ich eine Quellenangabe hinzu. Andererseits hat mir eine große Internet-Suchmaschine für "showshringbuf" keine zählbaren Ergebnisse geliefert ... daher gehe ich mal davon aus, daß das noch nirgendwo so dokumentiert wurde.