有什么方法可以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列制表符分隔的文本:
  • 1st:EVENTS(表示该行是日志记录,而不是其他信息)
  • 2nd:eventId
  • 3rd:timestamp(记录声明为事件时间的时间)
  • 第4个:logStreamName
  • 第五名:message
  • 第六名: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
    

    带有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
    

    它期望人类可读的日期时间,并且总是返回带有(以空格分隔)列的文本输出:
  • 1st:logStreamName
  • 2nd:date
  • 第三名:time
  • 第4至最后: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选项。

    输出包含以下列:
  • 1st:日志组名称
  • 2nd:日志流名称
  • 第三名:message

  • 使用--no-group--no-stream,您可以关闭前两列。

    使用--no-color,您可以在输出中消除颜色控制字符。

    编辑:随着awslogs版本0.2.0添加--filter-pattern,文本已更新。

    07-24 09:39
    查看更多