1.概述

转载: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插件的具体步骤:

mkdir hangout
cd hangout
wget https://github.com/childe/hangout/releases/download/0.3.0/hangout-dist-0.3.0-release-bin.zip
unzip hangout-dist-0.3.0-release-bin.zip
cd modules
wget https://github.com/RickyHuo/hangout-output-clickhouse/releases/download/0.0.2/hangout-output-plugins-clickhouse-0.0.2-jar-with-dependencies.jar
Configuration Example: Nginx Logs
Log Sample
001.cms.msina..sinanode.com`[27/Dec/2017:16:01:03 +0800]`-`"GET /n/front/w636h3606893220.jpg/w720q75apl.webp HTTP/1.1"`"SinaNews/201706071542.1 CFNetwork/758.1.6 Darwin/15.0.0"`200`[127.0.0.1]`-`"-"`0.021`10640`-`127.0.0.1`l.sinaimg.cn`-

Hangout配置包括三个部分:inputs、filters和outputs

Input

如下所示,是一个从Kafka读取数据流的配置

inputs:- Kafka:codec: plainencoding: UTF8 # defaut UTF8topic:comos-proxy: 10consumer_settings:group.id: hangout_bip_cmszookeeper.connect: localhost:2181 auto.commit.interval.ms: "60000"socket.receive.buffer.bytes: "1048576"fetch.message.max.bytes: "1048576"

Filters

在Filters部分,这里有一系列转化的步骤,包括正则解析、时间转换、类型转换等

filters:- Grok:match:- '%{NOTSPACE:_hostname}`\[%{HTTPDATE:timestamp}\]`%{NOTSPACE:upstream}`"%{NOTSPACE:_method}\s%{NOTSPACE:_uri}\s%{NOTSPACE:httpversion}"`%{QS:_ua}`%{NUMBER:_http_code}`\[%{IP:_remote_addr}\]`%{NOTSPACE:unknow1}`%{QS:_reference}`%{NUMBER:_request_time}`%{NUMBER:_data_size}`%{NOTSPACE:unknow3}`%{IP:_http_x_forwarded_for}`%{NOTSPACE:_domain}`%{DATA:unknow4}$'remove_fields: ['message']- Date:src: timestampformats:- 'dd/MMM/yyyy:HH:mm:ss Z'remove_fields: ['timestamp']target: utc_date- Convert:fields:_request_time:to: float- Add:fields:date: "${(utc_date)?substring(0, 10)}"datetime: "${(utc_date)?substring(0, 10) + ' ' + (utc_date)?substring(11, 19)}"hour: "${(utc_date)?substring(11, 13)}"- Convert:fields:hour:to: integerminute:to: integer_data_size:to: integer

Outputs

最后我们将处理好的结构化数据写入ClickHouse

outputs:- com.sina.bip.hangout.outputs.Clickhouse:host: localhost:8123database: cmstable: cms_msg_allfields: ['date', 'datetime','hour', '_hostname', '_domain', '_data_size', '_uri', '_request_time', '_ua', '_http_code', '_remote_addr', '_method', '_reference', '_url']replace_include_fields: ['_uri', '_url']bulk_size: 300

ClickHouse Schema
当然, ClickHouse存储这些数据的前提是我们已经建立好了这些数据表。具体建表操作如下:

CREATE TABLE cms.cms_msg
(date Date, datetime DateTime, hour Int8, _uri String, _url String, _request_time Float32, _http_code String, _hostname String, _domain String, _http_x_forwarded_for String, _remote_addr String, _reference String, _data_size Int32, _method String, _rs String, _rs_time Float32, _ua String
) ENGINE = MergeTree(date, (hour, date), 8192)CREATE TABLE cms.cms_msg_all
(date Date, datetime DateTime, hour Int8, _uri String, _url String, _request_time Float32, _http_code String, _hostname String, _domain String, _http_x_forwarded_for String, _remote_addr String, _reference String, _data_size Int32, _method String, _ua String
) ENGINE = Distributed(bip_ck_cluster, 'cms', 'cms_msg', rand())

Conclusion
在这篇文章中,我们介绍了如何使用Hangout将Nginx日志文件写入ClickHouse中。Hangout从Kafka中读取原始日志,将其转换成为结构化的数据,因此能被我们的Hangout-output-clickhouse插件读取写入ClickHouse中。整个流程还有很多可以自定义和提升的地方,Hangout使用请参照Hangout README,Hangout-output-clickhouse的更多功能请参照README。此外,我们在ClickHouse数据的基础上使用了SuperSet和Grafana作为我们的数据展示和监控工具。

【ClickHouse】Hangout with ClickHouse相关推荐

  1. 【Flink】Flink 写入 Clickhouse 大对象直接进入老年代 导致OOM

    本文为博主九师兄(QQ:541711153 欢迎来探讨技术)原创文章,未经允许博主不允许转载. 文章目录 1.概述 2. 验证 3.转机 1.概述 事情是这样的.使用开源的修改 https://git ...

  2. 【clickhouse】docker安装clickhouse后本地无法连接

    文章目录 1.背景 1.背景 参考文章:[clickhouse]mac 10.15.7使用docker安装clickhouse 在本地搭建了一个单机版本的ck,然后今天尝试本地连接,结果发现端口正确, ...

  3. 【clickhouse】Centos7部署Clickhouse数据库

    目录 1.clickhouse数据库安装说明 2.clickhouse数据库安装介质 3.clickhouse数据库安装前配置 3.1配置操作系统yum源(可选) 3.2配置NTP客户端 3.3配置s ...

  4. 【clickhouse】未解决 ClickHouse exception, code: 1002 DB::Exception: Directory already exists

    1.概述 clickhouse 报错如下 SQL 错误 [1002]: ClickHouse exception, code: 1002, host: localhost, port: 8123; C ...

  5. 【clickhouse】如何监控Clickhouse的连接数

    1.概述 因为clickhouse经常拒绝连接,因此需要监控连接数 sql bogon.localdomain :) select * from system.metrics where metric ...

  6. 【mock】大数据Clickhouse; Kafka; Flink; Spark 学习与性能压测数据Mock

    文章目录 前言 mock数据脚本-基础版 mock数据-集成到kafka 前言 为方便大家学习大数据过程中,需要数据进行练习与调试,本次给大家分享几篇mock数据的脚本 可适用于kafka;hive; ...

  7. 【ClickHouse】什么是ClickHouse?CK入门

    文章目录 一.ClickHouse入门 1.列式存储 2.DBMS的功能 3.多样化引擎 4.高吞吐写入能力 5.数据分区与线程级并行 6.性能对比 7.官网 二.ClickHouse安装 1.准备工 ...

  8. 【flink】flink写入clickhouse Error while starting CH writer AccessDeninedExcepton

    文章目录 1.概述 本文为博主九师兄(QQ:541711153 欢迎来探讨技术)原创文章,未经允许博主不允许转载. 1.概述 一个flink项目要用到flink-clickhouse-sink,然后在 ...

  9. 【netty】netty HashedWheelTimer 延时队列

    1.概述 想要研究这个是因为 [Flink]Flink 写入 Clickhouse 大对象直接进入老年代 导致OOM 遇到了这个问题. 在这个问题中,我将时间轮改小了 时间轮 512改成16个 Net ...

最新文章

  1. Python基本知识以及if语句
  2. Eclipse mac 下的快捷键
  3. RDKit | 分子处理入门
  4. 打开网页时出现DA AddrBar icon的解决方法
  5. 用云服务器实现janus之web端与web通话!
  6. python中操作数据库中游标的使用方法
  7. [SecureCRT]通过SFTP方式上传本地文件到服务器
  8. ASP对很长的文章做分页输出
  9. Android--快速接入微信支付
  10. portal认证 php,如何用PHP制作OSSH 免费版华为Portal系统认证前端页面
  11. Spring Boot@Component注解下的类无法@Autowired的问题
  12. java实现蒙特卡洛树搜索_面试必会:java实现 BST 二叉查询树详解
  13. VMware 虚拟机安装系统
  14. 捣鼓小米路由器开发版本
  15. WIN10电脑自动关机命令
  16. xshell如何登陆数据库_Xshell怎么连接数据库?
  17. 30个 CSS 样式常用的静态形状
  18. 图片格式转换器ico_格式工厂万能格式转换器
  19. 十月百度,阿里巴巴,迅雷搜狗最新面试十一题
  20. 【问题解决方案】电脑版微信如何使用外接摄像头

热门文章

  1. 英特尔发布全新显卡品牌“锐炫” 首款显卡将于 2022 年上市
  2. 曾比海底捞还牛,如今关店1200家!肯德基的猪队友,快被中国人抛弃了?
  3. 特斯拉:部分帖文包含不实信息 将定期分享真实情况
  4. 华为Mate30 5G评测:首款5G爆品, 一步到位兼容5G双模全网通
  5. 高通计划通过多层级骁龙5G移动平台 加速5G商业化
  6. 华为年度旗舰Mate 30 Pro真机现身,既惊喜又失望...
  7. 支付宝/财付通霸占移动支付市场:还有谁能拥有姓名?
  8. IG击败TOP进入春季赛决赛 王思聪督战时吃玉米动作亮了
  9. 最好用的虚拟机软件----VMware详细图文教程
  10. SQL COUNT() 语法总结及用法【原创】