Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/amazon-web-services/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/logging/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Amazon web services 如何从Amazon Cloudwatch过滤和提取原始日志事件数据_Amazon Web Services_Logging_Amazon Cloudwatch - Fatal编程技术网

Amazon web services 如何从Amazon Cloudwatch过滤和提取原始日志事件数据

Amazon web services 如何从Amazon Cloudwatch过滤和提取原始日志事件数据,amazon-web-services,logging,amazon-cloudwatch,Amazon Web Services,Logging,Amazon Cloudwatch,有没有办法1)过滤和2)通过API或CLI从Cloudwatch中检索原始日志数据?我需要从Cloudwatch中提取日志事件的子集进行分析 我不需要创建度量或类似的东西。这是对特定事件的历史研究 我已经去了控制台中的日志查看器,但我正试图抽出特定的行来告诉我某个特定时间的故事。日志查看器几乎不可能用于此目的。如果我有实际的日志文件,我只需grep并在大约3秒钟内完成。但我没有 澄清 在的描述中,它说,“如果需要,您可以查看原始日志数据(仅在web视图?)以查看问题的根源。只要您需要使用高度耐用

有没有办法1)过滤和2)通过API或CLI从Cloudwatch中检索原始日志数据?我需要从Cloudwatch中提取日志事件的子集进行分析

我不需要创建度量或类似的东西。这是对特定事件的历史研究

我已经去了控制台中的日志查看器,但我正试图抽出特定的行来告诉我某个特定时间的故事。日志查看器几乎不可能用于此目的。如果我有实际的日志文件,我只需grep并在大约3秒钟内完成。但我没有

澄清

在的描述中,它说,“如果需要,您可以查看原始日志数据(仅在web视图?)以查看问题的根源。只要您需要使用高度耐用、低成本的存储,就可以存储和访问日志数据(仅在web视图?),这样您就不必担心填满硬盘。”--斜体是我的


如果此控制台视图是获取源数据的唯一方法,那么就我而言,通过Cloudwatch存储日志不是一个可接受的解决方案。我需要以足够的灵活性获取实际数据,以搜索模式,而不是点击几十页行和复制/粘贴。这似乎是一种更好的获取源数据的方法,但可能不可用。

我自己没有使用过,但我在GitHub上遇到了一个开源的cloudwatch to Excel exporter:

通用AWS CloudWatch到电子表格导出器CloudWatch不提供导出实用程序-它提供。awscwxls创建电子表格 基于命名空间/维度/度量/统计的通用集合 规格。只要AWS继续遵循 名称空间/维度/度量/统计模式,awscwxls应该适用于 现有和未来的名称空间(服务)。每套规格 存储在属性文件中,因此每个属性文件都可以 为一组特定的AWS服务和资源配置。坐 查看run/properties/template.properties以获取完整示例


我认为检索数据的最佳选项如中所述。

使用AWSCLI(普通版本以及
cwlogs
插件)请参阅

有关模式语法(
纯文本
[空格分隔]
{JSON syntax}
)请参见:

有关python命令行实用程序
awslogs
的信息,请参阅

AWSCLI:aws日志筛选器日志事件 AWSCLI是AWS服务的官方CLI,现在它也支持日志

要显示帮助,请执行以下操作:

$ aws logs filter-log-events help
该过滤器可以基于:

  • 日志组名称<代码>--日志组名称<代码>(仅使用最后一个)
  • 日志流名称<代码>--日志流名称(可以多次指定)
  • 开始时间<代码>--开始时间
  • 结束时间
    --结束时间
    (非
    --停止时间
  • 过滤模式
    --过滤模式
只有
--日志组名称
是必需的

时间用毫秒(不是秒)表示为历元

呼叫可能如下所示:

$ aws logs filter-log-events \
    --start-time 1447167000000 \
    --end-time 1447167600000 \
    --log-group-name /var/log/syslog \
    --filter-pattern ERROR \
    --output text
它打印6列以制表符分隔的文本:

  • 第一:
    事件
    (表示该行是日志记录,而不是其他信息)
  • 第二:
    eventId
  • 第三:
    时间戳
    (记录声明为事件时间的时间)
  • 第四条:
    logStreamName
  • 第五条:
    信息
  • 第6条:
    摄入时间
因此,如果您手头有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
  • 第二:日期
  • 第三:时间
  • 第四条直到结束:
    消息
另一方面,安装起来有点困难(再加上当前的
pip
需要将安装域声明为可信域,只需再执行几个步骤)

(如果您在最后一个命令中输入了错别字,只需在
~/.aws/config
文件中更正即可)

jorgebastida/awslogs
这成为我最喜欢的一个-易于安装,功能强大,易于使用

安装:

$ pip install awslogs
要列出可用的日志组,请执行以下操作:

$ awslogs groups
列出日志流的步骤

$ awslogs streams /var/log/syslog
要获取记录并跟踪记录(查看新记录):

您可以按时间范围过滤记录:

$ awslogs get /var/log/syslog -s 2015-11-10T15:45:00 -e 2015-11-10T15:50:00
从版本0.2.0开始,您还可以使用
--过滤器模式
选项

输出包含以下列:

  • 第1:日志组名称
  • 第二:日志流名称
  • 第三条:
    消息
使用
--no group
--no stream
可以关闭前两列

使用
--no color
可以在输出中去掉颜色控制字符


编辑:如
awslogs
版本0.2.0添加了
--过滤器模式
,文本更新。

如果您使用Python Boto3库提取AWS cloudwatch日志。get_log_events()函数接受以毫秒为单位的开始和结束时间

供参考:

为此,您可以使用Datetime和timegm模块获取UTC时间输入并将其转换为毫秒,这样您就可以开始了:

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 input as提供如下所述的输入y:

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

虽然Jan的回答很好,可能也是作者想要的,但请注意,还有一种额外的方式可以通过编程访问日志-via

这适用于始终在线的流式场景,其中数据
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
python flowlog_read.py '2015-11-13 00:00:00' '2015-11-14 00:00:00'