使用 Filebeat 监听日志文件

2023-11-07

Filebeat是一个日志文件托运工具,在你的服务器上安装客户端后,filebeat 会监控日志目录或者指定的日志文件,追踪读取这些文件(追踪文件的变化,不停的读),并且转发这些信息到elasticsearch 或者 logstarsh 、redis、kafka 中存放。

使用 Filebeat 监听日志文件

filebeat的工作流程

当你开启filebeat程序的时候,它会启动一个或多个探测器(prospectors)去检测你指定的日志目录或文件,对于探测器找出的每一个日志文件,filebeat 启动收割进程(harvester),每一个收割进程读取一个日志文件的新内容(逐行读取),并发送这些新的日志数据到处理程序(spooler),处理程序会集合这些事件,最后filebeat会发送集合的数据到你指定的地点。

Filebeat 安装

以 Linux 系统为例

参考文档:filebeat-installation-configuration

curl -L -O https://artifacts.elastic.co/downloads/beats/filebeat/filebeat-8.6.1-linux-x86_64.tar.gz
tar xzvf filebeat-8.6.1-linux-x86_64.tar.gz

设置filebeat.yaml文件

编辑配置文件来配置filebeat,对于rpm或者deb包安装来说,默认配置文件是 /etc/filebeat/filebeat.yml 这个文件。

这里有一个简单的filebeat的配置文件filebeat.yml的样本,filebeat会使用很多默认的选项。

filebeat.yaml 文件配置了 filebeat 需要采集的文件信息和输出信息。

实例

如监听 nginx 日志,输出到 redis 中,自定义配置文件地址 /etc/filebeat/conf.d/nginx.yml

vim /etc/filebeat/conf.d/nginx.yml

filebeat.inputs:
- type: log
  enabled: true
  tail_files: true
  paths: # 定义你的日志文件的路径(一个或多个), 支持正则
    - /alidata/log/nginx/access.log
    - /alidata/log/nginx/access.1.log
    - /alidata/log/nginx/*.log
  # fields表示在filebeat收集的日志中多增加一个字段log_source,其值用来在logstash的output输出到elasticsearch中判断日志的来源,从而建立相应的索引 
  fields:
    log_source: access
  # fields_under_root设置为true,表示上面新增的字段是顶级参数
  fields_under_root: true
  # prospector扫描新文件的时间间隔,默认10秒
  scan_frequency: 3s
  # 单文件最大收集的字节数,单文件超过此字节数后的字节将被丢弃,默认10MB,需要增大,保持与日志输出配置的单文件最大值一致即可
  max_bytes: 10485760000
  
# 又一个日志源监听
- type: log
  enabled: true
  paths:
    - /usr/local/nginx/logs/error.log
  tags: ["nginx-log-error"]
  fields:
    log_source: error
  fields_under_root: true

output.redis:
  hosts: ["127.0.0.1:6379"]
  key: NginxLog
  password: 111111
  db: 1
  datatype: list

启动监听任务:

filebeat -c /etc/filebeat/conf.d/nginx.yml 

# 参数说明
# -e 日志输出到 stderr 并禁用 syslog/file 输出
# -c 指定配置文件
# -d 启用对指定选择器的调试,publish 可以看到完整的 event 信息
sudo nohup filebeat -e -c filebeat.yml -d "publish" >filebeat.log 2>&1 &

# FileBeat 会在注册表中存储每个文件收集的状态,
# 想强制 FileBeat 从日志的最开始重新读取,可以直接删除注册表文件
sudo rm data/registry
# deb/rpm 安装路径
sudo rm /var/lib/filebeat/registry

# 查看 filebeat 运行日志,发送的事件格式
tail -100f /var/log/filebeat/filebeat

其他的输出方式

filebeat支持输出到不同的设备,可以直接输出到 elasticsearch 或者通过 logstash 格式化日志在到 es。在最新的版本7.10.1只支持输出到一个ouput中。

output.logstash:
  hosts: ["192.168.0.126:5047"]

或者

output.elasticsearch:
  hosts: ["192.168.0.126:9200"]

对于多组日志我们可以定义多个input收集数据,指定不同的fields.tag,对不同的日志进行切分,数据写入到不同的索引中,也可以配置不同的conf文件,启动多个不同的filebeat分别采集数据。

不同的应用日志使用不同的rediskey值

根据 message 区分:
output.redis:
  hosts: ["localhost"]
  key: "default_list"
  keys:
    - key: "error_list"   # send to info_list if `message` field contains INFO
      when.contains:
        message: "error"
    - key: "debug_list"  # send to debug_list if `message` field contains DEBUG
      when.contains:
        message: "DEBUG"
    - key: "%{[fields.list]}"

默认的key值是default_list,keys的值是动态分配创建的,当redis接收到的日志中message字段的值包含有error字段,则创建key为error_list,当包含有DEBUG字段,则创建key为debug_list。

问题的解决方法是在每个应用的输出日志中新增一个能够区分这个日志的值,然后再在keys中设置,这样一来就能够把不同应用的日志输出到不同的redis的key中。

根据 log_source 区分
output {
  # 根据redis键 messages_secure 对应的列表值中,每一行数据的其中一个参数来判断日志来源
  if [log_source] == 'messages' {  # 注意判断条件的写法
    elasticsearch {
      hosts => ["http://192.168.80.104:9200"]
      index => "filebeat-message-%{+YYYY.MM.dd}"
      #user => "elastic"
      #password => "elastic123"
    }
  }
} 

使用 Supervisor 管理 filebeat

[program:filebeat_nginx]
command= /usr/bin/filebeat -e -c /etc/filebeat/conf.d/nginx.yml 

各竞品介绍

Logstash

优势

Logstash 主要的有点就是它的灵活性,主要因为它有很多插件,详细的文档以及直白的配置格式让它可以在多种场景下应用。我们基本上可以在网上找到很多资源,几乎可以处理任何问题。

劣势

Logstash 致命的问题是它的性能以及资源消耗(默认的堆大小是 1GB)。尽管它的性能在近几年已经有很大提升,与它的替代者们相比还是要慢很多的。

Filebeat

作为 Beats 家族的一员,Filebeat 是一个轻量级的日志传输工具,它的存在正弥补了 Logstash 的缺点:Filebeat 作为一个轻量级的日志传输工具可以将日志推送到中心 Logstash。

优势

Filebeat 只是一个二进制文件没有任何依赖。它占用资源极少,尽管它还十分年轻,正式因为它简单,所以几乎没有什么可以出错的地方,所以它的可靠性还是很高的。它也为我们提供了很多可以调节的点,例如:它以何种方式搜索新的文件,以及当文件有一段时间没有发生变化时,何时选择关闭文件句柄。

劣势

Filebeat 的应用范围十分有限,所以在某些场景下我们会碰到问题。例如,如果使用 Logstash 作为下游管道,我们同样会遇到性能问题。正因为如此,Filebeat 的范围在扩大。开始时,它只能将日志发送到 Logstash 和 Elasticsearch,而现在它可以将日志发送给 Kafka 和 Redis,在 5.x 版本中,它还具备过滤的能力。

其他像 Fluentd、Logagent、rsyslog 不做更多介绍,各有优劣,详情查看 详解日志采集工具–Logstash、Filebeat、Fluentd、Logagent对比

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 Filebeat 监听日志文件 的相关文章

  • 为 Qt 应用程序创建 Linux 安装

    我刚刚用 Qt Creator 制作了一个很棒的程序 我对自己很满意 如何将其从台式机移至笔记本电脑 那么 最好的方法是安装程序 对吗 对于 Ubuntu 这是一个 Debian 软件包 对吗 我怎么做 有人这样做过吗 他们可以分享 QT
  • linux x86 汇编语言 sys_read 调用的第一个参数应为 0 (stdin)

    我正在编写一个简单的汇编程序来从标准输入读取 如 scanf 这是我的代码 section bss num resb 5 section txt global start start mov eax 3 sys read mov ebx 0
  • 如何让“grep”从文件中读取模式?

    假设有一个很大的文本文件 我只想打印与某些模式不匹配的行 显然 我可以使用egrep v patter1 pattern2 pattern3 现在 如果所有这些模式都在一个文本文件中怎么办 最好的制作方法是什么egrep从文件中读取模式 g
  • 从 TypeScript 运行任何 Linux 终端命令?

    有没有办法直接从 TypeScript 类中执行 Linux 终端命令 这个想法是做类似的事情 let myTerminal new LinuxTerminal let terminalResult myTerminal run sudo
  • 适用于 KDE 和 Gnome 的 Gui [重复]

    这个问题在这里已经有答案了 我想为一个现在是 CLI 的应用程序编写一个 gui 它需要在 KDE 和 Gnome DE 中 看起来不错 充分利用用户的外观设置 如果我选择 Qt 或 GTK 我能够做到这一点吗 它们与两个 DE 集成良好吗
  • 无需 cron 在后台发送邮件

    我想知道是否有一种方法可以运行 PHP 循环 以便在后台向订阅者发送几百封电子邮件 我的目标是格式化新闻通讯 单击发送 然后关闭浏览器或更改页面 当然 发送电子邮件的实际过程将在后台运行 不会因浏览器关闭而中断 我知道这可以通过 cron
  • 让 MongoDB 在 Linux 上监听远程连接

    我已在 Windows 本地计算机上 上成功安装 MongoDB 作为服务 但现在我想将 MongoDb 移动到单独的服务器 所以我将 tarball 解压到网络上的虚拟服务器 运行 Linux 当我从本地计算机使用 PuTTY 连接到服务
  • SONAR - 使用 Cobertura 测量代码覆盖率

    我正在使用声纳来测量代码质量 我不知道的一件事是使用 Cobertura 测量代码覆盖率的步骤 我按照以下步骤操作http cobertura sourceforge net anttaskreference html http cober
  • .NET Core 中的跨平台文件名处理

    如何处理文件名System IO以跨平台方式运行类以使其在 Windows 和 Linux 上运行 例如 我编写的代码在 Windows 上完美运行 但它不会在 Ubuntu Linux 上创建文件 var tempFilename Dat
  • 如何更改 Ubuntu 14.04 上的 php-cli 版本?

    我是 Linux 新手 在篡改时破坏了一些 php 设置 如果我执行一个包含以下内容的 php 脚本 phpinfo 它显示 php 版本为 5 6 但通过命令行 如果我运行php v它返回 7 0 版本 我想让两个版本匹配 我怎样才能修复
  • Godaddy 托管上的 CakePHP 控制台

    我一直在努力让我的 CakePHP 网站在 Godaddy 网格托管 帐户上运行 我的蛋糕应用程序设置是从帐户的子目录托管的 并且可以通过子域访问 我必须调整我的 htaccess 文件才能使其正常工作 现在我需要让 CakePHP 控制台
  • xsel -o 对于 OS X 等效项

    是否有一个等效的解决方案可以在 OS X 中抓取选定的文本 就像适用于 Linux 的 xsel o 一样 只需要当前的选择 这样我就可以在 shell 脚本中使用文本 干杯 埃里克 你也许可以安装xsel在 MacOS 上 更新 根据 A
  • 为什么我收到的数据包数据大小大于mss?

    我在两台 PC 上使用 ifconfig ethX mtu 300 修改了 MTU 并使用 netperf 测试网络 我用 WireShark 嗅探了 SYN 数据包中的 MSS 260 但我得到了一些大于 260 的数据包 为什么 嗅探器
  • 拆分字符串以仅获取前 5 个字符

    我想去那个地点 var log src ap kernelmodule 10 001 100 但看起来我的代码必须处理 ap kernelmodule 10 002 100 ap kernelmodule 10 003 101 等 我想使用
  • 修改linux下的路径

    虽然我认为我已经接近 Linux 专业人士 但显然我仍然是一个初学者 当我登录服务器时 我需要使用最新版本的R 统计软件 R 安装在 2 个地方 当我运行以下命令时 which R I get usr bin R 进而 R version
  • bluetoothctl 到 hcitool 等效命令

    在 Linux 中 我曾经使用 hidd connect mmac 来连接 BT 设备 但自 Bluez5 以来 这种情况已经消失了 我可以使用 bluetoothctl 手动建立连接 但我需要从我的应用程序使用这些命令 并且使用 blue
  • 从 PL/SQL 调用 shell 脚本,但 shell 以 grid 用户而非 oracle 身份执行

    我正在尝试使用 Runtime getRuntime exec 从 Oracle 数据库内部执行 shell 脚本 在 Red Hat 5 5 上运行的 Oracle 11 2 0 4 EE CREATE OR REPLACE proced
  • awk 子串单个字符

    这是columns txt aaa bbb 3 ccc ddd 2 eee fff 1 3 3 g 3 hhh i jjj 3 kkk ll 3 mm nn oo 3 我可以找到第二列以 b 开头的行 awk if substr 2 1 1
  • 如何禁用 GNOME 桌面屏幕锁定? [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 如何阻止 GNOME 桌面在几分钟空闲时间后锁定屏幕 我已经尝试过官方手册了在红帽 https access redhat com doc
  • 如何在bash中使用jq从变量中包含的json中提取值

    我正在编写一个 bash 脚本 其中存储了一个 json 值 现在我想使用 Jq 提取该 json 中的值 使用的代码是 json val code lyz1To6ZTWClDHSiaeXyxg redirect to http examp

随机推荐

  • 八股文死记硬背打脸记

    背景 我们都知道 再编程领域数据结构的重要性 常见的数据结构包括 List Set Map Queue Tree Graph Stack 等 其中 List Set Map Queue 可以从广义上统称为集合类数据结构 而Java也提供了很
  • C语言中如何使用system函数

    C语言中如何使用system函数 一 system函数 c语言中的system 函数主要用于发出一个DOS命令 该函数已经收录在标准c库中 可以直接调用 使用时包含头文件
  • Rancher和K8s的关系是什么?Rancher和K8s区别对比

    Rancher和K8s的关系是什么 K8s全称为Kubernetes 它是一个开源的 用于管理云平台中多个主机上的容器化的应用 而Rancher是一个完全开源的企业级多集群Kubernetes管理平台 实现了Kubernetes集群在混合云
  • Matrikon OPC 模拟器使用教程

    一 OPC协议 OPC通信技术因其帮助大量的使用不同通信协议的下层现场设备的数据得以与上位机的应用程序进行交互的作用 成为了一种工业通信领域中一套广为流行的方案 它使得硬件供应商和软件开发商都可以专注于做自己的工作 只要双方都能提供OPC接
  • Python NLTK 自然语言处理入门与例程

    Python NLTK 自然语言处理入门与例程 在这篇文章中 我们将基于 Python 讨论自然语言处理 NLP 本教程将会使用 Python NLTK 库 NLTK 是一个当下流行的 用于自然语言处理的 Python 库 那么 NLP 到
  • jupyter notebook参数化运行python

    Updates 2019 8 14 19 53 吃饭前用这个方法实战了一下 吃完回来一看好像不太行 跑完一组参数之后 到跑下一组参数时好像没有释放之占用的 GPU 于是 notebook 上的结果 后面好几条都报错说 cuda out of
  • Linux系统Squid代理添加用户、密码认证

    安装了Squid后会有一些不明的流量和CPU占用95 以上 估计是因为没加密码 被扫描到端口后被滥用 我们给Squid代理添加用户 密码认证 1 密码用apache2自带的NCSA 先做个密码档 然后设为任何人可读 sudo touch e
  • make all、make clean、make install 等命令的来源

    在命令行输入make命令后 会查找当前目录下的Makefile文件来执行 一切都是自动运行的 有时候Makefile中有多个程序需要编译 这时可以使用 make all 来编译所有的程序 当然也可以使用 make 程序名 来单独编译某一个文
  • C - Coprime 2(质因数)

    C Coprime 2https vjudge csgrandeur cn problem AtCoder abc215 d1 先把a数组元素里面每个元素的因数求出来 再把他们的倍数标记 剩下的1到M没标记的数就是答案 include
  • 一般试卷的纸张大小是多少_【教学研究】标准化试卷是如何编制出来的?

    作为教师 日常教学工作中经常需要编制试卷 一般我们可以用Word来编制各类试卷 对于标准化试卷来说 有很多样式是统一的 在Word中 本文以Word2003为例 我们可以按以下步骤进行设置 一 试卷页面设置 标准化试卷一般都采用8K纸张 横
  • octave下实现积分/求解微分方程

    我电脑是AMD的不是Intel的 所以matlab很多功能用不了 矩阵乘法都用不了 虚拟机也没工夫折腾 找了octave来替代 首先安装 symbolic包 要求已安装好Python3的SymPy库 pkg install forge sy
  • MongoDB4.x创建数据库帐号,启用密码认证,启用外部ip访问,创建数据库,创建集合.

    创建数据库 use company 这样就创建了一个名称为company的数据库 但如果不创建集合 表 的话则不保存 创建集合 db createCollection employ salary 创建了一个employ salary表 创建
  • WPF的MVVM框架Stylet开发文档 14.6 StyletIoC 模块

    14 6 StyletIoC 模块 任何具有合理复杂性的应用程序都将包含大量 IoC 容器配置 有大量接口与实现的显式绑定 指定单例和其他 完全必要的 配置 默认方法是将所有这些配置放在您的引导加载程序中 这是有道理的 所有配置都在一个地方
  • ModuleNotFoundError: No module named ‘tensorflow.contrib‘ 关于TensorFlow2中没有contrib包的解决办法

    在学习中文实体识别的过程中 参考很多以前的ltsm crf代码 以及谷歌的开源bert代码 过程中都遇到了该问题 简单查阅可得这是因为TensorFlow2版本中删除了contrib包所导致的问题 其中有部分大佬给出的解决办法是降低版本 但
  • PHP 短信验证码验证(短信宝)

    注册的短信验证 控制器 public function save Request request echo 11 die phone input last time Cache store redis gt get register tim
  • nvdiffrec在Windows上的配置及使用

    nvdiffrec是NVIDIA研究院开源的项目 源代码地址 https github com NVlabs nvdiffrec 论文为 Extracting Triangular 3D Models Materials and Light
  • c++ 赋值运算符函数

    题目 如下为类型CMyString 的声明 请为该类型添加赋值运算符 class CMyString public CMyString char pData nullptr CMyString const CMyString str CMy
  • ubuntu上安装android studio出现adb 无法识别设备的问题

    ubuntu上安装android studio出现adb 无法识别某些设备的问题 出现的都是 m OptiPlex 7040 etc udev rules d adb devices List of devices attached no
  • 在Windows域控制器里新建用户,添加可以远程桌面访问的权限

    在Windows域控制器里新建用户 添加可以远程桌面访问的权限 系统Windows server2003 开始 管理工具 active directory用户和计算机 新建用户 登录到要远程的计算机 DOS窗口输入gpedit进去到本地组策
  • 使用 Filebeat 监听日志文件

    Filebeat是一个日志文件托运工具 在你的服务器上安装客户端后 filebeat 会监控日志目录或者指定的日志文件 追踪读取这些文件 追踪文件的变化 不停的读 并且转发这些信息到elasticsearch 或者 logstarsh re