(nota: post per addetti ai lavori e geek)
(nota2: noi non lavoriamo in C++ - ma l'assonanza era perfetta per il titolo)
Esistono delle regole universali, nel mondo dell'informatica, tramandate di padre in figlio e di sysadmin in sysadmin, che risalgono, si mormora, a quando i Druidi hanno costruito il loro primo NTP server a Stonehenge. Le regole sono semplici e lineari
1) Tu non manderai in produzione un daemon che genera log in debug mode
2) Tu non manderai in produzione un daemon che genera log in debug mode in ragione di 20-30 righe per evento, e processa 20-30 eventi per secondo
3) Tu non manderai in produzione un daemon che genera log in debug mode in ragione di 20-30 righe per evento, e processa 20-30 eventi per secondo, con un framework obsoleto che non riesce a gestire file più grandi di 2 GB e non ha meccanismi di gestione delle eccezioni
4) Se proprio non riesci a obbedire ai primi 3 comandamenti, tu non irriterai il sysadmin.
Un breve antefatto:
Quando ho letto il bellissimo post di EdipeoEnciclopedico sulle 10 buone ragioni per andarsene dalla Francia ho riso moltissimo, ma c'era qualcosa di più che non riuscivo a mettere a fuoco - fino a quando non mi sono reso conto che molte delle ragioni di scontento di EE (3,4,5 e 8, in particolare) si riflettevano perfettamente nella cultura del lavoro comune a tanti latini - italiani, francesi, greci. Ora, attenzione, non voglio dire che i latini siano "peggio" e i tedeschi o gli inglesi "meglio": ognuno ha il proprio set di pregi e difetti, la tipica, estrema familiarità inglese sul posto di lavoro indispone molti continentali (anche con ragione, qualche volta), la prevenzione della maggioranza dei tedeschi nei confronti delle capacità professionali di qualunque straniero è a dir poco irritante, e così via; mi limito a dire che quella di EE è una divertente descrizione di problemi che ho incontrato sul lavoro anche in Italia, problemi che per quella che è la mia personalissima forma mentis trovo difficili da superare.
Purtroppo, la compagnia per cui lavoro al momento è anglo-francese. La compagnia inglese qualche anno fa ha comprato una piccola compagnia francese, e nel corso della fusione il CTO della compagnia francese è diventato Head of IT della risultate idra a due teste. La medaglia è che passa la maggior parte del tempo in Francia a lavorare con gli sviluppatori, che sono in maggioranza lì. Il rovescio della medaglia è che la Francia non è abbastanza lontana.
Questo signore di suo non è cattivo - almeno non più della media; ma riconosco in lui una serie di difetti che affliggevano la maggior parte dei manager pubblici o privati con cui ho avuto a che fare in Italia, e relativamente pochi dei manager che ho incontrato qui. Ad esempio la necessità di stabilire una gerarchia e di rinforzare il concetto ad ogni piè sospinto, o quella di far passare cose perfettamente normali per privilegi: non credo, per dire, che i membri del mio team di supporto della piattaforma si debbano profondere in ringraziamenti per aver magnanimamente ricevuto il blackberry con cui vengono allertati di problemi nel weekend, e non credo neanche che la richiesta di un portatile condiviso da portare in giro negli hosting centre, per usarlo come macchina diagnostica, terminale seriale e tutte quelle cose pazzerelle e divertenti che i sysadmin fanno nel corso della loro vida loca vada evasa con una smorfia sprezzante e un lungo discorso che si può riassumere in "E tu quante ore hai dedicato a leccare il mio prezioso culo per pensare di poterti meritare un sì mirabile privilegio? Vuoi anche uno yacht personale? Una cameriera che ti serva i drink?".
Sono certo che in ogni posto gli indigeni hanno caratteristiche che qualcuno trova supremamente irritanti; per me, l'abitudine latina di far pesare costantemente che qualunque cosa accada accade per la magnanimità di un Gentile Concessore che detiene qualche miserevole autorità è difficile da sopportare. È anche una abitudine generalmente estranea, per quel che ho visto, alla cultura del lavoro di anglosassoni, teutonici e scandinavi - che poi è il motivo per cui nonostante tutto mi trovo decisamente bene a lavorare qui: non è che i locali non abbiano difetti, è che ho girato finchè ho trovato una nazione in cui i difetti degli indigeni mi davano meno fastidio.
(fine dell'antefatto)
Come diceva Tolkien, "Do not meddle in the affairs of sysadmins, for they are subtle and quick to anger"; lavoro in questa compagnia da un anno e mezzo, e un po' perchè sul lavoro cerco di essere pacioso, un po' perchè ho delle mansioni un po' particolari che mi fanno sysadministrare al massimo per metà del tempo, non m'era mai capitato di dover rafforzare il concetto. Però a tutto c'è un limite.
(due settimane fa)
Telefono: "ring ring ring"
Io: "Hello?"
L: "Ciao sono L, scusami, lo so che tu non sei a disposizione nel weekend, ma ho un problema e non sapevo a chi chiedere"
Io: "Tranquilla, stavo giocando col server di casa, non hai interrotto niente di particolare"
(intermezzo: siccome se sei a disposizione nel weekend e risolvi i problemi da casa vieni pagato, anche essere a disposizione nel weekend è un privilegio che bisogna meritarsi. E io non sono particolarmente interessato a meritarmelo)
L: "È saltato il daemon di XXX, Nagios continua a mandarmi allarmi e io non so che fare, ho provato a riavviarlo ma mi dà un errore"
(altro intermezzo: quelli che lavorano al supporto piattaforma sono praticamente sistemisti Windows piuttosto junior; devono da qualche tempo supportare anche piattaforme Linux ma, avete indovinato, il training è un privilegio che bisogna meritarsi e loro non se lo sono ancora meritato abbastanza)
Io: "Vabbe', fammi dare un'occhiata, se ci son problemi ti richiamo io fra 10 minuti"
Controllo e scopro che il daemon muore perchè il log, un file su cui scrive un diario della propria attività, ha raggiunto la dimensione magica di 2 gigabyte. Uccido pezzetti del daemon (è un processo che chiama altri daemon ma non li uccide correttamente, per cui ogni volta che lo fermi poi devi uccidere a mano i processi-figli), rinomino il file, lo faccio ripartire, tutto a posto. Do un'occhiata al log che il daemon ha ri-creato: 3 megabyte. 4. 5. Guardo che c'è dentro, e scopro che sta scrivendo un centinaio di righe al secondo, tutte uguali:
[DEBUG]: XXX daemon doing some work
Dissolvenza. Lunedì, interno giorno, non troppo lontano dal luogo in cui si svolgono i fatti di Orgoglio e Pregiudizio:
Io: "...e il problema si risolve facilmente disabilitando la funzione di debug del daemon"
Gentile Concessore Francese: "Impossibile"
Io: "Pardon?"
(intermezzo: la colpa è mia. Il GCF è costantemente in guerra per il territorio, non si sa bene con chi, e il suo territorio sono, principalmente, gli sviluppatori; dire che il problema si risolve così e cosà lascia intendere che esista un problema col codice, cosa che lui vede come un attacco personale; da quel momento quel pezzo di codice diventerà immutabile nei secoli dei secoli)
GCF: "Smettiamola di cercare di dare la colpa del disastro di ieri ad H. e al suo daemon. Se il servizio di rotazione dei log avesse funzionato come tu mi avevi assicurato che funzionava il problema non si sarebbe verificato affatto"
Io: "Il servizio di rotazione dei log funziona esattamente come tu hai richiesto che funzionasse - ossia solo durante i giorni lavorativi, perchè il riavvio dei daemon durante il weekend era troppo rischioso"
GCF: "E perchè Nagios non controlla la dimensione dei log? Eh? Eh?"
Io: "Nagios non controlla un sacco di cose che non abbiamo mai avuto ragione di controllare"
GCF: "Io ho promesso a T. una soluzione entro oggi, quindi sarà meglio..."
Io: "...disattivare il debug"
GCF: "Il modo in cui il log viene scritto è assolutamente ininfluente e per l'ultima volta non ne voglio più sentir parlare. Entro questa sera dobbiamo monitorare tutti i log su tutti i server della compagnia. Vai in teleconferenza con ognuno degli sviluppatori in Francia e chiedigli il valore per cui ciascuno dei log deve essere considerato critico"
(intermezzo: stiamo parlando dei log di un paio di centinaia di virtual host Apache, di una cinquantina di daemon assortiti e di una dozzina di applicazioni VoiceXML, il tutto distribuito su una cinquantina di server)
Io (cinque minuti dopo): "Non ne hanno idea"
GCF: "Allora usa una stima prudenziale"
E così passo una giornata inutile a scrivere gli script di monitoraggio (ognuno dei quali, fra l'altro, deve essere visionato e approvato da uno sviluppatore: motivazione ufficiale, io non sono un programmatore, loro sì, e gli script sono dopotutto dei programmi), li installo, li testo, funzionano tutti e non manderanno mai un allarme, ovviamente, tranne quello per XXX, ma almeno il management è contento di questo nuovo e scintillante sistema configurabile su ognuno dei server per controllare la dimensione di un numero a piacere di file. Che bello.
Dissolvenza. Domenica scorsa:
Telefono: "ring ring ring"
Io: "Hello?"
A: "Ciao, sono A., scusami, non volevo disturbarti ma sto ricevendo un allarme ogni cinque minuti relativo a..."
Io: "...al log di XXX"
A: "Come lo sai?"
Io: "È una storia lunga. H. dovrebbe avervi lasciato delle istruzioni su cosa fare"
A: "Le ho seguite, ma continuo a ricevere questi allarmi"
Io: "Mi leggi le istruzioni di H?"
A. esegue, e per non scendere troppo nei dettagli H si è dimenticato che la rotazione dei log richiede un riavvio del daemon per funzionare
Io: "Vabbe', non è un problema, riavvia il daemon e dovrebbe andare tutto a posto"
Non va tutto a posto. Il daemon viene riavviato, e quando riparte comincia a inviare 30-40 email al secondo ad H. A quanto pare H ha introdotto una funzione per cui il daemon, quando non riesce a scrivere nel proprio log, comincia a inviare direttamente a lui, per email, le informazioni che non riesce a scrivere. Purtroppo ha trascurato a) di considerare che per ogni email che manda, il daemon cerca di scrivere una riga nel log e non ci riesce, e b) di introdurre una regoletta per smettere di mandare email quando il log ricomincia a funzionare. Per le successive 24 ore, fino al momento in cui H torna alla sua scrivania per fermare il daemon impazzito, il processo continua a inviare fra le 20 e le 30 email al secondo. Uccidere sendmail causa problemi con una serie di altri servizi che girano sullo stesso server, uccidere il daemon responsabile è inaccettabile perchè interromperebbe un servizio per cui il GCF ha firmato allegramente un SLA capestro.
Dissolvenza. Lunedì scorso
Io: "Sospetto che dover aspettare che H torni al lavoro per interrompere il flusso di email sia poco pratico"
GCF (al telefono): "Questo è un problema che non ti riguarda, non credo che qualcuno ti abbia nominato Head of Development a mia insaputa. Piuttosto, perchè sei intervenuto tu ieri? A non riusciva proprio a combinare niente?"
Io: "Ricordi quando hai licenziato il mio junior sysadmin e l'unico del supporto che sapeva qualcosa di Linux lasciandomi con tre specialisti Windows, perchè tanto Linux non ha bisogno di supporto continuo?"
GCF: "Allora mi spiace ma da domani quei tre non devono più metter mani su sistemi Linux, fanno solo danni"
Io: "Mi spiace che la pensi così, e guarda che in questo momento io non credo di potermi mettere in reperibilità per il weekend"
GCF (con risatina sprezzante): "Certo, ti pare che stiamo tutti qui pronti a pagarti uno stipendio extra per lavorare la notte e il weekend? Magari vuoi anche un'auto della ditta? Una segretaria personale?"
Io: "Ma se i log file crescono oltre i 2 GB..."
GCF: "Finiscila con questa storia dei logfile, non tollero che cerchi di dare la colpa ad altri per coprire l'incompetenza tua e del tuo team. I log sono sotto controllo, l'hai detto tu stesso"
Io: "Sì, i log vengono controllati dal sistema di allerta. Controllati."
GCF: "Appunto, quindi problema risolto. Se qualcosa va storto riceveremo immediatamente un allarme"
Io: "Però se non ti spiace voglio che tu mi metta per iscritto che non vuoi che il mio team tocchi le macchine Linux e che non hai bisogno che io sia disponibile durante il weekend"
Il messaggio arriva subito, in tono anche più sprezzante del solito.
Dissolvenza. Stamattina.
Telefono: "ring ring ring"
Io: "Hello?"
L: "Scusa Eugenio, sto avendo un allarme ogni cinque minuti dal daemon XXX, ma ho una tua email che mi dice di non preoccuparmene, confermata da un'altra email del GCF in cui dice che sono troppo cretina per risolvere questi problemi"
Io: "Lo so, scusa, mi spiace per il tono di quell'email..."
L: "Mica è colpa tua se è uno stronzo"
Io: "Comunque non preoccuparti degli allarmi. Il GCF vuole che li ignoriamo e noi li ignoriamo"
Circa un'ora dopo.
Telefono: "Ring ring ring"
Io: "Hello?"
GCF (con voce più stridula del solito): "Eugenio! È successo un disastro! Il servizio per XXX è crollato!"
Io: "Lo so"
GCF: "Lo sai?"
Io: "Certo. Non poteva non crollare, se il log continua a crescere e anche dopo gli allarmi nessuno va a rimuovere manualmente il file"
GCF: "Lo sapevi?"
Io: "E ti ho anche mandato un'email in cui ti dicevo che senza una rotazione manuale dei log gli allarmi erano inutili"
GCF: "Inutili?"
Io: "Ma non preoccuparti, fra un po' gli allarmi smetteranno di arrivare"
GCF: "Arrivare?"
Io: "Sì, a quest'ora il server Exchange dovrebbe star già ricevendo i suoi bravi 30-40 messaggi al secondo e non ci metterà molto a crollare, e usiamo quello anche per trasmettere gli allarmi di Nagios sia per email che al gateway SMS"
GCF: "Crollare?"
Io: "Ma c'è l'eco sulla linea?"
GCF: "Devi fare qualcosa! T. mi ha telefonato due volte, rischiamo di perdere il contratto!"
Io: "Mi spiace, ma temo di non potere. Hai insistito tanto sul fatto che non avevi bisogno di me, così ho preso la mountain bike e me ne sono andato alla foresta di Epping. Sono in bosco in questo momento, non so neanche dove potrei trovare un internet cafè, e comunque non ho con me le mie chiavi per la VPN"
(due volte falso: ero a casa a giocare con la gattina e a mettere insieme un cluster Rocks con dei vecchi server, e comunque chi mi conosce sa che non andrei neanche in mezzo alla giungla senza le mie chiavi ssh)
GCF: "Chiama L! Dille di far ripartire il servizio! Subito!"
Io: "Con piacere, ma non servirà a nulla. Come da tue istruzioni, ho rimosso le sue chiavi di accesso dal sistema di autenticazione per le macchine Linux, quindi non potrà accedere ai server almeno fino a quando io non le riattivo"
GCF: (starnazzamenti in francese)
Io (tranquillo): "Allora ci sentiamo domani, sì?"
GCF: (starnazzamenti in francese)
Due minuti dopo, telefonata a L.:
L: "Hello?"
Io: "Ciao, sono io. Fra cinque-dieci minuti ti telefonerà il GCF chiedendoti di metterti in macchina e andare in ufficio per risolvere in loco il problema di XXX dal mio computer [le cui chiavi sono ancora attive, NdE]. Mi aspetto che tu gli risponda che hai l'auto dal meccanico"
Viste le condizioni dell'SLA, sospetto che qualcuno vedrà il proprio bonus sensibilmente decurtato quando ad Aprile si chiude il bilancio, soprattutto quando le istruzioni che quel qualcuno ha messo per iscritto verranno accluse come da policy, domani mattina, all'incident report che va al senior management e al cliente.