2015-01-06 32 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流),然后进一步处理。