2015-12-01 37 views

cevap

4

awslogs'a bir göz atın.

Özellikle Lambda/API Gateway ile çalışıyorsanız, apilogs'a bir göz atın.

+0

'awslogs' paketi şaşırtıcıdır. Bir sorun çözüldü Bu sabah bir iş takım üyesi sadece "şeyler bulmak için günlükleri grep" istedim vardı. Kesinlikle basit çözümler için gitmek için yol. –

1

görebileceği şekilde tail -f gibi özelliği almak için komut nedir

aws logs get-log-events --log-group-name groupName --log-stream-name streamName limit 100 

. Bu Windows üzerinde çalışmaz ve milisaniye cinsinden saati almak için daha iyi bir yolu olabilir:

#! /bin/sh 

end_time=$(($(date +"%s") * 1000)) 
aws logs get-log-events --log-group-name groupName --log-stream-name streamName --end-time $end_time 

while : 
do 
    start_time=$end_time 
    end_time=$(($(date +"%s") * 1000)) 
    aws logs get-log-events --log-group-name groupName --log-stream-name streamName --start-time $start_time --end-time $end_time 
    sleep 1 
done 

Destek Sen oldukça trivially bir kabuk komut dosyası ile işlevselliği taklit olabilir.

+0

Cevabınız için teşekkür ederim. Sunucu zamanından bu yana benim için bu iş yardımcı oldu ve yerel makine zamanım farklı. Yerel saatimi değiştirmeyi denedim ancak yine de düzgün şekilde senkronizasyon yapmıyor. – LynAs

+0

CloudWatch günlükleri zaman dilimi ile depolanır ve CloudWatch API zaman damgaları için UTC'yi kullanır (UNIX epoch milisaniye cinsinden), bu nedenle eğer sistem GMT'nin doğusundaki bir saat dilimini kullanırsa, bu yalnızca geçmişte olaylar alacaktır. GMT'nin batısı. Ayrıca, CloudWatch günlükleri neredeyse her zaman bir kaç saniye geciktirilir, bu nedenle UTC'ye kadarki zamanı düzeltseniz bile (bu benim tecrübemde) olayları döndürme olasılığı vardır. –

5

CloudWatch günlükleri (kesin tanımı gereği, yani değil "gerçek zamanlı"), son zaman damgası için önceki olayları ayrıştırmak ve orada bir sonraki iterasyon başlatmak gecikebilir Çünkü: Eğer kuyruğu, isterseniz

#!/bin/bash 

group_name='<log-group-name>' 
stream_name='<log-stream-name>' 
start_seconds_ago=300 

start_time=$((($(date -u +"%s") - $start_seconds_ago) * 1000)) 
while [[ -n "$start_time" ]]; do 
    loglines=$(aws --output text logs get-log-events --log-group-name "$group_name" --log-stream-name "$stream_name" --start-time $start_time) 
    [ $? -ne 0 ] && break 
    next_start_time=$(sed -nE 's/^EVENTS.([[:digit:]]+).+$/\1/ p' <<< "$loglines" | tail -n1) 
    [ -n "$next_start_time" ] && start_time=$(($next_start_time + 1)) 
    echo "$loglines" 
    sleep 15 
done 

Ya tüm günlük grubu, bir dere adı olmadan filter-log-events kullanın: https://gist.github.com/tekwiz/964a3a8d2d84ff4c8b5288d9a703fbce: Ben de GitHub uz olarak kullanmak komut yukarı koyduk

#!/bin/bash 

group_name='<log-group-name>' 
start_seconds_ago=300 

start_time=$((($(date -u +"%s") - $start_seconds_ago) * 1000)) 
while [[ -n "$start_time" ]]; do 
    loglines=$(aws --output text logs filter-log-events --log-group-name "$group_name" --interleaved --start-time $start_time) 
    [ $? -ne 0 ] && break 
    next_start_time=$(sed -nE 's/^EVENTS.([^[:blank:]]+).([[:digit:]]+).+$/\2/ p' <<< "$loglines" | tail -n1) 
    [ -n "$next_start_time" ] && start_time=$(($next_start_time + 1)) 
    echo "$loglines" 
    sleep 15 
done 

.

Uyarı: Yukarıdaki kod & komut dosyaları, Homebrew ve GNU coreutils ile özelleştirilmiş (bastardized ??) benim macOS sistemim için yazılmıştır, bu nedenle bazı komut seçeneklerinin sisteminiz için ayarlanması gerekebilir. Düzenlemeler açıktır :)

3

cwtail'u yeni keşfettim ve iyi çalışıyor (bir lambda işlevinin CloudWatch günlüklerini izlemek için).

yüklemek için:

npm install -g cwtail 

günlük grupları listelemek için:

cwtail -l 

Sonra aldım kez 'kuyruk' için gruba log hangi: benim yarattığım

cwtail -f /aws/lambda/ExampleFunction