Hangout with ClickHouse【轉(zhuǎn)載】

ClickHouse作為我們的重要數(shù)據(jù)倉庫棍掐,接收了大量用于統(tǒng)計(jì)、分析的日志拷况。

那么這些數(shù)據(jù)是怎么進(jìn)到ClickHouse的作煌?

在我們內(nèi)部,ELK架構(gòu)用的是比較多的赚瘦,準(zhǔn)確的來講粟誓,是EHK,我們用Hangout替代了傳統(tǒng)的Logstash起意。

因此鹰服,在Hangout的基礎(chǔ)上,我們開發(fā)了針對(duì)ClickHouse的數(shù)據(jù)寫入插件,很輕松的完成海量數(shù)據(jù)的日志接入悲酷。

本文作者@rickyChe套菜,新浪大數(shù)據(jù)開發(fā)工程師,原文地址:Hangout with ClickHouse

  • 當(dāng)我們部門發(fā)現(xiàn)了ClickHouse這么一個(gè)優(yōu)秀數(shù)據(jù)存儲(chǔ)倉庫后设易,經(jīng)過了一段時(shí)間的摸索測試逗柴,就把線上大部分與數(shù)據(jù)分析相關(guān)的業(yè)務(wù)遷移到了ClickHouse上。這篇文章將會(huì)介紹我們?nèi)绾瓮ㄟ^Kafka接入Nginx日志到ClickHouse中顿肺。當(dāng)然戏溺,其他的應(yīng)用日志也可以參照以下邏輯將數(shù)據(jù)接入ClickHouse。

  • 我們最初使用Python腳本清洗日志寫入ClickHouse挟冠,但是這樣開發(fā)和維護(hù)都有一定的成本于购。后來我們使用Hangout作為我們的數(shù)據(jù)清洗工具,Hangout是一個(gè)通用的日志分析工具知染,功能類同Logstash肋僧,可以把不同種類的日志處理后寫入其他的地方,比如Kafka控淡、Elasticsearch嫌吠、ClickHouse。

Prerequisites

  • 我們假設(shè)Nginx日志已經(jīng)推送到了Kafka掺炭。

  • Hangout已經(jīng)提供了大量的插件支持我們的日志處理辫诅,下面是為了完成一個(gè)完整的配置需要另外下載的插件:

  • 下面是我們安裝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配置包括三個(gè)部分:inputs、filters和outputs

Input

  • 如下所示涧狮,是一個(gè)從Kafka讀取數(shù)據(jù)流的配置
inputs:
    - Kafka:
        codec: plain
        encoding: UTF8 # defaut UTF8
        topic:
            comos-proxy: 10
        consumer_settings:
            group.id: hangout_bip_cms
            zookeeper.connect: localhost:2181 
            auto.commit.interval.ms: "60000"
            socket.receive.buffer.bytes: "1048576"
            fetch.message.max.bytes: "1048576"

Filters

  • 在Filters部分炕矮,這里有一系列轉(zhuǎn)化的步驟,包括正則解析者冤、時(shí)間轉(zhuǎn)換肤视、類型轉(zhuǎn)換等
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: timestamp
        formats:
            - '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: integer
            minute:
                to: integer
            _data_size:
                to: integer

Outputs

  • 最后我們將處理好的結(jié)構(gòu)化數(shù)據(jù)寫入ClickHouse
outputs:
   - com.sina.bip.hangout.outputs.Clickhouse:
        host: localhost:8123
        database: cms
        table: cms_msg_all
        fields: ['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

  • 當(dāng)然, ClickHouse存儲(chǔ)這些數(shù)據(jù)的前提是我們已經(jīng)建立好了這些數(shù)據(jù)表涉枫。具體建表操作如下:
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中讀取原始日志愿汰,將其轉(zhuǎn)換成為結(jié)構(gòu)化的數(shù)據(jù)困后,因此能被我們的Hangout-output-clickhouse插件讀取寫入ClickHouse中。整個(gè)流程還有很多可以自定義和提升的地方衬廷,Hangout使用請(qǐng)參照Hangout README摇予,Hangout-output-clickhouse的更多功能請(qǐng)參照README。此外吗跋,我們?cè)贑lickHouse數(shù)據(jù)的基礎(chǔ)上使用了SuperSet和Grafana作為我們的數(shù)據(jù)展示和監(jiān)控工具侧戴。
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子救鲤,更是在濱河造成了極大的恐慌,老刑警劉巖秩冈,帶你破解...
    沈念sama閱讀 211,042評(píng)論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件本缠,死亡現(xiàn)場離奇詭異,居然都是意外死亡入问,警方通過查閱死者的電腦和手機(jī)丹锹,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 89,996評(píng)論 2 384
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來芬失,“玉大人楣黍,你說我怎么就攤上這事±饫茫” “怎么了租漂?”我有些...
    開封第一講書人閱讀 156,674評(píng)論 0 345
  • 文/不壞的土叔 我叫張陵,是天一觀的道長颊糜。 經(jīng)常有香客問我哩治,道長,這世上最難降的妖魔是什么衬鱼? 我笑而不...
    開封第一講書人閱讀 56,340評(píng)論 1 283
  • 正文 為了忘掉前任业筏,我火速辦了婚禮,結(jié)果婚禮上鸟赫,老公的妹妹穿的比我還像新娘蒜胖。我一直安慰自己,他們只是感情好抛蚤,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,404評(píng)論 5 384
  • 文/花漫 我一把揭開白布台谢。 她就那樣靜靜地躺著,像睡著了一般霉颠。 火紅的嫁衣襯著肌膚如雪对碌。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,749評(píng)論 1 289
  • 那天蒿偎,我揣著相機(jī)與錄音朽们,去河邊找鬼。 笑死诉位,一個(gè)胖子當(dāng)著我的面吹牛骑脱,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播苍糠,決...
    沈念sama閱讀 38,902評(píng)論 3 405
  • 文/蒼蘭香墨 我猛地睜開眼叁丧,長吁一口氣:“原來是場噩夢(mèng)啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起拥娄,我...
    開封第一講書人閱讀 37,662評(píng)論 0 266
  • 序言:老撾萬榮一對(duì)情侶失蹤蚊锹,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后稚瘾,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體牡昆,經(jīng)...
    沈念sama閱讀 44,110評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,451評(píng)論 2 325
  • 正文 我和宋清朗相戀三年摊欠,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了丢烘。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,577評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡些椒,死狀恐怖播瞳,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情免糕,我是刑警寧澤赢乓,帶...
    沈念sama閱讀 34,258評(píng)論 4 328
  • 正文 年R本政府宣布,位于F島的核電站石窑,受9級(jí)特大地震影響骏全,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜尼斧,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,848評(píng)論 3 312
  • 文/蒙蒙 一姜贡、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧棺棵,春花似錦楼咳、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,726評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至缚柏,卻和暖如春苹熏,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背币喧。 一陣腳步聲響...
    開封第一講書人閱讀 31,952評(píng)論 1 264
  • 我被黑心中介騙來泰國打工轨域, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人杀餐。 一個(gè)月前我還...
    沈念sama閱讀 46,271評(píng)論 2 360
  • 正文 我出身青樓干发,卻偏偏與公主長得像,于是被迫代替她去往敵國和親史翘。 傳聞我的和親對(duì)象是個(gè)殘疾皇子枉长,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,452評(píng)論 2 348

推薦閱讀更多精彩內(nèi)容

  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理冀续,服務(wù)發(fā)現(xiàn),斷路器必峰,智...
    卡卡羅2017閱讀 134,628評(píng)論 18 139
  • 概述 監(jiān)控預(yù)警平臺(tái), eagle + eye (鷹眼)的合體詞, 寓意可以快速發(fā)現(xiàn)問題, 并及時(shí)作出響應(yīng),Eagl...
    Kungfu貓熊閱讀 7,374評(píng)論 0 52
  • 本人陸陸續(xù)續(xù)接觸了ELK的1.4洪唐,2.0,2.4吼蚁,5.0桐罕,5.2版本,可以說前面使用當(dāng)中一直沒有太多感觸桂敛,最近使用...
    三杯水Plus閱讀 4,090評(píng)論 0 12
  • 當(dāng)我們部門發(fā)現(xiàn)了ClickHouse這么一個(gè)優(yōu)秀數(shù)據(jù)存儲(chǔ)倉庫后,經(jīng)過了一段時(shí)間的摸索測試溅潜,就把線上大部分與數(shù)據(jù)分析...
    霍霍霍霍晨閱讀 1,774評(píng)論 1 5
  • 姓名:周小蓬 16019110037 轉(zhuǎn)載自:http://blog.csdn.net/YChenFeng/art...
    aeytifiw閱讀 34,712評(píng)論 13 425