SistemaTap - SystemTap

SystemTap
Smileytap.svg
Versione iniziale 2005 ( 2005 )
Rilascio stabile
4.4 / 9 novembre 2020 ; 8 mesi fa ( 2020-11-09 )
Repository Modificalo su Wikidata
Scritto in C , C++
Sistema operativo Linux
Tipo Linguaggio di programmazione Tracing
Licenza Licenza pubblica generale GNU
Sito web sourceware .org /systemtap /

In ambito informatico , SystemTap ( stap ) è un linguaggio di scripting e uno strumento per la strumentazione dinamica dei sistemi operativi basati su kernel Linux in esecuzione in produzione . Gli amministratori di sistema possono utilizzare SystemTap per estrarre, filtrare e riepilogare i dati al fine di consentire la diagnosi di prestazioni complesse o problemi funzionali.

SystemTap è costituito da software gratuito e open source e include contributi di Red Hat , IBM , Intel , Hitachi , Oracle , l'Università del Wisconsin-Madison e altri membri della comunità.

Storia

SystemTap ha debuttato nel 2005 in Red Hat Enterprise Linux 4 Update 2 come anteprima tecnologica.

Dopo quattro anni di sviluppo, SystemTap 1.0 è stato rilasciato nel 2009.

A partire dal 2011, SystemTap è completamente supportato in tutte le distribuzioni Linux tra cui RHEL / CentOS 5 dall'aggiornamento 2, SLES 10, Fedora, Debian e Ubuntu.

I punti traccia nella VM CPython e nella JVM sono stati aggiunti in SystemTap 1.2 nel 2009.

A novembre 2019, SystemTap 4.2 ha incluso l' esportatore prometheus .

utilizzo

I file SystemTap sono scritti nella lingua SystemTap (salvati come .stpfile) ed eseguiti con la stapriga di comando.

Il sistema esegue una serie di passaggi di analisi sullo script prima di consentirne l'esecuzione. Gli script possono essere eseguiti con uno dei tre backend selezionati --runtime=dall'opzione. L'impostazione predefinita è un modulo kernel caricabile , che ha la capacità più completa di ispezionare e manipolare qualsiasi parte del sistema e quindi richiede la maggior parte dei privilegi. Un altro backend è basato sulla libreria di analisi dinamica dei programmi DynInst per strumentare solo i programmi nello spazio utente dell'utente e richiede il minimo privilegio. Il backend più recente è basato sul byte-code eBPF , è limitato alle capacità dell'interprete del kernel Linux e richiede un livello di privilegio intermedio. In ogni caso, il modulo viene scaricato al termine dell'esecuzione dello script.

Gli script generalmente si concentrano su eventi (come l'avvio o la fine di uno script), i punti sonda compilati come i "tracepoint" di Linux o l'esecuzione di funzioni o istruzioni nel kernel o nello spazio utente.

Alcuni script in "modalità guru" possono anche avere C incorporato, che può essere eseguito con l' -gopzione della riga di comando. Tuttavia, l'uso della modalità guru è sconsigliato e ogni versione di SystemTap include più punti sonda progettati per eliminare la necessità di script in modalità guru. La modalità Guru è necessaria per consentire agli script di modificare lo stato nel software strumentato, ad esempio per applicare alcuni tipi di soluzioni di sicurezza di emergenza.

A partire dalla versione 1.7 di SystemTap, il software implementa il nuovo gruppo stapsys e il livello di privilegio.

Semplici esempi

Lo script seguente mostra tutte le applicazioni che impostano le opzioni del socket TCP sul sistema, quali opzioni vengono impostate e se l'opzione è impostata correttamente o meno.

# Show sockets setting options

# Return enabled or disabled based on value of optval
function getstatus(optval)
{
    if ( optval == 1 )
        return "enabling"
    else
        return "disabling"
}

probe begin
{
	print ("\nChecking for apps setting socket options\n")
}

    # Set a socket option
    probe tcp.setsockopt
    {
        status = getstatus(user_int($optval))
    	printf ("  App '%s' (PID %d) is %s socket option %s... ", execname(), pid(), status, optstr)
    }
    
        # Check setting the socket option worked
        probe tcp.setsockopt.return
        {
            if ( ret == 0 )
                printf ("success")
            else
                printf ("failed")
            printf ("\n")
        }

probe end
{
	print ("\nClosing down\n")
}

Molti altri esempi sono forniti con SystemTap. Ci sono anche esempi reali di utilizzo di SystemTap nella pagina Storie di guerra.

Importazione di script da altre tecnologie di tracciamento

SystemTap può collegarsi ai marker DTrace quando vengono compilati in un'applicazione utilizzando macro dal sys/sdt.hfile di intestazione.

Guarda anche

Riferimenti

link esterno