Pesquisar dentro do bucket s3 com logs

4

Como pesquisar uma string dentro de vários arquivos .gz na subpasta do bucket do Amazon S3? Eu tentei montá-lo via s3fs e zgrep mas é muuuito lento. Você usa algum outro método?

Talvez haja algum serviço da Amazon que eu possa usar para rapidamente atualizá-los?

    
por Michal_Szulc 26.09.2016 / 16:04

2 respostas

4

Acho que a maneira mais rápida é copiá-los localmente primeiro e depois fazer um zgrep local:

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

Isso copiará ( cp ) todos os registros para o seu diretório atual ( . ) e incluirá todas as subpastas também ( --recursive ).

Em seguida, um local zgrep :

zgrep "search words" *.gz

Ou para pesquisar sub-diretórios também:

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

(Extraído de unix.stackexchange.com .)

    
por 26.09.2016 / 16:30
2

Não é grep , mas agora você pode consultar os registros com Athena :

Primeiro, crie uma tabela a partir do seu bucket 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/'

Em seguida, você pode consultá-lo com o 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;
    
por 18.10.2017 / 16:44