日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

性能优越的轻量级日志收集工具,微软、亚马逊都在用!

發布時間:2025/3/16 编程问答 37 豆豆
生活随笔 收集整理的這篇文章主要介紹了 性能优越的轻量级日志收集工具,微软、亚马逊都在用! 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

ELK日志收集系統大家都知道,但是還有一種日志收集系統EFK,肯定有很多朋友不知道!這里的F指的是Fluentd,它具有Logstash類似的日志收集功能,但是內存占用連Logstash的十分之一都不到,性能優越、非常輕巧。本文將詳細介紹Fluentd的使用,主要用來收集SpringBoot應用的日志,希望對大家有所幫助!


Fluentd 簡介

Fluentd是一款開源的日志收集功能,致力于為用戶搭建統一的日志收集層,和Elasticsearch、Kibana一起使用可以搭建EFK日志收集系統。什么是統一的日志收集層呢?看下下面這張圖就清楚了!

來自Fluentd官網


安裝

  • 下載Fluentd的Docker鏡像;

docker?pull?fluent/fluentd:v1.10
  • 將默認配置fluent.conf文件復制到/mydata/fluentd/目錄下,配置信息如下:

<source>@type??forward@id????input1@label?@mainstreamport??24224 </source><filter?**>@type?stdout </filter><label?@mainstream><match?docker.**>@type?file@id???output_docker1path?????????/fluentd/log/docker.*.logsymlink_path?/fluentd/log/docker.logappend???????truetime_slice_format?%Y%m%dtime_slice_wait???1mtime_format???????%Y%m%dT%H%M%S%z</match><match?**>@type?file@id???output1path?????????/fluentd/log/data.*.logsymlink_path?/fluentd/log/data.logappend???????truetime_slice_format?%Y%m%dtime_slice_wait???10mtime_format???????%Y%m%dT%H%M%S%z</match> </label>
  • 運行Fluentd服務,需要開放24221~24224四個端口用于接收不同類型的日志;

docker?run?-p?24221:24221?-p?24222:24222?-p?24223:24223?-p?24224:24224?--name?efk-fluentd?\ -v?/mydata/fluentd/log:/fluentd/log?\ -v?/mydata/fluentd/fluent.conf:/fluentd/etc/fluent.conf?\ -d?fluent/fluentd:v1.10
  • 第一次啟動可能會失敗,修改目錄權限后重新啟動即可;

chmod?777?/mydata/fluentd/log/
  • 使用root用戶進入Fluentd容器內部;

docker?exec?-it?--user?root?efk-fluentd?/bin/sh
  • 安裝Fluentd的Elasticsearch插件;

fluent-gem?install?fluent-plugin-elasticsearch
  • 如果你依然想使用docker-compose一次性安裝EFK的話,可以使用如下腳本,注意使用user:root啟動就不需要再修改目錄權限了!

version:?'3' services:elasticsearch:image:?elasticsearch:6.4.0container_name:?efk-elasticsearchuser:?rootenvironment:-?"cluster.name=elasticsearch"?#設置集群名稱為elasticsearch-?"discovery.type=single-node"?#以單一節點模式啟動-?"ES_JAVA_OPTS=-Xms512m?-Xmx512m"?#設置使用jvm內存大小-?TZ=Asia/Shanghaivolumes:-?/mydata/elasticsearch/plugins:/usr/share/elasticsearch/plugins?#插件文件掛載-?/mydata/elasticsearch/data:/usr/share/elasticsearch/data?#數據文件掛載ports:-?9200:9200-?9300:9300kibana:image:?kibana:6.4.0container_name:?efk-kibanalinks:-?elasticsearch:es?#可以用es這個域名訪問elasticsearch服務depends_on:-?elasticsearch?#kibana在elasticsearch啟動之后再啟動environment:-?"elasticsearch.hosts=http://es:9200"?#設置訪問elasticsearch的地址-?TZ=Asia/Shanghaiports:-?5601:5601fluentd:image:?fluent/fluentd:v1.10container_name:?efk-fluentduser:?rootenvironment:-?TZ=Asia/Shanghaivolumes:-?/mydata/fluentd/log:/fluentd/log-?/mydata/fluentd/fluent.conf:/fluentd/etc/fluent.confdepends_on:-?elasticsearch?#kibana在elasticsearch啟動之后再啟動links:-?elasticsearch:es?#可以用es這個域名訪問elasticsearch服務ports:-?24221:24221-?24222:24222-?24223:24223-?24224:24224
  • 使用新的配置文件fluent.conf替換原來的配置文件,然后重新啟動Fluentd服務,新的配置文件會在下面給出。

? ?

Fluentd配置詳解

接下來我們來介紹下Fluentd配置文件如何配置,先放出完全配置,然后我們對里面的一些配置要點進行詳細說明。

完全配置

<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>

配置要點解析

<source>

定義了日志收集的來源,可以有tcp、udp、tail(文件)、forward(tcp+udp)、http等方式。

這里我們從tcp請求收集日志,端口為24221,并且設置了tag為debug。

<source>@type??tcp@id????debug-inputport??24221tag?debug<parse>@type?json</parse> </source>

<parse>

定義對原始數據的解析方式,可以將日志轉化為JSON。

比如我們將debug日志轉化為JSON可以進行如下配置。

<source>@type??tcp@id????debug-inputport??24221tag?debug<parse>@type?json</parse> </source>

<filter>

可以對收集的日志進行一系列的處理,比如說將日志打印到控制臺或者對日志進行解析。

將所有日志打印到控制臺的配置:

<filter?**>@type?stdout </filter>

對于tag為record來源的日志,我們將其中的message屬性轉化為JSON格式,如果不進行轉化的話,message屬性將會是一個字符串。

<filter?record>@type?parserkey_name?messagereserve_data?trueremove_key_name_field?true<parse>@type?json</parse> </filter>

<match>

定義了收集到的日志最后輸出到哪里,可以輸出到stdout(控制臺)、file、elasticsearch、mongo等里面。

這里我們使用elasticsearch來存儲日志信息,logstash_format、logstash_prefix、logstash_dateformat主要用來控制日志索引名稱的生成,當前配置生成debug日志的索引格式為docker-debug-logs-2020-06-03,flush_interval用來控制日志輸出到elasticsearch的時間間隔。

<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>

替換配置文件

替換掉原來的/mydata/fluentd/fluent.conf配置文件,然后再重新啟動服務,我們的Fluentd服務就可以開始收集日志了。

docekr?restart?efk-fluentd


結合SpringBoot使用

其實Fluentd收集日志的原理和Logstash一樣,都是通過tcp端口來收集日志,所以我們只要把logback配置文件中原來Logstash日志收集地址端口改為Fluentd的即可。

  • 修改logback-spring.xml配置文件;

<!--DEBUG日志輸出到LogStash--> <appender?name="LOG_STASH_DEBUG"?class="net.logstash.logback.appender.LogstashTcpSocketAppender"><destination>${LOG_STASH_HOST}:24221</destination> </appender><!--ERROR日志輸出到LogStash--> <appender?name="LOG_STASH_ERROR"?class="net.logstash.logback.appender.LogstashTcpSocketAppender"><destination>${LOG_STASH_HOST}:24222</destination> </appender><!--業務日志輸出到LogStash--> <appender?name="LOG_STASH_BUSINESS"?class="net.logstash.logback.appender.LogstashTcpSocketAppender"><destination>${LOG_STASH_HOST}:24223</destination> </appender><!--接口訪問記錄日志輸出到LogStash--> <appender?name="LOG_STASH_RECORD"?class="net.logstash.logback.appender.LogstashTcpSocketAppender"><destination>${LOG_STASH_HOST}:24224</destination> </appender>
  • 如果你的Fluentd不是部署在原來Logstash的服務器上,還需要修改application-dev.yml配置中的logstash.host屬性。

logstash:host:?localhost
  • 啟動并運行我們的SpringBoot應用。

??

Kibana中查看日志

至此我們的EFK日志收集系統搭建完成了,只需在Kibana中使用即可。

  • 在Management->Kibana->Index Patterns中可以創建Index Patterns,Kibana服務訪問地址:http://192.168.3.101:5601

  • 創建完成后查看日志,可以看出該日志收集功能和我們之前搭建的ELK系統完全相同。

?

Logstash vs Fluentd

接下來我們來對這兩個日志收集工具的各個方面做個對比。

對比方面LogstashFluentd

內存占用

啟動1G左右

啟動60M左右

CPU占用

較高

較低

支持插件

豐富

豐富

通用日志解析

支持grok(基于正則表達式)解析

支持正則表達式解析

特定日志類型

支持JSON等主流格式

支持JSON等主流格式

數據過濾

支持

支持

數據buffer發送

插件支持

插件支持

運行環境

JRuby實現,依賴JVM環境

CRuby、C實現,依賴Ruby環境

線程支持

支持多線程

多線程受GIL限制

參考資料

官方文檔:https://docs.fluentd.org/

項目源碼地址

https://github.com/macrozheng/mall-learning/tree/master/mall-tiny-log

有道無術,術可成;有術無道,止于術

歡迎大家關注Java之道公眾號

好文章,我在看??

總結

以上是生活随笔為你收集整理的性能优越的轻量级日志收集工具,微软、亚马逊都在用!的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。