OceaBase开发者大会落地上海!4月20日共同探索数据库前沿趋势!报名戳 了解详情
写点什么

基于 AWS 托管服务的日志收集分析系统

  • 2019-11-11
  • 本文字数:3145 字

    阅读完需:约 10 分钟

基于AWS托管服务的日志收集分析系统

应用系统日志的收集分析对于运维来说是至关重要的。一个可靠、安全、可扩展的日志收集分析解决方案在分析应用系统异常终止原因时能够让一切都变得轻松起来。


在这篇博文里,我们会探讨除了流行的 ELK(Elasticsearch, Logstash, and Kibana)解决方案之外的另一种选择,EKK 解决方案(Amazon Elasticsearch Service, Amazon Kinesis, and Kibana)。EKK 架构最大的好处是使得你不再需要自己亲自安装、部署、管理以及扩展日志收集分析系统,而将精力集中在分析日志,排除应用系统异常上面。


下面我们会介绍如何使用 EKK 架构来收集和分析 Apache web 服务器的日志,先来看看 EKK 架构的组成部分。


Amazon Elasticsearch Service 是一个流行的搜索和分析引擎,主要用来提供实时的应用系统日志和点击类流量的分析服务。本文中我们会利用 Amazon ES 将 Apache 的日志存储并索引起来,作为一项托管服务,Amazon ES 可以很轻松地在 AWS 云上进行部署、操作和扩展。此外使用托管服务,还能大大减轻管理上的工作,例如打补丁、异常监测、节点恢复、备份、监控等等。因为 Amazon ES 自身内部已经和 Kibana 进行了集成,所以省去了安装和配置等工作。获取 Amazon ES 的更多信息,请参考Amazon Elasticsearch Service


Amazon Kinesis Agent 是一个易于安装的单机版 Java 应用程序,它负责收集和发送日志数据。它会持续监控 Apache web 服务器的日志文件,并且将新的数据不断地发送到传输数据流中。同时它还负责文件回滚、生成检查点、异常发生后的重试,以及以时间序列为准可靠地发送日志文件。获取更多利用 Amazon Kinesis Agent 的信息,请参考Amazon Kinesis AgentGitHub 相关项目


Amazon Kinesis Firehose 提供了往 AWS 中加载流式数据的捷径。本文中,Firehouse 会获取并自动加载日志的流式数据到 Amazon ES 里,随后在 S3 中还会再进行一次备份。获取 Amazon Kinesis Firehose 的更多信息,请参考Amazon Kinesis Firehose


有了 AWS CloudFormation 的帮助,你只需要使用一个模板就能快速实现 EKK 架构。模板里准备了 Apache web 服务器,并使用 Amazon Kinesis Agent 和 Firehose 将它的访问日志发送给 Amazon ES 集群,同时在 S3 中备份日志数据,最后使用 Amazon ES Kibana endpoint 来对你的日志进行可视化分析。


AWS CloudFormation template 帮你快速完成如下工作:


  • 准备 Amazon ES 集群。

  • 准备 Amazon EC2 实例。

  • 安装 2.4.23 版本的 Apache HTTP 服务器。

  • 在 Apache HTTP 服务器之上安装 Amazon Kinesis Agent。

  • 准备 ELB(弹性负载均衡)。

  • 创建 Amazon ES 索引和相应的日志对应关系。

  • 创建 Amazon Kinesis Firehose 发送系统。

  • 创建所有的 IAM 角色以及相应的权限规则。例如,Firehose 需要将日志数据备份到 S3 中,那么就需要往目标 S3 桶上传数据的权限。

  • 为 Firehose 发送系统配置 CloudWatch 日志流和日志组,以便在日志发送出现异常时进行排查。


EKK 架构示意图:



要搭建本文中的 EKK 架构,你需要以下先决条件:


  • US West 区域的 Amazon EC2 密钥对。

  • US West 区域的 S3 桶。

  • US west 区域的默认 VPC。

  • 具有管理员权限的 IAM 角色,用来确保 Amazon ES 和 Amazon S3 通过 Firehose 获取到 EC2 上的日志数据


让我们开始吧:

从启动 AWS CloudFormation 模板开始创建整个系统

  1. 在 AWS CloudFormation 控制台上,选择来 启动模板。请确保你在 US West 区域。


提示:如果你想下载这个模板并随后上传至 AWS CloudFormation,你可以从随后给出的 S3 桶里面下载模板到你本地的电脑中。


  1. 选择下一步

  2. 在详细设置页面,提供以下信息:



a)软件栈名称:为你的 EKK 系统命名


b)实例类型:选择安装 Apache HTTP 服务器的 EC2 实例类型


c)密钥:选择 US West 区域的密钥对


d) SSH 位置:可以通过 SSH 连接到 EC2 实例的 IP 地址范围,默认为 0.0.0.0/0


e)web 服务端口:Web 服务器的监听端口,默认为 80


  1. 选择下一步

  2. 在选项页面,为 AWS CloudFormation 模板提供你想要的可选信息,然后选择下一步。



  1. 在回顾页面,检查模板的各项设置,点击确认然后选择创建系统。


整个创建过程大约耗时 10-15 分钟。

配置 Amazon Kinesis Agent

等待 AWS CloudFormation 创建完整个 EKK 系统,然后开始配置 Amazon Kinesis Agent。


  1. 在 AWS CloudFormation 控制台中,选择资源标签页,找到 Firehose 发送系统的名称。你在随后的第 3 步中需要它来配置 Agent。



  1. 在输出标签页,找到并记录下 Web 服务器的公有 IP 地址。你随后需要通过它 SSH 登录到 Web 服务器上配置 Agent。获得更多关于通过 SSH 连接 EC2 实例的信息,请参考通过 SSH 登录你的 Linux 实例.



  1. 在 Web 服务器的命令行上,运行以下命令:


Java


sudo vi /etc/aws-kinesis/agent.json
复制代码


该命令会打开配置文件,agent.json,内容如下:


Java


{ "cloudwatch.emitMetrics": true, "firehose.endpoint": "firehose.us-west-2.amazonaws.com", "awsAccessKeyId": "", "awsSecretAccessKey": "", "flows": [ { "filePattern": "/var/log/httpd/access_log", "deliveryStream": "", "dataProcessingOptions": [ { "optionName": "LOGTOJSON", "logFormat": "COMMONAPACHELOG" } ] } ] }
复制代码


  1. 将在资源标签页获得的 Firehose 发送系统名称填入 deliveryStream 栏目中,然后保存并退出。

  2. 在命令行上运行以下命令:


sudo service aws-kinesis-agent restart


  1. 在 AWS CloudFormation 控制台中查看 Amazon ES 对应的逻辑 ID 域

  2. 在 AWS Elasticsearch 服务页面中你可以查看到由 AWS CloudFormation 创建的 ES 集群


配置 Kibana 并分析日志数据

Amazon ES 为每一个 ES 域都默认提供了 Kibana 的安装,你可以在域的展示页面找到 Kibana endpoin 的相关信息。


  1. 在 Amazon ES 控制台,选择 Kibana endpoin

  2. 在 Kibana 中,为索引名称和模式选项键入 logmonitor。该值是你为 Web 访问日志创建的 AWS ES 索引名称。来自 AWS ELB 的健康检查会产生 Apache 的访问日志,随后流经整个 EKK 数据线,最后在 Kibana 中被可视化展现出来供分析所用。

  3. 在时间选择中,选择 datetime



  1. 在 Kibana 控制台,选择发现标签页来观察 Apache 日志。



Kibana 提供了条形图、折线图、散点图、直方图、饼图等来对日志文件进行分析。



过去 30 天访问 Web 服务器的 IP 地址饼图



过去 5 分钟内访问 Web 服务器的 IP 地址条形图


你还可以将 http 响应、IP 地址等各类信息绘制成图表,甚至组合它们,以此来提供对于 Apache 日志的更深洞见。

监控日志收集分析系统

在 Firehose 控制台上选择流数据,然后选择监控标签页来查询 CloudWatch 中针对 Firehose 发送系统的度量值。



当日志发送失败后,Amazon S3 和 Amazon ES 上等日志会帮助你定位问题。比如,如下的截图显示了因为索引上的日期映射没有和源日志文件保持一致。


结论

本文中,我们展示了如何通过 Amazon Kinesis Agent, Amazon ES 和 Firehose 将 Apache 日志传输至 Kibana 并进行可视化分析。值得注意的是,Firehose 会根据应用系统产生日志的速率来自动进行伸缩。获取更多如何扩展 Amazon ES 集群的信息,请参考Amazon ES 开发指南.


综上所述,使用类似 Amazon ES 和 Amazon Kinesis Firehose 这类的托管服务,让管理和维护日志收集分析系统变得十分轻松。更棒的是,你还可以通过在日志流数据上直接运行 SQL 语句来进一步提升 EKK 系统的性能和功能。而这一切都可以基于本文中给出的AWS CloudFormation 模板


译者介绍:



刘磊,曾供职于中国银联电子支付研究院,期间获得上海市科技进步一等奖,并申请 7 项国家发明专利。现任职于 AWS 中国专家服务团队,致力于为客户提供基于 AWS 服务的专业大数据解决方案、项目实施以及咨询服务。


本文转载自 AWS 技术博客。


原文链接:


https://amazonaws-china.com/cn/blogs/china/ekk-log-collection-and-analysis-system-based-on-aws-managed-services/


2019-11-11 08:001113

评论

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

这 30 个工具和服务可以更好地监控和管理 Linux 服务器,很全面!

wljslmz

三周年连更

Nautilus Chain 测试网第二阶段,推出忠诚度计划及广泛空投

西柚子

Nautilus Chain 测试网第二阶段,推出忠诚度计划及广泛空投

股市老人

面对“失业焦虑”我们可以做些什么?| 社区征文

莪是男神

三周年征文

技术分享:如何将JSON中的日期格式字符串替换为占位符

IT蜗壳-Tango

三周年连更

Django笔记二十之手动编写migration文件

Hunter熊

Python django migration

什么是 RUM JavaScript

Jerry Wang

JavaScript 前端开发 三周年连更

推荐一款基于Vue3的移动H5模板,加速你的移动应用开发

cwang

前端 vant Vue 3 Web H5

如何实现网站访问量的统计?

海拥(haiyong.site)

三周年连更

一文了解Spring Framework 5 新 Web 框架:Spring WebFlux

Java架构历程

三周年连更

为什么说:Linux中一切皆文件?

wljslmz

Linux 三周年连更

深入理解vue2.x中Object.defineproperty()和vue3.x中Proxy

不叫猫先生

Vue 三周年连更

如何进一步提高AI输出质量?

石云升

AI ChatGPT 三周年连更

OpenGL入门一:基础知识及概念

轻口味

opengl 图形图像 三周年连更

Prometheus监控神器-自动发现篇

乌龟哥哥

三周年连更

Windows下 IDE工具常见编译错误FAQ下

鸿蒙之旅

OpenHarmony 三周年连更

【程序猿未来之路】作为互联网技术人的“我们”该如何破局 | 社区征文

洛神灬殇

4月日更 AIGC 三周年征文 三周年连更 生存指南

为什么 Go for-range 的 value 值地址每次都一样?

AlwaysBeta

Go 面试

1500字讲懂单体架构和微服务架构的区别

Java架构历程

三周年连更

Qz学算法-数据结构篇(顺序存储二叉树、线索化+遍历)

浅辄

数据结构 三周年连更

KubeShark: Kubernetes的Wireshark

俞凡

Kubernetes 云原生

IT组织架构之反思

agnostic

IT组织

什么是软件开发领域的 obsolete 或者 deprecated 含义

Jerry Wang

软件工程 软件开发 三周年连更

算法题每日一练:无重复字符的最长子串

知心宝贝

数据结构 算法 前端 后端 三周年连更

OpenGL入门二:绘制三角形

轻口味

opengl 图形图像 三周年连更

五款提高程序员生产效率的ChatGPT神器,你一定不要错过!

cwang

Code Review Git Commit ChatGPT GPT-4 Prompt

重磅!算能公司算丰SG2042斩获第六届数字中国建设峰会“十大硬核科技”

Geek_2d6073

vue2.x中keep-alive源码解析以及LRU缓存策略使用

不叫猫先生

缓存 Vue LRU keep-alive实现原理 三周年连更

设计一个即时群聊天系统软件(采用华为云ECS服务器作为云服务端 )

DS小龙哥

三周年连更

为什么老有人想让我们“程序员”失业? | 社区征文

se7en

三周年征文

Matlab实现周期卷积

袁袁袁袁满

三周年征文

基于AWS托管服务的日志收集分析系统_语言 & 开发_亚马逊云科技 (Amazon Web Services)_InfoQ精选文章