基于Fluentd的日志收集方案

EFK介紹

搭建EFK

配置Consul

查看日志
<h2></h2>

上節(jié)課我們學(xué)習(xí)了BFF的思想,并針對mst-user-service、mst-order-service忿薇、mst-goods-service三個服務(wù)搭建了一套BFF架構(gòu)。但到目前為止漆诽,我們每個服務(wù)的日志依舊分散亭畜,這對于日志的收集砾层、管理、檢索十分不便贱案。因此,本節(jié)課將采用EFK這套日志數(shù)據(jù)管理解決方案來集中化管理服務(wù)日志止吐。

本節(jié)課主要內(nèi)容:

  • 介紹EFK是什么
  • 如何配置consul
  • 如何在Kibana查看日志

<h2 id="1">#EFK介紹</h2>

EFK由ElasticSearch宝踪、Fluentd和Kiabana三個開源工具組成。其中Elasticsearch是一款分布式搜索引擎碍扔,能夠用于日志的檢索瘩燥,F(xiàn)luentd是一個實時開源的數(shù)據(jù)收集器,而Kibana 是一款能夠為Elasticsearch 提供分析和可視化的 Web 平臺。這三款開源工具的組合為日志數(shù)據(jù)提供了分布式的實時搜集與分析的監(jiān)控系統(tǒng)不同。

而在此之前厉膀,業(yè)界是采用ELK(Elasticsearch + Logstash + Kibana)來管理日志。Logstash是一個具有實時渠道能力的數(shù)據(jù)收集引擎,但和fluentd相比二拐,它在效能上表現(xiàn)略遜一籌服鹅,故而逐漸被fluentd取代,ELK也隨之變成EFK百新。

ELK架構(gòu)

為了更好的了解EFK的架構(gòu)企软,首先,我們先理解下ELK架構(gòu)饭望。在此之前仗哨,
我們需要清楚如下幾個概念:

  • Log Source:日志來源。在微服務(wù)中铅辞,我們的日志主要來源于日志文件和Docker容器厌漂,日志文件包括服務(wù)器log,例如Nginx access log(記錄了哪些用戶斟珊,哪些頁面以及用戶瀏覽器苇倡、ip和其他的訪問信息), error log(記錄服務(wù)器錯誤日志)等。
  • Logstash:數(shù)據(jù)收集處理引擎囤踩,可用于傳輸docker各個容器中的日志給EK雏节。支持動態(tài)的從各種數(shù)據(jù)源搜集數(shù)據(jù),并對數(shù)據(jù)進(jìn)行過濾高职、分析钩乍、豐富、統(tǒng)一格式等操作怔锌,然后存儲以供后續(xù)使用寥粹。
  • Filebeat:和Logstash一樣屬于日志收集處理工具变过,基于原先 Logstash-fowarder 的源碼改造出來的。與Logstash相比涝涤,filebeat更加輕量媚狰,占用資源更少
  • ElasticSearch:日志搜索引擎
  • Kibana:用于日志展示的可視化工具
  • Grafana:類似Kibana,可對后端的數(shù)據(jù)進(jìn)行實時展示

下圖是ELK架構(gòu)阔拳,采用ElasticSearch崭孤、Kibana、Grafana糊肠、Filebeat來管理Docker容器日志辨宠。

version1.png

由圖可知,當(dāng)我們在Docker中運(yùn)行應(yīng)用(application)時货裹,filebeat收集容器中的日志嗤形。ElasticSearch收到日志對日志進(jìn)行實時存儲、搜索與分析弧圆。我們可在Kibana和Grafana這兩個可視化工具中查看日志的操作結(jié)果赋兵。

EFK架構(gòu)

Fluentd是一個開源的數(shù)據(jù)收集器,專為處理數(shù)據(jù)流設(shè)計搔预,使用JSON作為數(shù)據(jù)格式霹期。它采用了插件式的架構(gòu),具有高可擴(kuò)展性高可用性拯田,同時還實現(xiàn)了高可靠的信息轉(zhuǎn)發(fā)经伙。

因此,我們加入Fluentd來收集日志勿锅。加入后的EFK架構(gòu)如圖所示帕膜。

version2.png

在這個圖中,上下兩個框分別表示使用Fluentd前后的日志收集溢十。在第二個框中垮刹,Consul能夠使用靈活的key/value倉庫去存儲動態(tài)配置。而confd能夠使用從consul來的模版管理本地配置张弛。

<h2 id="2">搭建EFK</h2>
1.參考fluentd的官方文檔荒典,我們創(chuàng)建EFK項目,項目目錄結(jié)構(gòu)如下:

category.png

2.配置docker-compose.yml文件

version: '2'
services:
  elasticsearch:
    image: elasticsearch:5-alpine
    volumes:
      - ./elasticsearch/config/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml:ro
    ports:
      - 9200:9200
      - 9300:9300
  kibana:
    image: bitnami/kibana:5-master
    volumes:
      - ./kibana/config/:/usr/share/kibana/config:ro
    depends_on:
      - elasticsearch
    ports:
      - 5601:5601
  filebeat:
    image: prima/filebeat:5.6
    volumes:
      - ./filebeat/app.log:/var/log/app.log
      - ./filebeat/config/filebeat.yml:/filebeat.yml
    depends_on:
      - elasticsearch
  nginx:
    image: nginx:1.12-alpine
    volumes:
      - ./nginx/nginx.conf:/etc/nginx/nginx.conf:ro
    ports:
      - 8080:80
    logging:
        driver: fluentd
        options:
          fluentd-address: localhost:5140
          fluentd-async-connect: 'true'
          tag: nginx.backend
  fluent:
    image: demo/fluentd:v0.14
    environment:
      FLUENTD_CONF: fluent.conf
    ports:
      - 5140:5140
      - 5044:5044
    stdin_open: true
    tty: true
    depends_on:
      - elasticsearch

3.下載docker鏡像

docker pull elasticsearch:5-alpine
docker pull bitnami/kibana:5-master
docker pull prima/filebeat:5.6
docker pull nginx:1.12-alpine
docker build -t demo/fluentd:v0.14 .

<h2 id="3">配置Consul</h2>
1.啟動consul代理

consul agent -dev -node=consul -data-dir=/tmp/consul

啟動完成登錄http://localhost:8500/

2.在Consul中創(chuàng)建Key/Value

  • fluentd/source:source可定義日志來源吞鸭。每一個來源配置必須包含類型(type)寺董,比如tcp數(shù)據(jù)輸入,或者json類型輸入刻剥。
<source>
  @type forward
  port 5140
</source>
<source>
   @type beats
   metadata_as_tag
   <parse>
      @type json
   </parse>
</source>
  • fluentd/filter:filter就是過濾規(guī)則遮咖,當(dāng)source.tag復(fù)合filter的規(guī)則時,就執(zhí)行這個filter進(jìn)行過濾行為造虏。我們將數(shù)據(jù)格式化為json御吞,并過濾出key的名字為log的數(shù)據(jù)麦箍。
<filter nginx.**>
  @type parser
  format json
  key_name log
  reserve_data true
</filter>
  • fluentd/match:match是fluentd收到數(shù)據(jù)后的處理, @type elasticsearch表示把數(shù)據(jù)輸入到elasticsearch上面陶珠。
<match nginx.backend>
   @type elasticsearch
   host elasticsearch
   port 9200
   logstash_format true
   logstash_prefix nginx
</match>
<match docker.**>
   @type elasticsearch
   host elasticsearch
   port 9200
   logstash_format true
   logstash_prefix app
</match>

創(chuàng)建完成如圖所示:


consul.png

4.啟動fluentd_workshop挟裂,mst-user-service、mst-order-service揍诽、mst-goods-service诀蓉。

<h2 id="4">查看日志</h2>
1.打開http://localhost:5601,進(jìn)入kibana暑脆。

2.創(chuàng)建索引渠啤,索引即 Elasticsearch 中的索引。我們需要手動配置饵筑。在 Index Pattern 下邊的輸入框中輸入 nginx-*,它是 Elasticsearch 中的一個索引名稱開頭处坪。

Kibana 會自動檢測在 Elasticsearch 中是否存在該索引名稱根资,如果有,則下邊出現(xiàn) “Create” 按鈕同窘,如圖所示

index.png

3.點(diǎn)擊左側(cè) “Discovery” 菜單玄帕,同時用postman給mst-user-service發(fā)請求,此時想邦,在kibana中可以查看所收集的有關(guān)nginx到日志裤纹。

log.png

Kibana功能眾多,例如在“Visualize” 菜單界面可以將查詢出的數(shù)據(jù)進(jìn)行可視化展示丧没,“Dev Tools” 菜單界面可以讓戶方便地通過瀏覽器直接與 Elasticsearch 進(jìn)行交互鹰椒,發(fā)送 RESTFUL對 Elasticsearch 數(shù)據(jù)進(jìn)行增刪改查。如果你想要詳細(xì)的了解它呕童,可以參考它的中文文檔http://www.code123.cc/docs/kibana-logstash/v3/panels/trends.html

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末漆际,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子夺饲,更是在濱河造成了極大的恐慌奸汇,老刑警劉巖,帶你破解...
    沈念sama閱讀 217,185評論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件往声,死亡現(xiàn)場離奇詭異擂找,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)浩销,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,652評論 3 393
  • 文/潘曉璐 我一進(jìn)店門贯涎,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人慢洋,你說我怎么就攤上這事柬采』锻伲” “怎么了?”我有些...
    開封第一講書人閱讀 163,524評論 0 353
  • 文/不壞的土叔 我叫張陵粉捻,是天一觀的道長礁遣。 經(jīng)常有香客問我,道長肩刃,這世上最難降的妖魔是什么祟霍? 我笑而不...
    開封第一講書人閱讀 58,339評論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮盈包,結(jié)果婚禮上沸呐,老公的妹妹穿的比我還像新娘。我一直安慰自己呢燥,他們只是感情好崭添,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,387評論 6 391
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著叛氨,像睡著了一般呼渣。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上寞埠,一...
    開封第一講書人閱讀 51,287評論 1 301
  • 那天屁置,我揣著相機(jī)與錄音,去河邊找鬼仁连。 笑死蓝角,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的饭冬。 我是一名探鬼主播使鹅,決...
    沈念sama閱讀 40,130評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼昌抠!你這毒婦竟也來了并徘?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 38,985評論 0 275
  • 序言:老撾萬榮一對情侶失蹤扰魂,失蹤者是張志新(化名)和其女友劉穎麦乞,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體劝评,經(jīng)...
    沈念sama閱讀 45,420評論 1 313
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡姐直,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,617評論 3 334
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了蒋畜。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片声畏。...
    茶點(diǎn)故事閱讀 39,779評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出插龄,到底是詐尸還是另有隱情愿棋,我是刑警寧澤,帶...
    沈念sama閱讀 35,477評論 5 345
  • 正文 年R本政府宣布均牢,位于F島的核電站糠雨,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏徘跪。R本人自食惡果不足惜甘邀,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,088評論 3 328
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望垮庐。 院中可真熱鬧松邪,春花似錦、人聲如沸哨查。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,716評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽寒亥。三九已至邮府,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間护盈,已是汗流浹背挟纱。 一陣腳步聲響...
    開封第一講書人閱讀 32,857評論 1 269
  • 我被黑心中介騙來泰國打工羞酗, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留腐宋,地道東北人。 一個月前我還...
    沈念sama閱讀 47,876評論 2 370
  • 正文 我出身青樓檀轨,卻偏偏與公主長得像胸竞,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子参萄,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,700評論 2 354

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

  • Docker從2013年發(fā)布第一個版本以來卫枝,已經(jīng)火遍全球,技術(shù)迭代也比較頻繁讹挎,其周邊產(chǎn)品和技術(shù)也越來越豐富校赤。Doc...
    歸海聽雪閱讀 12,283評論 7 44
  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn)筒溃,斷路器马篮,智...
    卡卡羅2017閱讀 134,654評論 18 139
  • 主要參考原文地址:http://www.ywnds.com/?p=9776ELK Stack是軟件集合Elasti...
    曹赫洋閱讀 2,273評論 4 18
  • 開源實時日志分析ELK平臺部署 日志主要包括系統(tǒng)日志、應(yīng)用程序日志和安全日志怜奖。系統(tǒng)運(yùn)維和開發(fā)人員可以通過日志了解服...
    薛定諤的皮皮魚閱讀 1,060評論 0 0
  • 很久沒寫覺察日記了浑测,也不知寫什么,反省一下歪玲,不是寫不出迁央,而是被人格模式帶跑了掷匠,無法臨在,人格模式太強(qiáng)大了岖圈,不...
    綦芳閱讀 404評論 0 1