[inizio] [indice generale] [precedente] [successivo] [indice analitico] [contributi]

38. Contabilità dell'utilizzo di risorse del sistema

Il problema della registrazione dell'utilizzo di risorse è nato proprio per misurare, e quindi per fare pagare, i servizi utilizzati dagli utenti. In questo senso si spiega l'enfasi «contabile» che si dà al problema.

Alla base della contabilità dell'utilizzo delle risorse del sistema sta il file /var/log/wtmp, che deve esistere perché tali registrazioni avvengano effettivamente. Per motivi storici, non si tratta di un file di testo normale, e per leggerlo si usa generalmente il programma last, al quale si aggiungono eventualmente altri programmi più raffinati.

Oltre alla contabilità basata sul file /var/log/wtmp si aggiunge quella legata ai processi, derivata da BSD (BSD Process Accounting). Mentre il file /var/log/wtmp (e anche /var/run/utmp) è gestito generalmente da Init, dalla procedura di accesso tradizionale (login), dalla serie dei programmi Getty, e da altri programmi che sono legati al sistema di autenticazione degli utenti, la contabilità dei processi in stile BSD è gestita direttamente dal kernel. Nel caso di GNU/Linux, si tratta di attivare l'opzione relativa nel gruppo denominato General setup.

38.1 Formato dei file

Come accennato, una delle caratteristiche importanti di questi file è il fatto di non essere file di testo normali. Il formato del loro contenuto varia da sistema a sistema, e anche da una versione all'altra dello stesso sistema operativo. Pertanto, può succedere alle volte che qualcosa non funzioni, nel senso che i programmi che vi accedono non riescono a interpretare i dati in modo corretto, o peggio eseguono delle registrazioni errate.

Questa annotazione serve per tenere in considerazione il problema, ma tutto quello che si può fare, quando si notano delle anomalie legate a queste componenti del sistema, è l'aggiornamento del software.

38.2 Contabilità basata su /var/log/wtmp

Il file /var/log/wtmp è l'archivio storico degli accessi al sistema. Al suo interno vengono indicate le informazioni della data e dell'ora di accesso di ogni utente, assieme all'indicazione della provenienza degli accessi. I dati contenuti in questo file hanno valore solo se sono completi, nel senso che per ogni accesso si deve trovare anche la registrazione della conclusione della sessione di lavoro, altrimenti non possono essere calcolati i tempi di utilizzo.

Purtroppo, questo file non offre le garanzie di una base di dati vera e propria, e le registrazioni che vengono fatte al suo interno non sono mai sicure. Pertanto, i dati che si riescono a estrapolare sono da considerare approssimativi in generale.

Questo file tende a ingrandirsi rapidamente, tanto che periodicamente conviene fare pulizia. Di solito, le distribuzioni GNU/Linux provvedono a fornire degli script necessari per gestire in modo elegante, attraverso il sistema Cron, l'archiviazione e rotazione dei file delle registrazioni, compreso /var/log/wtmp.

38.2.1 $ last

last [<opzioni>] [<nome>...]

Visualizza il contenuto del file delle registrazioni degli accessi (login) e disconnessioni (logout) per le informazioni riguardanti gli utenti e i terminali. Il file dal quale queste informazioni vengono attinte è /var/log/wtmp. L'esempio seguente mostra una parte dell'output che potrebbe essere generato da questo programma.

daniele  tty5                          Tue Mar 30 16:18   still logged in
daniele  tty5                          Tue Mar 30 16:17 - 16:18  (00:01)
tizio    ttyp1        roggen.brot.dg   Tue Mar 30 14:33   still logged in
reboot   system boot                   Tue Mar 30 14:30  
root     tty3                          Mon Mar 29 22:18 - down   (01:29)
daniele  tty2                          Mon Mar 29 21:29 - 23:47  (02:18)
caio     ttyp1        roggen.brot.dg   Mon Mar 29 21:14 - 23:47  (02:33)
reboot   system boot                   Mon Mar 29 21:10  

Si osserva in particolare che la prima voce rappresenta l'accesso più recente, quello dell'utente daniele dalla quinta console virtuale, che risulta essere ancora collegato. Si vede anche che lo stesso vale per l'utente tizio che sta utilizzando il sistema attraverso un accesso remoto proveniente dall'elaboratore roggen.brot.dg. Si notano anche gli accessi regolarmente conclusi (quelli che hanno un orario di inizio e un orario di fine, oltre che l'indicazione della durata dell'accesso tra parentesi), e quindi si distinguono gli accessi sicuramente conclusi, di cui non è stata annotata la fine. Infatti, il giorno 30 marzo alle ore ore 14.30 il sistema è stato riavviato, e di conseguenza gli accessi in essere in precedenza sono da considerare conclusi: l'accesso dell'utente root del 20 marzo alle ore 22.18 non è stato concluso in modo normale, probabilmente perché ha avviato il programma shutdown e non ha fatto in tempo a concludere la sessione di lavoro.

Alcune opzioni

-<numero> | -n <numero> | --lines <numero>

Limita il numero di elementi visualizzati allo specifico valore numerico indicato.

-f <file> | --file <file>

Analizza il file specificato invece di utilizzare quello predefinito, cioè /var/log/wtmp.

-x | --more-records

Permette di conoscere anche le informazioni sull'arresto del sistema e in generale sui cambiamenti del livello di esecuzione (runlevel).

Esempi

last

Visualizza gli ultimi eventi del registro degli accessi.

last tizio root

Visualizza gli accessi e le disconnessioni da parte degli utenti tizio e root.

38.2.2 $ ac

ac [<opzioni>] [<utente>...]

ac è un programma che si basa sul contenuto del file /var/log/wtmp per determinare i tempi di accesso complessivi del periodo a cui si riferisce il file stesso.

Se viene utilizzato senza argomenti, si limita a emettere il tempo complessivo di tutti gli accessi, e in pratica è utile solo quando si indicano delle opzioni. Se viene indicato il nome di uno o più utenti, si ottengono soltanto i dati relativi a questi.

L'accuratezza delle informazioni ottenute con ac dipende naturalmente dall'integrità del file che viene analizzato.

Alcune opzioni

-d | --daily-totals

Mostra l'elenco dei tempi di accesso giornalieri.

-p | --individual-totals

Mostra l'elenco dei tempi di accesso suddivisi per utente.

-f <file> | --file <file>

Analizza il file specificato invece di utilizzare quello predefinito, cioè /var/log/wtmp.

Esempi

ac

Mostra il totale degli accessi, per esempio ciò che appare di seguito, tenendo conto che il valore fa riferimento alle ore. Per la precisione si tratta di 4198 ore e 51 minuti.

	total     4198.85

ac -d

Mostra l'elenco dei tempi di accesso giornalieri, per esempio il listato seguente che viene mostrato solo nella sua parte finale.

...
Mar 24	total       35.21
Mar 25	total       26.95
Mar 26	total        2.67
Mar 28	total       61.54
Mar 29	total       35.55
Today	total       45.64

ac -p

Mostra l'elenco dei tempi di accesso suddivisi per utente.

	pippo                                1.84
	ftp                                  0.99
	tizio                                2.93
	daniele                           3100.52
	root                              1083.21
	semproni                             6.41
	caio                                 3.41
	total     4199.32

ac -p tizio caio

Come nell'esempio precedente, ma limitatamente agli utenti tizio e caio.

	tizio                                2.93
	caio                                 3.41
	total        6.34

ac -p tizio caio -f /var/log/wtmp.1

Come nell'esempio precedente, ma analizzando il file /var/log/wtmp.1 che presumibilmente è il file delle registrazioni precedente.

38.3 Contabilità basata su /var/log/pacct

Come già accennato all'inizio del capitolo, la contabilità riferita ai processi è gestita direttamente dal kernel. Questa viene attivata attraverso una chiamata di sistema, acct(), e per questo si usa un programma apposito: accton.

accton [<file-delle-registrazioni>]

Per la precisione, se accton viene usato senza argomenti, la contabilizzazione da parte del kernel viene disattivata; al contrario, se si indica il file da utilizzare, la contabilizzazione viene attivata e diretta verso quel file.

Per rispettare le consuetudini, il file in questione deve essere /var/log/pacct, per cui si attiva la registrazione contabile dei processi con il comando seguente (naturalmente è necessario che il file esista già).

accton /var/log/pacct

Il problema della contabilità dei processi sta nel fatto che viene ancora considerata un accessorio di minore importanza, e per questo può capitare che i programmi di cui si dispone non siano perfettamente conformi al formato del file generato dal kernel.

Al contrario della contabilità legata al file /var/log/wtmp, le informazioni riferite ai processi vengono considerate delle informazioni riservate, e per questo i permessi del file /var/log/pacct dovrebbero impedire anche la lettura da parte degli utenti comuni.

38.3.1 # lastcomm

lastcomm [<comando>...] [<utente>...] [<terminale>...] [<opzioni>]

lastcomm è il programma fondamentale per la lettura del file della contabilità dei processi. Di per sé, per funzionare, non richiede i privilegi dell'utente root, però il file utilizzato per questa contabilità, /var/log/pacct, è normalmente protetto contro qualunque accesso non privilegiato.

lastcomm può essere utilizzato senza argomenti, e in tal caso mostra tutte le informazioni contenute all'interno del file /var/log/pacct, oppure può essere avviato con l'indicazione di comandi, utenti e terminali, in modo da limitare le informazioni che si vogliono estrarre da quel file.

Il listato tipico che si dovrebbe ottenere da questo programma è simile all'esempio seguente:

...
cat                    tizio    tty1       0.03 secs Tue Mar 30 07:38
ls                     tizio    tty1       0.04 secs Tue Mar 30 07:38
clear                  tizio    tty1       0.01 secs Tue Mar 30 07:38

Alcune opzioni

--user <nome-utente>

Se l'indicazione del nome di un utente può essere ambigua, nel senso che potrebbe essere confuso con un comando, si può utilizzare questa opzione.

--command <comando>

Questa opzione permette di indicare un comando in modo da evitare ambiguità con i nomi degli utenti e dei terminali.

--tty <terminale>

Questa opzione permette di indicare un terminale (il nome del dispositivo senza il prefisso /dev/) in modo da evitare ambiguità con i nomi degli utenti e dei comandi.

-f <file-della-contabilità> | --file <file-della-contabilità>

Se si desidera consultare un file diverso da quello predefinito, si può utilizzare questa opzione per specificarlo.

Esempi

lastcomm tizio

Mostra la contabilità dei processi riferita all'utente tizio.

lastcomm --user tizio

Esattamente come nell'esempio precedente, ma con l'indicazione esplicita che tizio è inteso essere un utente.

38.3.2 # sa

sa [<opzioni>] [<file-della-contabilità>]

sa è un programma che genera delle statistiche dai dati contenuti nel file /var/log/pacct, o in un altro che venga indicato come ultimo argomento della riga di comando. Oltre a questo, sa utilizza altri due file: /var/log/savacct e /var/log/usracct. Questi gli permettono di annotare le informazioni generate; nel primo caso riferite alla situazione complessiva, nel secondo distinte in base all'utente.

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

Appunti Linux 1999.09.21 --- Copyright © 1997-1999 Daniele Giacomini --  daniele @ pluto.linux.it


[inizio] [indice generale] [precedente] [successivo] [indice analitico] [contributi]