抖音技术能力大揭密!钜惠大礼、深度体验,尽在火山引擎增长沙龙,就等你来! 立即报名>> 了解详情
写点什么

利用 VPC Flow Logs 统计 EC2 网络流量信息

2019 年 10 月 12 日

利用VPC Flow Logs统计EC2网络流量信息

在针对一套应用系统进行运维的过程中,运维人员往往希望能够对网络流量进行精确监控,以此作为评价系统运行状况的依据。此外,由于 EC2 的数据传输会根据目标地址的不同而产生一定的费用[1],精确掌握流量信息还有助于针对资源使用成本进行详细分析。


AWS 提供的 CloudWatch 服务可以针对每一个弹性网络接口(以下简称 eni)的流量进行监控,但运维人员往往还希望获得源 IP 地址、源端口、目标 IP 地址、目标端口、传输层协议等信息。AWS 提供的“VPC 流日志”(以下简称 Flow Logs)功能会针对每一个 eni 所产生的五元组信息进行监控记录 [2]。本文将介绍如何利用 Flow Logs 以及中国区域所提供的相关服务以实现针对 eni 的流量分析(例如:流入 VPC、流出 VPC、在 VPC 内跨 AZ 的各种流量),并基于 Python3.x 给出相关操作代码。


要使用 Flow Logs 功能,需要在 VPC 中进行激活。目前,在中国的两个 Region 内仅支持将 Flow Logs 发布到 CloudWatch Logs 中[3]。Flow Logs 将会在 CloudWatch Logs 中为 VPC 中的每一个 eni 创建一条日志流。



为了使用中国区目前可用的服务完成对 Flow Logs 的分析,需要将 CloudWatch Logs 中的日志流导出到 S3 存储桶中[4]。实际操作中可以按月导出,以便汇总统计。每一条日志流都会导出成一个子目录,目录内包含一个名为 000000.gz 的文件。




在对 Flow Logs 进行分析时,需要用到针对 IP 地址的操作。PostgreSQL 支持针对 IP 地址进行直接操作[5],因此本文利用 Amazon RDS 服务建立一个 PostgreSQL 数据库作为分析工具[6]。



如使用其它数据库作为分析工具,在使用 SQL 语句时需要对 IP 地址进行处理[7]。


通过以下代码可以完成对 S3 存储桶中日志文件的批量下载、解压:



其中各参数含义如下:


BUCKET_NAME – 保存 Flow Logs 的 S3 存储桶名称;


PREFIX_NAME – 导出 CloudWatch Logs 时所指定的子目录名称;


SAVE_PATH – 指明日志文件下载后所保存的本地路径。


日志文件解压后,需要批量导入到已建立好的 PostgreSQL 数据库中。批量导入、建表过程可通过如下代码实现:



DB_NAME、DB_USER、DB_PASS、DB_HOST、DB_PORT 为连接数据库所需参数,根据创建数据库时的设置进行填写。TABLE_NAME 为需要存放 Flow Logs 日志的表的名称。


在创建 TABLE_NAME 表时,需根据 Flow Logs 所记录的信息设置字段[2]。为便于标记流量状态,在所有日志文件导入完成后增加一个字段“transfer”,将在该字段内记录数值的含义如下:


0: 源 IP 与目标 IP 在相同可用区(同一 AZ 内的流量);


0: 源 IP 不属于 VPC CIDR(从互联网流入 VPC 的流量);


1: 源 IP 与目标 IP 不在相同可用区,但都属于 VPC CIDR(跨 AZ 的流量);


2: 源 IP 属于 VPC CIDR、目标 IP 不属于 VPC CIDR(从 VPC 流出到互联网的流量)。


本文所利用的 VPC 相关地址分配如下:



从上述截图中可以看出,本文所用实验环境包含 5 个子网、分布在 3 个可用区(AZ)。需要建立表明不同 AZ 所用 IP 地址段的数组、VPC 所用 IP 地址段的常量,如下:



为了准确标记出 data transfer 的状态,可以采用 4 条 SQL 语句实现。每条 SQL 语句实现的效果及最终结果如下表示意:



实现代码如下:



至此,已经在 PostgreSQL 数据库中建立起一张记录了 VPC 内所有 eni 流量记录的表。通过对该表执行 SQL 语句,可以获得相应的汇总信息。


例如,从表中汇总每个 eni 流出 VPC 的流量、并根据流出量的多少进行排序:


SELECT interface, sum(bytes)
FROM TABLE_NAME
WHERE transfer=2
GROUP BY interface
ORDER BY sum;
复制代码


结果如下:



https://s3.cn-north-1.amazonaws.com.cn/awschinablog/vpc_flow_log+(10).png


[1] Amazon EC2 定价, https://www.amazonaws.cn/ec2/pricing/


[2] 流日志记录,https://docs.amazonaws.cn/vpc/latest/userguide/flow-logs.html#flow-log-records


[3] 将日志发布到 CloudWatch Logs,https://docs.amazonaws.cn/vpc/latest/userguide/flow-logs-cwl.html#process-records-cwl


[4] 将日志数据导出至 Amazon S3,https://docs.amazonaws.cn/AmazonCloudWatch/latest/logs/S3Export.html


[5] Network Address Functions and Operators,https://www.postgresql.org/docs/9.6/functions-net.html


[6] 创建运行 PostgreSQL 数据库引擎的数据库实例,https://docs.amazonaws.cn/AmazonRDS/latest/UserGuide/USER_CreatePostgreSQLInstance.html


[7] Comparing IP Addresses in SQL,https://www.periscopedata.com/blog/comparing-ip-addresses-in-sql


作者介绍:


刘伟平


AWS APN 合作伙伴解决方案架构师,主要负责 AWS (中国)合作伙伴的技术支持工作,同时致力于 AWS 云服务在国内的应用及推广。加入 AWS 前,在 HP(HPE)服务超过 7 年,历任存储售前工程师、电信行业售前工程师、NFV 解决方案架构师,熟悉传统企业 IT 架构、私有云及混合云部署。


本文转载自 AWS 技术博客。


原文链接:


https://amazonaws-china.com/cn/blogs/china/vpc-flow-logs/


2019 年 10 月 12 日 13:48273
用户头像

发布了 1286 篇内容, 共 39.4 次阅读, 收获喜欢 42 次。

关注

欲了解 AWS 的更多信息,请访问【AWS 技术专区】

评论

发布
暂无评论
发现更多内容

区块链理财钱包开发,深圳区块链钱包开发公司

135深圳3055源中瑞8032

十年Java开发经验,走了五年弯路,整理了一份Java架构师进阶路线及进阶资料!

Java架构之路

Java 程序员 面试 程序人生 编程语言

基于Flink+ClickHouse打造轻量级点击流实时数仓

Apache Flink

flink

Apache Pulsar 社区周报:09-26 ~ 10-09

Apache Pulsar

大数据 开源 云原生 Apache Pulsar 消息中间件

工作流引擎,企业运作加速器

Marilyn

敏捷开发 工作流 快速开发

Pulsar 社区周报|09-19 ~ 09-25

Apache Pulsar

大数据 开源 Apache Pulsar 消息中间件

一周信创舆情观察(9.28~10.11)

统小信uos

技术解读丨GaussDB数仓高可用容灾利器之逻辑备份

华为云开发者社区

数据 容灾 备份

区块链来了 职业教育这么干

CECBC区块链专委会

区块链 职业教育

区块链的浪潮开始涌动了

CECBC区块链专委会

区块链 期货

是的,你没看错,自己的APP也能运行微信小程序了

fino星君

小程序flutter, 跨平台 小程序生态 移动开发

图解面试题-二叉树的所有路径

9527

Java 面试 算法 LeetCode 二叉树

异步excel导出组件设计和实现

Wayne Chu

Java 微服务 EasyExcel SpringCloud 服务治理

数字货币交易所开发特点,去中心化交易所

135深圳3055源中瑞8032

C++函数模板的偏特化

Jovany Wang

c++

Java之父都需要的一本能够更深入地了解Java编程语言的书

Java架构之路

Java 程序员 面试 编程语言

风雨边城

满天星

美食 旅行

阿里大牛精心整理了46张PPT,教你弄懂JVM、GC算法和性能调优

Java架构之路

Java 程序员 面试 编程语言 JVM

美团外卖实时数仓建设实践

StarRocks

数据库 数据仓库 实时数仓 数据库选择

一文带你了解文字识别

华为云开发者社区

技术 识别 文字

软件测试人员的职业发展之路

BY林子

软件测试 QA 职业发展

云算力矿机系统源码开发,IPFS矿机软件搭建

135深圳3055源中瑞8032

干掉PPT!现场编码的职级晋升答辩你参加过么?

华为云开发者社区

软件 开发者 API

如何获得工作成就感

滴滴普惠出行

动态代理玩不明白?别紧张,你只是缺少这个demo

小Q

Java 编程 程序员 开发 动态代理

区块链应用众多难题“卡脖子”

CECBC区块链专委会

区块链 金融 供应链融资

anyRTC直播带货解决方案

anyRTC开发者

音视频 WebRTC 直播 RTC

蚂蚁金服架构师分享一套内部Java并发编程进阶笔记,白嫖太香了

Java架构追梦

Java 学习 架构 面试 并发编程

USDT承兑支付平台搭建,区块链支付软件开发

135深圳3055源中瑞8032

如何花“一点点小钱”突破华为云CCE服务的“防线”

华为云开发者社区

容器 k8s

ClickHouse最佳实战之分布表写入流程分析

京东科技开发者

数据库

Study Go: From Zero to Hero

Study Go: From Zero to Hero

利用VPC Flow Logs统计EC2网络流量信息-InfoQ