2010-01-03 16 views
15

Uso grep per analizzare i miei registri delle app di trading, ma è limitato nel senso che devo scorrere visivamente attraverso l'output per vedere cosa è successo ecc.Qual è lo strumento migliore per analizzare i file di registro?

Mi chiedo se Perl sia un'opzione migliore? Qualche buona risorsa per imparare il log e l'analisi delle stringhe con Perl?

Credevo anche che Python sarebbe stato utile per questo. Perl vs Python vs 'grep on linux'?

+0

Grazie a tutti per le risposte. Penso che praticamente sia necessario attenersi a Perl o Grep. Nelle scatole di produzione ottenere i permessi per eseguire Python/Ruby etc si trasformerà in un progetto in sé. Immagino sia tempo che ho aggiornato la mia conoscenza regex per fare le cose in grep. – user242591

+2

@coderzambesi: Si prega di definire "migliore" e "migliore" rispetto a cosa? Più economico? Più veloce? Migliori strumenti di sviluppo della GUI? Più supporto per i fornitori/Cosa intendi per il meglio? –

risposta

9

Alla fine, dipende in realtà dalla quantità di semantica che si desidera identificare, dal fatto che i log corrispondano a schemi comuni e da ciò che si desidera fare con i dati analizzati.

Se è possibile utilizzare le espressioni regolari per trovare quello che ti serve, hai un sacco di opzioni. Perl è una lingua popolare e ha strutture RE native molto convenienti. Personalmente mi sento molto più a mio agio con Python e trovo che il piccolo problema aggiunto per fare le RE non è significativo.

Se vuoi fare qualcosa di più intelligente della corrispondenza di RE, o vuoi avere un sacco di logica, potresti stare più a tuo agio con Python o anche con Java/C++/etc. Ad esempio, è facile leggere line-by-line in Python e quindi applicare varie funzioni di predicato e reazioni alle corrispondenze, il che è fantastico se si dispone di un set di regole che si desidera applicare.

4

Tutti i linguaggi di scripting sono buoni candidati: Perl, Python, Ruby, PHP e AWK vanno bene per questo. L'utilizzo di una di queste lingue è migliore del peering nei log a partire da una dimensione (piccola).

Wearing Ruby Slippers to Work è un esempio di questo in Ruby, scritto nello stile inimitabile di Why. Ecco uno basic example in Perl. Ti suggerisco di scegliere una di queste lingue e iniziare a decifrare.

1

Trovo questo valore list prezioso quando si ha a che fare con qualsiasi lavoro che richiede l'analisi con python.

Non userei perl per analizzare log di grandi dimensioni/complessi - solo per la leggibilità (la velocità su perl è carente per me (grandi lavori) - ma probabilmente è il mio codice perl (devo migliorare)).

Tuttavia se grep si adatta perfettamente alle tue esigenze per ora - non c'è davvero alcun motivo per impantanarsi nello scrivere un parser completo. La soluzione più semplice è solitamente la migliore e grep è uno strumento eccellente.

2

Un grande vantaggio che Perl ha su Python è che quando si analizza il testo è la possibilità di utilizzare regular expressions direttamente come parte della sintassi della lingua. Per esempio:

if ($line =~ m/^Regex/) { 
    ... code goes here 
} 

Perl assegna anche capture groups direttamente a $ 1, $ 2, ecc, il che rende molto semplice con cui lavorare. A seconda del formato e della struttura dei file di log che si sta tentando di analizzare, ciò potrebbe rivelarsi molto utile (oppure, se può essere analizzato come un file a larghezza fissa o utilizzando tecniche più semplici, non è affatto utile).

È tutto solo zucchero sintattico, in realtà, e altri linguaggi consentono anche di usare espressioni regolari e gruppi di cattura (in effetti, l'articolo collegato mostra come farlo in Python). Devi solo scrivere un po 'di codice e passare oggetti per farlo.

+1

la possibilità di usare regex con Perl non è un grande vantaggio rispetto a Python, perché in primo luogo, anche Python ha regex, e in secondo luogo, regex non è sempre la soluzione migliore. – ghostdog74

+1

È ancora più semplice usare Regex in Perl piuttosto che in un'altra lingua, grazie alla possibilità di utilizzarli direttamente. E sì, a volte regex non è la soluzione giusta, ecco perché ho detto 'a seconda del formato e della struttura dei file di log che stai cercando di analizzare' –

+1

C'mon, non è così difficile usare espressioni regex in Python. Se stai discutendo sulla semplice sintassi, in realtà non stai discutendo di niente di utile. Perl ha alcune caratteristiche regex che Python non supporta, ma è improbabile che molte persone ne abbiano bisogno. Per quanto riguarda i buffer di cattura, Python era in testa al gioco con le catture etichettate (che anche Perl ora ha). –

2

C'è un programma Perl chiamato Log_Analysis che esegue molte analisi e pre-elaborazione per te.

1

Un'altra possibile interpretazione della domanda è "Esistono strumenti che facilitano il monitoraggio dei registri?"e per rispondere suggerirei di dare un'occhiata a Splunk o forse Log4view.

+0

Anche Sprog è molto carino: http://sprog.sourceforge.net/ – daotoad

+0

Anche Octopussy è bello (disclaimer: il mio progetto): http://www.8pussy.org – sebthebert

1

su linux, puoi usare solo la shell (bash, ksh ecc.) per analizzare i file di log se non sono di dimensioni troppo grandi Gli altri strumenti da utilizzare sono solitamente grep e awk, tuttavia per una maggiore potenza di programmazione, solitamente viene utilizzato awk Se si dispone di file di grandi dimensioni, provare awk

Naturalmente, Perl o Python o praticamente qualsiasi altro È possibile utilizzare anche le lingue con capacità di lettura dei file e di manipolazione delle stringhe

2

L'apprendimento di un linguaggio di programmazione consente di portare le capacità di analisi dei registri su un altro livello

Qualsiasi linguaggio dinamico o "scripting" come Perl, Ruby o Python farà il suo lavoro. Quello che dovresti usare in realtà dipende da fattori esterni. Tra le cose che dovresti prendere in considerazione:

  • funziona già utilizzare un langeuge adatto ?
  • conosci qualcuno che può mentore in una lingua adeguata?
  • prova ogni lingua un po 'e vedi quale lingua ti sta meglio.

Personalmente, per il compito sopra avrei usato Perl. YMMV.

molte ragioni per piace Perl:

potenti battute - se hai bisogno di fare un rapido reale, una tantum di lavoro, Perl offre alcuni davvero grande scorciatoie. Vedi perlrun -n per un esempio

Linguaggio multi-paradigma: Perl supporta le metodologie di programmazione imperative, funzionali e orientate agli oggetti.

Sigilli: i principali caratteri di punteggiatura su variabili come $foo o @bar. Sono un po 'come la notazione ungherese senza essere così fastidiosi.

Moose - un incredibile nuovo sistema OOP che fornisce potenti nuove tecniche OO per la composizione e il riutilizzo del codice.

Strictures - il pragma use strict rileva molti errori che altri linguaggi dinamici sorvolo al momento della compilazione. Mi manca terribilmente quando uso Python o PHP.

Autodisciplina: Perl ti dà la libertà di scrivere e fare ciò che vuoi, quando vuoi. Ciò significa che devi imparare a scrivere codice pulito o farai del male. Fortunatamente, ci sono strumenti per aiutare un principiante. Perl::Critic esegue un'analisi del codice simile a quella delle migliori pratiche.

-2

provare Nagios Log Monitoring

La ragione di questo strumento è la migliore per il vostro scopo è questo:

Non richiede l'installazione di pacchetti stranieri. Il che significa che non è necessario installare dipendenze perl o pacchetti sciocchi che potrebbero renderti nervoso.

C'è poca o nessuna curva di apprendimento. Non è necessario imparare alcun linguaggio di programmazione per usarlo. Tutto quello che devi fare è sapere esattamente cosa vuoi fare con i log che hai in mente e leggere il pdf fornito con lo strumento.

Se il registro che si desidera analizzare è in un formato syslog, è possibile utilizzare un comando come questo:

./NagiosLogMonitor 10.20.40.50:5444 logrobot autofig /opt/jboss/server.log 60m 'INFO' '.' 1 2 -show

Anche se il registro non è in un formato riconosciuto, può ancora essere monitorato in modo efficace con il seguente comando:

./NagiosLogMonitor 10.20.40.50:5444 logrobot autonda/opt/jboss /server.log 60m 'INFO' '.' 1 2 jbosslogs -ndshow

Per analizzare un registro per stringhe specifiche, sostituire la stringa "INFO" con i motivi che si desidera guardare nel registro. Se si desidera cercare più pattern, specificarli come "INFO | ERRORE | fatale".

Se efficienza e semplicità (e installazioni sicure) sono importanti per voi, questo strumento Nagios è la strada da percorrere.

+0

Mentre questo link può rispondere alla domanda, è meglio per includere qui le parti essenziali della risposta e fornire il link per riferimento. Le risposte di solo collegamento possono diventare non valide se la pagina collegata cambia. – Serlite

+0

post aggiornato ... –

Problemi correlati