ClickHouse作为我们的重要数据仓库,接收了大量用于统计、分析的日志。
那么这些数据是怎么进到ClickHouse的?
在我们内部,ELK架构用的是比较多的,准确的来讲,是EHK,我们用Hangout替代了传统的Logstash。
因此,在Hangout的基础上,我们开发了针对ClickHouse的数据写入插件,很轻松的完成海量数据的日志接入。
本文作者@rickyChe,新浪大数据开发工程师,原文地址:Hangout with ClickHouse
当我们部门发现了ClickHouse这么一个优秀数据存储仓库后,经过了一段时间的摸索测试,就把线上大部分与数据分析相关的业务迁移到了ClickHouse上。这篇文章将会介绍我们如何通过Kafka接入Nginx日志到ClickHouse中。当然,其他的应用日志也可以参照以下逻辑将数据接入ClickHouse。
我们最初使用Python脚本清洗日志写入ClickHouse,但是这样开发和维护都有一定的成本。后来我们使用Hangout作为我们的数据清洗工具,Hangout是一个通用的日志分析工具,功能类同Logstash,可以把不同种类的日志处理后写入其他的地方,比如Kafka、Elasticsearch、ClickHouse。
Prerequisites
我们假设Nginx日志已经推送到了Kafka。
Hangout已经提供了大量的插件支持我们的日志处理,下面是为了完成一个完整的配置需要另外下载的插件:
- Hangout-output-clickhouse: 专门为ClickHouse开发的Hangout输出插件https://github.com/RickyHuo/hangout-output-clickhouse
下面是我们安装Hangout以及Hangout-output-clickhouse插件的具体步骤:
|
|
Configuration Example: Nginx Logs
Log Sample
|
|
Hangout配置包括三个部分:inputs、filters和outputs
Input
- 如下所示,是一个从Kafka读取数据流的配置
|
|
Filters
- 在Filters部分,这里有一系列转化的步骤,包括正则解析、时间转换、类型转换等
|
|
Outputs
- 最后我们将处理好的结构化数据写入ClickHouse
|
|
ClickHouse Schema
- 当然, ClickHouse存储这些数据的前提是我们已经建立好了这些数据表。具体建表操作如下:
|
|
Conclusion
- 在这篇文章中,我们介绍了如何使用Hangout将Nginx日志文件写入ClickHouse中。Hangout从Kafka中读取原始日志,将其转换成为结构化的数据,因此能被我们的Hangout-output-clickhouse插件读取写入ClickHouse中。整个流程还有很多可以自定义和提升的地方,Hangout使用请参照Hangout README,Hangout-output-clickhouse的更多功能请参照README。此外,我们在ClickHouse数据的基础上使用了SuperSet和Grafana作为我们的数据展示和监控工具。