搭建云上日志收集分析系统 (四)

阅读数:688 2019 年 9 月 26 日 17:12

搭建云上日志收集分析系统 (四)

背景说明

应用系统的日志收集与分析工作对运维来说至关重要。常见的系统解决方案中开源技术栈 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 配合实现数据的轮换。

创建一个 SNS Topic(s3-to-es-by-hour) 触发 Lambda(s3-to-es-bulk-by-hour)

1. 创建 Topic

进入 SNS 服务页面

搭建云上日志收集分析系统 (四)搭建云上日志收集分析系统 (四)

2. 订阅事件

搭建云上日志收集分析系统 (四)搭建云上日志收集分析系统 (四)

3. 测试

搭建云上日志收集分析系统 (四)搭建云上日志收集分析系统 (四)搭建云上日志收集分析系统 (四)

消息

复制代码
{"year":"2019","month":"06","day":"30","hour":"05"}

复制 Topic 的 ARN,下面 Lambda 会发送消息进来

创建 Lambda split-day-to-24-hour

负责把按天 ES index 的导入事件拆分成 24 个按小时导入的事件

https://s3.cn-north-1.amazonaws.com.cn/awschinablog/Amazon Elasticsearch Service, Amazon Kinesis, and Kibana82.jpg">搭建云上日志收集分析系统 (四)

1. 更新代码

替换 SNS Topic ARN 为上面创建的 Topic

搭建云上日志收集分析系统 (四)

复制代码
import json
import boto3
sns = boto3.client('sns')
def lambda_handler(event, context):
for record in event['Records']:
msg = json.loads(json.dumps(eval(record['Sns']['Message'])))
# TODO implement
for i in range(0,24) :
msg['hour'] = "%02d" % i
print(msg)
response = sns.publish(
TopicArn='arn:aws-cn:sns:cn-north-1:725362542198:s3-to-es-by-hour',
Message=json.dumps(msg),
)
return {
'statusCode': 200,
'body': json.dumps('Hello from Lambda!')
}
  1. 创建 SNS Topic 用于触发此 Lambda

    搭建云上日志收集分析系统 (四)搭建云上日志收集分析系统 (四)搭建云上日志收集分析系统 (四)

3. 订阅 Lambda

搭建云上日志收集分析系统 (四)搭建云上日志收集分析系统 (四)

4. 测试

搭建云上日志收集分析系统 (四)搭建云上日志收集分析系统 (四)搭建云上日志收集分析系统 (四)

复制代码
{"year":"2019","month":"06","day":"30"}

2019 年 6 月 30 日的日志文件,会并发为 24 个 Lambda 按小时导入到 ES

Athena query data in S3 using SQL

1. 基于 S3 路径,创建 Table

搭建云上日志收集分析系统 (四)

复制代码
CREATE EXTERNAL TABLE IF NOT EXISTS log.apachelogtest (
'bytes' string,
'datetime' string,
'host' string,
'request' string,
'response' string,
'datetime' string
)
ROW FORMAT SERDE 'org.openx.data.jsonserde.JsonSerDe'
WITH SERDEPROPERTIES (
'serialization.format' = '1'
) LOCATION 's3://poc-zhnc-hive/log/'
TBLPROPERTIES ('has_encrypted_data'='false');

2. 使用 Table 查询

搭建云上日志收集分析系统 (四)

作者简介

陈朕,AWS 解决方案架构师,负责基于 AWS 云计算方案架构的咨询和设计,在国内推广 AWS 云平台技术和各种解决方案。十余年分布式应用、大数据的分布式处理经验。

本文转载自 AWS 技术博客

原文链接:

https://amazonaws-china.com/cn/blogs/china/ekk-amazon-elasticsearch-service-amazon-kinesis-and-kibana/

欲了解 AWS 的更多信息,请访问【AWS 技术专区】

评论

发布