Luca Morettoni
English version

tinystats

tinystats è un filtro che legge i log di tinydns e ricava le statistiche riguardo le tipologie di query ricevute ed eventuali errori.
Il programma è ispirato al sistema ideato da Nate Campi, con la grande differenza che tinystats è stato scritto in C per non gravare sulle risorse della macchina.
Supporta questo progetto:

Installazione

Scaricare il pacchetto tinystats-1.1.tar.gz (Perugia, Italia)

Per compilare il programma:

     tar -xfz tinystats-[versione].tar.gz
     cd tinystats
     make install strip
(per modificare le opzioni di compilazione e/o installazione fate riferimento alle prime linee all'inizio di Makefile).

Se usate la patch che implementa l'IPv6 nel pacchetto djbdns compilate il tutto definendo la variabile WITH_IPV6 (es. make -D WITH_IPV6 ...).

Se usate FreeBSD potete intallare tinystats tramite il suo port:

     cd /usr/ports/dns/tinystats
     make install clean

Utilizzo

Una volta compilato ed installato tinystats occorrerà modificare il file tinydns/log/run in modo che venga eseguito tinystats. La sua sintassi generale è:
    tinystats [-h] [-s progr] output progr
dove output sarà la directory in cui verrà creato il file tinystats.out (che conterrà le statistiche), mentre progr sarà il programma che riceverà i log (normalmente multilog).
Il nuovo file log/run sarà (controllate anche il file tinydns.log.run.sample disponibile nel pacchetto):
    exec setuidgid Gdnslog tinystats -h ./main/tinystats/ \
        multilog t n3 s250000 ./main/
Specificando l'opzione -h, i log di tinydns verranno resi più leggibili: gli IP verranno scritti in decimale e i tipi di record richiesti verranno scritti in formato testo.
Ecco un esempio di output con l'opzione -h:
192.168.0.50    57552 [56427] + MX   home.morettoni.local
192.168.0.2     64228 [05045] + A    current.morettoni.local
192.168.0.2     28675 [10102] + ANY  morettoni.local
192.168.0.2     51488 [23734] + PTR  254.0.168.192.in-addr.arpa

Slave server

Se intendete utilizzare tinydns come slave di un server BIND (o di altri software) basterà indicare tramite l'opzione -s il programma che si occuperà della gestione della notifica. Infatti, quando il master invierà a tinydns la notifica di cambiamento della zona questi scriverà nei log una richiesta non implementata (carattere I) per il record SOA (valore 0006); tinystats eseguirà il programma indicato dopo l'opzione -s con i seguenti parametri: nel pacchetto troverete il file di esempio update_slave.sh.sample utilizzabile per la gestione degli aggiornamenti, mentre il file Makefile.sample può essere usato al posto del Makefile che trovate in tinydns/root per riasseblare tutte le zone scaricate dai master e per generare il file data.cdb
Gli scipt di esempio fanno riferimento al file di configurazione tinydns/root/allow; esso contiene la lista delle zone di cui si vuole fare da slave e l'IP del server master, la sua sintassi è:
  zonaA.tld:MASTER_IP
  zonaB.tld:ALTRO_MASTER_IP
E' possibile salvare le zone scaricate in una directory differente da tinydns/root, semplicemente cambiano la variabile ZONEDIR presente nei due file, è importante inoltre che tutti i file *.data, data e data.cdb siano modificabili dall'utente con cui gira il servizio tinydns/log.
Ho inserito anche lo script start_slave.sh.sample che si occupa di scaricare tutte le zone presenti nel file allow, utile ad esempio per il primo startup del vostro slave server.

Segnali

Nel caso in cui tinystats ricevesse i segnali ALRM, TERM e HUP il suo comportamentamento sarà:

Statistiche

Il file generato da tinystats è composto di due righe: la prima riporta il contatore delle varie tipologie di record richieste, mentre la seconda è una semplice legenda.
Ecco un esempio:
386:7:0:4:0:0:272:8:0:0:0:122:0:6:860:24:1:0:0:30
a:ns:cname:soa:ptr:hinfo:mx:txt:rp:sig:key:aaaa:axfr:any:total:other:notauth:notimpl:badclass:noquery
I primi 15 campi sono di semplice comprensione, mentre gli ultimi 6 rappresentano:

Grafici

Utilizzando RRDtools è possibile visualizzare alcuni grafici che riguardano le query e gli errori loggati da tinystats, nel pacchetto è presente uno script di shell (tinydns.sh.sample) che è possibile lanciare da crontab per generare i grafici. Lo script è personalizzabile attraverso una serie di variabili impostabili nel file tinydns.conf (che andrà salvato nella stessa directory dello script), le variabili sono: All'inizio dello script troverete i valori di default di queste impostazioni.

Ecco alcuni esempi di tinystats in azione:

Ringraziamenti