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


41. 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.

41.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.

41.2 Contabilità basata su /var/log/wtmp

Il file `/var/log/wtmp' è il registro 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'.

41.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 29 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'.

41.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.

41.3 Contabilità dei processi

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.

Il file in questione può essere `/var/log/pacct', o anche `/var/account/pacct'. Nel secondo caso, si attiva la registrazione contabile dei processi con il comando seguente (naturalmente è necessario che il file esista già).

accton /var/account/pacct

Il problema della contabilità dei processi sta nel fatto che viene ancora considerata un accessorio di importanza minore, 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/account/pacct' dovrebbero impedire anche la lettura da parte degli utenti comuni.

Una gestione seria di questo sistema contabile richiede la sua attivazione e disattivazione attraverso la stessa procedura di inizializzazione del sistema. Semplificando molto le cose, lo script che attiva a disattiva la contabilità potrebbe essere fatto nel modo seguente:

#! /bin/sh

test -x /usr/sbin/accton || exit 0

case "$1" in
    start)
	echo "Avvio della contabilità dei processi."
	/usr/sbin/accton /var/account/pacct 2>/dev/null
	;;
    stop)
	echo "Arresto della contabilità dei processi."
	/usr/sbin/accton 2>/dev/null
	;;
    *)
	echo "Utilizzo: acct {start|stop}"
	exit 1
esac

exit 0

41.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.

41.3.2 # sa

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

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

A seconda di come è stato compilato il sorgente del programma, alcune opzioni possono essere disponibili, o meno; inoltre, non è stabilito in modo univoco quale sia la collocazione esatta dei file utilizzati per questa contabilità. Per conoscere queste cose, basta avviare `sa' con l'opzione `-h'. In particolare, si potrebbe vedere il risultato seguente:

The system's default process accounting files are:

  raw process accounting data: /var/account/pacct
      summary by command name: /var/account/savacct
          summary by username: /var/account/usracct

In condizioni normali, quando `sa' viene avviato senza opzioni (o al massimo con l'indicazione del file contenente la contabilità), si ottiene un listato simile a quello seguente:

     246     112.57re       1.38cp
      24       8.60re       0.95cp   ***other*
       2       1.03re       0.19cp   dpkg
       5       5.08re       0.05cp   troff
      48       8.08re       0.03cp   sh
       2       0.43re       0.02cp   rm
      12       8.42re       0.02cp   man
      36       0.13re       0.02cp   sa
...

La prima colonna rappresenta l'utilizzo in termini di chiamate di sistema, dove per esempio `rm' è stato avviato solo due volte; la seconda colonna, dove i valori sono seguiti dalla sigla `re', indica il tempo reale di CPU; la terza colonna riporta la somma tra il tempo di sistema e quello utente dell'utilizzo della CPU; l'ultima colonna indica il nome del processo relativo.

Nel seguito vengono descritte solo alcune delle opzioni, dove in particolare sono state saltate quelle che possono aiutare a riordinare in modo differente i dati. Eventualmente, si può consultare la pagina di manuale sa(8).

Alcune opzioni

-c |--percentages

Per ogni colonna di valori, ne aggiunge un'altra con le percentuali relative.

-m |--user-summary

Invece di generare un listato normale organizzato secondo i processi, genera un riassunto dell'utilizzo in base agli utenti proprietari dei processi.

-u |--print-users

Genera un elenco differente, composto dagli utenti, il tempo di CPU e il nome dei processi utilizzati dagli utenti stessi. Il risultato è un elenco molto più lungo del solito.

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

Appunti Linux 2000.04.12 --- Copyright © 1997-2000 Daniele Giacomini --  daniele @ pluto.linux.it


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