Delprosjekt:
Statistikk over aksessering av serveren

Ansvarlig:
Knut A. Mork (knut.a.mork@hiof.no)
Status ved prosjektstart:
Det føres statistikk over antall domener som har aksessert serveren, antall requests, og antall overførte bytes fra serveren.
Ved slutten av hver uke genereres det statistikk for hver av de siste syv dagene. Dette blir også summert og funnet gjennomsnittet, for hver uke. På slutten av hver måned, oppsummeres ukene (alle dagene) for å finne totalsum og gjennomsnitt pr måned.
Hver uke og hver måned har hver sin html-side. En hovedside for statistikken inneholder pekere til alle disse html-sidene. Eksempel på en side over en ukestatisikk vil være:

	Date		Bytes Sent		Requests
	------------------------------------------------
	Nov 3 1997	728939987		11234
	Nov 4 1997	071327073		10283
	Nov 5 1997	390717723		14098
	...
	Total		9818217811		79909
	Average		092191281		11000

	Number of different domains: 77

Grovt sett så benyttes et perl-script som blir kjørt ved hjelp av crontab, en gang i uka. Et perl-script blir kjørt en gang i måneden. Et program kallt "wwwstat" brukes for å generere statistikken fra filen "access-log".

Problemer

En del av ukesstatistikkene og månedsstatistikkene finnes ikke. Total og gjennomsnittlig antall sendte bytes eksisterer ikke unntatt på de aller første statistikkene. Opphoping av statistikk-pekere på hovedsiden. Filen access_log bare vokser og vokser (nå er den på mellom 350-400 MB). I tillegg lager bl.a. perl-scriptet som genererer ukesstatistikken en kopi av denne filen temperært når scriptet kjøres, dvs. at en trenger dobbelt så mye plass for i det hele tatt å kunne lage statistikken. Det er det ikke lenger plass til på serveren.

Mulige forbedringer:
To sentrale mål for statistikken er:
  1. Rette opp alle feil
  2. Statistikken skal alltid fungere på egenhånd, uten noen administrasjon (dvs. menneskelige inngrep) verken nå eller senere.

Planer før utredning:

Filen access_log skal slettes jevnlig. Se på om det er mulig å få en mer korrekt angivelse av antallet som besøker serveren, enn antall requests. En kan vise de mest populære domenene, eller land. En kan vise de mest populære stedene på serveren.

Planer etter utredning:

Å få en mer nøyaktig måte å måle antall besøkende på Al Mashriq vil ikke bli implementert. Det er valgt å fortsette med å bruke programmet www-stat for å "lese" statistikken fra access-log. En nyere versjon enn den som har blitt brukt av www-stat har blitt undersøkt for denne muligheten, og resultatet er negativt. Det vil ikke bli gjort forsøk på å eventuellt lage et eget perl-script som skulle prøvd seg på dette. Uansett vil en ikke kunne fått en nøyaktig "antall besøkende". En hadde måtte tatt forutsetninger som når en domene vil telle mer enn en besøkende (tidsperiode osv).

På hver ukesstatistikk vil det være følgende statistikk:

  • En tabell som tidligere ( basert på dags-datoer: bytes sent, requests, og total og average for disse)
  • En tabell basert på de forskjellige lands requests på serveren. Det vil ikke bli mindre grov oppdeling på domener enn dette. www-stat har ikke mulighet til f.eks. å kun føre statistikk over de to første (siste) navn i det fulle domenenavnet. Å ta med alle domener hadde blitt en veldig lang liste, og ses ikke på som nødvendig informasjon. Dette vil også kreve mye mer fysisk plass, og ta lang tid å prosessere. Denne statistikken ville måtte blitt sperret for andre enn administratorer av serveren for å sikre en anonymitet overfor brukerne.
  • En tabell basert på hvilke kataloger som blir aksessert for nedlasting av dokumenter. I www-stat har en mulighet til å få oversikt over nøyaktig hvilke filer som blir lastet ned, men dette har vi begrenset pga all datamengden (som i punktet over). Den er blitt satt til å vise requests fra underkataloger på maks tredje nivå.

Statistikken vil være fordelt på hvert år. Et år - en oversiktsside (som den siden som nå eksisterer). Dette skal gjøres ved at et perl-script skal kjøres den 1.1. ved hvert nytt år. (crontab)

Access-log filen vil brytes opp en gang i måneden. Den gamle måneden, som er over vil komprimeres/ pakkes ned, til arkivering.

Hva er blitt gjort:
wwwstat er oppdatert til versjon 2.0. Denne versjonen inneholder flere muligheter for mer nyansert statistikk enn 1.0 versjonen. I tillegg til statistikken som ble ført, er det liste over hvilket land requestene kommer fra ( i synkende rekkefølge på requests), og hvilke kataloger på almashriq som er blitt aksessert av brukerne av webserveren. Vi valgte å ikke inkludere mer statistikk pga vi fant det mindre nyttig og det blir bare for mye statistikk som opptar plass, og vil ta lenger tid å beregne. På "katalog-strukturen" er det gjort en begrensning til kun å vise katalogen, og ikke filene, som aksesseres, og også at en kun viser 2 trinn ned i hiarkiet i filstrukturen (dvs. maksimum 2 underkataloger). Disse dataene er sortert på requests i synkende rekkefølge. I tillegg er det her fjernet unødvendige "kataloger" fra statistikken som aksessering av sys-katalogen og feil som "could not find file", "not allowed to access file" osv. På månedsstatistikken er det begrenset til 10 eller mer requests. Dette for at ikke fila skal bli altfor stor. Denne verdien kan lett forandres, ved å forandre en variabel i scriptet format_monthly.
Denne statistikken beregnes på ukesbasis, og på månedsbasis.

Det var før inndelt på uker eller måneder. Nå er det også inndelt per år. Hovedsiden for statistikken viser statistikk for inneværende år. Her kan en velge å se måneder (som har vært), eller de siste ukene (maks 12 siste uker). En kan her også velge et annet år, og da få opp en side med linker til (kun) gjeldende års månedsstatistikk.

Gamle statistiske data (på månedsbasis) fra access_log fila blir nå automatisk hentet ut, og pakket ned med programmet gzip. Det vil bli en gzip-fil med statistikk-data for hver måned som har gått. Dermed vil ikke access_log bli større enn en måneds aksessering av web-serveren. Det vil nødvendigvis kunne gå bort et par-tre aksesseringer på denne måten (maks), men dette vil være ubetydelig i sammenheng med de statistiske beregningene.
Disse operasjonene blir gjennomført i filen wwwstat.monthly.cron. Apache-serveren (web-serveren) logger alle henvendelser til Al Mashriq til filen access_log under Al Mashriq (/var/lib/httpd/logs/almashriq/access_log). Problemet med Apache er at referansen til denne log-filen er ikke stien og navnet på fila, men adressen til hvor fila ligger på disken. Hvis en da f.eks. bytter om access_log til et annet navn, vil Apache fortsette å logge til denne fila, selv om den ikke lenger heter access_log og ligger der den skal. Access_logen blir fjernet på almashriq hver måned, og byttet ut med en ny tom access_log-fil. For å løse dette problemet, må httpd-serveren restartes når dette skjer ("cat /var/lib/httpd.pid | kill -HUP"). Å drepe httpd-prosessen, samt å starte denne opp igjen, kan (og skal) bare utføres av root. Derfor må perl-scriptet som gjør dette, wwwstat.monthly.cron, kjøres, og eies, av root. For å slippe å la dette scriptet bli kalt opp i root sin crontab, påførte vi filen et sticky-bit. De som da har lov til å kjøre filen, vil nå kjøre filen som root. Det ble gjort følgende (som root):

    chown root wwwstat.monthly.cron
    chgrp almash wwwstat.monthly.cron
    chmod 750 wwwstat.monthly.cron
    chmod +s wwwstat.monthly.cron
Merk: Hvis forandringer blir gjort til filen (ch??? xx wwwstat.monthly.cron), eller hvis filen blir kopiert til et annet sted, vil sticky-bit`ten forsvinne. Denne må da settes på nytt.

Senere fant vi ut at alt dette som er beskrevet ovenfor ikke er nødvendig i det hele tatt. Det eneste en behøver å gjøre er å skrive en fil over log-filen en skal forandre på. F.eks. skal en "nulle ut" access_log, skrives følgende:

    cat /dev/null > /var/lib/httpd/logs/almashriq/access_log
Skal access_log erstattes med en annen fil, bytter en ut /dev/null med den andre fila.

De gamle log-filene ligger under katalogen /var/lib/httpd/logs/almashriq/old_logs/. Disse vil oppta litt plass, men kan bare slettes dersom en ønsker det. Hvis en senere finner ut at det ikke er ønskelig å ta vare på de gamle log-filene, kan en editere fila wwwstat.monthly.cron på følgende måte:

  • Kommenter ut de fem (5) første linjene under avsnittet "Oppdaterer access-loggen".
  • Legg istedet til: system("rm $statistikksystempath$month_log");

Det ble også oppdaget et annet problem når vi håpet dette delprosjektet endelig var ferdig. Strukturen på hvor alle dataene ligger er oppdelt etter Dewey Decimal Classification System. Ved hver hoved-katalog (under landene, og videre et hakk opp) har katalogene fått navn etter nummeret i Dewey-systemet. Dvs. f.eks. 700 som vil inneholde kunst. I tillegg har en på Al Mashriq lagt til symbolske linker på alle disse katalogene som også inneholder selve navnet, f.eks. til eksemplet ovenfor følger det med en symbolsk link til denne katalogen, kalt 700.arts . Etter en undersøkelse av access_log viser det seg at det blir av og til logget den ekte katalogen, mens andre ganger den symbolske linken. Statistikken ble derfor feil, for at en ikke vil kunne se den totale aksessen av en bestemt katalog på serveren. Det var ingen mulighet til å kunne velge bort dette i statistikk-programmet (wwwstat-2.0) så det ble lagd et script som henter ut denne delen av statistikken, sorterer og legger sammen alle kombinasjonene av samme katalog (opptil 4), og limer det inn igjen i den genererte statistikk-fila. For å få statistikken til å bli pent plassert på linje under hverandre i utskriften, benyttet vi tabeller i html. Vi prøvde først å få denne delen så lik resten av statistikken som mulig, men det ville ikke kunne matche ved forskjellige størrelser på den fonten som ble brukt i browseren. Derfor ble det laget enda et script som konverterer resten av statistikk-utskriften til html-kode med tabeller. Fra før hadde dette bare vært preformatert tekst. Dette ble det brukt lang tid på for å finne en best mulig løsning på og å implementere denne. Syntaksen i koden kan virke litt grisete, men dette var nødvendig for å få det til.

Alle tidligere statistikk-beregninger er foretatt på nytt med de nye forbedringene, og også der det manglet statistikk fra før, så sant dette har vært mulig. Så all statistikk som fins på serveren idag er blitt oppdatert. Statistikken fra1996 til februar 1997 er ikke blitt forandret, fordi de opprinnelige statistikkdataene ikke lenger eksisterer.

Samtlige gamle scripts har blitt forandret på. Det har vært mange småting i scriptene, som meget godt kunne føre til feil og unøyaktigheter, og dette skjedde også. Dette har blitt rettet på, så nå skal det fungere helt uten nød vendige manuelle inngrep.

Formatet på filen /base/statistics/index.html og dens prototype, proto, må ikke forandres på/ editeres, såsant ikke en er sikker på at scriptene fortsatt vil fungere. Det er viktig at utgangspunktet, proto, har de ulike "notatene" og taggene i koden på nøyaktig riktig sted. Scriptene kan slutte å fungere ved f.eks. bare å legge til et linjeshift i denne filen.

Statistikken er nå implementert for å klare overgangen til år 2000.

En ting som ble tatt opp på slutten av prosjektet var at vi som administratorer er veldig mye innpå web-serveren, men denne aktiviteten er ikke ønskelig å ta med i de statistiske beregningene. Det ble derfor utviklet et script som først fjerner unødvendige logginger fra access_log, før resten av statistikken kjøres. Øyeblikkskartet fører med seg mange logginger som fjernes, et vaktbikkje-script som regelmessig laster ned index.html blir slettet fra access_log, og alle aksesseringer til /temp/ og /admin/ blir fjernet. I tillegg er det opprettet en tekstfil kalt stat-ip-nummer som inneholder navn på maskiner som skal slettes fra log-fila. Når administratorer på Al Mashriq benytter nye maskiner, bør disse legges inn i denne lista.

Manuell kjøring av scripts:
Hvis maskinen er nede når aksess-statistikken skulle ha vært kjørt:
  • wwwstat.weekly-helper.cron
    Se prosjektrapport 1997
  • month.cron
    Hvis det ikke har gått mer en en måned siden scriptet skulle ha vært kjørt (dvs. statistikken for forrige måned ikke er laget), så kan scriptet kjøres manuelt
  • week.cron
    Se først wwwstat.weekly-helper.cron. Dette må være korrekt. Ellers kan en kjøre scriptet manuelt, såsant en ikke har kjørt month.cron etter siste gang ukesstatistikken ble generert.
  • wwwstat.year.cron
    Scriptet kan kjøres manuelt uten forbehold.
Mulige forbedringer:
Nå vises dewey-tallene i statistikken over aksesserte kataloger. For å lettere kunne se hvilke kataloger det er, kan en bytte ut disse nummerne med navn istedenfor.
Prosjektfakta
Lokalisering:
  • Hovedprg for å generere ukesstatistikken: wwwstat.weekly.cron
  • Hjelpeprg til wwwstat.weekly.cron (kjøres daglig av crontab): wwwstat.weekly-helper.cron
  • Hovedprg for å generere månedsstatistikken: wwwstat.monthly.cron
  • Script for å bl.a. lage ny index-fil for det nye året: wwwstat.year.cron
  • Script til wwwstat.weekly.cron for å formatere statistikken til riktig format: format_weekly
  • Script til wwwstat.monthly.cron for å formatere statistikken til riktig format: format_month
  • Fil som inneholder syntax til første del av html-dokumentene: head
  • Fil som inneholder syntax til siste del av html-dokumentene: tail
  • Fil som inneholder syntax til index.html-filen: proto
  • Script som forandrer preformaterte statistikk-tabeller til html-tabeller: parse_html.pl
  • Script som retter opp problemet med symbolske linker i katalogene: sym_links_problem.pl
  • Program som kjøres av cron: month.cron
  • Program som kjøres av cron: week.corn
  • Editerbar tekstfil som inneholder navn på maskiner som utelukkes fra logging: stat-ip-nummer
  • Script som fjerner "søppel" fra log-fila: rem_garbage_log.pl

  • Alle overnevnte scripts og tekst-filer ligger på: /home/almash/admin/statistics/
  • Programmet wwwstat-2.0 ligger på: /home/almash/admin/statistics/wwwstat-2.0/
  • Wwwstat's side på nettet: http://www.ics.uci.edu/pub/websoft/wwwstat/
  • Statistikk-filene (html-dokumentene) ligger på: /www/almashriq/htdocs/base/statistics/
  • Gamle loggfiler (nedpakket) ligger på: /www/almashriq/htdocs/base/statistics/old-logs/
  • Gamle scripts fins som backup på: /home/almash/admin/statistics/old_scripts/
Tidsestimering:
  • 208 timer