百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 热门文章 > 正文

闲谈日志采集器FileBeat

bigegpt 2024-09-09 01:17 8 浏览

为什么使用FileBeat?

日志采集器有很多,比如Logstash,虽然Logstash的功能强大,但是它依赖java并且在数据量大的时候进程会消耗过多的系统资源,会严重影响业务系统的性能。

而filebeat就是一个完美的替代者,它基于Go语言没有任何依赖,配置文件简单。同时,filebeat比logstash更加轻量级,所以占用系统资源极少,非常适合安装在生产机器上。

Filebeat可以直接将数据发送到Elasticsearch、Kafka或者Redis,在那里可以进一步处理和增强数据,然后在Kibana中将其可视化,目前来说Filebeat是 ELK 日志系统在Agent上的第一选择。

Filebeat主要组件

filebeat主要由两个组件构成prospector(探测器)和harvester(收集器),这两类组件一起协作完成Filebeat的工作。

Filebeat的工作流程

当开启Filebeat程序的时候,它会启动一个或多个探测器去检测指定的日志目录或文件。对于探测器找出的每一个日志文件,Filebeat会启动收集进程,每一个收集进程读取一个日志文件的内容,然后将这些日志数据发送到后台处理程序,后台处理程序会集合这些事件,最后发送集合的数据到output指定的目的地。

FileBeat安装与使用

Filebeat基于go语言开发无其他依赖,它最大的特点是性能稳定、配置简单、占用系统资源很少,安装使用也非常简单。

tar -zxvf filebeat-7.tar.gz
mv filebeat-7 filebeat
cd filebeat

FileBeat启停指令

./filebeat -e -c filebeat.yml
ps -ef | grep filebeat
Kill -9 线程号

FileBeat配置文件

FileBeat的配置文件定义了在读取文件的位置,输出流的位置以及相应的性能参数

filebeat.inputs: 
- type: log
  enabled: true
  paths:
    - /wls/applogs/rtlog/app.log
  fields: 
    log_topic: appName
  multiline:
        # pattern for error log, if start with space or cause by 
        pattern: '^[[:space:]]+(at|\.{3})\b|^Caused by:'
        negate:  false
        match:   after

output.kafka:
   enabled: true
   hosts: ["kafka-1:9092","kafka-2:9092"]
   topic: applog
   version: "0.10.2.0"
   compression: gzip

processors:
- drop_fields: 
   fields: ["beat", "input", "source", "offset"]

logging.level: error
name: app-server-ip
  • paths:定义了日志文件路径,可以采用模糊匹配模式,如*.log
  • fields:topic对应的消息字段或自定义增加的字段。
  • output.kafka:filebeat支持多种输出,支持向kafka,logstash,elasticsearch输出数据,此处设置数据输出到kafka。
  • enabled:这个启动这个模块。
  • topic:指定要发送数据给kafka集群的哪个topic,若指定的topic不存在,则会自动创建此topic。
  • version:指定kafka的版本。
  • drop_fields:舍弃字段,filebeat会json日志信息,适当舍弃无用字段节省空间资源。
  • name:收集日志中对应主机的名字,建议name这里设置为IP,便于区分多台主机的日志信息。

异常堆栈的多行合并问题

在收集日志过程中还常常涉及到对于应用中异常堆栈日志的处理,此时有两种方案,一种是在采集是归并,一种是Logstash过滤时归并,更建议在客户端agent上直接实现堆栈的合并,把合并操作的压力在输入源头上进行控制,filebeat合并行的思路有两种,正向和逆向处理。由于filebeat在合并行的时候需要设置negate和match来决定合并动作,意义混淆,简直是一种糟糕的设计,直接附上配置源码和说明便于理解

符合条件才合并(容易遗漏日志)

将以空格开头的所有行合并到上一行;并把以Caused by开头的也追加到上一行

   multiline: 
        pattern: '^[[:space:]]+(at|\.{3})\b|^Caused by:'
        negate:  false
        match:   after

negate参数为false,表示“否定参数=false”。表示符合pattern、match条件的行会融入多行之中、成为一条完整日志的中间部分。如果match=after,则以b开头的和前面一行将合并成一条完整日志;如果match=before,则以b开头的和后面一行将合并成一条完整日志。

不符合条件通通合并,需事先约定

约定一行完整的日志开头必须是以“[”开始,不符合则归并!

   multiline:
        pattern: '^\['
        negate:  true
        match:   after

negate参数为true,表示“否定参数=true”。multiline多行参数为负,表示符合match条件的行是多行的开头,是一条完整日志的开始或结尾。如果match=after,则以b开头的行是一条完整日志的开始,它和后面多个不以b开头的行组成一条完整日志;如果match=before,则以b开头的行是一条完整日志的结束,和前面多个不以b开头的合并成一条完整日志。

采用文件缓冲限制内存使用

queue.spool:
  file: 
    path: "tmp/spool.dat"     #缓冲区路径
    size: 512MiB              #缓冲区大小
    page_size: 16KiB          #文件页面大小,采用16kb默认值
  write:
    buffer_size: 10MiB        #写缓冲大小
    flush.timeout: 5s         #写缓冲最旧事件的最长等待时间
    flush.events: 1024        #缓冲事件数量,满足则刷新。

文件资源优化

filebeat是贪婪式的采集,只要有日志就会坚持采集完日志,否则就会永久持有文件句柄不“放手”,可设置文件资源配置参数优化:

close_inactive: 1m
#没有新日志多长时间关闭文件句柄,默认5分钟可改短一些
clean_inactive: 72h
#多久清理一次registry文件,默认值为0,运行时间长可能会导致该文件变大带来性能问题。
  • CPU最大数量使用限制:
max_procs: 4


相关推荐

当Frida来“敲”门(frida是什么)

0x1渗透测试瓶颈目前,碰到越来越多的大客户都会将核心资产业务集中在统一的APP上,或者对自己比较重要的APP,如自己的主业务,办公APP进行加壳,流量加密,投入了很多精力在移动端的防护上。而现在挖...

服务端性能测试实战3-性能测试脚本开发

前言在前面的两篇文章中,我们分别介绍了性能测试的理论知识以及性能测试计划制定,本篇文章将重点介绍性能测试脚本开发。脚本开发将分为两个阶段:阶段一:了解各个接口的入参、出参,使用Python代码模拟前端...

Springboot整合Apache Ftpserver拓展功能及业务讲解(三)

今日分享每天分享技术实战干货,技术在于积累和收藏,希望可以帮助到您,同时也希望获得您的支持和关注。架构开源地址:https://gitee.com/msxyspringboot整合Ftpserver参...

Linux和Windows下:Python Crypto模块安装方式区别

一、Linux环境下:fromCrypto.SignatureimportPKCS1_v1_5如果导包报错:ImportError:Nomodulenamed'Crypt...

Python 3 加密简介(python des加密解密)

Python3的标准库中是没多少用来解决加密的,不过却有用于处理哈希的库。在这里我们会对其进行一个简单的介绍,但重点会放在两个第三方的软件包:PyCrypto和cryptography上,我...

怎样从零开始编译一个魔兽世界开源服务端Windows

第二章:编译和安装我是艾西,上期我们讲述到编译一个魔兽世界开源服务端环境准备,那么今天跟大家聊聊怎么编译和安装我们直接进入正题(上一章没有看到的小伙伴可以点我主页查看)编译服务端:在D盘新建一个文件夹...

附1-Conda部署安装及基本使用(conda安装教程)

Windows环境安装安装介质下载下载地址:https://www.anaconda.com/products/individual安装Anaconda安装时,选择自定义安装,选择自定义安装路径:配置...

如何配置全世界最小的 MySQL 服务器

配置全世界最小的MySQL服务器——如何在一块IntelEdison为控制板上安装一个MySQL服务器。介绍在我最近的一篇博文中,物联网,消息以及MySQL,我展示了如果Partic...

如何使用Github Action来自动化编译PolarDB-PG数据库

随着PolarDB在国产数据库领域荣膺桂冠并持续获得广泛认可,越来越多的学生和技术爱好者开始关注并涉足这款由阿里巴巴集团倾力打造且性能卓越的关系型云原生数据库。有很多同学想要上手尝试,却卡在了编译数据...

面向NDK开发者的Android 7.0变更(ndk android.mk)

订阅Google官方微信公众号:谷歌开发者。与谷歌一起创造未来!受Android平台其他改进的影响,为了方便加载本机代码,AndroidM和N中的动态链接器对编写整洁且跨平台兼容的本机...

信创改造--人大金仓(Kingbase)数据库安装、备份恢复的问题纪要

问题一:在安装KingbaseES时,安装用户对于安装路径需有“读”、“写”、“执行”的权限。在Linux系统中,需要以非root用户执行安装程序,且该用户要有标准的home目录,您可...

OpenSSH 安全漏洞,修补操作一手掌握

1.漏洞概述近日,国家信息安全漏洞库(CNNVD)收到关于OpenSSH安全漏洞(CNNVD-202407-017、CVE-2024-6387)情况的报送。攻击者可以利用该漏洞在无需认证的情况下,通...

Linux:lsof命令详解(linux lsof命令详解)

介绍欢迎来到这篇博客。在这篇博客中,我们将学习Unix/Linux系统上的lsof命令行工具。命令行工具是您使用CLI(命令行界面)而不是GUI(图形用户界面)运行的程序或工具。lsoflsof代表&...

幻隐说固态第一期:固态硬盘接口类别

前排声明所有信息来源于网络收集,如有错误请评论区指出更正。废话不多说,目前固态硬盘接口按速度由慢到快分有这几类:SATA、mSATA、SATAExpress、PCI-E、m.2、u.2。下面我们来...

新品轰炸 影驰SSD多款产品登Computex

分享泡泡网SSD固态硬盘频道6月6日台北电脑展作为全球第二、亚洲最大的3C/IT产业链专业展,吸引了众多IT厂商和全球各地媒体的热烈关注,全球存储新势力—影驰,也积极参与其中,为广大玩家朋友带来了...