答案是aws Athena
我们会将很多日志存储到我们的s3,例如s3的读写日志,elb日志 等
但是由于s3的存储特殊,我们想要分析一段时间的日志非常麻烦,哪怕下载到本地也需要想办法导入其他工具分析
现在aws提供了一个自己的工具让我们能使用SQL语句来直接查询我们s3里边的日志,不需要下载,非常强大
他的原理很简单,其实就是创建了一个数据和表,表里的数据就是s3里边存储的日志,所以我们在分析不同的日志的时候,需要创建不同的数据库和表
例如:
首先创建数据库:
1 |
create database s3_access_logs_db |
其次创建表:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 |
CREATE EXTERNAL TABLE `s3_access_logs_db.mybucket_logs`( `bucketowner` STRING, `bucket_name` STRING, `requestdatetime` STRING, `remoteip` STRING, `requester` STRING, `requestid` STRING, `operation` STRING, `key` STRING, `request_uri` STRING, `httpstatus` STRING, `errorcode` STRING, `bytessent` BIGINT, `objectsize` BIGINT, `totaltime` STRING, `turnaroundtime` STRING, `referrer` STRING, `useragent` STRING, `versionid` STRING, `hostid` STRING, `sigv` STRING, `ciphersuite` STRING, `authtype` STRING, `endpoint` STRING, `tlsversion` STRING) ROW FORMAT SERDE 'org.apache.hadoop.hive.serde2.RegexSerDe' WITH SERDEPROPERTIES ( 'input.regex'='([^ ]*) ([^ ]*) \\[(.*?)\\] ([^ ]*) ([^ ]*) ([^ ]*) ([^ ]*) ([^ ]*) (\"[^\"]*\"|-) (-|[0-9]*) ([^ ]*) ([^ ]*) ([^ ]*) ([^ ]*) ([^ ]*) ([^ ]*) (\"[^\"]*\"|-) ([^ ]*)(?: ([^ ]*) ([^ ]*) ([^ ]*) ([^ ]*) ([^ ]*) ([^ ]*))?.*$') STORED AS INPUTFORMAT 'org.apache.hadoop.mapred.TextInputFormat' OUTPUTFORMAT 'org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat' LOCATION 's3://awsexamplebucket1-logs/prefix/' |
这里要注意,这个创建表的语句对于不同的日志是不同的,因为我们看到这些字段都是日志里的字段,日志不同,字段也不同,aws常用的日志都提供了例子我们可以直接搜索使用
创建成功以后我们就可以使用:
1 2 |
SELECT * FROM s3_access_logs_db.mybucket_logs WHERE key = 'images/picture.jpg' AND operation like '%DELETE%'; |
官方文档地址:
https://aws.amazon.com/premiumsupport/knowledge-center/analyze-logs-athena/
Latest posts by Zhiming Zhang (see all)
- aws eks node 自动化扩展工具 Karpenter - 8月 10, 2022
- ReplicationController and ReplicaSet in Kubernetes - 12月 20, 2021
- public key fingerprint - 5月 27, 2021