Da Zabbix 3.2 a 5.0, prima e dopo PostgreSQL/TimescaleDB passando per MySQL

In questo post voglio raccontarvi la mia personale esperienza con Zabbix negli ultimi 5 anni circa, ovvero da quando lavoro al NOC di un provider locale in costante crescita. Conoscevo Zabbix da tempo ma lo avevo usato in ambiti dove non c’erano da monitorare più di 30 dispositivi e quindi le risorse hardware necessarie non erano particolareggiate, una VM Debian con MySQL su 4GB di RAM, 64GB di disco ed un paio di vCPU mi era sempre bastata, ed infatti per i primi due anni queste stesse risorse sono bastate tranquillamente a far girare Zabbix 3.2 dentro una VM e monitorarci i primi pezzi di infrastruttura ed i primi clienti.

Poi MySQL ha iniziato ad ingolfarsi ed ho deciso di lasciare zabbix-server sulla vm e spostare MySQL bare metal su un HP Microserver Gen8 con 16GB di RAM, Debian/ZFS con due dischi meccanici RAID 1 più due dischi SSD per cache e ZIL. Si è ripreso alla grande ed è andato avanti per altri due anni, fino a quando ha raggiunto il limite. Con 1200+ dispositivi SNMP da monitorare e 600+ VPS (Valori Per Secondo di Zabbix) il DB era arrivato a 120GB e le slow query erano troppe, rallentavano l’operatività del server e generavano troppi falsi positivi.

Ho provato allora il partitioning MySQL che ha funzionato facendo tirare la baracca ancora qualche mese per poi ricominciare con le slow query, ingolfamenti e falsi positivi. Iniziavo a valutare alternative perché stare col dubbio che si tratta di un falso positivo che rientrerà in non-sai-quanti-minuti appena completate le slow query o stare col dubbio che un cliente, magari pure importante, o un apparato è realmente down è davvero snervante. Ho dunque iniziato a documentarmi sulle nuove versioni di Zabbix e le nuove funzionalità, ho anche provato a tenere la configurazione ed svuotare lo storico convinto che fossero eventuali record orfani a fare ingolfare 4 anni di MySQL… durava una settimana poi si ingolfava di nuovo, avevo capito che ero incappato in una legge di Murphy:

Una volta aperta una scatola di vermi, l’unico modo di rimetterli in scatola è usarne una più grande.

Prima legge di Zymurgy sulla dinamica dei sistemi in evoluzione

Non avendo mai prima scalato Zabbix su così tanti dispositivi non avevo abbastanza esperienza, ho alzato bandierina bianca e chiesto aiuto a dei consulenti certificati che mi hanno rassicurato che con TimescaleDB non avrei avuto problemi e sarebbe bastata anche una sola VM un po’ più grossa delle precedenti e nemmeno un proxy! Non ci credevo ma non avevo altro da fare che fidarmi e farmi seguire nell’aggiornamento a Zabbix 5.0.

Abbiamo dunque messo su Zabbix 5.0 su una VM con 16GB di RAM, 4 vCPU e 512GB di disco, importato la configurazione di host, gruppi e templates e fatto macinare il tutto… solo che per una svista durante la procedura non abbiamo attivato l’estensione TimescaleDB di PostgreSQL. Questo è stato un errore che mi è servito parecchio a rendermi conto per la prima volta di come funziona e macina dati PostgreSQL… perchè praticamente con questo errore stavo usando Zabbix con un DB PostgreSQL pulito senza alcuna estensione o TimescaleDB, solo che ancora non lo sapevo!

La prima cosa di cui ti accorgi, più che le performances è la stabilità nonostante i rallentamenti notturni dovuti ai backup: nettamente superiori a MySQL, pur senza partitioning (che TimescaleDB poi di fatto implementa ma un PostgreSQL pulito no!) il sistema non si è mai ingolfato ne rallentato nonostante il DB fosse arrivato a quasi 300GB!! Allucinante per me che avevo visto MySQL ingolfarsi su un DB di 120GB su un server bare metal! PostgreSQL su una VM invece continuava tranquillo ad ingurgitare dati con ottime performance e nel frattempo gestiva le query in lettura del frontend come se gli stessero facendo il solletico! Credevo che semplicemente TimescaleDB fosse questo: una figata, fin quando non si è riempito il disco e si è piantato tutto. Solo pochi giorni dopo ho capito che PostgreSQL/TimescaleDB era una iper-figata.

Da un lato ero gasato che le performance erano nettamente superiori a prima nonostante un DB così grosso, dall’altro ero deluso perché ero reincappato nella stessa legge di Murphy e pensavo mi servisse hardware dedicato più costoso. Il disco pieno rendeva la VM inutilizzabile, dunque ho ripristinato il backup del giorno prima con ancora qualche GB libero e mi ci sono fatto un giro per revisionare la situazione… è stato li che mi sono accorto che l’estensione TimescaleDB non era attiva, ci era scappata. Dunque l’ho attivata e ricaricato lo schema del DB, è partita una stored procedure che ha macinato più di 24 ore e poi il miracolo sintetizzato da questo grafico: la prima metà è il DB PostgreSQL di Zabbix 5.0 senza TimescaleDB… la seconda metà è lo stesso DB PostgreSQL con TimescaleDB pienamente operativo: ditemi voi se non è ALLUCINANTE.

Glenn Glould e l’open source

Avevo voglia di ascoltare “So you want to write a fugue?” di Glenn Gloud, quindi sono andato su youtube ed ho cercato il brano, anche se ce l’avevo offline sul computer. Ho trovato una versione animata in stile karaoke col testo che in verità conoscevo già da tempo, quasi dieci anni, ma che avevo dimenticato e che soprattutto non avevo ancora rivisto e riascoltato con attenzione. Per quanto sia uno smanettone ai tempi non bazzicavo GitHub, anzi studiavo musicologia ed avevo mollato del tutto l’informatica, quindi non ho fatto caso che alla fine del video c’è un url al codice sorgente che ha permesso la realizzazione di questo video. Codice open source e scritto in Python, uno dei pochi linguaggi che conosco e che so leggere. La cosa mi ha fatto riflettere perchè stiamo parlando di Glenn Gould e Python… e tra i due sicuramente il più conosciuto ai più è Python.

Glenn Gould era un folle genio che scrisse questo pezzo nel ’63 per una trasmissione radiofonica canadese allo scopo di far capire alle persone cosa fosse una fuga, in musica. E penso che ci sia riuscito perchè ci ha messo le parole che rendono la sua opera più intellegibile ai profani della musica e non solo. Ma cosa è una fuga? Voglio azzardare a spiegarvelo io, a modo mio, secondo la mia esperienza. Lasciando stare i tecnicismi contrappuntistici barocchi ai testi di musicologia la fuga è un evitare la ripetitività, cercare di essere originali ed evitare di suonare due volte la stessa cosa. Un po’ come il walkin’ bass nel jazz. Vivere e suonare qui ed ora, lasciarsi indietro il passato già suonato e suonare cose nuove, sempre (ove possibile perchè a volte, in alcuni brani veloci, è davvero difficile e disumano suonare sempre cose diverse). Si può e si deve citare il passato, il già suonato, ma non ripeterlo. Mi viene da pensare che una fuga sia una fuga dalla realtà ma è errato, è una fuga dalla consuetudine di mettere cose che non stonino. Puoi mettere anche note stonate se servono, Glenn Gould stesso dice “forget the rules and try”. E nel suo ambito le regole sono molto più ferree del jazz.

Avere a disposizione un video del genere è bellissimo, ha un valore didattico esagerato e l’averlo trovato è più bello ancora. Scoprire stasera che è stato generato grazie a Python (un linguaggio open source) e che l’autore abbia regalato il codice sorgente al mondo su GitHub è meraviglioso. Senza questo video, senza questo codice, senza questa persona (che oltre essere sicuramente un programmatore è sicuramente anche un musicista sopraffino) capire questo brano e capire più profondamente cosa sia una fuga e che che Glenn Gould era un figo sarebbe stato molto più difficile.

rif: https://github.com/zhanrnl/PyMusAnim

GNU/Linux su HP Pavilion TouchSmart 15-b190sl

hp-pavilion-touchsmart-notebook
HP Pavilion TouchSmart 15-b190sl

Prima o poi volevo fare un articolo della serie “GNU/Linux on [ … ] laptop” pieno di trick su come far funzionare definitivamente anche quei componenti capricciosi. Con i miei precedenti 3 portatili non l’ho mai potuto fare perchè mi sono sempre capitate schede video assolutamente non supportate o supportate alla c*z*o che li rendevano portatili sinceramente poco adatti a GNU/Linux. Con questo, il mio nuovo portatile, non posso farlo nemmeno perchè funziona tutto out-of-the-box!! Peccato, mi limito quindi a riportarvi qualche informazione tecnica per nerd:

Processore: Quad-Core Intel® Core™ i3-3227U CPU @ 1.90GHz
00:00.0 Host bridge: Intel Corporation 3rd Gen Core processor DRAM Controller (rev 09)
00:02.0 VGA compatible controller: Intel Corporation 3rd Gen Core processor Graphics Controller (rev 09)
00:14.0 USB controller: Intel Corporation 7 Series/C210 Series Chipset Family USB xHCI Host Controller (rev 04)
00:16.0 Communication controller: Intel Corporation 7 Series/C210 Series Chipset Family MEI Controller #1 (rev 04)
00:1a.0 USB controller: Intel Corporation 7 Series/C210 Series Chipset Family USB Enhanced Host Controller #2 (rev 04)
00:1b.0 Audio device: Intel Corporation 7 Series/C210 Series Chipset Family High Definition Audio Controller (rev 04)
00:1c.0 PCI bridge: Intel Corporation 7 Series/C210 Series Chipset Family PCI Express Root Port 1 (rev c4)
00:1c.1 PCI bridge: Intel Corporation 7 Series/C210 Series Chipset Family PCI Express Root Port 2 (rev c4)
00:1c.2 PCI bridge: Intel Corporation 7 Series/C210 Series Chipset Family PCI Express Root Port 3 (rev c4)
00:1d.0 USB controller: Intel Corporation 7 Series/C210 Series Chipset Family USB Enhanced Host Controller #1 (rev 04)
00:1f.0 ISA bridge: Intel Corporation HM77 Express Chipset LPC Controller (rev 04)
00:1f.2 RAID bus controller: Intel Corporation 82801 Mobile SATA Controller [RAID mode] (rev 04)
00:1f.3 SMBus: Intel Corporation 7 Series/C210 Series Chipset Family SMBus Controller (rev 04)
01:00.0 Network controller: Qualcomm Atheros AR9485 Wireless Network Adapter (rev 01)
02:00.0 Ethernet controller: Realtek Semiconductor Co., Ltd. RTL8101E/RTL8102E PCI Express Fast Ethernet controller (rev 05)
03:00.0 Unassigned class [ff00]: Realtek Semiconductor Co., Ltd. RTS5229 PCI Express Card Reader (rev 01)

Ci sto usando su Debian/testing con Gnome3 e devo dire che con il touchscreen -per me- è quasi fantascienza. Avevo visto qualche video su youtube ma non potevo rendermi conto della qualità del lavoro che è stato fatto sulle GTK3.x e Gnome3.x.

Gnome3 con un touchscreen è la svolta!!

phpIPAM, open source address management

phpIPAM è un applicativo web GPLv3 multiutente per l’address management con funzioni automatiche come il calcolo della netmask in base allo spazio di indirizzamento disponibile, funzioni visuali come una dashboard di riepilogo con widget ordinabili ed altri tool integrati. E’ scritto in PHP e Bootstrap3, non richiede particolari estensioni ed usa mysql come database.

Mette a disposizione delle “sezioni” dentro le quali si possono allocare più reti, ulteriori sottoreti ed indirizzi IP con informazioni aggiuntive ed attributi customizzabili ed estendibili. E’ possibile inserire anche macchine, apparati, VLANs ed importare sottoreti direttamente dal database RIPE.

E’ in inglese e tradotto in varia lingue, purtroppo ancora manca l’italiano ma c’è un modulo interno per la traduzione delle stringhe utilizzate.

via | phpipam.net

ElementaryOS, dual monitor e workspaces solo sul display primario.

Dalla scorsa settimana ho deciso di installare ElementaryOS anche sulla mia workstation al lavoro perchè sia la Ubuntu Gnome 13.04 che la 13.10 mi hanno dato non pochi problemi con continui crash. Anche se sono un fan di ElementaryOS sin dalla prima release ho provato Gnome3 per diversi mesi e devo dire che mi sono trovato molto bene come user experience, soprattutto per la possibilità di escludere il secondo monitor dalla gestione dei workspace: sul secondo monitor tengo tutti i terminali che mi serve avere sempre sott’occhio e sul primo monitor faccio tutto il resto utilizzando molto i workspaces.

Ieri, spulciando su Launchpad, ho scoperto che Gala è basato su libmutter e quindi eredita questa funzionalità da Gnome3! Basta settarla con dconf-editor:

org.gnome.mutter workspaces-only-on-primary

Mai più senza: F11 mappato in un angolo dello schermo con xdotool #elementaryOS

Mentre qualcuno elogia Google per il nuovo portatile con una risoluzione 3:2 molto più comoda “per lavorare” (ma anche per fare qualsiasi cosa che IMHO non sia guardarsi un film in 16:9) il resto delle persone che hanno comprato un portatile negli ultimi anni se lo sono ritrovati con uno schermo in -appunto- 16:9 e praticamente senza una possibilità di scelta diversa, perchè oramai i monitor sono tutti in 16:9.

Ora: tra barre, controbarre e toolbars… oggettivamente lo spazio usabile sul monitor è cambiato, se qualche genere di applicazione (ad esempio Gimp e le sue toolbar verticali) ne giova, altre ne perdono. IMHO i browser ne perdono tutti. Entrare in modalità tutto schermo non è sempre conveniente, nelle tastiere i tasti Fxx stanno andando sempre più frequentemente nel secondo livello ed hanno bisogno del tasto selettore fn, nel mio portatile con F11 metto in mute l’audio.

Mappare un angolo dello schermo che si comporti come il tasto F11 mi è sembrata la soluzione più ergonomica per entrare ed uscire dalla modalità fullscreen senza click ne tasti… ed ormai non posso più farne a meno!

Toast Machine

La Toast Machine è un distributore automatico di software libero in grado di masterizzare distribuzioni GNU/Linux su CD/DVD, copiare su supporti removibili USB/SD le immagini ISO, raccolte di sofware libero per altre piattaforme o materiale informativo.

L’idea è del LugCR e nasce per risolvere il problema dei supporti CD/DVD preparati in gran quantità in vista di eventi pubblici come i Linux Day ed avanzati perchè l’affluenza di pubblico è stata minore. Ma capita anche l’opposto, ovvero che si verifica una affluenza maggiore e non si hanno abbastanza CD da consegnare a chi li richiede perchè è interessato al software libero.

La Toast Machine permette di masterizzare, self service o con un assistente, solo quello che serve. Oltre a permettere di copiare software libero direttamente su chiavetta USB, gadget che ormai chiunque ha in tasca.

La Toast Machine è scritta in Python/gtk ed è rilasciata sotto i termini della licenza GPLv2.

Nel Novembre 2010 la rivista Linux PRO (N.97) ha pubblicato un articolo che racconta l’esperienza del LugCR nella realizzazione ed allestimento di una Toast Machine.

Nota (06/2012): Attualmente il progetto è in mantenimento e non verrà portato su python 3.

Screenshots

Installazione

Al momento la Toast Machine è testata solamente su Ubuntu GNU/Linux 10.04 ma dovrebbe funzionare senza grossi problemi su tutte le distribuzioni che sono in grado di risolvere le seguenti dipendenze: python-pam, python-gksu, brasero, udisks, python-gtk2, xloadimage, *gettext.

Per trasferire le immagini avviabili su chiavette USB o SD è necessario che l’utente a nome del quale giri la Toast Machine appartenga al giusto gruppo, in base alle distribuzione. Ad esempio su Ubuntu è il gruppo disk.

sudo usermod -a -G disk username

Per utilizzare la Toast machine in modalità chiosco con una sessione X dedicata è necessario non instarla in /usr/local in quanto GDM potrebbe non trovare il file xsession. E’ preferibile installarla con l’apposito script (in attesa di una pacchettizzazione ufficiale):

sudo python setup.py install --prefix=/usr

Download

Non esistono ancora pacchetti per le varie distro, è possibile solamente scaricare i sorgenti da launchpad:

Toast Machines in azione

Stand del LugCr alla festa del volontariato – Cremona
LugCR, autori dell’articolo su “Linux PRO”