速来报名!AICon北京站鸿蒙专场~ 了解详情
写点什么

通过 Amazon ElasticSearch 服务对 VPC 网络流量实时监控

  • 2019-10-21
  • 本文字数:7980 字

    阅读完需:约 26 分钟

通过 Amazon ElasticSearch 服务对 VPC 网络流量实时监控

ElasticSearch 详细介绍


简介:

AWS 托管的 Elasticsearch 是一款非常流行的基于 Apache Lucene™ 的、开源的、近实时的分布式搜索分析引擎,Lambda 则是 AWS 上最为便捷、灵活的无服务器函数服务。有了这两者的结合,您可以在 AWS 上轻松部署并实时监控您的各项资源及应用的使用情况(例如:各种日志,业务数据等)。我们非常高兴地看到,这两项服务已经在 AWS 宁夏区域正式上线了。本案例将以宁夏区域为依托,手把手教您:如何使用 AWS 托管服务对 VPC 中的网络流量进行实时监控。

什么是 ElasticSearch

Elasticsearch 是一款非常流行的基于 Apache Lucene™ 的、开源的、近实时的分布式搜索分析引擎。


无论在开源还是专有领域, Lucene 可以被认为是迄今为止最先进、性能最好的、功能最全的全文检索引擎库。但是,Lucene 只是一个库,想要使用它,你必须使用 Java 来作为开发语言并将其直接集成到你的应用中,更糟糕的是,Lucene 非常复杂,你需要深入了解检索的相关知识来理解它是如何工作的。


Elasticsearch 也使用 Java 开发并使用 Lucene 作为其核心来实现,但是它的目的是通过简单的 RESTful API 来隐藏 Lucene 的复杂性,从而让全文搜索变得简单。它被用作全文检索、结构化搜索、数据分析、复杂的语言处理、地理位置和对象间关联关系用途。


Elasticsearch 具有如下特点:


  • 开源(遵循 Apache License 2.0)

  • 检索性能高效。对于每次实时查询,基本可以达到全天数据查询的秒级响应;

  • 数据分布式存储,集群线性扩展

  • 易于从多样的数据源中采集数据,并注入到 Elasticsearch

  • 前端操作炫丽。Kibana 界面上,只需要点击鼠标,就可以完成搜索、聚合功能,生成炫丽的仪表板。


根据TechCrunch于 2017 年 4 月公布的的开源软件知名度排行榜中,Elasticsearch 位列第 7 位。



ElasticSearch 的典型应用场景

众所周知,业界存在各种各样的数据库和搜索引擎。那么基于什么样的业务或需求您可以考虑使用 ElasticSearch 呢?下面列举几个典型的应用场景:


  • 全文搜索


ElasticSearch 提供丰富的搜索与导航体验。例如:您的客户可以通过输入价格、产品特性和品牌等字段值来缩小搜索结果范围,并且支持创建高级搜索筛选条件、在输入时提供搜索建议以及近乎实时的索引更新。


Wikipedia 使用 Elasticsearch 提供带有高亮片段的全文搜索,还有 search-as-you-type 和 did-you-mean 的建议。


GitHub 使用 Elasticsearch 对 1300 亿行代码进行查询。


  • 日志、IoT、移动设备分析


分析网站、移动设备、服务器、传感器和其他来源生成的非结构化和半结构化日志,用于数字营销、应用程序监控、欺诈检测、广告技术、游戏及 IoT 等多种应用场景。结合使用 Amazon Kinesis、Logstash 或 Amazon CloudWatch Logs 来捕捉和预处理日志数据,并将其加载到 Amazon Elasticsearch 服务中。然后,您可以使用 Kibana 和 Elasticsearch 查询 DSL 来搜索、分析与显示数据,以便获取关于用户和应用程序的有价值的信息。


Expedia 使用 Amazon Elasticsearch 服务将应用程序日志和 Docker 日志进行集中化存储和分析,实时掌握应用状态和故障分析。


  • 实时监控(应用程序/基础架构)、故障分析


在面向客户的应用程序和网站中采集活动日志。使用 Logstash 将这些日志推送到 Amazon Elasticsearch Service 域。Elasticsearch 会对数据编制索引,并近乎实时地 (在不到一秒内) 将数据提供给分析工具。然后,您可以使用内置 Kibana 插件使数据可视化,并执行中断与问题识别等运行分析工作。凭借 Elasticsearch 的地理空间分析,您可以找出发生问题的地理区域。然后,故障排除小组可以搜索索引并进行统计汇总,以确定根本原因并解决问题。


Netflix 使用 Amazon Elasticsearch 对众多的业务系统和基础架构进行自动化运维、故障发现和处理


  • 业务、点击流分析


提供关于数字内容的实时指标,让作者和营销人员能够以最有效的方式与客户沟通。流式将数据加载到 Amazon Elasticsearch 服务之后,您可以聚合、筛选与处理这些数据,并近乎实时地刷新内容表现控制面板。


Hearst Corporation 利用 Amazon Elasticsearch 服务、Amazon Kinesis Streams 等服务构建了一个点击流分析平台,每天可以传输和处理来自全球 300 多个 Hearst 网站 的 30TB 数据。借助该平台,Hearst 能够在数分钟内将来自网站点击的整个数据流转化为聚合数据,并将其提供给编辑。

为什么选择 Amazon ElasticSearch 服务

虽然 ElasticSearch 能够在上述诸多场景中帮到您,但是伴随着您业务的快速发展和对可用性、安全性要求的不断增加,您仍然会面临安装、维护、升级、扩展、安全性等方面的诸多挑战。Amazon ElasticSearch 服务能够让您在如下 6 个方面轻松应对:


  • 支持多种开源 API 和工具


Amazon Elasticsearch 服务让您可以直接访问 Elasticsearch 开源 API,因此您无需学习任何新的编程技术。同时还支持 Logstash 这种开源数据注入、转换和加载工具,和 Kibana 这种开源可视化工具。让您轻松搭建 ELK 架构(Elasticsearch + Logstash + Kibana)或 EKK 架构(Elasticsearch + Kinesis + Kibana)


  • 易于使用


您可以使用 Amazon Elasticsearch 服务在几分钟内部署一个生产就绪型 Elasticsearch 集群,无需预置基础设施或安装与维护 Elasticsearch 软件。Amazon Elasticsearch 服务是一项完全托管的服务,可以简化软件修补、故障恢复、备份和监控等耗时的管理任务。


  • 轻松扩展


Amazon Elasticsearch 服务允许您启动 PB 级群集。借助此服务,您可以通过 Amazon CloudWatch 指标来监控群集,只需一个 API 调用或在 AWS 管理控制台中点击几下即可扩大或缩减群集规模。您可以选择不同的实例类型和存储选项 (包括 SSD 支持的 EBS 卷),从而让集群的配置符合自己的性能要求。


  • 安全


Amazon Elasticsearch 服务可为您的域提供多个级别的安全性。它使用 VPC 提供网络隔离,使用 IAM 策略提供细粒度访问控制。Amazon Elasticsearch 服务会定期应用安全补丁,让您的域处于最新状态。


  • 高度可用


Amazon Elasticsearch 服务可以感知可用区并在同一区域中的两个可用区之间复制数据,从而实现高可用性。Amazon Elasticsearch 服务可以监控集群的运行状况并自动替换故障节点。


  • 与其他 AWS 服务紧密集成


Amazon Elasticsearch 服务内置集成多种其他 AWS 产品,其中包括用于无缝注入数据的 Kinesis + Lambda、AWS IOT 和 Amazon CloudWatch Logs、支持审核功能的 AWS CloudTrail、支持安全功能的 Amazon VPC 和 AWS IAM 以及支持云编排功能的 AWS CloudFormation。


说了这么多,Amazon Elasticsearch 服务究竟如何使用?能够带来什么好处?下面具体用一个案例来详细说明

使用 Amazon ElasticSearch 服务实时监控 VPC Flow Log

【目标】

宁夏区域,将 VPC Flow Log 实时注入到 Amazon ElasticSearch 服务中,并使用仪表盘进行实时监控和分析。

【使用到的 AWS 服务】

  • Amazon ElasticSearch

  • Amazon VPC Flow Logs

  • AWS Lambda

  • Amazon Cloudwatch

【数据源】

  • VPC Flow Logs

  • AWS Cloudtrail Logs

  • 客户自定义 Logs


对于 Cloudtrail Logs,您可以通过设置将其输出到 CloudWatch Log 中。


对于客户自定义 Logs,您可以通过安装/配置 CloudWatch Log Agents 将其输出到 CloudWatch Log 中,或者使用 logstash 将其直接注入到 Amazon ElasticSearch 服务中。


鉴于篇幅有限,在本例中,我们只示范如何将 VPC Flow Logs 注入到 Amazon ElasticSearch 服务中,并使用 Kibana 展示。

【架构图】

【操作步骤】

任务__1:设置 Amazon ElasticSearch 域

在这一步,您将创建一个 Amazon Elasticsearch 域(domain),用来存储和分析日志。


创建域的同时,AWS 会自动同时安装 Kibana,随后您将会通过各种样式的图表在 Kibana 中展示这些数据。


  • 在 AWS 管理控制台中


在左上角“服务”中,导航到 ElasticSearch Service,点击<创建新域>



  • 输入域名,例如:log-management,Elasticsearch 版本选择“0“,然后点击<下一步>



  • 在《配置集群》页面中


《节点配置》部分,“实例计数”设置为 2,复选“启用专用主节点”和“启用区感知”,“专用主实例计数”选择默认值“3”,其它保留默认设置,然后点击<下一步>



注: 此处的设置仅为本示例使用,对于生产系统,建议您根据实际需要选择合适的实例数量和类型。请点击此处获得更多信息。


  • 在《设置访问权限》页面中


《网络配置》部分,选择“公有网络权限”


《访问策略》部分,“将域访问策略设置为”选择“允许从特定 IP 访问域”



在弹出的窗口中,输入您要访问该 ES 的的公网 IP 地址段(逗号分隔)。然后点击<确定>



然后点击<下一步>


  • 在《审核》页面中,点击<确认>


至此,AWS 将会为您创建一个 ElasticSearch 集群,此过程大概需要 10-15 分钟。


点击该 ES 域,在“概述“页面,记录下”终端节点“名称,形如:search-vpc-logs-xxxxxxxx.cn-northwest-1.es.amazonaws.com.cn,这将在后续创建 Lambda 函数时用到



于此同时,我们可以继续进行下一步

任务__2:设置 VPC Flow Logs

在这一步,您将选取一个 VPC,开启 Flow Logs 功能,并将日志发送到 CloudWatch 中。这样,随后您可以通过 Lambda 将其注入到任务 1 中创建的 ElasticSearch 中。


  • 在 AWS 管理控制台中


在左上角“服务”中,导航到 CloudWatch,在左侧面板中,点击<日志>


  • 创建日志组


如果您从未创建过日志组,


则在浏览器中部会显示《欢迎使用 CloudWatch 日志》页面,点击<创建日志组>按钮


如果您之前创建过日志组,


请点击<操作>按钮,在下拉列表中,选择<创建日志组>



  • 在弹出窗口《创建日志组》中


输入日志组名称,例如:VPC-Logs。点击<创建日志组>



  • 在 AWS 管理控制台中,导航到 VPC 服务

  • 选择一个将要开启 Flow Logs 的 VPC。例如:默认的 VPC

  • 在页面下方,点击<流日志>标签页


点击<创建流日志>



  • 在弹出窗口《创建流日志》中


点击<设置权限>



  • 在新的弹出页面中,AWS 需要您授予 VPC Flow Logs 写入 CloudWatch 日志组(即第 3 步创建的日志组)的权限,并会创建一个名为 flowlogsRole 的角色。在这里点击<允许>



  • 该页面关闭后,会返回到第 7 步的《创建流日志》的窗口中,


点击“角色”,在下拉选项中,选择刚刚创建的角色“flowlogsRole”


点击“目标日志组”,输入第 3 步创建的日志组名称,例如:VPC-Logs


点击<创建流日志>



恭喜 ,您已成功将 VPC 的流日志实时注入到 CloudWatch 日志组 VPC-Logs 中。稍微等少许时间,在该日志组中,您应该能够看到不断有新的日志产生。

任务__3:通过 Lambda 将 CloudWatch 日志组中的数据流实时注入到 ElasticSearch 中

  • 在 AWS 管理控制台中,导航到 Lambda 服务,点击“创建函数”



  • 在“创建函数”页面


选择“从头开始创作”


在“名称”一栏,输入 Lambda 名称,例如“LogsToElasticSearch_vpc-logs”


在“角色”一栏,选择“创建自定义角色”。因为 Lambda 在执行时,需要您授权相应的权限,以便能够从 Cloudwatch Logs 中读取数据,并写入到 ElasticSearch 中,所以在接下来的步骤中,你将会创建一个可供 Lambda 执行的角色



  • 在新的弹出页面中


输入“角色名称“,例如:lambda_elasticsearch_execution,点击<查看策略文档>,<编辑>,在弹出的提示窗口中点击<确定>,将如下策略代码粘贴其中,点击<允许>


{


"Version": "2012-10-17",


"Statement": [


{


"Effect": "Allow",


"Action": [


"logs:CreateLogGroup",


"logs:CreateLogStream",


"logs:PutLogEvents"


],


"Resource": [


"arn:aws-cn:logs:*:*:*"


]


},


{


"Effect": "Allow",


"Action": "es:ESHttpPost",


"Resource": "arn:aws-cn:es:*:*:*"


}


]


}



  • 角色创建后,将返回到“创建函数”页面


在“角色”一栏,选择“选择现有角色”


在“现有角色”一栏,选择上一步创建的角色,例如:lambda_elasticsearch_execution


点击<创建函数>


  • 在新页面的“Designer”部分


在左侧栏“添加触发器”中,点击“CloudWatch Logs”



在“配置触发器”部分,


“日志组”选择任务 2 中创建的日志组,例如:VPC-Logs


“筛选器”输入任意名称,例如 MyFilter


“筛选器模式”留空


请确保勾选“启用触发器”


点击<添加>



  • 点选页面中部的 Lambda 函数按钮,页面下方将会出现”函数代码”部分



  • 在“函数代码“部分


从附录 1 中下载 Lambda 所需的 node.js 代码,并粘贴到代码编辑器中,


代码中,将:


var endpoint = ‘search-xxxxxxxxxxx.cn-northwest-1.es.amazonaws.com.cn;


改为:


任务 1 中记录下的”终端节点”名称(注意:不包括 https://)


其它选项保持不变,页面右上方点击<保存>


恭喜 ,您已成功将 CloudWatch 日志组 VPC-Logs 中的日志,实时注入到了 ElasticSearch 中


在 ElasticSearch 服务中,选择域 vpc-logs,点击“索引“页面,您将会看到一个新的 index(cwl-2018.x.x)已经创建,并产生了一些新的数据


任务__4:通过 Kibana 图形化展示数据

在这一步,您将使用一个已经创建好的仪表盘 json 文件(下载地址见附录 2),通过 Kibana 进行展示.


  • 在 AWS 管理控制台中


左上角“服务”中,导航到 ElasticSearch Service,在左侧导航栏中,点击之前创建的域 log-management。在“概述“页面,点击“Kibana”后面的链接,打开 Kibana


  • 在打开的 Kibana 管理页面中


将“ Index pattern “中的 logstash-,修改为 cwl-。其它保持不变,点击


此时,您将会看到所有以“cwl-“开头的 index 的所有字段(fields)



点击左侧导航栏中的,您将会看到 ElasticSearch 中所有的数据



  • 在 Kibana 的左侧导航栏中,点击,页面中部点击


在右上方点击



在弹出的窗口中,选择刚刚下载的 VPC-Logs-Kibana6.json,点击<Yes,overwrite all>


在新弹出的窗口中,点击


此时,您会看到已经导入了 1 个 Dashboards 和 7 个 Virtualizations



点击



统计和分析页面即呈现在您的面前了。


附录

  1. LambdaVPCLogsToES 下载地址:https://s3-us-west-2.amazonaws.com/cn-demo-scripts/LambdaVPCLogsToES.js

  2. VPC-Logs-Kibana6.json 下载地址:https://s3-us-west-2.amazonaws.com/cn-demo-scripts/VPC-Logs-Kibana6.json


作者介绍:


田明晶


AWS 解决方案架构师。20 年 IT、互联网工作经验。致力于帮助客户更快、更高效地借助 AWS 各项服务在国内及海外完成业务部署。专注于大规模并发后台架构、电商系统、互联网应用等领域,在数据库/大数据应用/DevOps 及无服务器架构方面有着广泛的设计经验。


本文转载自 AWS 技术博客。


原文链接:


https://amazonaws-china.com/cn/blogs/china/amazon-elasticsearch-service-vpc/


2019-10-21 08:00908

评论 1 条评论

发布
用户头像
请问代码还有么?
2020-02-13 14:52
回复
没有更多了
发现更多内容

工赋开发者社区 | 工业5.0为何是下一个10年的制造业关键性变革方向?

工赋开发者社区

工赋开发者社区 | 事件驱动架构要避开的 5 个陷阱

工赋开发者社区

软件测试/测试开发 | Appium环境安装与架构介绍

测试人

软件测试 自动化测试 测试开发 appium

佛萨奇2.0上链DApp开发|佛萨奇链上开发技术

薇電13242772558

dapp

云图说 | 华为云主机安全服务(新版)来啦!

华为云开发者联盟

云计算 后端 华为云 云图说 企业号 1 月 PK 榜

元宇宙成本高吗?构建元宇宙需要多少钱?

3DCAT实时渲染

元宇宙 元宇宙开发 元宇宙成本

NLP知识图谱项目合集(信息抽取、文本分类、图神经网络、性能优化等)

汀丶人工智能

人工智能 自然语言处理 深度学习 知识图谱

镭速-跨国车企数据高速、安全跨境传输解决方案

镭速

《鹅鸭杀》爆火,一文带你了解如何实现顶流社交游戏

声网

游戏开发 RTC 应用架构

Tokio 中 hang 死所有 worker 的方法

Databend

如何通过C#/VB.NET在 Excel 中对形状进行分组或取消分组

在下毛毛雨

C# .net Excel

云上的米开朗基罗:在不确定时代,寻找建筑般的确定性

华为云开发者联盟

云计算 后端 华为云 企业号 1 月 PK 榜

汽车虚拟仿真,实时云渲染至关重要!

3DCAT实时渲染

云渲染 虚拟仿真 实时渲染 汽车仿真

Mac免费实用的读写软件Tuxera NTFS2023

茶色酒

Tuxera NTFS2023\ Tuxera NTFS2023

【网络安全】记一次红队渗透实战项目

网络安全学海

网络安全 信息安全 计算机 渗透测试 漏洞挖掘

直播预告 | 2月2日,腾讯Light与你一同用AI,让美好变更好

腾源会

公益

【必看知识】PCB设计中焊盘的设计标准

华秋PCB

工具 PCB PCB设计

软件测试/测试开发 | Appium 用例录制

测试人

软件测试 自动化测试 测试开发 测试用例 appium

接口测试这件小事

石臻臻的杂货铺

接口测试

极光笔记 | 十分钟搞懂手机号码一键登录

极光JIGUANG

前端 接口 sdk 一键登录

java课程学习难度怎么样

小谷哥

Gartner:流程挖掘市场发展空间巨大,2022年预计市场规模将超10亿美元

九科Ninetech

性能提升 40 倍!我们用 Rust 重写了自己的项目

Peefy

rust 编程语言 #go Python.

可以手动磨皮的p图软件portraiture2023

茶色酒

Portraiture2023

大数据培训课程后如何找到工作

小谷哥

计算机网络到底应该怎么学?

Java永远的神

程序员 面试 计算机网络 计算机 tcpip

云原生数据交付平台Kuda在AI场景下的模型分发实践

Geek_c4ea78

机器学习 开源 Kubernetes 容器 云原生

API 网关策略二三事

API7.ai 技术团队

APISIX 网关设计

在spring boot3中使用native image

程序那些事

spring 程序那些事 spring boot3

不看后悔,一文带你入门Go云原生微服务

王中阳Go

golang 高效工作 学习方法 微服务 云原生

SimMIM:更简单的掩码图像建模

Zilliz

通过 Amazon ElasticSearch 服务对 VPC 网络流量实时监控_语言 & 开发_亚马逊云科技 (Amazon Web Services)_InfoQ精选文章