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

ELK日志收集系统简述 在每台服务器上部署logstash实例,对日志进行收集或处理后输出到elasticsearch、elasticsearc进行存储、索引,kibana关联索引,展示、分析数据,这种架构是常见的构架,缺点是在每台服务器上要部署logstash实例,而且还得依赖jdk,所以跑起来比较重,对资源消耗比较大,另外es是单个节点,存在单点故障,所以这种架构比较适合日志数据不大、机器少的场景.2、它的特点有:分布式,零配置,自动发现,索引自动分片,索引副本机制,restful风格接口,多数据源,自动搜索负载等。 阅读详情

摘要

ELK日志收集系统大家都知道,但是还有一种日志收集系统EFK,肯定有很多朋友不知道!这里的F指的是Fluentd,它具有Logstash类似的日志收集功能,但是内存占用连Logstash的十分之一都不到,性能优越、非常轻巧。本文将详细介绍Fluentd的使用,主要用来收集SpringBoot应用的日志,希望对大家有所帮助!java学习交流q群:925895158

Fluentd 简介

Fluentd是一款开源的日志收集功能,致力于为用户搭建统一的日志收集层,和Elasticsearch、Kibana一起使用可以搭建EFK日志收集系统。什么是统一的日志收集层呢?看下下面这张图就清楚了!

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

 

安装

这里就不再介绍Elasticsearch和Kibana的安装了,直接介绍Fluentd在Docker环境下的安装。

  • 下载Fluentd的Docker镜像;
docker pull fluent/fluentd:v1.10
复制代码
  • 将默认配置fluent.conf文件复制到/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服务,需要开放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.0
    container_name: efk-elasticsearch
    user: root
    environment:
      - "cluster.name=elasticsearch" #设置集群名称为elasticsearch
      - "discovery.type=single-node" #以单一节点模式启动
      - "ES_JAVA_OPTS=-Xms512m -Xmx512m" #设置使用jvm内存大小
      - TZ=Asia/Shanghai
    volumes:
      - /mydata/elasticsearch/plugins:/usr/share/elasticsearch/plugins #插件文件挂载
      - /mydata/elasticsearch/data:/usr/share/elasticsearch/data #数据文件挂载
    ports:
      - 9200:9200
      - 9300:9300
  kibana:
    image: kibana:6.4.0
    container_name: efk-kibana
    links:
      - elasticsearch:es #可以用es这个域名访问elasticsearch服务
    depends_on:
      - elasticsearch #kibana在elasticsearch启动之后再启动
    environment:
      - "elasticsearch.hosts=http://es:9200" #设置访问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服务
    ports:
      - 24221:24221
      - 24222:24222
      - 24223:24223
      - 24224:24224
复制代码
  • 使用新的配置文件fluent.conf替换原来的配置文件,然后重新启动Fluentd服务,新的配置文件会在下面给出。

Fluentd配置详解

接下来我们来介绍下Fluentd配置文件如何配置,先放出完全配置,然后我们对里面的一些配置要点进行详细说明。

完全配置

<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,并且设置了tag为debug。

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

<parse>

定义对原始数据的解析方式,可以将日志转化为JSON。

比如我们将debug日志转化为JSON可以进行如下配置。

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

<filter>

可以对收集的日志进行一系列的处理,比如说将日志打印到控制台或者对日志进行解析。

将所有日志打印到控制台的配置:

<filter **>
  @type stdout
</filter>
复制代码

对于tag为record来源的日志,我们将其中的message属性转化为JSON格式,如果不进行转化的话,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主要用来控制日志索引名称的生成,当前配置生成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配置文件,然后再重新启动服务,我们的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

接下来我们来对这两个日志收集工具的各个方面做个对比。

对比方面 Logstash Fluentd 内存占用 启动1G左右 启动60M左右 CPU占用 较高 较低 支持插件 丰富 丰富 通用日志解析 支持grok(基于正则表达式)解析 支持正则表达式解析 特定日志类型 支持JSON等主流格式 支持JSON等主流格式 数据过滤 支持 支持 数据buffer发送 插件支持 插件支持 运行环境 JRuby实现,依赖JVM环境 CRuby、C实现,依赖Ruby环境 线程支持 支持多线程 多线程受GIL限制


写在最后

很多人感叹“学习无用”,实际上之所以产生无用论,是因为自己想要的与自己所学的匹配不上,这也就意味着自己学得远远不够。无论是学习还是工作,都应该有主动性,所以如果拥有大厂梦,那么就要自己努力去实现它。

以下学习资料均免费放送,最后祝愿各位身体健康,能够有所提升!

资料获取方式:转发+评论我的文章,关注我,然后私信【资料】即可免费领取~

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

 

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

深信服AF设置安全防护策略 防火墙设置安全防护策略,禁止用户访问指定网站 阅读详情

相关推荐

Lossless-Claw 插件实战:告别上下文截断,让 OpenClaw 永不遗忘

本文介绍了OpenClaw的Lossless-Claw插件,这是一个基于LCM论文的DAG摘要系统,能有效解决上下文截断问题。文章包含10个部分,从插件原理到实操指南: 核心原理:通过DAG结构持久化存储所有原始消息,将旧消息分块摘要并形成层级结构,保持上下文在模型Token限制内。 性能优势:在OOLONG基准测试中得分74.8,优于Claude Code的70.3,尤其在长上下文场景表现更佳。 功能特点: 提供lcm_grep、lcm_describe等工具主动回忆历史 摘要始终链接回原文,实现真正无损

u014798858的博客 2619

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

ELK日志收集系统大家都知道,但是还有一种日志收集系统EFK,肯定有很多朋友不知道!这里的F指的是Fluentd,它具有Logstash类似的日志收集功能,但是内存占用连Logstash的十分之一都不到,性能优越、非常轻巧。本文将详细介绍Fluentd的使用,主要用来收集SpringBoot应用的日志,希望对大家有所帮助! Fluentd 简介 Fluentd是一款开源的日志收集功能,致力于为用户搭建统一的日志收集层,和Elasticsearch、Kibana一起使用可以搭建EFK日志收集系统。什么是统.

weixin_47083537的博客 606

【联邦学习】联邦平均(FedAvg)_附pytorch代码实现

其他代码包括1)数据集划分;2)训练;3)保存结果;4)绘图都可在 https://github.com/kt4ngw/fedavg-pytorch 找到。如果您对文章有建议及指定,也欢迎您留言评论,作者定当虚心修正。

kt4ngw的博客 5115

Fluentd日志收集

2019独角兽企业重金招聘Python工程师标准>>> ...

weixin_34259232的博客 2430

Win11内核隔离无法打开的解决方案详解

内核隔离问题的解决需遵循"先硬件后软件"的排查原则,90%以上的案例可通过驱动清理或外设断开解决。对于必须禁用该功能的用户,建议定期使用Windows Defender进行全盘扫描,并保持系统更新至最新版本。技术决策需在安全性和兼容性之间取得平衡,本文提供的多维解决方案可帮助用户构建更稳定的Windows 11使用环境。

mmoo_python的博客 4830

cartographer基于3d地图的纯定位模式

关于纯定位模式呢,本人试过2d和3d,怎么说呢,有条件的话,建议直接上3d,因为博主当初在做定位时针对室内和室外都尝试过,2d只在室内环境下效果会很棒,但是在室外就呵呵啦!所以这里直接讲解3d室外定位(建图篇请自己查看我之前的博客:[3d建图](https://blog.youkuaiyun.com/qq_40216084/article/details/105531983) 看了我之前的博客大概知道配置文件和源文件路径了,我这里就不把路径写出来了,挺麻烦的。直接讲怎么做把,有不懂的留言,看到了我一定知无不言。 **首

qq_40216084的博客 5552

日志收集系统Elasticsearch,Fluentd , Kibana

为什么做日志系统 首先,什么是日志? 日志就是程序产生的,遵循一定格式(通常包含时间戳)的文本数据。 通常日志由服务器生成,输出到不同的文件中,一般会有系统日志、 应用日志、安全日志。这些日志分散地存储在不同的机器上。 通常当系统发生故障时,工程师需要登录到各个服务器上,使用 grep / sed / awk 等 Linux 脚本工具去日志里查找故障原因。在没有日志系统的情况下,首先需要定位处理请...

1万+

【大语言模型 37】知识蒸馏深度实战:大模型向小模型迁移

本文深入探讨了知识蒸馏技术在大语言模型领域的应用,详细阐述了如何将庞大复杂的大模型知识有效迁移到轻量级小模型中。文章系统介绍了知识蒸馏的理论基础、多种蒸馏损失函数设计、特征匹配与注意力迁移技术、渐进式蒸馏策略以及全面的效果评估方法。通过实战案例和完整代码实现,读者将掌握从理论到实践的知识蒸馏全流程,了解如何在保持模型性能的同时显著降低计算资源需求,实现大语言模型的高效部署与应用。

熵数实验室 1510

怎样合理创建es索引_图解Elasticsearch之一——索引创建过程

0、引言这是国外培训ppt课程的节选内容。以下是我们的Core Elasticsearch:Operations课程中的一些很棒的幻灯片,它们有助于解释分片分配的概念。 我们建议您更全面地了解这一点,但我会在此提供我们培训的概述:分片分配是将分片分配给节点的过程。 这可能发生在初始恢复,副本分配,重新平衡或添加或删除节点期间。 大多数时候,你不需要考虑它,这项工作是由Elasticsearch在后...

weixin_29021195的博客 1133

YOLOv10 的损失函数解析

YOLOv10 在 YOLO 系列的演进中进一步优化了任务解耦与动态平衡策略,通过 ​多模态损失融合、自适应样本分配 和 ​轻量化设计,显著提升了检测精度与推理效率。

浩瀚之水的专栏 1380

基于STM32+4G模块设计的智能灌溉系统

当前智能灌溉系统分为三个部分:温湿度采集部分、灌溉系统部分、OneNet云平台。 灌溉系统部分增加刷卡功能,用户可以通过IC卡刷卡将金额刷到灌溉系统设备里,灌溉系统设备里会记录金额,并且在手机可视化页面上会显示当前的设备金额。 金额会随着时间进行递减,按分钟计费,如果计费到0,就无法启动灌溉,需要重新充值金额才能继续。

4515

swagger怎么看接口数量_给Swagger换了个新皮肤,瞬间高大上了!

Swagger作为一款API文档生成工具,虽然功能已经很完善了,但是还是有些不足的地方。偶然发现knife4j弥补了这些不足,赋予了Swagger更多的功能,今天我们来讲下它的使用方法。knife4j简介 knife4j是springfox-swagger的增强UI实现,为Java开发者在使用Swagger的时候,提供了简洁、强大的接口文档体验。knife4j完全遵循了springfox...

weixin_39659837的博客 554

YOLOv10改进策略【Neck】| arXiv 2025 分层多头注意力HMHA 子空间拆分提多样 + 通道重排降冗余,强化目标检测精度

HMHA(Hierarchical Multi-Head Attention,分层多头注意力)旨在解决传统多头注意力(MHA)在图像恢复任务中的核心缺陷——特征冗余。传统MHA将通道均匀拆分给各个头,导致不同头学习的子空间信息相似,进而出现多头关注同一区域、忽略退化区域修复的问题,限制了模型的特征表达能力。HMHA通过“分层子空间拆分+通道重排序”策略,让每个头学习差异化、互补的上下文特征,从根源上缓解冗余,提升图像恢复任务中对复杂退化场景的特征捕捉能力。

Limiiiing的博客 106

ELK日志管理系统图示全过程详解

概要 我们常说的ELK日志收集系统,完整的应该称为:ELK Stack是软件集合Elasticsearch、Logstash、Kibana的简称,它们都是开源软件,目前称为:Elastic Stack,其是ELK Stack 在 5.0 版本加入 Beats 套件后的新称呼。新增得FileBeat,它是一个轻量级的日志收集处理工具(Agent),Filebeat占用资源少,适合于在各个服务器上搜集..................

企业实战系列集 ●●● https://ximenjianxue.blog.youkuaiyun.com 1万+

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

轻量级日志系统——Loki

Loki是团队最新的开源项目,是一个水平可扩展,高可用性,多租户的日志聚合系统。它的设计非常经济高效且易于操作,因为它不会为日志内容编制索引,而是为每个日志流编制一组标签。项目受 Prometheus启发,官方的介绍就是:,类似于Prometheus的日志系统。

wzpny的博客 1万+

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

大数据技术之flume——日志收集系统

大数据需要解决的三个问题:采集、存储、计算。Apache flume是一个分布式、可靠的、高可用的海量日志数据采集、聚合和传输系统,将海量的日志数据从不同的数据源移动到一个中央的存储系统中。用一句话总结:Flume不生产数据,它只是数据的搬运工。flume最主要的作用就是,实时读取服务器本地磁盘的数据,将数据写入到HDFS。

five小点心的博客 2402

日志收集系统

a. 把机器上的日志实时收集,统一的存储到中心系统 b. 然后再对这些日志建立索引,通过搜索即可以找到对应日志 c. 通过提供界面友好的web界面,通过web即可以完成日志搜索a. 实时日志量非常大,每天几十亿条 b. 日志准实时收集,延迟控制在分钟级别 c. 能够水平可扩展4.1 ELK简介 通俗来讲,ELK是由Elasticsearch(弹性搜索引擎)、Logstash(日志收集)、Kibana(查看日志/可视化的web界面)三个开源软件的组成的一个组合体,ELK是elastic公司研发的一套完整的日志

ALEX_CYL的博客 2900

轻量级云原生日志收集方案 Loki

❝本文转自掘金,原文:https://juejin.cn/post/7150469420605767717,版权归原作者所有。欢迎投稿,投稿请添加微信好友:cloud-native-yangHi,很高兴能够在掘金开发者的平台上为大家带来一套轻量级的 kubernetes 日志收集方案的相关介绍。我自己也在生产环境中使用过这套方案,令我意想不到的时它占用的 kubernetes 的资源相比与 ELK...

云原生实验室 1646

PB级强大日志收集智能分析系统-LCA

强大的日志收集分析系统,可实时收集常用的软件的日志,比如nginx,当每次添加一个需要收集的日志文件时可以实时进行收集,还可以实时收集指定目录下所有按时间切分的日志,可以通过api调用主动推送日志到日志分析系统,4. 可以对收集的日志进行分析,智能分析,然后按规则告警(nginx状态不是200,php文件报错),5. 实现如阿里sls一般查询日志

jc2255的博客 3224

ELK日志收集系统

日志收集 日志分析 日志可视化。

lsqaa的博客 1290

一种轻量级日志采集解决方案

目前各大公司生产部署很多都是采用的集群+微服务的部署方式,如果让日志散落在各个主机上,查询起来会非常的困难,所以目前我了解到的都是采用的日志中心来统一收集管控日志,日志中心的实现方案大多基于ELK(即Elasticsearch、Logstash和Kibana三个开源软件的缩写),ELK一般都要配合FileBeat使用,其中FileBeat做为采集器,Logstash做为日志过滤格式化工具、Elasticsearch做为存储介质、Kibana做为视图解析器,四个组件搭配组成日志中心。

cz1803472613的博客 1587

轻量级日志收集系统 Grafana+Loki+Promtail

编写日志流选择器后,您可以通过编写搜索表达式进一步过滤结果。搜索表达式可以文本或正则表达式。~ line 与正则表达式不匹配。|~ line 匹配正则表达式。= line 不包含字符串。|= line 包含字符串。~:不要正则表达式匹配。\=~:正则表达式匹配。

manongwangziqi的博客 1272

【亲测免费】 SysLog - 轻量级的日志收集与分析系统

SysLog - 轻量级的日志收集与分析系统 是一个轻量级的日志收集与分析系统,可以帮助开发者快速地收集、存储、查询和分析应用程序产生的日志数据。 什么是 SysLog? SysLog 是一种广泛应用于网络设备、操作系统和应用程序的标准日志记录协议。它允许不同系统之间的日志数据交换,并提供了一种集中式的方式来管理和监控日志信息。 Tortel 的 SysLog 系统是基于此标准协议构建的,旨在为开...

gitblog_00012的博客 1274
上一篇: Android 架构组件 -App 架构指南,你还不收藏嘛
下一篇: 2020年9大顶级Java框架,你还不收藏嘛
Java架构技术官
博客等级 码龄6年 9粉丝 58原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值