2015-01-06 15 views
8

C'è un modo per 1) filtrare e 2) recuperare i dati di registro non elaborati da Cloudwatch tramite l'API o dalla CLI? Devo estrarre un sottoinsieme di eventi di registro da Cloudwatch per l'analisi.Come faccio a filtrare ed estrarre i dati degli eventi di registro non elaborati da Amazon Cloudwatch

Non è necessario creare una metrica o qualcosa del genere. Questo è per la ricerca storica di un evento specifico nel tempo.

Sono andato al visualizzatore di registri nella console ma sto cercando di estrarre linee specifiche per raccontarmi una storia intorno a una certa ora. Il visualizzatore di log sarebbe praticamente impossibile da usare per questo scopo. Se avessi il file di registro effettivo, vorrei solo grep ed essere fatto in circa 3 secondi. Ma io no.

Chiarimento

Nella descrizione di Cloudwatch Logs, dice: "È possibile visualizzare i dati di log originali (solo nella visualizzazione Web?) per vedere la fonte del problema, se necessario. Log dati può essere memorizzato e consultato (solo nella visualizzazione Web?) per tutto il tempo necessario per l'utilizzo di storage duraturo ea basso costo in modo che non ci si debba preoccupare di riempire i dischi rigidi. " --italics are mine

Se questa vista della console è l'unico modo per ottenere i dati di origine, quindi la memorizzazione dei registri tramite Cloudwatch non è una soluzione accettabile per i miei scopi. Ho bisogno di ottenere i dati reali con sufficiente flessibilità per cercare modelli, non fare clic su decine di righe di pagine e copiare/incollare. Sembra che un modo migliore per arrivare ai dati di origine potrebbe non essere disponibile.

risposta

26

Per usare AWSCLI (una pianura così come con cwlogs plugin) vedono http://docs.aws.amazon.com/AmazonCloudWatch/latest/DeveloperGuide/SearchDataFilterPattern.html

Per la sintassi modello (plain text, [space separated] come come {JSON syntax}) vedi: http://docs.aws.amazon.com/AmazonCloudWatch/latest/DeveloperGuide/FilterAndPatternSyntax.html

Per utility a riga di comando python awslogs vedere https://github.com/jorgebastida/awslogs.

AWSCLI: tronchi AWS filtro-log-eventi

AWSCLI è CLI ufficiale per i servizi di AWS e ora supporta i log troppo.

Per mostrare aiuto:

$ aws logs filter-log-events help 

Il filtro può essere basata su:

  • nome del gruppo di log --log-group-name (solo ultimo è utilizzato)
  • registro nome del flusso --log-stream-name (è possibile specificare più volte)
  • ora di inizio --start-time
  • ora di fine --end-time (non --stop-time)
  • filtro picchiettio --filter-pattern

Solo --log-group-name è obbligatoria.

I tempi sono espressi come epoca utilizzando millisecondi (non secondi).

La chiamata potrebbe assomigliare a questo:

$ aws logs filter-log-events \ 
    --start-time 1447167000000 \ 
    --end-time 1447167600000 \ 
    --log-group-name /var/log/syslog \ 
    --filter-pattern ERROR \ 
    --output text 

Esso stampa 6 colonne di scheda separata testo:

  • 1 °: EVENTS (per indicare, la linea è un record di log e non altre informazioni)
  • 2 °: eventId
  • 3 °: timestamp (tempo dichiarato dal record come ora dell'evento)
  • 4 °: logStreamName
  • 5 °: message
  • 6: ingestionTime

Quindi, se si dispone di utility a riga di comando di Linux a portata di mano e la cura solo di registrare messaggi di log per l'intervallo da 2015-11-10T14:50:00Z a 2015-11-10T15:00:00Z, si può farlo nel modo seguente:

$ aws logs filter-log-events \ 
    --start-time `date -d 2015-11-10T14:50:00Z +%s`000 \ 
    --end-time `date -d 2015-11-10T15:00:00Z +%s`000 \ 
    --log-group-name /var/log/syslog \ 
    --filter-pattern ERROR \ 
    --output text| grep "^EVENTS"|cut -f 5 

AWSCLI con cwlogs plug

012.351.641.061.

Il cwlogs plug AWSCLI è più semplice da usare:

$ aws logs filter \ 
    --start-time 2015-11-10T14:50:00Z \ 
    --end-time 2015-11-10T15:00:00Z \ 
    --log-group-name /var/log/syslog \ 
    --filter-pattern ERROR 

Si aspetta leggibile data-ora umana e restituisce sempre output di testo con (delimitati spazio) colonne:

  • 1 °: logStreamName
  • 2: date
  • 3a: time
  • 4 fino a Alla fine: message

D'altra parte, è un po 'più difficile da installare (qualche passo da fare, più attuale pip richiede di dichiarare il dominio di installazione come uno di fiducia).

$ pip install awscli-cwlogs --upgrade \ 
--extra-index-url=http://aws-cloudwatch.s3-website-us-east-1.amazonaws.com/ \ 
--trusted-host aws-cloudwatch.s3-website-us-east-1.amazonaws.com 
$ aws configure set plugins.cwlogs cwlogs 

(se si commette errore di battitura in ultimo comando, basta correggerlo in ~/.aws/config file)

awslogs comando dal jorgebastida/awslogs

Questa diventato il mio preferito uno - facile da installare, potente, facile da usare .

installazione:

$ pip install awslogs 

Per elencare i gruppi di registro disponibili:

$ awslogs groups 

Per elencare registro flussi

$ awslogs streams /var/log/syslog 

Per ottenere i record e li seguono (vedi quelli nuovi come come):

$ awslogs get --watch /var/log/syslog 

E si possono filtrare i record per intervallo di tempo:

$ awslogs get /var/log/syslog -s 2015-11-10T15:45:00 -e 2015-11-10T15:50:00 

Dalla versione 0.2.0 lì anche la possibilità --filter-pattern.

L'uscita ha colonne:

  • 1 °: log nome del gruppo
  • 2 °: log nome del flusso
  • 3 °: message

Utilizzando --no-group e --no-stream è possibile passare i primi due colonne disattivate.

Utilizzando --no-color è possibile eliminare i caratteri di controllo del colore nell'output.

EDIT: come awslogs versione 0.2.0 aggiunge --filter-pattern, testo aggiornato.

0

non ho usato io stesso, ma qui è un CloudWatch open-source per Excel esportatore mi sono imbattuto su GitHub:

https://github.com/petezybrick/awscwxls

Generico AWS CloudWatch in foglio di calcolo Esportatore CloudWatch doesn' t fornire un'utilità di esportazione - questo è vero. awscwxls crea fogli di calcolo in base a set generici di Namespace/Dimensione/Metrica/Statistica specifiche. Finché AWS continua a seguire il modello spazio dei nomi/dimensione/metrica/statistica, awscwxls dovrebbe funzionare per Namespace (servizi) esistenti e futuri. Ciascuna serie di specifiche è memorizzata in un file di proprietà, quindi ciascun file di proprietà può essere configurato per un set specifico di servizi e risorse AWS. Prendi uno guarda run/properties/template.properties per un esempio completo.

+0

Ho chiarito la mia domanda. Non vogliamo o non abbiamo bisogno di metriche e ogni riga di registro è una stringa di forma libera. Non sto cercando di contare gli accessi o i codici di ritorno. Sto cercando di eseguire il debug di un problema specifico da un punto specifico nel tempo in cui l'output di debug è disseminato su molti altri output. E il problema persiste per pochi minuti, quindi è sufficiente passare e la copia della visualizzazione Web non è una soluzione valida in generale. – Zach

0

Penso che l'opzione migliore per recuperare i dati sia fornita come descritto nello API.

1

Se si utilizza la libreria Python Boto3 per l'estrazione dei registri di AWS cloudwatch. La funzione di get_log_events() accetta l'ora di inizio e di fine in millisecondi.

Per riferimento: http://boto3.readthedocs.org/en/latest/reference/services/logs.html#CloudWatchLogs.Client.get_log_events

Per questo si può prendere un ingresso di tempo UTC e convertirlo in millisecondi utilizzando i moduli Datetime e timegm e si è pronti per partire:

from calendar import timegm 
from datetime import datetime, timedelta 

# If no time filters are given use the last hour 
now = datetime.utcnow() 
start_time = start_time or now - timedelta(hours=1) 
end_time = end_time or now 
start_ms = timegm(start_time.utctimetuple()) * 1000 
end_ms = timegm(end_time.utctimetuple()) * 1000 

Così, può dare input come indicato di seguito y utilizzando il metodo di sys come:

python flowlog_read.py '2015-11-13 00:00:00' '2015-11-14 00:00:00' 
1

Mentre la risposta di Jan è un grande e probabilmente ciò che l'autore ha voluto, si prega di n Nota che esiste un ulteriore modo per ottenere l'accesso programmatico ai registri - tramite subscriptions.

Questo è previsto per scenari di streaming sempre attivi in ​​cui i dati vengono costantemente recuperati (di solito in stream Kinesis) e quindi ulteriormente elaborati.

Problemi correlati