背景说明
应用系统的日志收集与分析工作对运维来说至关重要。常见的系统解决方案中开源技术栈 ELK(Elastic Stack: Elasticsearch, Logstash, Kibana)是当前比较流行的选择。下面我们会讨论另一种构建于云原生设计的类似于 ELK 的解决方案 EKK(Amazon Elasticsearch Service, Amazon Kinesis, and Kibana)。
EKK 的优势在于组件是 AWS 托管服务,不必自己安装、运维,并且与 AWS 的其它服务轻松集成,可以很轻松的部署一套可靠、可扩展、安全、容错以及解耦和基于事件的解决方案。
传统的 Elasticsearch 中,日志数据的不断膨胀,对数据的生命周期管理越来越重要(应对此需求的新功能 ILM(index lifecycle management)在 Elasticsearch 7.0 中闪亮登场)。本文不介绍 ILM,介绍另一种解决方案:使用 Lambda 配合实现数据的轮换。
文中使用的 AWS 服务简介
1. Amazon Elasticsearch Service
是一项完全托管的服务,方便您部署、保护和运行大量 Elasticsearch 操作,且不用停机。该服务提供开源 Elasticsearch API、受托管的 Kibana 以及与 Logstash 和其他 AWS 服务的集成,支持您安全获取任何来源的数据,并开展实时搜索、分析和可视化。
2. Amazon Kinesis Firehose
Firehose 是将流数据可靠地加载到数据湖、数据存储和分析工具的最简单方式。它可以捕获、转换流数据并将其加载到 Amazon S3、Amazon Redshift、Amazon Elasticsearch Service 和 Splunk,让您可以借助正在使用的现有商业智能工具和控制面板进行近乎实时的分析。这是一项完全托管的服务,可以自动扩展以匹配数据吞吐量,并且无需持续管理。它还可以在加载数据前对其进行批处理、压缩和加密,从而最大程度地减少目的地使用的存储量,同时提高安全性。
本文中,Firehouse 会获取并自动加载日志的流式数据到 Amazon ES 里,并在 S3 中还会再进行一次备份。
3. AWS Lambda
通过 AWS Lambda,无需预置或管理服务器即可运行代码。您只需按使用的计算时间付费 – 代码未运行时不产生费用。
借助 Lambda,您几乎可以为任何类型的应用程序或后端服务运行代码,而且完全无需管理。只需上传您的代码,Lambda 会处理运行和扩展高可用性代码所需的一切工作。您可以将您的代码设置为自动从其他 AWS 产品触发,或者直接从任何 Web 或移动应用程序调用。
本文中使用 Lambda 实现 Elasticsearch Index 的 rotate 功能,将历史数据从 ES 中移除,解决由历史数据太大造成的性能下降,成本上升等问题。
并使用 Lambda 实现了,将 S3 中的历史数据文件 Load 回 ES,借助 ES 进行临时性历史日志分析。
4. Amazon CloudWatch
Amazon CloudWatch 是一种面向开发运营工程师、开发人员、站点可靠性工程师 (SRE) 和 IT 经理的监控和可观测性服务。CloudWatch 为您提供相关数据和切实见解,以监控应用程序、响应系统范围的性能变化、优化资源利用率,并在统一视图中查看运营状况。CloudWatch 以日志、指标和事件的形式收集监控和运营数据,让您能够在统一查看在 AWS 和本地服务器上运行的资源、应用程序和服务。您可以使用 CloudWatch 检测环境中的异常行为、设置警报、并排显示日志和指标、执行自动化操作、排查问题,以及发现可确保应用程序正常运行的见解。
5. Amazon Athena
Amazon Athena 是一种交互式查询服务,让您能够轻松使用标准 SQL 分析 Amazon S3 中的数据。Athena 没有服务器,因此您无需管理任何基础设施,且只需为您运行的查询付费。
Athena 简单易用。只需指向您存储在 Amazon S3 中的数据,定义架构并使用标准 SQL 开始查询。就可在数秒内获取最多的结果。使用 Athena,无需执行复杂的 ETL 作业来为数据分析做准备。这样一来,具备 SQL 技能的任何人都可以轻松快速地分析大规模数据集。
本文最后简单介绍实用 Athena 服务,如何直接进行基于 S3 全量日志的分析工作。
6. AWS Identity and Access Management (IAM)
AWS Identity and Access Management (IAM) 使您能够安全地管理对 AWS 服务和资源的访问。您可以使用 IAM 创建和管理 AWS 用户和组,并使用各种权限来允许或拒绝他们对 AWS 资源的访问。
架构
1. EKK 和 数据 Rotate 架构
2. Load 历史数据到 ES 架构
在 IAM 服务中创建身份授权 IAM Role
1. 为需要收集日志的 EC2,创建 Role:EKK-EC2
2. 为 Kinesis Firehose 创建 Role: EKK-Firehose
设置权限
在 Amazon Elasticsearch 服务中创建创建 ES cluster
1. 计算存储要求
源数据 * (1 + 副本数量) * 1.45 = 最小存储要求
(元数据 + 增长空间) * (1 + 索引开销) / 所需的分片大小 = 主分片的大约数量
尽量使分片大小保持在 10–50GiB 之间是一种比较好的做法。
2. 实例类型
尝试从每 100GiB 存储要求更接近 2 个 vCPU 核心和 8GiB 内存的配置开始。
3. 专用主节点
参考https://docs.amazonaws.cn/elasticsearch-service/latest/developerguide/sizing-domains.html
4. 控制台创建集群
IP 地址设置为自己的 IP 地址 CIDR 段,此 CIDR 段之外地址无权访问 ES、Kibana。
5. 可获得 ES Cluster 和 Kibana 的地址
https://s3.cn-north-1.amazonaws.com.cn/awschinablog/picture replacement3.jpg">
在 Kinesis 服务中创建 Kinesis Firehose
作者简介
陈朕,AWS 解决方案架构师,负责基于 AWS 云计算方案架构的咨询和设计,在国内推广 AWS 云平台技术和各种解决方案。十余年分布式应用、大数据的分布式处理经验。
本文转载自 AWS 技术博客
原文链接:
评论