Onlinekosten und Zeiten der
einzelnen Surfer in 'ISDN dial on demand Netzen' ermitteln und
darstellen
last edit : 24.06.2003
Home Peitsch
:
http://home.pages.at/bhg_online/midfli4l.html
aktuelle
Bug Diskussion
:
http://212.84.254.161/0814/html/cgi-bin/cms/gb/gb.cgi?id=3629
mehl den
Autor :
mailto:alexanderrichter@gmx.net
Ich übernehme keinerlei Verantwortung für
eventuelle Schäden, die durch dieses Skript verursacht werden
könnten. Die Benutzung erfolgt ausdrücklich auf eigene
Verantwortung.
Current ist opt_user-count_0.9a, dies
heisst immer noch alpha und nicht zum bedenkenlosen Einsatz geeignet
!
Wir nähern uns aber mit festem Tritt der 1.0, das
heisst hoffentlich auch Beta, aber mir wirds wohl wie linus mit
seinem Kernel gehn .-)
Das ISDN Package muss installiert und aktiviert sein, die eingetragenen Kosten pro Circuit werden als Berechnungsgrundlage genommen,
wer hier unachtsamerweise falsche Kosten pro Minute einträgt, hat in der Auswertung leider auch falsche Summen :-(
die Kosten der letzten Online Session werden durch Imonc bei sehr kurzen Verbindungen auf volle Cent gerundet, hier können also Abweichungen zur Telefonrechnung entstehen ( wenns mal einen dial on demand Anbieter geben sollte, der nur Bruchteile eines Cent pro Minute verlangt, wirds ganz ungenau. ps: diesen Anbieter SOFORT an den Autor melden.... )
installiert und in der base.txt/isdn.txt müssen aktiviert sein:
der mini-httpd für Web Interface Ausgabe, die Logs können auch mittels Editor der Wahl betrachtet und weiter ausgewertet werden
das opt_extratools (enthält den benötigten script prozessor awk, tcpdump, grep, wc, uniq, tail sowie sort) muss VOR opt_user-count installiert sein ( Dank an Wolfgang für Bugreport )
mindestens ein Isdn Circuit muss aktiviert sein ( im Isdn Package )
das Logging von Imond muss aktiviert sein ( in base.txt > IMOND_LOG='yes' )
Das Logverzeichnis sollte ausreichend Platz für die Logfiles während EINER Online Session haben, sicher sind hier nach derzeitigen Erkenntnissen > 5 Mbyte freier Platz, basierend auf den Erfahrungen des Autors (~ 400 kbyte bei 60 Minuten Online und Hangup Time von 45 sec)
Wenn Daylog aktiviert ist , siehe unten, sind pro erfassten Tag etwa 200 Byte in diesem Verzeichnis vorzusehen. Ich weiss, klingt nich viel aber über die Jahre hat man ja ganz schön viel mal 200 Byte .-)
Der Router darf keine geschützte Namensgebung haben ( z.B. 'host' 'gateway' ,ferner 'not' 'or' 'and' 'tcp' udp' icmp' ) , sonst scheitert das script, da diese Namen im Script als Platzhalter oder Argumente verwendet werden. ( Dank an Volker für Bugreport )
Ferner dürfen die in base.txt angegebenen Realnamen keinen Punkt ' . ' enthalten, so dies doch der Fall ist, werden diese Namen in der Auswertung verworfen. Dies hat mit einer scriptbedingten Trennung zu tun, da die User in den entstehenden Rohlogfiles, durch einen Punkt getrennt, den Portservice als Nummer angehangen haben. ( ala alex.1247 )
Installationen von opt_user-count vor 0.8a sind nicht kompatibel
mit 0.9a ( betrifft nicht die vorhanden Logfiles ! )
wenn aeltere
Versionen vor 0.8 installiert sind, bitte vor Auspacken des Paketes
:
- /opt/etc/ppp/ip-up.user.uc und /opt/etc/ppp/ip-up.user.uc
per Hand entfernen !!!
Das Script funktioniert derzeit nur mit Isdn Verbindungen, Modem
ist noch nicht getestet ( wenn Bedarf Mehl an den Autor ) , dsl dial
on demand ist noch nicht implementiert ( hab leider kein dsl :-(
)
Eine vorhande HD-installation ist Voraussetzung, um die
Logdateien nach einem Reboot zu erhalten.
Man entpacke das
Archiv und kopiere alles in das Fli4L-Basisverzeichnis
Unter Linux z.B. Kopieren ins Fli4l root Verzeichnis und entpacken
mit tar xfvz opt****.tgz
-Editieren der uc.txt in /config
- OPT_USERCOUNT='no' ( 'yes oder 'no' ) Package aktivieren,
klar
- OPT_USERCOUNT_DEBUG='no' ( 'yes oder 'no' ) Debug
Modus aktivieren, nur im Testfall auf yes, die aufgelaufenen
Logfiles werden nicht gelöscht, das kann den Router zum Absturz
bringen , (ramdisk full). Diese Option ist nur fürs intensive
Betatesten gedacht, wo alle möglichen und unmöglichen
Outputs des Opt's erhalten bleiben sollen.
-
OPT_USERCOUNT_LOGDIR='/var/log/' hier ist ein Directory anzugeben,
in dem die Log-Files abgelegt werden, muss beschreibar
sein,
sinnvollerweise in einer HD-Partition, um die Logs nach
einem Reboot zu erhalten und sollte ausreichend Platz für die
Logfiles während EINER Online Session haben.
Sicher sind
hier nach derzeitigen Erkenntnissen > 5 Mbyte freier Platz,
basierend auf den Erfahrungen des Autors ( ~ 400 kbyte bei 60
Minuten Online und Hangup Time von 45 sec )
Wie ihr eine Hardisk-partition einrichtet, ist im der Doku zu
HD-Installation aufgezeigt.
Wenn Daylog aktiviert ist , siehe
unten, sind pro erfassten Tag etwa 200 Byte in diesem Verzeichnis
vorzusehen.
- OPT_USERCOUNT_ETH='eth0' die Ethernet Card die
ans Intranet angeschlossen ist ist hier anzugeben, normalerweise
meist 'eth0', Ethernet Karten die z.B. nur die Verbindung zum
dsl-Modem herstellen, sind nicht interessant.
Sollten mehrere
Intranets über demzufolge auch mehrere Ethernet Cards zum
Einsatz kommen, wird nur das Erste hier Angegebene zum Auswerten
benützt. Sollte der Fall mehrerer Intranets öfter
auftreten, muss der Autor hier noch nachbessern ( was nicht ohne
grösseren Aufwand geht ), derzeit besteht der Bedarf noch
nicht.
- EINWAHLKOSTEN, wenn der Internet Service Provider eine
Einwahlgebühr verlangt, wird diese jeweils nach prozentualen
Anteilen der User auf alle Beteiligten der Online Session umgelegt.
Die Höhe der Einwahlkosten ist in // Euro.Cent //, JEWEILS
PRO ISDN CIRCUIT anzugeben.
JEDER in isdn.txt aktivierte Circuit
muss entweder mit 0.00 oder einer Einwahlgebühr aufgeführt
werden.
Diese Massnahme ist nötig, weil derzeit im ISDN
Package keine einzelnen Einwahlgebühren angegeben werden
können.
Die Einträge haben folgendes Format
:
OPT_UC_ISDN_CIRC_1_EINWKOSTEN='0.00'
OPT_UC_ISDN_CIRC_2_EINWKOSTEN='0.00'
OPT_UC_ISDN_CIRC_3_EINWKOSTEN='0.00'
Sie
lehnen sich stark an die Bezeichnungen in /config/isdn.txt an. Es
ist nicht schlimm, wenn hier Zeilen für nicht existierende
Circuits eingetragen sind, wohl aber wenn hier kein Eintrag für
existierende Circuits auftaucht.
Beachtet bitte weiterhin die
Trennung von Euro und Cent durch einen Punkt und nicht durch Komma.
- OPT_USERCOUNT_DAYLOG='no'# ( 'yes' or 'no' ) wenn aktiviert,
werden zusätzlich zu den Monatslog's und dem Last-Session-Log's
Tageslogs angelegt .
In dem Unterverzeichnis /daylogs unter dem
im OPT_USERCOUNT_LOGDIR angegebenen, werden pro Kalendertag die
Verbindungen aufsummiert.
So dieses Verzeichnis beim Stiefeln des
Routers noch nicht existiert , wird es neu angelegt.
Via miniHTTP
ist zusätzlich eine Auswahl von völlig frei wählbaren
Zeiträumen möglich, um individuelle Abrechnungszeiträume
zu ermöglichen.
Pro Kalendertag entsteht im Logverzeichnis
jeweils eine Tageslogdatei mit ca. 200 Byte Grösse, es ist also
entsprechend Platz vorzusehen.
Diese Option ist nützlich, um
freie Abrechnungszeiträume festzulegen, wie sie z.B. Die
Telekomrechnungen vorschreiben, auch ist es wunderbar erfrischend,
sich mal die persönlichen Internetkosten des ganzen letzten
Jahres anzuschauen.
Nun noch eine neues opt.tgz erstellen oder den Router per Imonc updaten, und schon kann man loslegen. Wenn man die Dateien per ftp hochgeladen hat, muss man noch darauf achten, dass die CGI's ausführbar sind. Am einfachsten führt man dazu ein
chmod 777 /usr/local/htdocs/*.cgi
an der Router-Konsole oder per telnet/ssh aus.
On boot werden aus der /boot/rc.cfg Hostdaten, ob ein Proxy läuft,
das Log-dir vom Imond und isdn relevante Daten in
/var/run/uc_host.cfg eingelesen, die später als Variablen in die
Scripts eingelesen werden.
Es wir basierend auf den ISDN_Circuits
und ihrer Angabe 'ob Channel Bundling on' eine Liste aller ippp
devices mit den zugehörigen Hangup_Zeiten und den jeweiligen
Einwahlkosten erstellt.
Es wird eine gültige /etc/ethers
angelegt, die die Mac Adresse und den Hostnamen des Routers enthält,
wird gebraucht für tcpdump.
On ip-up, also beim Aufbau einer Verbindung, lauscht ein tcpdump basierendes Script auf dem Intranet Netzwerk device auf tcp/udp Pakete, die nicht fürs Intranet bestimmt sind, in Zeitschleifen, basierend auf Hang-up Time plus 15 secunden Reserve. Die Hangup-Time wird aus der beim Booten erzeugten Liste /var/run/uc_circuit.data im Vergleich mit dem aktuellen ippp-device erzeugt.
Pro Minuten-log wird das Vorkommen der User einmalig prozentual
erfasst, dies passiert durch jeweiligen Start von tcpdump in den
Zeitschleifen und Sicherung der aufgelaufenen Logfiles durch
Durchnummerierung.
On ip-down wird das Log Script beendet, die
enstandenen 'Minutenlogs' werden nach prozentualen Anteilen des
Aufkommens von bekannten Usern ausgewertet ( in base.txt als hosts in
domain deklariert ),
wenn in einem 'Minutenlog' kein tcp/udp
Traffic auftauchte, wird der gesamte icmp Verkehr am Ethernet
Interface in diesem Logfile analysiert.
Es erfolgt eine Umsetzung
aller Prozentwerte der User im Verhältnis zur Anzahl der
Minutenlogs und den entstanden Kosten, die aus dem Log von Imonc
gewonnen werden.
Verhältnissmässig zum prozentualen
Vorkommen der User über alle Logfiles wird die Einwahlgebühr
aufsummiert.
Ausgeben werden die Anteile und Kosten, sowie die
Online Zeit für die letzte Session und für den aktuellen
Monat. So daylogs aktiviert ist werden analog zu den Monatslogs
Tageslogs nach dem Muster Tag-Monat_Jahr.daylog im Unterverzeichnis
/daylogs angelegt.
So noch kein Monatslog vorhanden ist (z.B weil
neuer Monat angebrochen ist) wird ein Neues erstellt, selbiges für
die Daylogs.
Alles was dann an temporären Dateien nach
Abbau der Online Verbindung nicht mehr gebraucht wird, wird
geproppert.
Das main_User-Count.cgi liest bei Anforderung die last-session und
monats-session Logs aus und stellt sie grafisch via Httpd dar.
Bei
aktiviertem Daylog, können freie Tageslogbasierende Zeiträume
festgelegt werden, die dann via uc_action.cgi aufsummiert dargestellt
werden.
Wo finde ich die Auswertungen, wenn
ich keinen Httpd einsetze ?
Im unter
OPT_USERCOUNT_LOGDIR='/var/log/' eingetragenen Verzeichnis existiert
nach einer oder mehrerer Online Sessions
eine uc_main.log, diese
beinhaltet die Daten der letzten Session und Log Dateien nach dem
Muster Monat-Jahr_uc.log, welche die Daten der jeweiligen Monate
enthalten. Bei aktivierten Daylog stehen im Unterverzeichnis
OPT_USERCOUNT_LOGDIR /daylogs die Tageslogs.
-
Der Router zeigt nach dem Auflegen für kurze Zeit ( via Imond )
bedrohlich hohe CPU Auslastung an, wieso denn das ?
Nach dem
Auflegen werden alle während der letzten online Session
gesammelten Informationen in einem Durchgang analysiert und die
Anteile der User gebildet, dies ist ein ziemlich aufwendiger
Vorgang, der einiges an CPU Leistung für sich veransprucht.
Der Router sollte sich aber auch nicht aufhängen, wenn
viele andere Dienste gleichzeitig laufen, dann dauert das Auswerten
nur halt länger.
- Was fange ich mit den Online
Zeiten der User an, muss ich da noch irgendwas umrechnen ?
Die
Logzeiten der User sind nur zur Information gedacht, massgeblich
sind nur die entstanden Kosten ( wie im richtigen Leben halt )
-
In der Auswertung taucht ein User 'unknown' auf, der auch noch
Kosten verursacht hat, schönen Dank, an wen soll ich nun die
Rechnung schicken ?
Das Script kann bei der Auswertung nicht
immer 100 %ig genau arbeiten, sorry, der 'unknown' User taucht auf,
wenn zwar eine Einwahl erfolgte, aber kein User definitiv
festgestellt werden konnte, das kann z.B. passieren bei :
°
sehr kurzen einwahlerzeugenden Ereignissen durch einen User , z.B
extrem kurzes ping ( einmalig ) ins Internet
° Serverdiensten
die auf dem Router laufen und selbst Internetverbindungen aufbauen
°
durch von Filesharing 'verseuchten' vom ISP zugewiesenen
IP-Adressen, meint neu zugewiesenene IP-Adressen können noch in
den diversen Filesharing Diensten eingetragen sein und werden durch
andere User, die am Filesharing teilnehmen, abgefragt.
Dies kann
auch passieren, wenn niemand im eigenen Netz Filesharing betrieben
hat.
Die Verbindung bleibt länger offen, weil ein paar Bytes
externer User an den Router tröpfeln, um zu erfahren ob ein
Filesharing Dienst läuft.
Im lokalen Netz des Autors
taucht dieser User immer wieder mal auf, mit bis zu 60 Cent pro
Monat bei ca. 40 Euro Internet-Kosten insgesamt,
sollte diese
Verhältniss bei euch grob überschritten sein, sendet bitte
eine mehl an den Autor.
ps : der Typ hat gerade mal 40 Euro
pro Monat in der WG ? Ja ich geb mir Mühe, die fetten Downloads
über die Kollegen in der Nachbarschaft zu realisieren .-)
-
Soweit so gut, aber die Kosten stimmen nicht mit denen meiner
Telefonrechnung überein ?
° Das Script bezieht die
Einzelkosten aus den Angaben der ISDN Circuits, manchmal hat der
Anbieter diese Einzelkosten zwischenzeitlich geändert...
°
Es kann natürlich sein, das die Kostenerfassung des Anbieters
leicht abweichend zur Kostenerfassung des Imond von fli4l
funktioniert, das kann man schlecht vom Router aus abgleichen.
°
Das Logging der Kosten umfasst nicht den ganzen Abrechnungszeitraum
der Rechnung, weils z.B. erst später gestartet wurde.
-
Kann ich die Kosten für einzelne User begrenzen ?
nicht
automagisch, nur durch Abgleichenen der aktuellen Kosten und
User sperren über externe Opts, die selektives User sperren
ermöglichen.
- Bei mir tauchen in den Log's Zahlen ala 183 192 478 oder 567
als User auf, was geht da schief ?
Sehr wahrscheinlich surfen
da User im Lan mit, die dem Router nicht via base.txt bekannt
gemacht wurden z.B ala :
HOST_1='192.168.6.1 alex' # 1st host: ip
and name
HOST_2='192.168.6.2 thomas' # 2nd host: ip and
name
HOST_3='192.168.6.3 ruediger' # 3rd host: ip and
name
HOST_4='192.168.6.10 hpserver' # 4th host: ip and
name
HOST_5='192.168.6.77 unreal' # 4th host: ip and name
Das
passiert, wenn diese User zwar Ip-Adressen aus dem Local-Lan haben
aber nicht mit Realnamen auf dem Router registriert sind.
Ich
habe dafür auch schon einen Lösungsweg, nur ist er noch
nicht realisiert. Seht mir bitte bis zum nächsten Main-Release
nach, das ist die nächste zu realisierende Problematik.
Bis
dahin achtet bitte darauf, dass alle lokalen User auf dem Router mit
Realnamen erfasst sind, sorry.
0.1a Dezember 2002
erstes local lauffähiges Opt
0.2a Januar 2003
cgi Interface hinzugefügt
0.3a 10.02.2003
komplettes Rewrite nach anderem Inhaltlichen Ansatz
Umstellung von Erfassung der Traffic Anteile auf Traffic in sogenannten 'Minuten Fenstern'
Auswerten der Minuten Logs bis auf das Letzte während der Online Zeit
0.4a Februar 2003
geteilter Entwicklerzweig, einmal pur und einmal mit eingebautem gegen libc5 gelinktem awk
0.5a 25.02 2003
log Auswertung komplett nach Abbau der Verbindung verlagert, dadurch Segmentation faults durch zuviele externe Befehle im Log Script 'während online' verhindert ( hoffentlich :-) bitte Bug Reports, wenn Probleme ... )
0.6a 27.02 2003
eine Online Zeit Erfassung der User anteilig an der Online Session wurde eingebaut, kleine Bugfixes
0.7a 01.03 2003
das aktuelle Isdn Circiuit wird nun zur Laufzeit ausgewertet
Rundungsfehler bei Zeiterfassung behoben
Fehlerausgabe ins cgi integriert, wenn Startbedingungen nicht erfüllt
0.8a 02.03 2003
Überarbeitung nach fli4l Komformität, Abhängigkeiten werden beim Kompilieren geprüft
nur noch Variante mit eingebauten awk gegen libc5 compiled wird weiterentwickelt, bis opt-extratools ein awk gegen libc5 enthält
Fehlerausgabe aus cgi entfernt, nicht mehr notwendig
config Datei auf dos Zeilenumbrüche umgestellt
absolute Pfade bei Befehlsaufrufen in Relative gewandelt
ip.up und up.down Scripte in fli4l conforme namen umbenannt
... der Autor wird sich Mühe geben, die Gross- und Kleinschreibung auf seiner Tastaur einzuführen ( faule Sau, Ich... )
0.8.1a 02.04 2003
eine eventuelle Einwahlgebühr kann angegeben werden
Straffung der Auswertescripte, dadurch erhebliche Verkürzung der Auswertezeit
uc_tcprun.sh weiter entschlackt, um segfaults zu vermeiden
flag und data Dateien, die zur Laufzeit erzeugt werden, mit eindeutigen Endungen benannt
0.9a 24.06 2003
unnötige Variablenübergabe im main cgi Script entfernt
alle vorhanden ippp devices werden zur Bootzeit ermittelt, hier wird eine List erstellt, die Kanalbündelung und dadurch verschobene ippp Device-Namen genauso berücksichtigt, wie pro Circuit eventuell anfallende Einwahlgebühren
Das aktuelle ippp device wird zur Ermittellung der Hangup Time gegen obige Liste währen go-online abgeglichen
Es gibt die Möglichkeit ,optional Tageslogs zu erfassen, um individuelle Abrechnungszeiträume zu erfassen
User im Lan ohne Fullname in der base.txt bekannt gemacht , werden nicht geloggt, bitte beachten !
Einmalige Ereignisse durch user ( ping wlan ), die eine
Einwahl erzeugen sicher erfassen ( derzeit ab ping -c 5 sicher )
(
ab 0.5a durch Entlastung des 'während online' laufendem Scripts
erheblich verbessert, ab ping -c 2 sicher )
dsl Fähigkeit nachrüsten
Tages Logs erstellen, die via Web
Interface zu Zeiträumen zusammengefasst eine Auswertung
ausserhalb von festen Monatsgrenzen ermöglichen,
um
Rechnungen, die nicht am 1. des Monats beginnen und enden ( Telekom
) nachvollziehen zu können. ( ab 0.9 enthalten )
Viele bug error mehls von euch
Endlich das leidige Segmentation fault Problem in den Griff kriegen
Bug-Reports und Verbesserungsvorschläge bitte an u.a. eMail-Adresse richten, dafür bin ich jederzeit offen und dankbar. Denkt daran, verbessert werden kann nur etwas durch gemeinsames Zusammenarbeiten. Ich hoffe, Euch mit diesen Skripts die Router-Abrechnung ein wenig bequemer zu machen.
MfG,
Alexander Richter
mailto:alexanderrichter@gmx.net
vorlage.html doku erstellt von
Daniel H. Reichelt