Libvmod-rtstatus: metriche, statistiche e vari numeri di Varnish in tempo reale.

Sono felice di introdurre un nuovo VMOD che colleziona counters e statistiche di Varnish in un JSON file e mostra questi dati tramite un’ user interface. Se vuoi sapere in tempo reale come Varnish e backends stanno lavorando, allora questo e’ il VMOD che devi usare. Questo VMOD ti permette di avere un’overview di alcuni counters di Varnish dedicando particolare attenzione a quelli relativi ai backends e alle statistiche per backend. Trovo che tutto cio’ sia assolutamente fantastico soprattutto se usi Varnish come load balancer e vuoi sapere che transazione stanno avvenendo e come Varnish sta performando.

Il VMOD si trova qui: https://github.com/varnish/libvmod-rtstatus.

Il VMOD ha due funzioni:

  • rtstatus(REAL delta): questa e la funzione responsabile della creazione del JSON file contente counters, statistiche ed altri numeri. Il parametro delta viene utilizzato per calcolare hitrate e request load, questi sono valutati su basi differenziali.

json

  • html(): il JSON file creato dalla sopracitata funzione viene passato a questa funzione che lo utilizza per creare una UI.

frontend

Riguardo quest’ultima funzione vorrei aggiungere che si tratta di un c-wrapper per un’applicazione HTML/Javascript. Questa applicazione viene presentata a Varnish come una grande stringa che poi viene utilizzata per generare un synthetic object in vcl_synth. La UI proposta nel VMOD e’ quella di default, ma puo’ essere modificata a secondo delle esigenze.
Per utilizzare il VMOD dovresti scrivere nel tuo VCL qualcosa del genere:

import rtstatus;

sub vcl_recv {
        if (req.url ~ "/rtstatus.json") {
                return(synth(700, "OK"));               }
        if (req.url ~ "/rtstatus") {
                return(synth(800, "OK"));
        }
}
sub vcl_synth {
        if (resp.status == 700){
                set resp.status = 200;
                set resp.http.Content-Type = "text/plain; charset=utf-8";
                synthetic(rtstatus.rtstatus(5));
                return (deliver);
        }
        if (resp.status == 800) {
                set resp.status = 200;
                set resp.http.Content-Type = "text/html; charset=utf-8";
                synthetic(rtstatus.html());
                return (deliver);
                }
}
Annunci

Libvmod-bodyaccess: un VMOD per accedere e modificare il req.body

Recentemente ho lavorato su un VMOD, chiamato libvmod-bodyaccess che ti permette di accedere al request body.
Il VMOD ha un set di funzioni che espande la funzionalità(già esistente) di buffering il request body.
La cosa cool di questo VMOD è che, “raccogliendo” il request body puoi farci un pò quello che vuoi, ad esempio regular expression matching o cache su POST/PUT requests, prima di spedirlo a Varnish o ad eventauli backends.
Il VMOD è disponibile per Varnish 4 e Varnish-Plus 4 e, per ora, ha 4 funzioni:
buffer_req_body(BYTES size): buffers il request body se è più piccolo di “size”.len_req_body(): ritorna la lunghezza del request body.

rematch_req_body(STRING re): regular expression match sul request body.

hash_req_body(): aggiuge body bytes all’input dell’hash key.

Il VMOD con esempi e documentazione può essere trovato qui: https://github.com/aondio/libvmod-bodyaccess.

Il blog post in inglese e con maggiori dettagli può essere trovato qui: https://www.varnish-software.com/blog/introducing-libvmod-bodyaccess-reqbody-access-functions.