有什么方法可以1)过滤和2)通过API或CLI从Cloudwatch中检索原始日志数据?我需要从Cloudwatch提取日志事件的子集进行分析。
我不需要创建指标或类似的指标。这是为了及时对特定事件进行历史研究。
我已经进入控制台中的日志查看器,但是我试图拉出特定的行以在某个时间左右告诉我一个故事。日志查看器几乎不可能用于此目的。如果我有实际的日志文件,则只需grep并在大约3秒钟内完成。但是我没有。
澄清
在Cloudwatch Logs的描述中,它说:“如果需要,您可以查看原始日志数据(仅在Web View 中?)以查看问题的根源。可以存储和访问日志数据(仅在Web View 中?)。只要您需要使用耐用性高,成本低的存储,就不必担心填充硬盘驱动器。” -斜体是我的
如果此控制台 View 是获取源数据的唯一方法,那么出于我的目的,通过Cloudwatch存储日志不是可接受的解决方案。我需要以足够的灵活性获取实际数据以搜索模式,而不是单击数十页的行并进行复制/粘贴。看来,获取源数据的更好方法可能不可用。
最佳答案
有关使用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
是必须的。时间用毫秒(不是秒)表示为纪元。
该 call 可能如下所示:
$ aws logs filter-log-events \
--start-time 1447167000000 \
--end-time 1447167600000 \
--log-group-name /var/log/syslog \
--filter-pattern ERROR \
--output text
它打印6列制表符分隔的文本:
EVENTS
(表示该行是日志记录,而不是其他信息)eventId
timestamp
(记录声明为事件时间的时间)logStreamName
message
ingestionTime
因此,如果您手头有Linux命令行实用程序,并且只关心从
2015-11-10T14:50:00Z
到2015-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
带有cwlogs插件的AWSCLI
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
它期望人类可读的日期时间,并且总是返回带有(以空格分隔)列的文本输出:
logStreamName
date
time
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
(如果您在上一个命令中输入错误,只需在
~/.aws/config
文件中更正)awslogs
中的jorgebastida/awslogs
命令这成为我的最爱-易于安装,功能强大,易于使用。
安装:
$ 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
选项。输出包含以下列:
message
使用
--no-group
和--no-stream
,您可以关闭前两列。使用
--no-color
,您可以在输出中消除颜色控制字符。编辑:随着
awslogs
版本0.2.0添加--filter-pattern
,文本已更新。