SmartDataCenter and coal-setup

Hi,

“Cloud on a Laptop”  in progress :-)  I’d like to check  so my  “man is” :

https://github.com/joyent/sdc/blob/master/docs/developer-guide/coal-setup.md

 

 

 

Link Status Monitor ….a tribute

LSM – Link Status Monitor

LSM è un “Link Status Monitor” che può essere usato per controllare ad esempio  la connettività di un router/firewall Linux  e se accade di avere delle connessione multiple, LSM  può  cambiare il routing a seguito di un evento up/down mediante uno script esterno.

Quando un segnale  SIGUSR1 è ricevuto lo stato attuale della connessione è inviata al syslog.

Questo software è fortemente influenzato da fping e da iputils  arping. Un grande riconoscimento gli va dato per i loro lavoro.

LICENSE

GPLv2, tu sarai in grado di trovare la  GNU Public License 2.0 in  www.gnu.org.

DECISION MAKING

Nella vesione 0.27 di lsm , l’algoritmo di  “detection” lavora in questo modo:

LSM tiente traccia di

1) il risultato dei più recenti ping ( sino a 100).

2) il numero di consecutivi ping persi .

3) il numero consecutivo di ping ricevuti .

Sia  A == al numero di ping recentemente persi

Sia  B == al numero di ping consecutivi persi

Sia C == al numero di ping consecutivi ricevuti

 Se la connessione ( o il gruppo di connessioni) è UP

AND ( (A >= max_packet_loss) OR (B >= max_successive_pkts_lost) allora cambio la connessione ( o il gruppo di connessioni) in down .

Altrimenti se la connessione (o il gruppo di connessioni) è DOWN

AND ( (A <= min_packet_loss) AND (C > min_successive_pkts_rcved) ) allora cambio la connessione ( o il gruppo di connessioni) in up.

Nota: LSM assume che ogni connessione è in uno stato iniziale “sconosciuto”.

AUTHORS

Mika Ilmaranta <ilmis at nullnet.fi>

DOWNLOADS

Download directory.

MAILING LIST

LSM mailing list subscription


LSM in action – Link Status Monitor in action

Hi,

this link http://lsm.foobar.fi/  solved my problem.

 

%description
Lsm is the link status monitor.

Lsm can ping multiple targets and when up or down event happens
it will execute user configured external script so it can be used
as poor man's routing protocol.

 

 

 

|LB1|10.10.10.1
———————-<—-(one o more client with LSM onboard)
|LB2|10.10.10.2

 

so when one load balancer  is down  lsm exec a little script in /usr/libexec/lsm/

In my case just down is the “case”

#!/bin/bash -x
#put all output into file
 echo "$@" >/var/log/lsm.log
# what is my default router ?
 DEFAULT_R=$(ip route show to exact 0.0.0.0/0  | awk '{ print $3 }')
#if  the status  is down and that is just my default router  then I change it with the new one
 # otherwise if is up just logger :-)
if [ $1  == "down" ] && [ $3 == "${DEFAULT_R}" ]
 then
 logger  "ip route replace default via 10.10.10.1 dev eth0"
 ip route replace default via 10.10.10.1 dev eth0
 elif [ $1 == "up" ]
 then
 logger "$@"
 fi

English lesson is over.

The end …. another link to see LSM in action is http://shorewall.net/MultiISP.html#lsm

 

 

Ciao,

come ringraziare chi mi ha risolto il problema, semplice lo pubblico in modo che altri possano averne lo stesso beneficio che ne ho avuto io.

 

Premessa.

Il problema si presenta quando abbiamo due o più server che fanno da gateway ad una batteria di server alle loro spalle.  Sappiamo che il default gateway nella rete è l’ultima risorsa che è presente nella tabella di routing. In rete possiamo trovare molta documentazione sul “policy routing” e tutti partono dal presupposto di avere due interfacce di rete con due indirizzamenti differenti a cui poi far puntare i due default gateway. Nel mio caso non ho la necessità di avere due indirizzamenti diversi ma poichè gioco in un ambiente virtuale mi posso permettere di avere due server che fungono da default gateway per la stessa sottorete. Tanto loro non lo sanno :)  ma dobbiamo farlo sapere ai server che li usano. Altra fortuna è data dal fatto che i server dietro i  due server  gateway sono anche loro sulla stessa sottorete e quindi anche in caso di down di uno dei due riescono sempre a raggiungere il nodo up, proprio perché “parlano” a livello due. Ora LSM entra in gioco sui server che usano i due lb come gateway. LSM restituisce al cambio di stato la seguente stringa

up server-lb1 10.10.10.1 eth0 support@example.com 96 4 5 1 94 0 0 31425 10.10.10.3 down 1459592375

${STATE}  ${NAME} ${CHECKIP}  ${DEVICE}  ${WARN_EMAIL}  SOME_STATISTICS ${SRCIP} ${PREVSTATE}  OTHER_STATISTICS

Di questa stringa ho usato il  $1=STATE e $CHECKIP che ho passato allo script che richiama LSM per impostare il nuovo gateway. La logica è la seguente:

trovo il default gateway del server dove viene eseguito LSM e poi se lo stato della connessione – che ho fatto coincidere con un gateway – è down paragono il  ${CHECKIP} con il default gateway e se questi coincidono è il caso che lo cambio con quello che ipotizzo UP.

 

#!/bin/bash -x
#put all output into file
 echo "$@" >/var/log/lsm.log
# what is my default router ?
 DEFAULT_R=$(ip route show to exact 0.0.0.0/0  | awk '{ print $3 }')
#if  the status  is down and that is just my default router  then change it with the new one
 # otherwise if is up just logger :-)
if [ $1  == "down" ] && [ $3 == "${DEFAULT_R}" ]
 then
 logger  "ip route replace default via 10.10.10.1 dev eth0"
 ip route replace default via 10.10.10.1 dev eth0
 elif [ $1 == "up" ]
 then
 logger "$@"
 fi

 

 

La condizione che tutti i gateway siano DOWN porterebbe i nodi ad un ping pong continuo, la condizione la possiamo mitigare inserendo un “sleep 30” al termine del “ip route replace” . Perchè dico mitigare, se tutto è giù allora il problema è  grave e mi devo solo preoccupare di non sovraccaricare il server con un loop infinito di “ip route  replace”

 

 

 

 

 

io tuta blu

N E T T O DEL M E S E

1.588,00€

Io speriamo che me la cavo

Ciao,

questo post è  così !

 

Joyent’s Triton at Barton’s Blog

Intro: Setting up Joyent’s Triton in Dell’s CTO lab; post 1

The platform supporting Joyent’s Triton in Dell’s CTO lab – post 2

Installation details for Joyent’s Triton in Dell’s CTO lab; post3

SmartOS Project-FiFo and metrics

just to enjoy

smartOS_FiFO_metrics

 

who help me 😉

Creating a KVM clone with SmarOS

Tratto da  [smartos-discuss]: Cloning woes

Q:
I would like to create a KVM VM clone,   I rather go the quick and
dirty way and not deal with datasets, I followed the wiki however is
outdated those instructions aren’t working.https://wiki.smartos.org/display/DOC/Managing+Datasets
Has the process of creating a KVM clone changed?
zfs snapshot disk
zfs clone
vmadm createAny clues? Maybe an step by step?Thx.
A:

I have not tried it myself but…

vmadm create (source kvm)
… install OS in KVM …
vmadm stop (source kvm)
vmadm create (new kvm)
zfs destroy zones/{new kvm}-disk0
zfs snapshot zones/{source kvm}-diks0@base
zfs clone zones/{source kvm}-disk0@base zones/{new kvm}-disk0
vmadm start (new kvm)

Is how I would do it.

Jorge Schrauwen
ps.
Ho provato e funziona :)

Zeroshell on SmartOS

hello world  !!

Zeroshell as KVM  guest on SmartOS

 

ZeroshellOnSmartOS

my json file to build the vm

kvm.json
{
 "brand": "kvm",
 "vcpus": 1,
 "autoboot": false,
 "ram": 1024,
 "alias": "zeroshell-3.4.0",
 "resolvers": [
 "8.8.4.4",
 "8.8.8.8"
 ],
 "disks": [
  {
  "boot": true,
  "model": "ide",
  "size": 5120
  }
   ],
  "nics": [
  {
  "nic_tag": "switch1",
  "model": "e1000",
  "ip": "10.0.0.75",
  "netmask": "255.255.255.0",
  "gateway": "10.0.0.1",
  "primary": 1,
  "allow_ip_spoofing": "1"
  },
  {
  "nic_tag": "switch2",
  "model": "e1000",
  "ip": "192.168.20.1",
  "netmask": "255.255.255.0",
  "allow_ip_spoofing": "1"
  }
 ]
}

we test the json file with

$ vmadm validate create -f kvm.json

and then

$ vmadm create -f kvm.json

vmadm boot 9a581ac1-a508-4ad1-b564-49262e15a54e order=d cdrom=/Zeroshell-3.4.0.iso,ide

but before to run that, I have already get the iso image in right place /zones/9a581ac1-a508-4ad1-b564-49262e15a54e/root

$ ls /zones/9a581ac1-a508-4ad1-b564-49262e15a54e/root/
dev                  lib                  smartdc              tmp                  var
etc                  sbin                 startvm              usr                  ZeroShell-3.4.0.iso
$ vmadm list

UUID                                  TYPE  RAM      QUOTA  CPU_SHARE  IO_PRIORITY  NICS.0.IP             NICS.1.IP             ALIAS       STATE
9a581ac1-a508-4ad1-b564-49262e15a54e  KVM   512      10     100        100          10.0.0.75          192.168.20.1                     zeroshell-3.4.0  running
$ dladm show-vnic | grep 9a58 
net0         switch1    0     12:ea:9a:82:ff:db fixed       0    9a581ac1-a508-4ad1-b564-49262e15a54e
net1         switch2    0     b2:3e:bb:1f:42:83 fixed       0    9a581ac1-a508-4ad1-b564-49262e15a54e

so two “etherstub” frontend and backend :-)

Now we try to connect to web gui, at this point there is a little trick … In Zeroshell you have to declare who is enabled to connect, and can be done from “HTTPS Web Interface Settings”. By default just subnet 10.0.0./8, 172.16.0.0./12 and 192.168.0.0./16 are enabled to connect. In my case I’m connecting from internet, this is my topology

INTERNET ——HN—–VM_PROXY—–VM1,VM2,ZS1,ZS2

So connection to ZS are coming from public ip and vm_proxy send request to ours vm, in this case I can’t connect to web gui of Zeroshell; but we have also a vnc console

$ vmadm info 9a581ac1-a508-4ad1-b564-49262e15a54e | json vnc
{
  "host": "IP PUBLIC",
  "port": 57213,
  "display": 51313
}

Note: at moment no vnc password is request, but man of vmadm tell us:

vnc_password:

This property allows you to set a password which will be required when
connecting to the VNC port. IMPORTANT: this password will be visible
from the GZ of the CN and anyone with access to the serial port in the
guest. Set to an empty string (default) to not require a password at
this level.

type: string (8 chars max)
vmtype: KVM
listable: no
create: yes
update: yes
default:

Now we have access to zeroshell console user=admin password=zeroshell (just with default profile), and the trick is:

  #iptables -F

:-) and then you can open the web gui and complete the configuration: create profile, activate profile – but again you have to flush iptables; last time – and add ETH00 or your static public ip from you connect in “HTTPS Web Interface Settings”

HTTPSWEBINTEFACESETTINGS

 

https://zeroshell.renatomorano.net

 

logadm (parte I)

Ciao.

ho tradotto per me il fantastico Less-known-Solaris-features-logadm di  Joerg Moellenkamp
per poter routare i logfiles  presenti in una fantastica SmartOS che tra le altre cose è in produzione :)

p.s.
Gli eventuali errori sono i miei :-)  l’idea di questo post è nel logadm (parte 0).
p.p.s.
Ora finalmente vado a mangiare la pasta al forno di Maria con i fagliolini paesani.

 

Less known Solaris features – logadm

TUESDAY, MARCH 2. 2010

Ordine nella tua directory dei log

Uno dei compiti regolari di un qualunque amministratore “decente” dovrebbe
essere ordinare la directory dei log. I logfiles sono veramente utili,
quando qualcosa va storto, ma spesso questi riempiono le direcories con i
dati. Sebbene a volte sia utile avere logfiles molto vecchi
la maggior parte delle volte tu desideri solo accedere direttamente quelli recenti

logadm

Uno dei maggiori enigmi con solaris è che poca gente conosce lo strumento “logadm”. Questo è diponibile con Solaris dalla versione Solaris 9.
Comunque è ancora uno dei segreti ben mantenuti di Solaris nonostatnte il fatto che lo strumento sia ben documentato e già utilizzato in Solaris.
Io spesso mi meraviglio cosa gli utenti Solaris pensano, dove questo .0-file é stato creati.

Capacità

Per tutti i compiti usuali che circondano la manipolazione dei log file tu puoi usare il comando logadm. Questo è uno strumento capace di:

* ruotare i log (mediante copia/troncamento o spostamento)
* configurare delle regole, quando una rotazione di un log deve aver luogo. Queste regole possono esser basate su …
* la dimensione del file di log
* il timpo dell’ultima rotazione del log
* eseguire comandi prima e dopo una rotazione del logfile
* comprimere i files di log ruotati basandosi su regole
* specificare i tuoi comandi per copiare/muovere i files
* specificare i comandi che devono esser usati al posto di una semplice
* cancallazione per la scadenza dei files.

Come funziona

logadm è lo strumento per configurare così come per eseguire la rotazione dei
log, Per ruoatte automaticamente ruotare i log, logadm
è eseguito mediante il cron una volta al giorno. Osserviamo il crontab dell'utente root
 
jmoekamp@hivemind:/var/squid/logs# crontab -l
[... CDDL Header omitted ...]
#
10 3 * * * /usr/sbin/logadm
15 3 * * 0 [ -x /usr/lib/fs/nfs/nfsfind ] && /usr/lib/fs/nfs/nfsfind
30 3 * * * [ -x /usr/lib/gss/gsscred_clean ] && /usr/lib/gss/gsscred_clean
30 0,9,12,18,21 * * * /usr/lib/update-manager/update-refresh.sh

Così come puoi aver già riconosciuto, lo script logadm è eseguito giornalmente alle 3:10 am nella configurazione standard di Solaris.

MA come la rotazione stessa è fatta? Bene, esattamente come tu dovresti fare digitando il comandi nella shell. logadm fà lo
stesso lavoro – ma automaticamente. Genera una sequenza di comandi per ruotare i log e li invia ad una C shell per l’esecuzione.

Il lato pratico di logadm

Configuriamolo

Sebbene sia possibile invocare la rotazione completamente dalla linea di comando ogni volta, questo non è un metodo agevole per
ruotare i log. In quasi tutti i casi tu dovrari configurare il servizio logadm al fine di ottenere la rotazione automaticamente.
Ma come questo è fatto ?

logadm.conf

L’esecuzione giornaliera di logadm dipende da un file di configurazione. Quando tu non specifichi un file di configurazione, questo
è il predefinito /etc/logadm.conf. La configurazione è abbastanza corta e normalmente ruota i soliti sospetti. Il seguente file è
leggermente più esteso, come la configurazione preconfigurata non usa tulle le azioni importanti

jmoekamp@hivemind:~$ cat /etc/logadm.conf
 [... CDDL Header omitted ...]
 /var/log/syslog -C 8 -P 'Sat Feb 20 02:10:00 2010' -a 'kill -HUP `cat /var/run/syslog.pid`'
 /var/adm/messages -C 4 -P 'Sat Feb 20 02:10:00 2010' -a 'kill -HUP `cat /var/run/syslog.pid`'
 /var/cron/log -P 'Thu Dec 17 02:10:00 2009' -c -s 512k -t /var/cron/olog
 /var/lp/logs/lpsched -C 2 -N -t '$file.$N'
 /var/fm/fmd/errlog -M '/usr/sbin/fmadm -q rotate errlog && mv /var/fm/fmd/errlog.0- $nfile' -N -s 2m
 /var/fm/fmd/fltlog -A 6m -M '/usr/sbin/fmadm -q rotate fltlog && mv /var/fm/fmd/fltlog.0- $nfile' -N -s 10m
 smf_logs -C 8 -s 1m /var/svc/log/*.log
 /var/adm/pacct -C 0 -N -a '/usr/lib/acct/accton pacct' -g adm -m 664 -o adm -p never
 /var/log/pool/poold -N -a 'pkill -HUP poold; true' -s 512k
 /var/squid/logs/access.log -P 'Tue Feb 23 06:26:23 2010' -C 8 -c -p 1d -t '/var/squid/logs/access.log.$n' -z 1

Puoi editare questo file direttamente, ma è preferibile cambiarlo con il comdado logadm stesso. Commetiamo alcume linee di
questa configurazione

Rotazione standard del log – introduzione di -C, -P e -a

[...]
 /var/log/syslog -C 8 -P 'Sat Feb 20 02:10:00 2010' -a 'kill -HUP `cat /var/run/syslog.pid`'
 [...]

Questa riga è responsabile della rotazione di /var/log/syslog. L’opzione -C 8 specifica che logadm deve mantenre 8 vecchie
versioni prima che spirino ( leggi: cancelli) i vecchi logfiles. Con l’opzione -a ‘kill -HUP `cat /var/run/syslog.pid`’
il syslog riceve il segnale di HUP dopo la rotazione. Il syslogd necessuta di ricreare il file e il riavvio del logging.

L’opzione -P non è nella versione originale (pristine) del file. Quelle opzioni verranno inserite quando esegui il comando logadm. Con
questa opzione, indica a logadm quando è stata l’ultima rotazione. logadm la inserisce ogni qualvota ruota il logfile. Questo è
importante da sapere, che questo tempo è GMT, così non meravigliarti dello scarto con il tempo locale mostrato dai logfiles.

In questo istruzione non trovi una configurazione del tempo o della dimensione che porta alla rotazione dei log. In questo caso i
valori predefiniti “1 byte e una settimana” sono per cominciare. Così /var/log/syslog è ruotato quando l’utima rotazione è stata una
settimana nel passato e il file è almeno un Byte di dimensione.

Esplicita definizione di un intervallo di tempo di rotazione – introduzione di -p

Con -p tu puoi controllare il periodo tra le rotazioni dei log. Per esempio 1d specifica che tu ruoti i file di log con una schedulazione
giornaliera

[...]
 /var/squid/logs/access.log -C 8 -c -p 1d -t '/var/squid/logs/access.log.$n' 
 [...]

Così questo logfile è ruotato ogni giorno da logadm inizializzato mediante una riga nel crontab

Un template per i nomi dei log ruotati – introduzione di -t

-t specifica il modo, come i nomi per i logfiles sono creati da logadm. Il template per
il nuovo nome non è solo una stringa fissa, tu puoi usare diverse variabili per controllare il nome del file

[...]
 /var/squid/logs/access.log -C 8 -c -p 1d -t '/var/squid/logs/access.log.$n'
 [...]

Questo è un esempio relativamnete semplice .$n è la versione numerica del file, partendo da 0.
Così la configurazione porterà ad un nome file come questo:

-rw-r----- 1 webservd webservd 652486 2010-02-22 16:36 /var/squid/logs/access.log.0

$n è solo uno delle possibile variabili da usare nel template. La pagina di man logadm specifica ulteriori variabili.

Esplicita definizione della massima dimensione del logfile – introduzione di -s
A volte tu vuoi impostare al tuo logfile un limite basato sulla dimensione del del file e non basato sull’inter
vallo temporale. L’opzione -s permette di farlo:

[...]
 /var/cron/log -P 'Thu Dec 17 02:10:00 2009' -c -s 512k -t /var/cron/olog
[...]

Con questa opzione logadm ruoterà il logfile appena è 512k o più grande nell’istante dell’esecuzione
di logadm.

Specificare entrambi: Spazio e tempo

Quando tu specifichi una dimensione massima per il logfile (-s) così come il massimo periodo per il logfile (-p),
entrambe le condizioni sono connesse con un AND. Così la condizione predefinita ‘1 byte e 1 settimana’ posso essere così
tradotte: Ruota quando il logfile ha una dimensione di almeno 1 byte AND vecchio di una settimana, così un logfile vecchio di una settimana
ma di dimensione zero non è ruotato dalla configurazione predefinita.

Copia e troncamneto al posto di muovere – introduzione di -c

Ruotare logfiles non è semza problemi. Alcune applicazioni non gradiscono se tu semplicemente muovi il file lontano. Loro possono
usare il file ruotato invece di uno nuovo, o semplicemnete semplicemente non creano un nuovo logfile. Così tu devi riavviare il servizio
o inviare un segnale. C’è una alternativa. E’ chiamato troncare/troncaggio

[…]
/var/cron/log -P ‘Thu Dec 17 02:10:00 2009’ -c -s 512k -t /var/cron/olog
[…]

L’opzione -c forza logadm ad usare cp al posto di mv per ruotare il log. Per ottenere un nuovo inizio
nel nuovo log /dev/null e copiato nel logfile corrente per rendere il file di 0 byte. Questo aggira la necessità
del riavvio dell’applicazione per riavviare il logging.

Compressione dopo la rotazione – intriduzione di -z

A causa della loro struttura, i file di log possono ottenere un eccellente rapporto di compressione. Così è ragionevole
comprimerli dopo la rotazone. Tu lo puoi configurare con la sessione -z. Comunque spesso è in qualche misura impraticable lavorare
con i file compressi, il parametro dopo -z forza logadm a non comprimere un dato numero dei più recenti file di log. Facendo questo
tu hai i logfiles recenti disponibili senza decomprimerli, senza sacrificare spazio lasciando tutti i file non compressi.

[...]
 /var/squid/logs/cache.log -C 8 -c -p 1d -t '/var/squid/logs/access.log.$n' -z 1
 [...]

-z 1 configura logadm a lasciare il più recente logfile invariato e comprimere
il successiovo.. Questo risulta dai seguenti file:

jmoekamp@hivemind:/var/squid/logs$ ls -l /var/squid/logs/access*
 -rw-r----- 1 webservd webservd 0 2010-02-23 07:26 /var/squid/logs/access.log
 -rw-r----- 1 webservd webservd 652486 2010-02-22 16:36 /var/squid/logs/access.log.0
 -rw-r----- 1 webservd webservd 39411 2010-02-22 09:22 /var/squid/logs/access.log.1.gz

Una rotazione dei log che non deve essere mai eseguita automaticamente – introduzione di -p never

In un primo momento, questa riga sembra veramente strana:

[...] 
 /var/adm/pacct -C 0 -N -a '/usr/lib/acct/accton pacct' -g adm -m 664 -o adm -p never
 [...]

Qual’è il senso di una riga di configurazione che mai verrà usata
automaticamente in uno script di rotazione dei log . Bene, il fatto che tu non la userai autoaticamente,
non significa che che non puoi usarla manualmente dalla linea di comando o che altri scripts non possano
eseguire le funzionalità di logadm per la rotazione dei log al posto di implementarli per loro conto. La configurazione mostrata in
precedenza è tale da abilitarne l’uso di logadm per la rotazione dei log in
altri scripts. Quando tu osservi nello script /usr/lib/acct/turnacct,
tu vedrai una linea che esegue logadm con -p now:

[...]
switch)
 pfexec /usr/sbin/logadm -p now /var/adm/pacct
 if test ! -r pacct
 [...]

Lo script turnacct esegue la rotazione dei log. A seguito del -p never nel logadm è il solo modo per eseguire la rotazione.
Io spiegherò succesivamente cosa accade a seguito di questo comando.

Wildcards

Le pagina di man di logadm danno un ottimo esempio dell'uso di wildcard e delle "espressioni regolari":
 logadm -w apache -p 1m -C 24\
 -t '/var/apache/old-logs/$basename.%Y-%m'\
 -a '/usr/apache/bin/apachectl graceful'\
 '/var/apache/logs/*{access,error}_log'

Con queste impostazioni tu ruoterai tutti i file di log che terminano con access_log o error_log nella tua directory di log di apache.
All’inizio delle linea tu puoi aver riconosciuto il nome apache. Questo è una
abbreviazione per questa configuarzione. Così tu puoi sempiceente ruotare tutti i logfiles con logadm -p now apache al posto del lungo nome della directory.
In aggiunta è importante che il comando specificato mediante -a è eseguito una volta dopo tutte le occorrenze del loglifes e non per ciascuna
di queste.

Più opzioni

Ci sono molte altre opzioni per controllare il comportamento di una rotazione. I descriverò queste opzioni con con dei brevi esempi:

* -A 1y:
Con -A è un un modo aggiuntivo per controllare la scadenza dei file ruotati. Per esempio, questo esempio forza logadm
a far scadere i file di log ruotati quando questi sono più vecchi di un anno.
* -S 100m :
Forse non vorrai specificare un limite di scadenza per età, ma mediante la dimensione presa da tutti i file ruotati. Tu lo puoi fare usando
l’ozione -S. In questo esmpio i logfiles ruotati scadranno quando occuperanno più che 100 Megabyte.
* -E ‘mv $nfile /longtermstorage’:
Questa opzione controlla cosa accade quando un logfiles scade. Il comportamento standard è la semplice cancellazione.
In questo esempio si muove il file scaduto in uno storage a lunga scadenza, per esempio un filesystem SamFS montato via NFS su un diverso server
* -b ‘svcadm disable nonbehavingapp’ -a ‘svcadm enable nonbehavingapp’:
Non c’è non solo una opzione per eseguire un comando dopo la rotazione dei file con -a, c’è ne una per l’esecuzione di comandi prima della
rotazione. Tu puoi usare -b per specificare questo compito. Questo è molto
utile per fermare e avviare una applicazione che si comporta male nella rotazione dei file
* -R ‘loganalyser.pl $file’:
il comando specificato con questa opzione (-R) è eseguito dopo ciascuna
rotazione. A prima vista questo sembra ridondante ad -a ma c’è una importante
differenza. -a è eseguita una volta, perfino quando nella riga di logadm.conf coincide con più logfiles. Il comando -R è eseguito per ogni
logfiles. Cosi -a è più per l’invio di un segnale al processo, che deve far partire un nuovo log, -R è più utile per l’elaboazione dei log.
Quando usi -R per la segnalazione, il processo otterrà un segnale per ciascun logfile ruotato.
-M ‘mv $file $nfile:
Con -M tu puoi specificare il tuo personale comando per la rotazione. In questo esempio è la condizione normale per una esecuzione di logadm.

Opzioni di controllo

Sino ad ora abbiamo citato le opzioni necessarie per la configurazione. Ma ci sono più opzioni aggiuntive per cosa comtrollare

Cambiare logadm.conf con logadm

Okay, come mettere i comandi nel file logadm.conf. Tu puoi editare direttamnete il file, questo funziona. Ma logadm può essere usato per aggiungere
o cancellare istruzioni al file di configurazione. Quando tu aggiungi una linea al file logadm.conf esegui logadm seguito da -w

jmoekamp@hivemind:/var/squid/logs# logadm -w /var/squid/logs/cache.log -C 8 -c -p 1d -t '/var/squid/logs/cache.log.$n' -z 1

Tu puoi controllare l’aggiunta con il comando logadm -V. -V esegue la validazione del file. Così è opportuno(sensible) eseguire
questo comando dopo una aggiunta diretta al file.

jmoekamp@hivemind:/var/squid/logs# logadm -V
 [...]
 /var/squid/logs/cache.log -C 8 -c -p 1d -t '/var/squid/logs/cache.log.$n' -z 1
 [...]

Okay, noi abbiamo lavorato per un po con questo file di configurazioe della
rotazione. Avrai notato che le linee di configurazione sono cambiate

jmoekamp@hivemind:/var/squid/logs# logadm -V
 /var/log/syslog -C 8 -P 'Sat Feb 20 02:10:00 2010' -a 'kill -HUP `cat /var/run/syslog.pid`'
 [...]
 /var/squid/logs/access.log -P 'Tue Feb 23 19:19:27 2010' -C 8 -c -p 1d -t '/var/squid/logs/access.log.$n' -z 1
 /var/squid/logs/cache.log -C 8 -P 'Tue Feb 23 19:59:20 2010' -c -p 1d -t '/var/squid/logs/cache.log.$n' -z 1

Ora tu vui eliminare questa configurazione. Queta è fatto con -r in congiunzione con il nome del logfile.

 jmoekamp@hivemind:/var/squid/logs# logadm -r /var/squid/logs/cache.log
 jmoekamp@hivemind:/var/squid/logs# logadm -V
 /var/log/syslog -C 8 -P 'Sat Feb 20 02:10:00 2010' -a 'kill -HUP `cat /var/run/syslog.pid`'
 [...]
 /var/squid/logs/access.log -P 'Tue Feb 23 19:19:27 2010' -C 8 -c -p 1d -t '/var/squid/logs/access.log.$n' -z 1
 jmoekamp@hivemind:/var/squid/logs#

é andato…. il /var/squid/logs/cache.log non verrà ruotato nel prossimo logadm eseguito mediante crontab o at a riga
di comando.

Forzare una rotazione immediata.

Qualche volta vuoi eseguire una rotazione immediata. Per esempio perchè vuoi riavviare un servizio con un nuovo log
da esaminare facilmente. -p now esegue la rotazione proprio nel momento in cui esegui logadm

jmoekamp@hivemind:/var/squid/logs# date
 Dienstag, 23. Februar 2010, 20:48:25 Uhr CET
 jmoekamp@hivemind:/var/squid/logs# logadm -p now squid_cachelog
 jmoekamp@hivemind:/var/squid/logs# ls -l cache.log*
 -rw-r----- 1 webservd webservd 0 2010-02-23 20:48 cache.log
 -rw-r----- 1 webservd webservd 636799 2010-02-23 20:41 cache.log.0
 jmoekamp@hivemind:/var/squid/logs#
 
Con -p now puoi perfino eseguire una rotazione dei log che mai sarà eseguita automaticamente.

Cosa accade sotto il tappeto?

Come scritto all’inizio, logadm lavora inviando una serie di comandi ad una c-shell. Il logadm ha un modo
interessante di operare. Quando tu usi l’opzione -v lo strumento mostra i comandi che logadm usa per ruotare i logfiles.

 

jmoekamp@hivemind:/var/squid/logs# logadm -p now -v squid_access
 # loading /etc/logadm.conf
 # processing logname: squid_access
 mkdir -p /var/squid/logs # verify directory exists
 cp -fp /var/squid/logs/access.log.2.gz /var/squid/logs/access.log.3.gz # rotate log file via copy (-c flag)
 cp -f /dev/null /var/squid/logs/access.log.2.gz # truncate log file (-c flag)
 mkdir -p /var/squid/logs # verify directory exists
 cp -fp /var/squid/logs/access.log.1.gz /var/squid/logs/access.log.2.gz # rotate log file via copy (-c flag)
 cp -f /dev/null /var/squid/logs/access.log.1.gz # truncate log file (-c flag)
 mkdir -p /var/squid/logs # verify directory exists
 cp -fp /var/squid/logs/access.log.0 /var/squid/logs/access.log.1 # rotate log file via copy (-c flag)
 cp -f /dev/null /var/squid/logs/access.log.0 # truncate log file (-c flag)
 mkdir -p /var/squid/logs # verify directory exists
 cp -fp /var/squid/logs/access.log /var/squid/logs/access.log.0 # rotate log file via copy (-c flag)
 cp -f /dev/null /var/squid/logs/access.log # truncate log file (-c flag)
 touch /var/squid/logs/access.log
 chown 80:80 /var/squid/logs/access.log
 chmod 640 /var/squid/logs/access.log
 # recording rotation date Tue Feb 23 18:15:44 2010 for /var/squid/logs/access.log
 gzip -f /var/squid/logs/access.log.1 # compress old log (-z flag)
 # writing changes to /etc/logadm.conf
  

Come puoi aver riconosciuto molto simile a come tu faresti manualmente.

Suggerimenti e Trucchi

Istanze multiple di logadm

E’ perfettamente possibile avere più che un file di configurazione. Tu puoi scegliere il file di configurazione con -f.
Aggiungendo una riga nel tabella del cron che specifica una differente logadm.conf. Un mio collega usa questa “possibilità”
per avere un file di configurazione indipendente per la rotazione di SamFS, così non deve editare un file differente fornita dalla distribuzione.

Conclusioni.

Sebbene è solamente un piccolo strumento, le possiblità di logadm di aiutarti con i tuoi logfile sono vasti ed infiniti.
Io sono veramente meravigliato del perchè molti non lo conoscono. Io spero di aver cambiato almeno un po’ mediante la scrittura di questo post

Dome imparare di più?
la pagine del man
illumos.org: logadm(1M)
illumos.org: logadm.conf(4)