解析EB logs的一些Linux小命令
开启EB rotated log功能后,EB的日志将会被存储在EB对应bucket的resources/environments/logs/logtype/environment-id/instance-id
路径下, 供后续查看。官网文档Viewing Logs from Amazon EC2 Instances in Your Elastic Beanstalk Environment
下面记录几个常用检查日志的小命令
使用exclue和include来获取部分日志
开启EB的rotated log后,EB中的EC2会每小时将日志上传到S3中。以Passenger with Ruby
的Platform为例,有production.log, access.log和passenger.log三种文件会被传到S3中,文件名格式:文件路径
+时间戳
+gz
的格式
|
|
Bucket下的日志,默认不会自动清理,日积月累,instance-id路径下的文件会越来越多,而目前aws cli的s3 cp
或s3 sync
,并没有提供根据创建时间的filter,有时候获取固定哪段时间的文件就不太方便。
虽然aws cli
没法直接精确地实现,但可以使用–exclude和–include参数,根据文件名字的命名规则来粗略地实现一下。
大概的命令如下:aws s3 sync s3://${elasticbeanstalk-region-account-id}/resources/environments/logs/publish/${environment-id}/${instance-id}/ logs/ --exclude "*" --include "*log1554[01234567]*"
其中
- elasticbeanstalk-region-account-id,environment-id,instance-id替换成实际环境的值
- 首先使用–exclude “*”,不包含任何值
- 再使用–include “*log1554[01234567]*“筛选出要的文件。include的匹配字串,需要根据实际时间和文件前缀进行修改。
日期的字符串形式和timestamp形式的转换, Linux下可以使用date
命令来进行转换。
date -d "@$TIMESTAMP"
来将timestamp转换为字符串形式,
date -d 'YYYY-MM-DDTHH:MM:SS' +%s
,将字符形式的日期转为timestamp。
Linux 小命令
过滤出access log中4XX的请求
筛选出4XX日志中第一级前缀最多的url
|
|
筛选出4XX请求最密集的分钟数
筛选出某分钟内所有的access 日志