使用 AWS ELB 获取访问日志!


大家好!
我是来自 Beyond Inc. 大阪办公室的拉面王 Hide。
这是我的第二篇博文。
这次,我想和大家分享一下如何使用 ELB 获取访问日志。
上次我写了一篇名为“用 Makefile 轻松使用 Docker 命令!”的文章,
如果您正在使用 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 的波斯猫撰写的文章!
感谢您阅读本文!
0














