使用 AWS ELB 获取访问日志!

鸡肉荞麦面 Zagin 总店(大阪市肥后桥)

 

大家好!
我是来自 Beyond Inc. 大阪办公室的拉面王 Hide。
这是我的第二篇博文。
这次,我想和大家分享一下如何使用 ELB 获取访问日志。
上次我写了一篇名为“用 Makefile 轻松使用 Docker 命令!”的文章,
如果您正在使用 Docker,欢迎阅读。

使用 Makefile 轻松使用 docker 命令!

 

 

使用ELB获取访问日志有什么好处?


读到这篇文章的你们中有些人可能会想: “啊?我可以在服务器上保存访问日志,所以这没必要!”

当然可以在服务器上获取访问日志,所以
获取 ELB 的访问日志可能意义不大……
发帖人我也曾想过,“既然可以在服务器上获取,那又何必呢……”

 

 

但是,如果您想分析访问日志呢?
如果您的服务器分布在多台机器上,访问日志将存储在每台服务器上。

因此,即使您尝试分析访问日志,由于它们存在于不同的服务器上,
整合和分析访问日志需要大量的时间和精力。

例如,您可以使用 CloudWatchLogs 聚合日志,
但这种情况下您需要使用 IAM 管理权限,在目标服务器上安装代理,并
编辑 awslogs.conf 中的设置……


您还可以
使用名为 fluentd 的开源数据日志收集工具但是,这同样需要安装和配置该工具,以及使用 IAM 管理权限。
此外,指定 S3 作为聚合目标可能相当耗时。

 

 

要分析访问日志,无需配置 CloudWatchLogs 或 fluentd;
只需启用服务器前端 ELB 的访问日志,
即可轻松聚合访问日志

所有访问日志都聚合在 S3 中,便于存储和分析。
此外,通过使用 AWS Athena 或 Redshift,
您可以使用标准 SQL 轻松分析 Amazon S3 中的数据!

此外,即使发生挂起且访问日志缺失,
您也可以轻松查看 ELB 访问日志以了解发生了什么。

 

由于 ELB 是 AWS 提供的完全托管服务,您可以放心使用。
即使出现问题,AWS 也会负责修复。

您可以放心,即使启用 ELB,您几乎也不会遇到无法获取访问日志的情况。

 

既然您已经了解了在 ELB 中启用访问日志的好处
,那么让我们来看看设置步骤吧!

 

 

设置程序

①前往 EC2⇛负载均衡器

 

 

 

② 从操作菜单中单击【编辑属性】。

 

 

 

③选择“启用访问日志”

 

 

 

④指定 S3 存储桶名称

 

 

⚠①您的 S3 存储桶只能使用小写字母、数字、句点 (.) 和连字符 (-) 的组合。
如果您输入除上述组合之外的任何内容,将会收到如下图所示的错误信息。

 

 

 

⚠②如果您输入的 S3 存储桶名称已被使用,则会显示警告,并要求您输入其他名称。

 

⑤ 勾选【创建此位置】并点击保存。

 

 

⑥前往 S3 并点击[您创建的 S3 存储桶名称]

 

 

 

 

⑦ 确认访问日志文件存在于以下目录中后,该过程即完成。

*日志文件每5分钟生成一次。

/已创建 S3 存储桶名称/AWSLogs/弹性负载均衡账户 ID 号/弹性负载均衡/区域名称/创建年份/创建月份/创建日期/

 

 

 

 

 

如何查看访问日志

①前往 IAM 并点击【创建用户】

 

 

② 填写必要信息

*请务必在访问类型中勾选【程序化访问】。

 

 

 

③选择[AmazonS3ReadOnlyAccess]策略。

 

 

 

 

④ 检查是否有输入错误并创建用户

 

 

 

⑤下载CSV文件

*以防万一,请记下您的访问密钥和秘密访问密钥。

 

 

⑥安装 AWS CLI

*有关安装 AWS CLI 的信息,请参阅AWS 官方文档

⚠这里我们使用的是 CentOS 7。
如果您使用的是 Amazon Linux 2,则已安装,无需安装。

 

⑥-① 请确保 Python 版本为 2.7 或更高版本。
*如果未安装 Python,请单独安装。
*在 CentOS 7 上,默认安装的是 2.7.5 版本。

python --version Python 2.7.5

 

 

⑥-② 安装捆绑安装程序

curl "https://s3.amazonaws.com/aws-cli/awscli-bundle.zip" -o "awscli-bundle.zip" sudo yum install -y unzip unzip awscli-bundle.zip sudo ./awscli-bundle/install -i /usr/local/aws -b /usr/local/bin/aws aws --version

 

 

⑦配置AWS CLI

aws 配置 AWS 访问密钥 ID [无]:输入您创建的 IAM 的访问密钥 AWS 秘密访问密钥 [无]:输入您创建的 IAM 的秘密密钥 默认区域名称 [无]:输入区域 默认输出格式 [无]:输入您想要输出的文件格式

 

 

⑧ 输出访问日志

 
*使用 AWS CLI S3 命令列出 S3 存储桶中的文件:`aws s3 ls s3://tokuhara-test-alb-access-log/AWSLogs/485076298277/elasticloadbalancing/ap-northeast-1/2021/01/18/ 2021-01-18 08:05:12 884 485076298277_elasticloadbalancing_ap-northeast-1_app.tokuhara-test-alb.20a1e21abd53f9e7_20210118T0805Z_54.65.29.6_53o3j7p0.log.gz` *将文件复制到本地:`aws s3 cp` s3://tokuhara-test-alb-access-log/AWSLogs/485076298277/elasticloadbalancing/ap-northeast-1/2021/01/18/485076298277_elasticloadbalancing_ap-northeast-1_app.tokuhara-test-alb.20a1e21abd53f9e7_20210118T2355Z_52.68.106.116_5qgag1lu.log.gz ./ *检查是否已复制到本地 ls -l ./ -rw-r--r--. 1 root root 295 1月18日 23:55 485076298277_elasticloadbalancing_ap-northeast-1_app.tokuhara-test-alb.20a1e21abd53f9e7_20210118T2355Z_52.68.106.116_5qgag1lu.log.gz *解压压缩文件 gunzip 485076298277_elasticloadbalancing_ap-northeast-1_app.tokuhara-test-alb.20a1e21abd53f9e7_20210118T2355Z_52.68.106.116_5qgag1lu.log.gz *查看访问日志 less 485076298277_elasticloadbalancing_ap-northeast-1_app.tokuhara-test-alb.20a1e21abd53f9e7_20210118T2355Z_52.68.106.116_5qgag1lu.log http 2021-01-21T00:10:51.821814Z app/tokuhara-test-alb/20a1e21abd53f9e7 63.143.XX.XX:45662 - -1 -1 -1 503 - 110 337 "GET http://example.com:80/ HTTP/1.1" "Go-http-client/1.1" - - arn:aws:elasticloadbalancing:ap-northeast-1:485076298277:targetgroup/tokuahra-test-tg-ec2/ee1e50320f3398ec "Root=1-6008c68b-4198b51b343e8f127df30e01" "-" "-" 0 2021-01-21T00:10:51.821000Z "forward" "-" "-" "-" "-" "-" "-"                                                                                                                                                                                                                                                                                                      

 

 

 

输出格式

ELB访问日志已设置完毕!!感谢您的辛勤工作٩(ˊᗜˋ*)و
但是,即使您已设置输出访问日志,如果您不知道如何读取它们,也无法调查问题原因……

 

因此,我参考了 AWS 官方文档,
ELB 获取的示例访问日志整理成
以下格式,并清晰地显示了每个项目对应的值和说明。
请查看并了解其中包含哪些项目!

 

http 2021-01-21T00:10:51.821814Z app/tokuhara-test-alb/20a1e21abd53f9e7 63.143.XX.XX:45662 - -1 -1 -1 503 - 110 337 "GET http://example.com:80/ HTTP/1.1" "Go-http-client/1.1" - - arn:aws:elasticloadbalancing:ap-northeast-1:485076298277:targetgroup/tokuhara-test-tg-ec2/ee1e50320f3398ec "Root=1-6008c68b-4198b51b343e8f127df30e01" "-" "-" 0 2021-01-21T00:10:51.821000Z "forward" "-" "-" "-" "-" "-" "-"

 

场地 解释 样本值
类型 请求或连接的类型 http
时间 负载均衡器收到客户端请求的时间(UTC)。 2021-01-21T00:10:51.821814Z
肘部 ELB 的名称 app/tokuhara-test-alb/20a1e21abd53f9e7
客户端:端口 发送请求的客户端的 IP 地址和端口 63.143.XX.XX:45662
目标:端口 处理此请求的目标的 IP 地址和端口 -
请求处理时间 从 ELB 收到请求到将请求发送到目标所经过的总时间。 -1
目标处理时间 从ELB向目标发送请求到目标开始发送响应头所经过的总时间 -1
响应处理时间 从ELB收到目标服务器的响应头到开始向客户端发送响应所经过的总时间 -1
elb_status_code 负载均衡器响应的状态码 503
目标状态码 目标响应的状态码 -
接收到的字节数 客户端收到的请求大小 110
发送字节 返回给客户端的响应大小 337
“要求” 客户端请求中,该行内容用双引号括起来。 "GET http://example.com:80/ HTTP/1.1"
"user_agent" 用于标识发出请求的客户端的用户代理字符串 "Go-http-client/1.1"
ssl_cipher SSL 加密套件,如果不是 HTTPS,则设置为 - -
ssl_protocol SSL 协议,如果不是 HTTPS,则设置为 - -
目标组_arn 目标组的亚马逊资源名称 arn:aws:elasticloadbalancing:ap-northeast-1:485076298277:targetgroup/tokuahra-test-tg-ec2/ee1e50320f3398ec
"trace_id" X-Amzn-Trace-Id 标头的内容(用双引号括起来)。 "Root=1-6008c68b-4198b51b343e8f127df30e01"
"域名" 客户端在 TLS 握手期间提供的 SNI 域名(用双引号括起来)。如果不是 HTTPS,则设置为 -。 "-"
"chosen_cert_arn" 要提供给客户端的证书的 ARN(用双引号括起来),如果不是 HTTPS,则设置为 - "-"
匹配规则优先级 与请求匹配的规则的优先级值 0
请求创建时间 ELB 收到客户端请求的时间 2021-01-21T00:10:51.821000Z
“actions_executed” 处理请求时要执行的操作(用双引号括起来) “向前”
"重定向网址" HTTP 响应的 Location 标头中的重定向目标 URL(用双引号括起来) "-"
"error_reason" 错误原因代码(用双引号括起来) "-"
"target:port_list" 处理此请求的目标 IP 地址和端口列表(用双引号括起来),以空格分隔。 "-"
"target_status_code_list" 来自目标响应的状态码列表(用双引号括起来),以空格分隔。 "-"
“分类” 不同步缓解分类(用双引号括起来) "-"
分类原因 分类原因代码(用双引号括起来)。 "-"

 

 

 

费用

关于费用,ELB 会收取费用。
根据 AWS 官方 ELB 文档,
AWS 东京区域应用程序负载均衡器的使用费用如下:

 

接下来,获取访问日志后,会将其存储在 S3 中,因此会产生 S3 费用。
根据 AWS 官方 S3 文档,
AWS 东京区域的 S3 定价如下:

 

 

这有点令人困惑,但对于前 50 TB 的数据,您每月将按每 GB 0.023 美元收费。

例如,如果一个月内累计了 10GB 的日志文件,则第一个月大约收取 24.28 日元;
第二个月累计了 20GB,大约收取 48.56 日元;
第三个月累计了 30GB,大约收取 72.54 日元。
从容量超过 450TB 的月份开始,每 GB 将收取 0.022 美元的费用。

通过这样的定价计算,可以看出,获取访问日志的成本非常低。

 

 

 

概括

您觉得怎么样?
您是否能够非常轻松地汇总访问日志?

启用ELB访问日志聚合功能,可以节省时间和精力,而且
几乎不会出现无法获取日志的问题,因此可以稳定使用!
如果服务器出现异常并产生日志错误,也可以轻松进行调查!

因此,请务必启用 ELB 访问日志,
以确保服务器安全便捷地运行。

最后,如果您正在阅读这篇文章,并且现在对 S3 感兴趣,那么
请查看下面由 Beyond 的波斯猫撰写的文章!

【AWS 新手入门】Amazon S3 快速指南

 

感谢您阅读本文!

 

如果您觉得这篇文章有用,请点击【点赞】!
0
加载中...
0票,平均分:0.00/10
23,634
X Facebook Hatena书签 口袋

这篇文章的作者

关于作者

隐藏@基础设施工程师

一切都始于一次非常有趣的面试。
我职业生涯中期加入了大阪的系统解决方案部门,
目前负责服务器和云的构建与运维!
我持有LPIC1、AWS SAA和OCI架构师助理认证。

事实上,我超爱拉面,
在大阪已经探访过100多家拉面店了(。-∀-)我正在努力成为Nibi Beyond

我也有推特账号,请关注我哦 (´∇`)
点击右上角的推特图标!!