2015-12-01 6 views
7

मैं निम्न आदेश का उपयोग कर लॉग देख सकता हूं।aws लॉग वास्तविक समय को देखने के लिए कैसे करें (जैसे tail -f)

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

क्या आदेश tail -f की तरह सुविधा प्राप्त करने के लिए है, इसलिए है कि मैं लॉग वास्तविक समय

उत्तर

4

awslogs पर एक नज़र डालें।

यदि आप विशेष रूप से लैम्ब्डा/एपीआई गेटवे के साथ काम करते हैं, तो apilogs पर एक नज़र डालें।

+0

'awslogs' पैकेज अद्भुत है। एक समस्या हल हुई जिसमें आज सुबह था, जहां एक बिजनेस टीम सदस्य सिर्फ "चीज़ें खोजने के लिए लॉग को grep" करना चाहता था। निश्चित रूप से सरल समाधान के लिए जाने का तरीका। –

1

यह वर्तमान में CLI की एक विशेषता के बाद से यह सिर्फ CloudWatch लॉग्स के लिए HTTP एपीआई को उजागर करता है नहीं है देख सकते हैं। आप काफी तुच्छता से एक खोल स्क्रिप्ट के साथ कार्यक्षमता का अनुकरण कर सकते हैं:

#! /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 

अस्वीकरण: इस विंडोज पर काम नहीं करेगा, और मिलीसेकेंड में समय पाने के लिए एक बेहतर तरीका हो सकता है।

+0

आपके उत्तर के लिए धन्यवाद। इससे मदद मिली लेकिन सर्वर के समय से मेरा काम और मेरा स्थानीय मशीन समय अलग है। मैंने अपना स्थानीय समय बदलने की कोशिश की लेकिन फिर भी यह ठीक से सिंक नहीं होगा। – LynAs

+0

क्लाउडवॉच लॉग टाइमज़ोन के साथ संग्रहीत किए जाते हैं, और क्लाउडवॉच एपीआई यूटीसी के टाइमस्टैम्प (यूनिक्स युग में मिलीसेकंड्स) के लिए उपयोग करता है, इसलिए यह केवल अतीत में ईवेंट प्राप्त करेगा यदि आप जीएमटी के पूर्व में टाइमज़ोन का उपयोग करते हैं (और कुछ भी नहीं जीएमटी के पश्चिम में)। इसके अलावा, क्लाउडवॉच लॉग लगभग हमेशा कुछ सेकंड तक देरी कर रहे हैं, इसलिए संभावना है कि यह यूटीसी के समय को सही करने के बावजूद घटनाओं को वापस लाएगा (मेरे अनुभव में)। –

5

CloudWatch लॉग देरी हो सकती है क्योंकि (सटीक परिभाषा द्वारा यानी नहीं "वास्तविक समय") आप पिछले टाइमस्टैम्प के लिए पिछली प्रतियोगिताओं में पार्स और वहाँ अगले चरण शुरू:

#!/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 

या यदि आप पूंछ एक करना चाहते हैं संपूर्ण लॉग समूह, एक धारा नाम के बिना filter-log-events का उपयोग करें: https://gist.github.com/tekwiz/964a3a8d2d84ff4c8b5288d9a703fbce:

#!/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 

मैं भी स्क्रिप्ट है कि मैं GitHub gists के रूप में उपयोग ऊपर डाल दिया।

चेतावनी: उपरोक्त कोड & स्क्रिप्ट मेरे मैकोज़ सिस्टम के लिए लिखे गए हैं जिन्हें होमब्री और जीएनयू कोर्यूटिल्स के साथ अनुकूलित (बास्टर्डनाइज्ड ??) है, इसलिए कुछ कमांड विकल्पों को आपके सिस्टम के लिए tweaked की आवश्यकता हो सकती है। संपादन का स्वागत है :)

3

मैंने अभी cwtail खोजा है और यह अच्छी तरह से काम करता है (लैम्ब्डा फ़ंक्शन के क्लाउडवॉच लॉग देखने के लिए)।

स्थापित करने के लिए:

npm install -g cwtail 

लॉग समूहों को सूचीबद्ध करने के:

cwtail -l 

फिर, जब आप चुनते ही जो 'पूंछ' के लिए समूह के लिए लॉग इन:

cwtail -f /aws/lambda/ExampleFunction 
संबंधित मुद्दे