应用系统日志的收集分析对于运维来说是至关重要的。一个可靠、安全、可扩展的日志收集分析解决方案在分析应用系统异常终止原因时能够让一切都变得轻松起来。
在这篇博文里,我们会探讨除了流行的 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 Agent 和 GitHub 相关项目。
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 模板开始创建整个系统
- 在 AWS CloudFormation 控制台上,选择来 启动模板。请确保你在 US West 区域。
提示:如果你想下载这个模板并随后上传至 AWS CloudFormation,你可以从随后给出的 S3 桶里面下载模板到你本地的电脑中。
-
选择下一步
-
在详细设置页面,提供以下信息:
a)软件栈名称:为你的 EKK 系统命名
b)实例类型:选择安装 Apache HTTP 服务器的 EC2 实例类型
c)密钥:选择 US West 区域的密钥对
d) SSH 位置:可以通过 SSH 连接到 EC2 实例的 IP 地址范围,默认为 0.0.0.0/0
e)web 服务端口:Web 服务器的监听端口,默认为 80
-
选择下一步
-
在选项页面,为 AWS CloudFormation 模板提供你想要的可选信息,然后选择下一步。
- 在回顾页面,检查模板的各项设置,点击确认然后选择创建系统。
整个创建过程大约耗时 10-15 分钟。
配置 Amazon Kinesis Agent
等待 AWS CloudFormation 创建完整个 EKK 系统,然后开始配置 Amazon Kinesis Agent。
- 在 AWS CloudFormation 控制台中,选择资源标签页,找到 Firehose 发送系统的名称。你在随后的第 3 步中需要它来配置 Agent。
- 在输出标签页,找到并记录下 Web 服务器的公有 IP 地址。你随后需要通过它 SSH 登录到 Web 服务器上配置 Agent。获得更多关于通过 SSH 连接 EC2 实例的信息,请参考通过 SSH 登录你的 Linux 实例.
- 在 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" } ] } ] }
-
将在资源标签页获得的 Firehose 发送系统名称填入 deliveryStream 栏目中,然后保存并退出。
-
在命令行上运行以下命令:
sudo service aws-kinesis-agent restart
-
在 AWS CloudFormation 控制台中查看 Amazon ES 对应的逻辑 ID 域
-
在 AWS Elasticsearch 服务页面中你可以查看到由 AWS CloudFormation 创建的 ES 集群
配置 Kibana 并分析日志数据
Amazon ES 为每一个 ES 域都默认提供了 Kibana 的安装,你可以在域的展示页面找到 Kibana endpoin 的相关信息。
-
在 Amazon ES 控制台,选择 Kibana endpoin
-
在 Kibana 中,为索引名称和模式选项键入 logmonitor。该值是你为 Web 访问日志创建的 AWS ES 索引名称。来自 AWS ELB 的健康检查会产生 Apache 的访问日志,随后流经整个 EKK 数据线,最后在 Kibana 中被可视化展现出来供分析所用。
-
在时间选择中,选择 datetime
- 在 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 技术博客。
评论