最近公司系统升级,有些API的调用接口达到了每天10几万的请求量。目前公司里的日志,都是写文本文件中的。为了能够更好的分析这些日志数据,公司采用了AWS 的 ElasticSearch服务来分析日志。这篇文章记录了如何使用AWS上的ElasticSearch,以及需要注意那些坑。
1. 准备条件
1. 申请注册AWS的账号(注册AWS需要信用卡哦!)
2. 开通ElasticSearch服务(本文后面会详细介绍这部分),ES服务的中文介绍。目前ES并不是完全免费的,在前12个月,每月有 750 小时的 t2.small.elasticsearch 或 t3.small.elasticsearch 实例使用时间和每月 10GB 的可选 EBS 存储量(磁性或通用)。 关于ES服务免费的最新信息,请移步AWS ElasticSearch Free Tier.
在开通ES服务的过程中,如果你只想使用免费的服务,一定要选对 实例类型,磁盘容量和类型 等限制信息。建议在开通ES服务之前,仔细看看 AWS Free Tier。
3. 熟悉AWS的ElasticSearch开发文档,文档目前只有英文版的。
2. 创建ElasticSearch服务
笔者只是按照目前(2021.1.26)AWS的免费ES服务来介绍创建ES服务的过程,在开始前推荐先熟悉AWS最新的免费价格信息AWS Free Tier. 和 ES服务的中文介绍。
注意:Elasticsearch这篇文章使用7.9的,在后面的设置过程中,和 数据上传属性匹配(mapping)中,不同的版本之间会有略微的不同。
1. 选择部署类型,这里选择 开发和测试
2. 选择数据节点,目前t3.small.elasticsearch 和 t2.small.elasticsearch 都是免费的,t2在后面对数据验证没有t3方便,这里选择t3.small.elasticsearch实例。
3. 网络配置,选择 公有访问权限
4. 启动 精细访问控制,并且选择 创建主用户,填入用户名和密码,这里的用户名和密码,在后面 数据摄取 和 kibana的验证 中会用到
5. 接下来忽略 SAML authentication 和 Amazon Cognito Authentication.
6. 访问策略,为了简化后面的步骤,这里选择 允许对域进行公开访问。
3. 数据摄取
数据摄取(就是将数据传入到ES服务中)有很多种方法,ES数据摄取是采用REST API的方式,所以只要能发送HTTP REST请求,都可以完成数据摄取过程。
官方的文档对数据摄取这部分也做了详细的介绍
Elasticsearch 如何使用命令行工具 curl 进行数据摄取。
Elasticsearch 进行数据摄取的示例代码(Java, Python, Go, Ruby, Node)
Elasticsearch 从Amazon其它产品导入(From Amazon S3,From Amazon Kinesis Data Streams,From Amazon DynamoDB,From Amazon Kinesis Data Firehose,From Amazon CloudWatch, From AWS IoT)
Elasticsearch 使用 开源框架 Logstash 摄取数据。如果你想进一步了解Logstash,请移步Get Started With Logstash.
开源框架 Logstash 是目前用的最广的数据摄取框架,使用 ES + Logstash + Filebeat + Kibana 搭配功能非常的强大。在下一篇文章,我会介绍Logstash。 本文先用Python代码直接上传日志数据,随便介绍一下直接上传的局限性。
日志文件:log.txt
185.220.70.83 2016-07-15 15:29:50+0800 GET 200 /index.php 50.1049,8.6295 124.200.101.56 2016-07-16 15:29:50+0800 POST 200 /register.php 39.9285,116.385 104.233.154.203 2016-07-17 15:29:50+0800 POST 404 /login.php 37.751,-97.822 104.233.154.203 2016-07-17 15:29:50+0800 POST 404 /API.php 37.751,-97.822 104.233.154.203 2016-07-18 15:29:50+0800 POST 200 /API.php 37.751,-97.822 43.251.227.108 2016-07-19 15:29:50+0800 POST 200 /index.php 22.2578,114.1657