使用日志在 ​​s3 存储桶内搜索

Mic*_*ulc 7 grep amazon-s3 s3fs

如何在 Amazon S3 存储桶子文件夹中的大量 .gz 文件中搜索字符串?我试图通过 s3fs 和 zgrep 安装它,但它太慢了。你使用任何其他方法吗?

也许有任何亚马逊服务可以用来快速 zgrep 它们?

gee*_*eya 7

我发现最快的方法是先在本地复制它们,然后在本地执行 zgrep:

aws s3 cp s3://bucket/containing/the/logs . --recursive

这会将 ( cp) 所有日志复制到您的当前目录 ( .) 并包括所有子文件夹 ( --recursive)。

然后是本地zgrep

zgrep "search words" *.gz

或者也递归搜索子目录:

find -name \*.gz -print0 | xargs -0 zgrep "STRING"

(取自unix.stackexchange.com。)


小智 5

不是grep,但您现在可以使用Athena查询日志:

首先,从您的 S3 存储桶创建一个表

CREATE EXTERNAL TABLE IF NOT EXISTS S3Accesslogs(
  BucketOwner string,
  Bucket string,
  RequestDateTime string,
  RemoteIP string,
  Requester string,
  RequestID string,
  Operation string,
  Key string,
  RequestURI_operation string,
  RequestURI_key string,
  RequestURI_httpProtoversion string,
  HTTPstatus string,
  ErrorCode string,
  BytesSent string,
  ObjectSize string,
  TotalTime string,
  TurnAroundTime string,
  Referrer string,
  UserAgent string,
  VersionId string)
ROW FORMAT SERDE 'org.apache.hadoop.hive.serde2.RegexSerDe'
WITH SERDEPROPERTIES (
 'serialization.format' = '1',
  'input.regex' = '([^ ]*) ([^ ]*) \\[(.*?)\\] ([^ ]*) ([^ ]*) ([^ ]*) ([^ ]*) ([^ ]*) \\\"([^ ]*) ([^ ]*) (- |[^ ]*)\\\" (-|[0-9]*) ([^ ]*) ([^ ]*) ([^ ]*) ([^ ]*) ([^ ]*) ([^ ]*) (\"[^\"]*\") ([^ ]*)$'
) 
LOCATION 's3://s3-server-access/logs/'
Run Code Online (Sandbox Code Playgroud)

然后,您可以使用 SQL 查询它:

SELECT requestdatetime, bucket, remoteip, requesturi_key
FROM s3accesslogs
WHERE bucket IN ('bucket1', 'bucket2')
    AND remoteip = '123.45.67.89'
ORDER BY requestdatetime DESC
LIMIT 100;
Run Code Online (Sandbox Code Playgroud)