【AICon】探索RAG 技术在实际应用中遇到的挑战及应对策略!AICon精华内容已上线73%>>> 了解详情
写点什么

通过 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:00778

评论 1 条评论

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

没有性能瓶颈的无限级菜单树应该这样设计

Tom弹架构

Java 架构 设计模式

何时适合进行自动化测试?(下)

禅道项目管理

自动化测试

linux 设置VPN

webrtc developer

Linux vpn

学长带路学吉他,这几招足够了

懒得勤快

华为云·核心伙伴开发者训练营——产业云专场在东莞松山湖圆满落幕

华为云开发者联盟

华为云 鲁班会

四种 AI 技术方案,教你拥有自己的 Avatar 形象

阿里云视频云

人工智能 阿里云 计算机视觉 视频云 元宇宙

数据库审计是什么意思?作用是什么?

行云管家

数据库 安全 IT运维 数据库审计

RabbitMQ详解——RabbitMQ架构部署(四)

BeyondLife

RabbitMQ Mirror Queue Federation

Vue进阶(幺陆肆):自定义指令之拖拽指令

No Silver Bullet

Vue 11月日更

Node.js 17 新特征简介

devpoint

node.js Promise 11月日更

2022第十五届北京国际智慧城市、物联网、大数据博览会

InfoQ_caf7dbb9aa8a

能让你从P6+学到P9也只有马士兵老师了,全套学习资源分享

Java架构追梦

Java 编程 架构 面试 马士兵

架构实战营模块七作业

Geek_d18264

架构实战营

【等保小知识】等保与分保的三大区别汇总分析

行云管家

网络安全 数据安全 等保 分保

GitHub点击量破百万访问,不愧是被称阿里神作的JDK源码笔记

Sakura

Java 源码 架构 jdk 面试

`MD`语法技巧Typora

sec01张云龙

11月日更 MD MD写法

看企业如何玩转低代码,引发效率革命

行云创新

云原生 低代码 开发 直播 双十一

RabbitMQ详解——服务端存储机制(二)

BeyondLife

RabbitMQ mnesia ETS

顶会VLDB‘22论文解读:CAE-ENSEMBLE算法

华为云开发者联盟

算法 时间序列 华为云数据库 深度神经网络

华为云天筹AI求解器:智能世界是道迷人的数学题

脑极体

《黑客之道》kali Linux之NMAP高级使用技巧和漏洞扫描发现

学神来啦

Linux 渗透 kali nmap

恒源云(GPUSHARE)_CAN: 借助数据分布提升分类性能

恒源云

深度学习

你需要知道的 19 个 console 实用调试技巧

CRMEB

CSS JavaScript DOM console crmeb

“智慧粮仓”守卫中国饭碗

ThingJS数字孪生引擎

大前端 物联网 可视化

初入云计算行业,可以考取哪些云计算证书?

行云管家

云计算 腾讯云 阿里云 证书 IT运维

超全整理:程序员都在用什么工具?

华为云开发者联盟

程序员 技术 设计 编程语言 开发工具

《个保法》施行 | App 隐私合规检测双十一尝鲜仅需99元

蚂蚁集团移动开发平台 mPaaS

隐私保护 移动开发 监管合规

网课录屏用什么软件好?Camtasia极简操作,课程重点一目了然

淋雨

Camtaisa

托管页前端异常监控与治理实战

百度Geek说

大前端

iOS开发-百度一面总结

iOSer

ios 面试 iOS面试 ios开发 百度面试

腾讯安全姬生利:云原生环境下的“密码即服务”

腾讯安全云鼎实验室

云原生 加密

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