久久国产成人av_抖音国产毛片_a片网站免费观看_A片无码播放手机在线观看,色五月在线观看,亚洲精品m在线观看,女人自慰的免费网址,悠悠在线观看精品视频,一级日本片免费的,亚洲精品久,国产精品成人久久久久久久

分享

性能優(yōu)越的輕量級日志收集工具,,微軟,、亞馬遜都在用,!

 昵稱10087950 2022-07-28 發(fā)布于江蘇

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

Fluentd 簡介

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

圖片
來自Fluentd官網(wǎng)

安裝

《你居然還去服務(wù)器上撈日志,,搭個日志收集系統(tǒng)難道不香么,!》中已經(jīng)介紹了ELK日志收集系統(tǒng)的搭建,這里就不再介紹Elasticsearch和Kibana的安裝了,,直接介紹Fluentd在Docker環(huán)境下的安裝,。

  • 下載Fluentd的Docker鏡像;
docker pull fluent/fluentd:v1.10
  • 將默認(rèn)配置fluent.conf文件復(fù)制到/mydata/fluentd/目錄下,,配置信息如下:
<source>
  @type  forward
  @id    input1
  @label @mainstream
  port  24224
</source>

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

<label @mainstream>
  <match docker.**>
    @type file
    @id   output_docker1
    path         /fluentd/log/docker.*.log
    symlink_path /fluentd/log/docker.log
    append       true
    time_slice_format %Y%m%d
    time_slice_wait   1m
    time_format       %Y%m%dT%H%M%S%z
  </match>
  <match **>
    @type file
    @id   output1
    path         /fluentd/log/data.*.log
    symlink_path /fluentd/log/data.log
    append       true
    time_slice_format %Y%m%d
    time_slice_wait   10m
    time_format       %Y%m%dT%H%M%S%z
  </match>
</label>
  • 運行Fluentd服務(wù),,需要開放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
  • 第一次啟動可能會失敗,,修改目錄權(quán)限后重新啟動即可,;
chmod 777 /mydata/fluentd/log/
  • 使用root用戶進(jìn)入Fluentd容器內(nèi)部,;
docker exec -it --user root efk-fluentd /bin/sh
  • 安裝Fluentd的Elasticsearch插件,;
fluent-gem install fluent-plugin-elasticsearch
  • 如果你依然想使用docker-compose一次性安裝EFK的話,可以使用如下腳本,,注意使用user:root啟動就不需要再修改目錄權(quán)限了,!
version: '3'
services:
  elasticsearch:
    image: elasticsearch:6.4.0
    container_name: efk-elasticsearch
    user: root
    environment:
      - "cluster.name=elasticsearch" #設(shè)置集群名稱為elasticsearch
      - "discovery.type=single-node" #以單一節(jié)點模式啟動
      - "ES_JAVA_OPTS=-Xms512m -Xmx512m" #設(shè)置使用jvm內(nèi)存大小
      - TZ=Asia/Shanghai
    volumes:
      - /mydata/elasticsearch/plugins:/usr/share/elasticsearch/plugins #插件文件掛載
      - /mydata/elasticsearch/data:/usr/share/elasticsearch/data #數(shù)據(jù)文件掛載
    ports:
      - 9200:9200
      - 9300:9300
  kibana:
    image: kibana:6.4.0
    container_name: efk-kibana
    links:
      - elasticsearch:es #可以用es這個域名訪問elasticsearch服務(wù)
    depends_on:
      - elasticsearch #kibana在elasticsearch啟動之后再啟動
    environment:
      - "elasticsearch.hosts=http://es:9200" #設(shè)置訪問elasticsearch的地址
      - TZ=Asia/Shanghai
    ports:
      - 5601:5601
  fluentd:
    image: fluent/fluentd:v1.10
    container_name: efk-fluentd
    user: root
    environment:
      - TZ=Asia/Shanghai
    volumes:
      - /mydata/fluentd/log:/fluentd/log
      - /mydata/fluentd/fluent.conf:/fluentd/etc/fluent.conf
    depends_on:
      - elasticsearch #kibana在elasticsearch啟動之后再啟動
    links:
      - elasticsearch:es #可以用es這個域名訪問elasticsearch服務(wù)
    ports:
      - 24221:24221
      - 24222:24222
      - 24223:24223
      - 24224:24224
  • 使用新的配置文件fluent.conf替換原來的配置文件,,然后重新啟動Fluentd服務(wù),,新的配置文件會在下面給出。

Fluentd配置詳解

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

完全配置

<source>
  @type  tcp
  @id    debug-input
  port  24221
  tag debug
  <parse>
 @type json
  </parse>
</source>

<source>
  @type  tcp
  @id    error-input
  port  24222
  tag error
  <parse>
 @type json
  </parse>
</source>

<source>
  @type  tcp
  @id    business-input
  port  24223
  tag business
  <parse>
 @type json
  </parse>
</source>

<source>
  @type  tcp
  @id    record-input
  port  24224
  tag record
  <parse>
 @type json
  </parse>
</source>

<filter record>
  @type parser
  key_name message
  reserve_data true
  remove_key_name_field true
  <parse>
    @type json
  </parse>
</filter>

<match fluent.**>
  @type stdout
  output_type json
</match>

<match **>
  @type elasticsearch
  host 192.168.3.101
  port 9200
  type_name docker
  logstash_format true
  logstash_prefix docker-${tag}-logs
  logstash_dateformat %Y-%m-%d
  flush_interval 5s
  include_tag_key true
</match>

配置要點解析

<source>

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

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

<source>
  @type  tcp
  @id    debug-input
  port  24221
  tag debug
  <parse>
 @type json
  </parse>
</source>

<parse>

定義對原始數(shù)據(jù)的解析方式,可以將日志轉(zhuǎn)化為JSON,。

比如我們將debug日志轉(zhuǎn)化為JSON可以進(jìn)行如下配置,。

<source>
  @type  tcp
  @id    debug-input
  port  24221
  tag debug
  <parse>
 @type json
  </parse>
</source>

<filter>

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

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

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

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

<filter record>
  @type parser
  key_name message
  reserve_data true
  remove_key_name_field true
  <parse>
    @type json
  </parse>
</filter>

<match>

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

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

<match **>
  @type elasticsearch
  host 192.168.3.101
  port 9200
  type_name docker
  logstash_format true
  logstash_prefix docker-${tag}-logs
  logstash_dateformat %Y-%m-%d
  flush_interval 5s
  include_tag_key true
</match>

替換配置文件

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

docekr restart efk-fluentd

結(jié)合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>

<!--業(yè)務(wù)日志輸出到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的服務(wù)器上,,還需要修改application-dev.yml配置中的logstash.host屬性,。
logstash:
  host: localhost
  • 啟動并運行我們的SpringBoot應(yīng)用。

Kibana中查看日志

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

  • Management->Kibana->Index Patterns中可以創(chuàng)建Index Patterns,Kibana服務(wù)訪問地址:http://192.168.3.101:5601
圖片
  • 創(chuàng)建完成后查看日志,,可以看出該日志收集功能和我們之前搭建的ELK系統(tǒng)完全相同,。
圖片

Logstash vs Fluentd

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

對比方面LogstashFluentd
內(nèi)存占用啟動1G左右啟動60M左右
CPU占用較高較低
支持插件豐富豐富
通用日志解析支持grok(基于正則表達(dá)式)解析支持正則表達(dá)式解析
特定日志類型支持JSON等主流格式支持JSON等主流格式
數(shù)據(jù)過濾支持支持
數(shù)據(jù)buffer發(fā)送插件支持插件支持
運行環(huán)境JRuby實現(xiàn),依賴JVM環(huán)境CRuby,、C實現(xiàn),,依賴Ruby環(huán)境
線程支持支持多線程多線程受GIL限制

參考資料

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

項目源碼地址

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

    本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,,不代表本站觀點,。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,,謹(jǐn)防詐騙,。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊一鍵舉報,。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多