2015-01-06 68 views
8

提取原始日誌事件數據是有什麼辦法1)過濾和2)通過API或從CLI獲取原始日誌數據進行CloudWatch的嗎?我需要從Cloudwatch中提取一部分日誌事件進行分析。如何過濾和從Amazon CloudWatch的

我並不需要創建一個指標或類似的東西。這是針對特定事件的歷史研究。

我已經在控制檯日誌查看器,但我試圖拔出特定行告訴我身邊的一個特定時間的故事。日誌查看器幾乎不可能用於此目的。如果我有實際的日誌文件,我只需要大約3秒就可以完成。但我不知道。

澄清

Cloudwatch Logs的描述,它說,「你可以查看原始日誌數據(僅在Web視圖?),看是否需要的問題的根源。日誌數據可以存儲和訪問(僅在Web視圖?)只要你需要使用高耐用性,低成本存儲,所以你不必擔心填充硬盤驅動器。」 --italics是我

如果控制檯視圖是得到的源數據,然後通過CloudWatch的存儲日誌的唯一方法是不是我的目的,可接受的解決方案。我需要充分靈活地查看實際數據來搜索模式,而不是通過點擊幾十頁的行並複製/粘貼。看起來更好的方法來獲取源數據可能不可用。

回答

26

對於使用AWSCLI(純一個以及與cwlogs插件)看到http://docs.aws.amazon.com/AmazonCloudWatch/latest/DeveloperGuide/SearchDataFilterPattern.html

對於圖案語法(plain text[space separated]如作爲{JSON syntax})見:http://docs.aws.amazon.com/AmazonCloudWatch/latest/DeveloperGuide/FilterAndPatternSyntax.html

用於Python命令行實用程序awslogs看到https://github.com/jorgebastida/awslogs

AWSCLI:AWS日誌過濾日誌事件

AWSCLI是AWS服務官方CLI,現在它也支持日誌。

要顯示幫助:

$ aws logs filter-log-events help 

過濾器可以基於:

  • 日誌組名--log-group-name(只顯示最後一個被使用)可以指定
  • 日誌流名--log-stream-name(多次)
  • 開始時間--start-time
  • 結束時間--end-time(未--stop-time
  • 濾波器圖案--filter-pattern

只有--log-group-name是強制性的。

時間表示爲使用毫秒(而不是秒)的紀元。

呼叫可能是這樣的:

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

它打印製表符分隔文本的6列:

  • 1:EVENTS(表示,該行是一個日誌記錄,而不是其他信息)
  • 第二:eventId
  • 3:timestamp(由記錄事件時間申報時間)
  • 4:logStreamName
  • 5:message
  • 6:ingestionTime

所以,如果你有Linux的命令行工具在手,只在乎區間日誌記錄信息從2015-11-10T14:50:00Z2015-11-10T15:00:00Z,你可能得到它,如下所示:

$ 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與cwlogs插件

cwlogs AWSCLI插件更易於使用:

$ 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 

它希望人類可讀的日期,時間,總是返回文本輸出,(空格分隔)列:

  • 1:logStreamName
  • 2nd:date
  • 3rd:time
  • 4th till結束:message

在另一方面,它是有點困難,安裝(幾個步驟要做加上當前pip需要申報安裝域信任的一個)。

$ 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 

awslogs命令從jorgebastida/awslogs

這成爲我最喜歡的一個(如果您在最後一個命令錯字,只需要修正它~/.aws/config文件) - 安裝簡便,功能強大,簡單易用。

安裝:

$ pip install awslogs 

列出可用的日誌組:

$ awslogs groups 

要列出日誌流

$ awslogs streams /var/log/syslog 

爲了得到記錄,並按照他們(見新的,因爲他們來吧):

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

你可以按時間範圍篩選記錄:

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

自版本0.2.0你那裏也--filter-pattern選項。

輸出有列:

  • 1:登錄組的名稱
  • 第二:日誌流名稱
  • 3:message

使用--no-group--no-stream您可以切換前兩個列關閉。

使用--no-color您可能會排除輸出中的顏色控制字符。

編輯:作爲awslogs版本0.2.0增加了--filter-pattern,文本更新。

0

沒有用它自己,但這裏是一個開放源碼的CloudWatch到Excel導出我碰上了GitHub上:

https://github.com/petezybrick/awscwxls

通用AWS CloudWatch的到電子表格導出 CloudWatch的沒有按」 t提供一個導出工具 - 這是的。 awscwxls基於名稱空間/維度/度量/統計 規範的通用集創建電子表格 。只要AWS繼續沿用 命名空間/尺寸/公制/統計模式,awscwxls應該適用於 現有和未來的命名空間(服務)。每套規格 都存儲在一個屬性文件中,因此每個屬性文件可以是 ,配置用於一組特定的AWS服務和資源。查看run/properties/template.properties以獲取完整示例的 。

+0

我澄清了我的問題。我們不需要或不需要度量標準,每個日誌行都是一個自由形式的字符串。我不想計算登錄或返回代碼。我試圖從調試輸出散佈在許多其他輸出中的特定時間點調試特定問題。而這個問題持續了幾分鐘,所以剛剛通過並複製出網絡視圖通常不是一個可行的解決方案。 – Zach

0

我認爲提供檢索數據的最佳選項是按照API中所述提供的。

1

如果您使用Python Boto3庫提取AWS cloudwatch日誌。 get_log_events()函數接受以毫秒爲單位的開始和結束時間。

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

爲此,您可以採取UTC時間輸入,並使用日期時間和timegm模塊轉換成毫秒,你是好去:

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 

所以,你可以給輸入,使用SYS輸入以下Ÿ表述爲:

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

雖然一月的回答是很大的,可能作者想要的東西,請ñ注意還有一種方法可以通過編程訪問日誌 - 通過subscriptions

這是專門用於永遠在線的情況下,數據不斷被提取(通常是Kinesis流),然後進一步處理。