性能优越的轻量级日志收集工具,微软、亚马逊都在用!
ELK日志收集系統(tǒng)大家都知道,但是還有一種日志收集系統(tǒng)EFK,肯定有很多朋友不知道!這里的F指的是Fluentd,它具有Logstash類(lèi)似的日志收集功能,但是內(nèi)存占用連Logstash的十分之一都不到,性能優(yōu)越、非常輕巧。本文將詳細(xì)介紹Fluentd的使用,主要用來(lái)收集SpringBoot應(yīng)用的日志,希望對(duì)大家有所幫助!
Fluentd 簡(jiǎn)介
Fluentd是一款開(kāi)源的日志收集功能,致力于為用戶(hù)搭建統(tǒng)一的日志收集層,和Elasticsearch、Kibana一起使用可以搭建EFK日志收集系統(tǒng)。什么是統(tǒng)一的日志收集層呢?看下下面這張圖就清楚了!
來(lái)自Fluentd官網(wǎng)
安裝
下載Fluentd的Docker鏡像;
將默認(rèn)配置fluent.conf文件復(fù)制到/mydata/fluentd/目錄下,配置信息如下:
運(yùn)行Fluentd服務(wù),需要開(kāi)放24221~24224四個(gè)端口用于接收不同類(lèi)型的日志;
第一次啟動(dòng)可能會(huì)失敗,修改目錄權(quán)限后重新啟動(dòng)即可;
使用root用戶(hù)進(jìn)入Fluentd容器內(nèi)部;
安裝Fluentd的Elasticsearch插件;
如果你依然想使用docker-compose一次性安裝EFK的話,可以使用如下腳本,注意使用user:root啟動(dòng)就不需要再修改目錄權(quán)限了!
使用新的配置文件fluent.conf替換原來(lái)的配置文件,然后重新啟動(dòng)Fluentd服務(wù),新的配置文件會(huì)在下面給出。
? ?
Fluentd配置詳解
接下來(lái)我們來(lái)介紹下Fluentd配置文件如何配置,先放出完全配置,然后我們對(duì)里面的一些配置要點(diǎn)進(jìn)行詳細(xì)說(shuō)明。
完全配置
<source>@type??tcp@id????debug-inputport??24221tag?debug<parse>@type?json</parse> </source><source>@type??tcp@id????error-inputport??24222tag?error<parse>@type?json</parse> </source><source>@type??tcp@id????business-inputport??24223tag?business<parse>@type?json</parse> </source><source>@type??tcp@id????record-inputport??24224tag?record<parse>@type?json</parse> </source><filter?record>@type?parserkey_name?messagereserve_data?trueremove_key_name_field?true<parse>@type?json</parse> </filter><match?fluent.**>@type?stdoutoutput_type?json </match><match?**>@type?elasticsearchhost?192.168.3.101port?9200type_name?dockerlogstash_format?truelogstash_prefix?docker-${tag}-logslogstash_dateformat?%Y-%m-%dflush_interval?5sinclude_tag_key?true </match>配置要點(diǎn)解析
<source>
定義了日志收集的來(lái)源,可以有tcp、udp、tail(文件)、forward(tcp+udp)、http等方式。
這里我們從tcp請(qǐng)求收集日志,端口為24221,并且設(shè)置了tag為debug。
<source>@type??tcp@id????debug-inputport??24221tag?debug<parse>@type?json</parse> </source><parse>
定義對(duì)原始數(shù)據(jù)的解析方式,可以將日志轉(zhuǎn)化為JSON。
比如我們將debug日志轉(zhuǎn)化為JSON可以進(jìn)行如下配置。
<source>@type??tcp@id????debug-inputport??24221tag?debug<parse>@type?json</parse> </source><filter>
可以對(duì)收集的日志進(jìn)行一系列的處理,比如說(shuō)將日志打印到控制臺(tái)或者對(duì)日志進(jìn)行解析。
將所有日志打印到控制臺(tái)的配置:
<filter?**>@type?stdout </filter>對(duì)于tag為record來(lái)源的日志,我們將其中的message屬性轉(zhuǎn)化為JSON格式,如果不進(jìn)行轉(zhuǎn)化的話,message屬性將會(huì)是一個(gè)字符串。
<filter?record>@type?parserkey_name?messagereserve_data?trueremove_key_name_field?true<parse>@type?json</parse> </filter><match>
定義了收集到的日志最后輸出到哪里,可以輸出到stdout(控制臺(tái))、file、elasticsearch、mongo等里面。
這里我們使用elasticsearch來(lái)存儲(chǔ)日志信息,logstash_format、logstash_prefix、logstash_dateformat主要用來(lái)控制日志索引名稱(chēng)的生成,當(dāng)前配置生成debug日志的索引格式為docker-debug-logs-2020-06-03,flush_interval用來(lái)控制日志輸出到elasticsearch的時(shí)間間隔。
<match?**>@type?elasticsearchhost?192.168.3.101port?9200type_name?dockerlogstash_format?truelogstash_prefix?docker-${tag}-logslogstash_dateformat?%Y-%m-%dflush_interval?5sinclude_tag_key?true </match>替換配置文件
替換掉原來(lái)的/mydata/fluentd/fluent.conf配置文件,然后再重新啟動(dòng)服務(wù),我們的Fluentd服務(wù)就可以開(kāi)始收集日志了。
docekr?restart?efk-fluentd結(jié)合SpringBoot使用
其實(shí)Fluentd收集日志的原理和Logstash一樣,都是通過(guò)tcp端口來(lái)收集日志,所以我們只要把logback配置文件中原來(lái)Logstash日志收集地址端口改為Fluentd的即可。
修改logback-spring.xml配置文件;
如果你的Fluentd不是部署在原來(lái)Logstash的服務(wù)器上,還需要修改application-dev.yml配置中的logstash.host屬性。
啟動(dòng)并運(yùn)行我們的SpringBoot應(yīng)用。
??
Kibana中查看日志
至此我們的EFK日志收集系統(tǒng)搭建完成了,只需在Kibana中使用即可。
在Management->Kibana->Index Patterns中可以創(chuàng)建Index Patterns,Kibana服務(wù)訪問(wèn)地址:http://192.168.3.101:5601
創(chuàng)建完成后查看日志,可以看出該日志收集功能和我們之前搭建的ELK系統(tǒng)完全相同。
?
Logstash vs Fluentd
接下來(lái)我們來(lái)對(duì)這兩個(gè)日志收集工具的各個(gè)方面做個(gè)對(duì)比。
| 對(duì)比方面 | Logstash | Fluentd |
內(nèi)存占用 | 啟動(dòng)1G左右 | 啟動(dòng)60M左右 |
CPU占用 | 較高 | 較低 |
支持插件 | 豐富 | 豐富 |
通用日志解析 | 支持grok(基于正則表達(dá)式)解析 | 支持正則表達(dá)式解析 |
特定日志類(lèi)型 | 支持JSON等主流格式 | 支持JSON等主流格式 |
數(shù)據(jù)過(guò)濾 | 支持 | 支持 |
數(shù)據(jù)buffer發(fā)送 | 插件支持 | 插件支持 |
運(yùn)行環(huán)境 | JRuby實(shí)現(xiàn),依賴(lài)JVM環(huán)境 | CRuby、C實(shí)現(xiàn),依賴(lài)Ruby環(huán)境 |
線程支持 | 支持多線程 | 多線程受GIL限制 |
參考資料
官方文檔:https://docs.fluentd.org/
項(xiàng)目源碼地址
https://github.com/macrozheng/mall-learning/tree/master/mall-tiny-log
有道無(wú)術(shù),術(shù)可成;有術(shù)無(wú)道,止于術(shù)
歡迎大家關(guān)注Java之道公眾號(hào)
好文章,我在看??
總結(jié)
以上是生活随笔為你收集整理的性能优越的轻量级日志收集工具,微软、亚马逊都在用!的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 花了20分钟,给女朋友们写了一个web版
- 下一篇: NYOJ 640 Geometric S