Filebeat(Beats)详细介绍与使用

1. 什么是 Beats?

Beats 是开源数据传送器,将其作为代理安装在服务器上,以将操作数据发送到 Elasticsearch。

Elastic提供Beats用于捕获:

  • 审核数据:Auditbeat

  • 日志文件和日志:Filebeat

  • 云数据:Functionbeat

  • 可用性:Heartbeat

  • 指标:Metricbeat

  • 网络流量:Packetbeat

  • Windows 事件日志:Winlogbeat

Beats 可以将数据直接发送到 Elasticsearch 或通过 Logstash,可以在其中进行进一步处理并增强数据,然后在 Kibana 中可视化数据。
1

1.1. 配置文件格式

Beats 配置文件基于 YAML,这是一种 比其他常见的数据格式(如 XML 或 JSON)更易于读取和写入。 配置文件必须用 UTF-8 编码。

在 beats 中,所有 YAML 文件都以字典开头,字典是名称/值对。

  • 除了字典,YAML 还支持列表、数字、字符串和许多其他数据类型。

  • 同一列表或字典的所有成员必须具有相同的缩进级别。

字典由简单对表示,所有对都具有相同的缩进级别。后面的冒号后面必须跟一个空格。key: value key

name: John Doe
age: 34
country: Canada

列表由破折号“-”引入。所有列表成员都将以行开头与“-”处于相同的缩进级别。

- Red
- Green
- Blue

Beats 中使用列表和词典来构建结构化配置。

filebeat:
  inputs:
    - type: log
      paths:
        - /var/log/*.log
      multiline:
        pattern: '^['
        match: after

列表和词典也可以用缩写形式表示。缩写 form 有点类似于用于字典和列表的 JSON:{} []

person: {name: "John Doe", age: 34, country: "Canada"}
colors: ["Red", "Green", "Blue"]

1.2. 命名空间

所有设置都使用字典和列表进行结构化。读取配置文件时,通过使用设置名称的完整路径及其父结构名称创建设置,这些设置被折叠为“命名空间”设置。
例如:

output:
  elasticsearch:
    index: 'beat-%{[agent.version]}-%{+yyyy.MM.dd}'

折叠成:output.elasticsearch.index: 'beat-%{[agent.version]}-%{+yyyy.MM.dd}'(设置的全名基于所有涉及的父结构)

列表创建从0开头的数字名称。
例如,此 filebeat 设置:

filebeat:
  inputs:
    - type: log

折叠成:filebeat.inputs.0.type: log

  • 除了使用缩进,设置名称也可以以折叠的形式使用。
  • 具有相同完全折叠路径的两个设置是无效的。

具有部分折叠设置名称和使用紧凑形式的简单 filebeat 示例:

filebeat.inputs:
- type: log
  paths: ["/var/log/*.log"]
  multiline.pattern: '^['
  multiline.match: after

output.elasticsearch.hosts: ["http://localhost:9200"]

1.3. 配置文件数据类型

配置设置的值按照Beats的要求进行解释。如果一个值不能正确解释为所需的类型 - 例如,当需要数字时给定了一个字符串 - 则Beat将无法启动。
布尔值可以是truefalsetrue的替代名称是onyes,而false的替代名称是offno

enabled: true
disabled: false

数字值要求输入要使用的数字,不使用单引号或双引号。但是,一些设置仅支持受限数字范围。

integer: 123
negative: -1
float: 5.4

字符串

在YAML中,支持多种字符串定义样式:双引号样式、单引号样式和无引号样式。

双引号样式使用双引号括起字符串。这种样式支持使用\转义不可打印字符,但需要注意要转义双引号和反斜杠字符。

单引号样式使用单引号括起字符串。这种样式不支持转义,只能使用可打印字符。

无引号样式不需要引号,但不支持任何转义,同时需要注意不要使用在YAML中具有特殊含义的符号。

string1: "example"
string2: 'example'
string3: example

持续时间需要一个数值,可选的小数部分和必需的单位。有效的时间单位有nsusmssmh。有时基于持续时间的功能可以通过使用零或负持续时间来禁用。

duration1: 2.5s
duration2: 6h
duration_disabled: -1s

正则表达式是特殊字符串,在加载时编译为正则表达式。

由于正则表达式和YAML在字符串中使用\转义字符,因此建议在定义正则表达式时使用单引号字符串。使用单引号字符串时,YAML解析器不会将字符\解释为转义符。

regex: '/pattern/'

格式字符串(sprintf)允许引用事件字段值,根据当前正在处理的事件创建字符串。

变量扩展包含在扩展括号中。

事件字段使用字段引用来访问。

可以在事件字段缺失时指定可选的默认值。format_string: '%{[field]}'

还可以使用格式将字段中存储的时间进行格式化。time_format: '@timestamp+FORMAT'

constant-format-string: 'constant string'
field-format-string: '%{[fieldname]} string'
format-string-with-date: '%{[fieldname]}-%{+yyyy.MM.dd}'

1.4. 环境变量

可以在配置文件中使用环境变量引用来设置需要在部署期间进行配置的值。

  • ${VAR}是环境变量的名称。

    • 每个变量引用在启动时都会被环境变量的值替换。
  • 替换是大小写敏感的,并且发生在解析YAML文件之前。

对未定义变量的引用将被替换为空字符串,除非指定了默认值或自定义错误文本。

  • 指定默认值,请使用:${VAR:default_value}
    • 其中default_value是在环境变量未定义时要使用的值。
  • 指定自定义错误文本,请使用:${VAR:?error_text}
    • 其中error_text是当无法扩展环境变量时将被添加到错误消息之前的自定义文本。
  • 要在配置文件中使用特殊字符,请使用$${}来转义扩展。
    • 例如,可以使用$${}来转义$${}
  • 更改环境变量的值后,需要重新启动Beat以获取新值。
  • 还可以在从命令行覆盖配置设置时指定环境变量,方法是使用选项-E。例如:
-E name=${NAME}

示例:以下是一些使用环境变量的配置示例以及替换后的每个配置的样子

配置源环境设置替换后的配置
name: ${NAME}export NAME=elasticname: elastic
name: ${NAME}无设置name:
name: ${NAME:beats}无设置name: beats
name: ${NAME:beats}export NAME=elasticname: elastic
name: ${NAME:?You need to set the NAME environment variable}无设置None 返回以自定义文本开头的错误消息。
name: ${NAME:?You need to set the NAME environment variable}export NAME=elasticname: elastic
  • 指定环境变量中的复杂对象编辑

    • 可以使用类似 JSON 的语法在环境变量中指定复杂对象,如列表或字典。

      • 与JSON一样,使用{}[]构造字典和列表。

      • 但与JSON不同,该语法允许尾部逗号和略有不同的字符串引号规则。

      • 字符串可以是无引号、单引号或双引号,这是为了方便设置简单设置,并能够在shell中混合引号使用。

      • 顶层的数组不需要括号()

例如,以下环境变量设置为列表:

ES_HOSTS="10.45.3.2:9220,10.45.3.1:9230"

可以在配置文件中引用此变量:

output.elasticsearch:
hosts: '${ES_HOSTS}'

当Beat加载配置文件时,它会解析环境变量并在读取设置之前将其替换为指定的列表。

1.5. 参考变量

  • Beats 设置可以引用其他设置,将多个可选的自定义命名设置拼接成新值。

  • 引用使用与环境变量相同的语法。

  • 只有完全折叠的设置名称才能被引用。

例如,Filebeat的注册文件默认为:

filebeat.registry: ${path.data}/registry

其中path.data是一个隐式配置设置,可以从命令行中覆盖,也可以在配置文件中覆盖。

output.elasticsearch:
  hosts: ['http://${es.host}:9200']
es.host: '${ES_HOST:localhost}'

在这个例子中,es.host可以从命令行使用-E参数覆盖,例如:

-E es.host=another-host

普通引用,没有默认值且不与其他引用或字符串拼接的引用可以引用完整的命名空间。
对于具有重复内容的这些设置:

namespace1:
  subnamespace:
    host: localhost
    sleep: 1s
namespace2:
  subnamespace:
    host: localhost
    sleep: 1s

可以重写为:

namespace1: ${shared}
namespace2: ${shared}
shared:
  subnamespace:
    host: localhost
    sleep: 1s

使用普通引用。

1.6. 配置文件所有权和权限

(这一部分不适用于Windows或其他非POSIX操作系统)

在具有POSIX文件权限的系统上,所有Beats配置文件都受到所有权和文件权限检查的限制。

这些检查的目的是防止未经授权的用户提供或修改由Beat运行的配置。

配置文件的所有者必须是执行Beat进程的用户之一。

每个文件的权限必须禁止除所有者之外的其他人写入。

当通过RPM或DEB包安装时,配置文件位于/etc/{beatname}/{beatname}.yml,其所有者和权限将是正确的。

/etc/{beatname}/{beatname}.yml
所有者:root
权限:0644 (-rw-r--r--)

如果配置文件未通过这些检查,则可能会遇到以下错误:

Exiting: error loading config file: config file ("{beatname}.yml") must be owned by the beat user (uid=501) or root
#退出:加载配置文件时出错:配置文件("{beatname}.yml")必须由Beat用户(uid=501)或root所有

要纠正这个问题,可以使用chown命令改变配置文件的所有者:

chown root {beatname}.yml

或者

chown 501 {beatname}.yml

如果权限不正确,可能会遇到以下错误:

Exiting: error loading config file: config file ("{beatname}.yml") can only be writable by the owner but the permissions are "-rw-rw-r--" (to fix the permissions use: 'chmod go-w /etc/{beatname}/{beatname}.yml')
#退出:加载配置文件时出错:配置文件("{beatname}.yml")只能由所有者写入,但权限是"-rw-rw-r--"(要修复权限,请使用:"chmod go-w /etc/{beatname}/{beatname}.yml")

要纠正这个问题,使用chmod命令将除所有者之外的其他人的写权限删除:

chmod go-w /etc/{beatname}/{beatname}.yml

其他配置文件,比如目录中的文件modules.d,也受到相同的所有权和文件权限检查。

禁用严格权限检查编辑,可以通过命令行使用--strict.perms=false来禁用严格权限检查,但强烈建议保持这些检查启用状态。

1.7. 命令行参数

  • 通过命令行使用-c标志设置要加载的配置文件。

  • 如果没有给出标志,将假定为 Beat 和特定于操作系统的默认文件路径。

  • 可以通过重复使用-c标志来指定多个配置文件。

    • 例如,可以在基础配置文件中设置默认值,并通过本地配置文件覆盖设置。
  • 除了使用多个配置文件覆盖设置之外,还可以使用-E来覆盖单个设置。

<value>可以是单个值,也可以是复杂对象,例如列表或字典。

例如,给定以下配置:

output.elasticsearch:
  hosts: ["http://localhost:9200"]
  username: username
  password: password

可以通过设置来禁用 Elasticsearch 输出,并将所有事件写入控制台:

-E output='{elasticsearch.enabled: false, console.pretty: true}'

在命令行指定的任何复杂对象都将与原始配置合并,然后传递给 Beat 的配置如下所示:

output.elasticsearch:
  enabled: false
  hosts: ["http://localhost:9200"]
  username: username
  password: password
output.console:
  pretty: true

1.8. YAML 技巧和注意事项

在配置文件中使用YAML时的一些技巧和注意事项:

  1. 使用空格进行缩进: YAML 中的缩进是有意义的。确保使用空格而不是制表符来缩进段落。在默认配置文件和文档中的所有示例中,我们每级缩进使用 2 个空格。建议也这样做。

  2. 查看默认配置文件结构: 理解在哪里定义配置选项的最佳方式是查看提供的示例配置文件。这些配置文件包含了 Beat 可用的大部分默认配置。要更改设置,只需取消注释该行并更改值即可。

  3. 测试的配置文件: 可以测试配置文件以验证其结构是否有效。只需切换到二进制文件所在的目录,并使用指定的命令在前台运行 Beat。例如:

    beatname test config -c beatname.yml
    

    如果 Beat 在文件中发现错误,将会看到一条消息。

  4. 使用单引号包裹正则表达式: 如果需要在 YAML 文件中指定正则表达式,最好将其用单引号包裹起来,以避免 YAML 中复杂的字符串转义规则。

  5. 使用单引号包裹路径: 特别是 Windows 路径可能包含空格或字符(如驱动器号或三个点),这些可能会被 YAML 解析器错误地解释。为了避免这个问题,最好将路径用单引号包裹起来。

  6. 避免在数字值中使用前导零: 如果在数字字段中使用前导零(例如,09),且没有将值用单引号包裹起来,YAML 解析器可能会错误地解释该值。为了防止不必要的类型转换,避免在字段值中使用前导零,或者将值用单引号包裹起来。

  7. 避免意外的模板变量解析: 允许配置从环境变量中解析数据的模板引擎可能会导致字符串中的某些字符出现错误。例如,如果密码字段包含 $,引擎会将其解析为 $$。为了解决这个问题,要么使用 keystore,要么将所有出现的 $ 进行转义,变为 $$

2. Filebeat概述

Filebeat是用于转发和集中日志数据的轻量级传送工具。Filebeat监视指定的日志文件或位置,收集日志事件,并将它们转发到Elasticsearch或 Logstash进行索引Filebeat隶属于Beats

Filebeat 作为代理安装在的服务器上,可监控日志指定的文件或位置,收集日志事件并转发它们使用 Elasticsearch 或 Logstash 进行索引。

3. 工作原理

Filebeat 的工作原理如下:当启动 Filebeat 时,它会启动一个或在为日志数据指定的位置中查看更多输入。为 Filebeat 找到的每个日志,Filebeat 都会启动一个收割器。每 Harvester 读取单个日志以获取新内容,并将新日志数据发送到 libbeat,聚合事件并将聚合数据发送到输出 已为 Filebeat 配置。

  • Filebeat用于收集各种日志,之后发送到指定的目标系统上,但是同一时间只能配置一个输出目标

  • Filebeat 会对配置好的日志内容进行收集,第一次会从每个文件的开头一直读到当前文件的最后一行。

  • 每一行称为一个事件,格式是一个包含很多字段的大字典,也就是 JSON 格式的数据。在 Filebeat中负责完成这个动作的官方称它为 Harvester (收割机)

  • 每个事件将来会被保存到 Elasticsearch

  • 在收割机读到文件的最后,会停止工作。直到文件有新的内容写入才继续工作。
    2

4. 安装与配置

HostnameCPU/硬盘IP
filebeat-server2c2g/20GB192.168.221.139

4.1. Filebeat安装

[root@localhost ~]# hostnamectl set-hostname filebeat-server

[root@filebeat-server ~]# curl -L -O https://artifacts.elastic.co/downloads/beats/filebeat/filebeat-8.12.2-linux-x86_64.tar.gz

[root@filebeat-server ~]# ll -sh
总用量 49M
4.0K -rw-------. 1 root root 1.3K 218 14:12 anaconda-ks.cfg
 49M -rw-r--r--  1 root root  49M 313 10:01 filebeat-8.12.2-linux-x86_64.tar.gz

[root@filebeat-server ~]# tar -xzvf filebeat-8.12.2-linux-x86_64.tar.gz  -C /usr/local/

[root@filebeat-server ~]# mv /usr/local/filebeat-8.12.2-linux-x86_64  /usr/local/filebeat

Filebeat启动管理

1、前台运行

  • 直接用./filebeat命令,采用前台运行的方式查看Filebeat获取的日志结果(crtl c后就直接退出程序了)

2、后台运行

  • 使用nohup方式启动Filebeat到后台,日志结果可查看nohup.out文件

  • 使用systemd管理的后台方式启动Filebeat进程不能查看输出日志,测试阶段勿用

配置systemd方式的Filebeat启动管理文件

[root@filebeat-server ~]# vim /usr/lib/systemd/system/filebeat.service
[Unit]
Description=Filebeat sends log files to Logstash or directly to Elasticsearch.
Wants=network-online.target
After=network-online.target

[Service]
ExecStart=/usr/local/filebeat/filebeat -c /usr/local/filebeat/filebeat.yml
Restart=always

[Install]
WantedBy=multi-user.target

[root@filebeat-server local]# systemctl daemon-reload

#设置开机自启并启动服务
[root@filebeat-server ~]# systemctl enable --now filebeat.service
Created symlink from /etc/systemd/system/multi-user.target.wants/filebeat.service to /usr/lib/systemd/system/filebeat.service.
[root@filebeat-server ~]# systemctl status filebeat.service
● filebeat.service - Filebeat sends log files to Logstash or directly to Elasticsearch.
   Loaded: loaded (/usr/lib/systemd/system/filebeat.service; enabled; vendor preset: disabled)
   Active: active (running) since 三 2024-03-13 10:57:46 CST; 16s ago
 Main PID: 16474 (filebeat)
   CGroup: /system.slice/filebeat.service
           └─16474 /usr/local/filebeat/filebeat -c /usr/local/filebeat/filebeat.yml...

313 10:57:46 filebeat-server systemd[1]: Started Filebeat sends log files to .....
Hint: Some lines were ellipsized, use -l to show in full.

4.2. Filebeat简单使用

#准备测试数据
[root@filebeat-server ~]# vim /tmp/access.log
123.127.39.50 - - [04/Mar/2021:10:50:28 +0800] "GET /logo.jpg HTTP/1.1" 200 14137 "http://81.68.233.173/" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.192 Safari/537.36" "-"

配置Filebeat 的输入和输出

[root@filebeat-server ~]# cd /usr/local/filebeat/
#将配置文件中的所有注释和空行先删掉
[root@filebeat-server filebeat]# sed -ri.bak '/^.*#/d;/^$/d' /usr/local/filebeat/filebeat.yml

[root@filebeat-server filebeat]# vim /usr/local/filebeat/filebeat.yml
#原始配置:
filebeat.inputs:
- type: log
  enabled: false
  paths:
    - /var/log/*.log
- type: filestream
  enabled: false
  paths:
    - /var/log/*.log
filebeat.config.modules:
  path: ${path.config}/modules.d/*.yml
  reload.enabled: false
setup.template.settings:
  index.number_of_shards: 1
setup.kibana:
output.elasticsearch:
  hosts: ["localhost:9200"]
processors:
  - add_host_metadata:
      when.not.contains.tags: forwarded
  - add_cloud_metadata: ~
  - add_docker_metadata: ~
  - add_kubernetes_metadata: ~

#修改过后的:
filebeat.inputs:
- type: log
  enabled: true  #改
  paths:  
    - /tmp/*.log #改 指定需要收集日志的路径,支持通配符可以写多个
filebeat.config.modules: # 内置收集日志的模块的配置文件存放路径
  path: ${path.config}/modules.d/*.yml
  reload.enabled: false  # 当模块的配置文件有更新时,此程序是否要自动加载,false不加载,true 加载
setup.template.settings:
  index.number_of_shards: 1

output.console:  #添加 输出到终端即屏幕上
  pretty: true
##output.elasticsearch:
##  hosts: ["localhost:9200"]


# 如果要输出到 logstash  
output.logstash:
  #  logstash 的 IP和端口
  hosts: ["172.26.139.148:5044"]
processors: #改
  - add_host_metadata:  # 添加此主机的源数据信息到输出数据中,比如 IP MAC OS 等信息
      when.not.contains.tags: forwarded   

运行观察输出

[root@filebeat-server filebeat]# rm -rf data
[root@filebeat-server filebeat]# /usr/local/filebeat/filebeat
{
  "@timestamp": "2024-03-13T03:27:10.286Z",
  "@metadata": {
    "beat": "filebeat",
    "type": "_doc",
    "version": "8.12.2"
  },
  "log": {
    "offset": 0,
    "file": {
      "path": "/tmp/access.log"
    }
  },
  "message": "123.127.39.50 - - [04/Mar/2021:10:50:28 +0800] \"GET /logo.jpg HTTP/1.1\" 200 14137 \"http://81.68.233.173/\" \"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.192 Safari/537.36\" \"-\"",
  "input": {
    "type": "log"
  },
  "agent": {
    "ephemeral_id": "c02cd3e0-76a0-44d1-b890-f02c9878d318",
    "id": "2ef752c8-35f0-4e45-b6b5-53743ebb0387",
    "name": "filebeat-server",
    "type": "filebeat",
    "version": "8.12.2"
  },
  "ecs": {
    "version": "8.0.0"
  },
  "host": {
    "hostname": "filebeat-server",
    "architecture": "x86_64",
    "name": "filebeat-server",
    "os": {
      "type": "linux",
      "platform": "centos",
      "version": "7 (Core)",
      "family": "redhat",
      "name": "CentOS Linux",
      "kernel": "3.10.0-1062.el7.x86_64",
      "codename": "Core"
    },
    "id": "4746d2ecb7c945cdbc93de5d156817a0",
    "containerized": false,
    "ip": [
      "192.168.221.139",
      "fe80::4ee8:bb9d:ef6c:9934"
    ],
    "mac": [
      "00-0C-29-40-59-B2"
    ]
  }
}

可使用 -c 指定配置文件位置

./filebeat -c /usr/local/filebeat/filebeat.yml

Filebeat进程日志

filebeat本身运行日志默认位置 /usr/local/filebeat/logs/filebeat

要修改Filebeat的日志路径,可以添加如下内容在配置文件 filebeat.yml 中实现

# ================================== Logging ===================================

# Sets log level. The default log level is info.
# Available log levels are: error, warning, info, debug
#logging.level: debug
path.logs: /var/log/   #在文件最末尾添加此行即可

这样设置后,filebeat 启动后,日志的目录是 /var/log/, 日志的文件名为 filebeat ,每次启动或者重启程序会生成一个新的日志文件 filebeat, 旧的日志命名为 filebeat.1 依次类推。

[root@filebeat-server filebeat]# systemctl restart filebeat.service
[root@filebeat-server filebeat]# cat /var/log/filebeat
2023-04-27T19:04:47.605+0800    INFO    instance/beat.go:665    Home path: [/usr/local/filebeat] Config path: [/usr/local/filebeat] Data path: [/usr/local/filebeat/data] Logs path: [/var/log/]
2023-04-27T19:04:47.605+0800    INFO    instance/beat.go:673    Beat ID: 58585447-9d45-4d4f-92bb-fec512b67c1e
2023-04-27T19:04:47.606+0800    INFO    [seccomp]       seccomp/seccomp.go:124  Syscall filter successfully installed
#已经有日志了

#再验证一下我们说的,每次启动或者重启程序会生成一个新的日志文件 filebeat, 旧的日志命名为 filebeat.1,依次类推
[root@filebeat-server log]# systemctl stop filebeat.service
[root@filebeat-server log]# systemctl restart filebeat.service
[root@filebeat-server log]# ll
总用量 1144
drwxr-xr-x. 2 root   root      204 623 2022 anaconda
drwx------. 2 root   root       23 623 2022 audit
-rw-------. 1 root   root        0 427 17:14 boot.log
-rw-------  1 root   root    43915 427 17:14 boot.log-20230427
-rw-------. 1 root   utmp        0 623 2022 btmp
drwxr-xr-x. 2 chrony chrony      6 88 2019 chrony
-rw-------  1 root   root     1801 427 19:01 cron
-rw-------. 1 root   root     6227 427 17:14 cron-20230427
-rw-r--r--  1 root   root   124549 427 16:26 dmesg
-rw-r--r--  1 root   root   124375 413 14:37 dmesg.old
-rw-------  1 root   root     5704 427 19:07 filebeat	#新生成的日志文件
-rw-------  1 root   root    12589 427 19:06 filebeat.1

4.3. 重读日志文件

有时候出于实验目的,可能需要重新读取日志文件,这个时候需要删除安装目录下的 data 文件夹,重新运行 filebeat 即可。
在这里插入图片描述
假如出现如下报错,请删除安装目录中的 data 文件夹

Exiting: data path already locked by another beat. Please make sure that multiple beats are not sharing the same data path (path.data).

查看一下是否有一个进程已经处于运行状态,尝试杀死此进程,之后重新运行 filebeat

[root@filebeat-server filebeat]#  ps -ef |grep 'filebea[t]'
root      16474      1  0 10:57 ?        00:00:00 /usr/local/filebeat/filebeat -c /usr/local/filebeat/filebeat.yml

4.4. 配置output

Filebeat 是用于收集日志,之后把日志推送到某个接收的系统中的,这些系统或者装置在 Filebeat 中称为output

output类型:

  • console 终端屏幕
  • elasticsearch 存放日志,并提供查询
  • logstash 进一步对日志数据进行处理
  • kafka 消息队列

完整output列表

  • filebeat 运行的时候,以上的 output 只可配置其中的一种

  • 具体配置方式是编辑主配置文件:/usr/local/filebeat/filebeat.yml

  • 注意:注释掉其他的 output

输出到 console,输出完整 JSON 数据

output.console:
  pretty: true

进入到 filebeat 的安装目录下,执行命令前台运行

[root@filebeat-server filebeat]# ./filebeat

如果只想输出完整Json数据中的某些字段

output.console:
  pretty: true
  codec.format:
    string: '%{[@timestamp]} %{[message]}'

其他输出目标:

输出到 elasticsearch

output.elasticsearch:
  hosts: ['http://es01:9200', 'http://es02:9200']

更多关于 Elasticsearch 的配置参考官方文档

输出到 logstash

output.logstash:
  hosts: ["127.0.0.1:5044"]

4.5. 实时重新加载外部配置文件

  • 配置 Filebeat 以动态重新加载外部配置文件
  • 可用于输入和模块作为外部配置文件加载的配置
  • 不能使用此功能重新加载主配置文件filebeat.yml
  • 指定一个路径(Glob)来观察配置更改。当Glob找到的文件发生变化时,新的输入或模块会根据配置文件的变化启动和停止。
  • 此功能在一个容器的容器环境中特别有用,用于跟踪在同一主机上的其他容器中运行的服务的日志。

例如:path reload filebeat.config.inputs filebeat.config.modules

filebeat.config.inputs:
  enabled: true
  path: configs/*.yml
  reload.enabled: true
  reload.period: 10s

path:一个 Glob,用于定义要检查更改的文件
reload.enabled:设置为 true 时,启用动态配置重新加载
reload.period:指定检查文件更改的频率。不要设置为小于 1s,因为文件的修改时间通常为以秒为单位存储。设置为小于1将导致 不必要的开销。

5. 日志专用收集模块

官方完整的模块列表:点我查看目前支持的所有模块列表

Filebeat 模块简化了常见日志格式
一个典型的模块(例如,用于 Nginx 日志)由一个或更多文件集,一个文件集包含以下:access error

  • Filebeat 输入配置,其中包含查找日志文件的默认路径。这些默认路径取决于操作系统。 Filebeat 配置还负责在需要时将多行事件拼接在一起。
  • Elasticsearch 摄取管道定义,用于解析日志行。
  • 字段定义,用于为每个字段配置正确类型的 Elasticsearch。它们还包含每个字段的简短描述。

Filebeat 会根据的环境自动调整这些配置 并将它们加载到相应的 Elastic Stack 组件中。
如果模块配置更新,Elasticsearch摄取管道定义不会自动重新加载。要重新加载摄取管道,请设置并手动加载摄取管道。filebeat.overwrite_pipelines: true

5.1. 查看可启用的模块列表

[root@filebeat-server log]# /usr/local/filebeat/filebeat modules list
Error initializing beat: error loading config file: stat filebeat.yml: no such file or directory
#必须要在filebeat的目录下执行这个命令
[root@filebeat-server log]# cd /usr/local/filebeat/		
[root@filebeat-server filebeat]# /usr/local/filebeat/filebeat modules list
Enabled:

Disabled:
activemq
apache
auditd
aws
awsfargate
……

模块配置文件存储位置

[root@filebeat-server modules.d]# pwd
/usr/local/filebeat/modules.d
[root@filebeat-server modules.d]# ls
activemq.yml.disabled          haproxy.yml.disabled          osquery.yml.disabled           
..

禁用模块

[root@filebeat-server filebeat]# /usr/local/filebeat/filebeat modules disable 模块名

启用模块

[root@filebeat-server filebeat]# /usr/local/filebeat/filebeat modules enable 模块名

5.2. 示例模块—Nginx 模块

准备 Nginx 示例日志

#访问日志示例文件
[root@filebeat-server filebeat]# vim /opt/nginx/log/nginx/access.log
123.127.39.50 - - [04/Mar/2021:10:50:28 +0800] "GET /logo.jpg HTTP/1.1" 200 14137 "http://81.68.233.173/" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.192 Safari/537.36" "-"
#错误日志示例文件
[root@filebeat-server filebeat]#  vim /opt/nginx/log/nginx/error.log
2021/03/04 10:50:28 [error] 11396#0: *5 open() "/farm/bg.jpg" failed (2: No such file or directory), client: 123.127.39.50, server: localhost, request: "GET /bg.jpg HTTP/1.1", host: "81.68.233.173", referrer: "http://81.68.233.173/"

启用 nginx 模块

[root@filebeat-server filebeat]# ./filebeat modules enable nginx
Enabled nginx

情景1:使用模块默认的日志路径

修改 modules.d/nginx.yml 文件内容如下:

[root@filebeat-server modules.d]# pwd
/usr/local/filebeat/modules.d
[root@filebeat-server modules.d]# vim nginx.yml
- module: nginx
  access:
    enabled: true
  error:
    enabled: true

nginx 模块收集日志的默认路径是:

  • /var/log/nginx/access.log
  • /var/log/nginx/error.log

情景2:使用非默认路径(适用于所有的模块)

假如所要收集的日志真实路径和日志收集模块默认的路径不一致,可以配置 var.paths: 属性进行配置。

var.paths 接收的值是一个包含一个以上的日志绝对路径列表。接收的值是一个数组

用于给日志文件设置自定义路径的。如果不设置此选项,Filebeat将根据的操作系统选择路径选择使用默认值

可以使用如下方式配置:

- module: nginx
  # Access logs
  access:
    enabled: true

    # Set custom paths for the log files. If left empty,
    # Filebeat will choose the paths depending on your OS.
    var.paths: ["/opt/nginx/log/nginx/access.log"]

  # Error logs
  error:
    enabled: true

    # Set custom paths for the log files. If left empty,
    # Filebeat will choose the paths depending on your OS.
    var.paths: ["/opt/nginx/log/nginx/error.log"]

或者下面的方式:

- module: nginx
  access:
    enabled: true
    var.paths:
      - "/opt/nginx/log/nginx/access.log"
      - "/opt/nginx/log/nginx/error.log"    

**注意:**var.paths 指定的路径,是以追加的方式和模块默认路径合并到一起的,也就是说假如模块的默认路径有具体的日志文件/var/log/nginx/access.log
这里 var.paths 也配置了路径/opt/nginx/log/nginx/access.log/opt/nginx/log/nginx/error.log,那么最终 Filebeat 收集的日志路径将会是:

  • /var/log/nginx/access.log
  • /opt/nginx/log/nginx/access.log
  • /opt/nginx/log/nginx/error.log

6. 使用Processors(处理器)过滤和增强数据

可以在配置中定义处理器,以便在事件发送到配置的输出之前对其进行处理。libbeat库提供以下处理器:

  • 减少导出字段的数量
  • 使用其他元数据增强事件
  • 执行其他处理和解码

工作方式:每个处理器都接收一个事件,对该事件应用已定义的操作,然后返回该事件。如果定义处理器列表,则将按照在Filebeat配置文件中定义的顺序执行它们。

去重日志中的某些行:配置位置在 filebeat.yml 文件中

删除所有以 DBG: 开头的行

processors:
  - drop_event:
      when:
        regexp:
          message: "^DBG:"  # message为自定义字段

向输出的数据中添加某些自定义字段

processors:
  - add_fields:
      target: project  # 要添加的自定义字段key名称
      fields:
        name: myproject
        id: '574734885120952459'

输出效果如下图所示:4
从事件中删除某些字段

processors:
  - drop_fields:
      fields: ["field1", "field2", ...]
      ignore_missing: false

以上配置,将删除字段: field1field2

ignore_missing 的值为 false 表示,字段名不存在则会返回错误。为 true 不会返回错误。

注意: 事件中的 "@timestamptype 字段是无法删除的。

下面的配置示例是删除顶级字段 input 和 顶级字段 ecs 中的 version 字段。

  - drop_fields:
     fields: ['input', "ecs.version"]

删除之前⬇️

{
  ...
  "input": {
    "type": "log"
  },
  ...
  "ecs": {
    "version": "1.5.0"
  },
  ...
}

删除之后⬇️

{
  ...
  "ecs": {},
  ...
}

官方完整的处理器列表:点我查看目前支持的所有处理器列表

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/453652.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

网络学习:9个计算机的“网络层”知识点

目录 一、IP 地址 1.1 分类表示法&#xff1a; 1.1.1 分类表示地址的其他说明 1.2 无分类编址 CIDR 二、IP 数据报文格式 Q: IP 报文里有什么&#xff1f;可以不按顺序或者字节来讲一讲 三、 路由概念 3.1 路由表 3.2 路由网络匹配 3.3 ARP 解析 3.4 RARP 逆地址解析…

matplotlib系统学习记录

日期&#xff1a;2024.03.12 内容&#xff1a;将matplotlib的常用方法做一个记录&#xff0c;方便后续查找。 基本使用 # demo01 from matplotlib import pyplot as plt # 设置图片大小,也就是画布大小 fig plt.figure(figsize(20,8),dpi80)#图片大小&#xff0c;清晰度# 准…

代码学习记录18

随想录日记part18 t i m e &#xff1a; time&#xff1a; time&#xff1a; 2024.03.13 主要内容&#xff1a;今天的主要内容是二叉树的第七部分&#xff0c;主要涉及二叉搜索树的最近公共祖先 &#xff1b;二叉搜索树的最近公共祖先&#xff1b;删除二叉搜索树中的节点 。 23…

HQChart实战教程70-K线图增加成本线

HQChart实战教程70-K线图增加成本线 成本线Y轴子自定义刻度HQChart插件地址步骤1. 创建成本线2. 动态计算盈利值3. 删除成本线交流示例源码成本线 在K线图上,显示一个根当前账户持仓的成本线,可以快速看到盈利状态。方便盯盘。 效果入下图: 第1行是成本价 第2行是盈利点数…

【C#】.net core 6.0 使用第三方日志插件Log4net,配置文件详细说明

欢迎来到《小5讲堂》 大家好&#xff0c;我是全栈小5。 这是《C#》系列文章&#xff0c;每篇文章将以博主理解的角度展开讲解&#xff0c; 特别是针对知识点的概念进行叙说&#xff0c;大部分文章将会对这些概念进行实际例子验证&#xff0c;以此达到加深对知识点的理解和掌握。…

基于大模型的 Agent 进行任务规划的10种方式

本文首发自博客 基于大模型的 Agent 进行任务规划的10种方式 基于大模型的 Agent 基本组成应该包含规划&#xff08;planning)&#xff0c;工具&#xff08;Tools)&#xff0c;执行(Action)&#xff0c;和记忆(Memory)四个方面&#xff0c;上一篇中重点讲了进行长记忆管理的 8…

MFC 添加MFC类方法

1、打开工程目录的"类视图" 2、工程名右键添加"MFC类" 3、填写"类名"并选择“基类”CDialog&#xff0c;对话框ID填写添加好的对话框ID

Vue3 前端生成随机id( 生成 UUID )

效果展示 封装工具&#xff08;代码展示&#xff09; 重新创建一个文件**/utils/someTools.js**&#xff0c;并在里面写入如下代码。 function Tools() {}Tools.prototype.guid function () {return xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx.replace(/[xy]/g, function (c) {v…

Junit4入门之什么是单元测试?

干了一年多的后端了&#xff0c;从来没有了解过单元测试。虽然我知道测试不仅仅是测试们的任务&#xff0c;后端也要进行自测来保证自己的代码的可用性&#xff0c;但我一直都只是用postman来实施的&#xff0c;调用调通了即可。虽然我也知道Junit是用于测试的软件&#xff0c;…

汽车屏类产品(五):仪表Cluster常用芯片i.MX117x

前言: 仪表一般就是指方向盘前面那个表盘。做仪表的芯片最主要需要支持显示Display,而仪表的主要排版布局多种多样,但是主旨显示内容不尽相同。 仪表需求: 1、rpm转速表盘 仪表Cluster一般会有转速表盘rpm,单位一般是x1000,大部分汽车仪表范围就是0~8,也就是最高8000…

【Vue3】深入理解Vue3路由器的工作原理to的两种写法

&#x1f497;&#x1f497;&#x1f497;欢迎来到我的博客&#xff0c;你将找到有关如何使用技术解决问题的文章&#xff0c;也会找到某个技术的学习路线。无论你是何种职业&#xff0c;我都希望我的博客对你有所帮助。最后不要忘记订阅我的博客以获取最新文章&#xff0c;也欢…

大数据 - HBase《一》- Hbase基本概念

目录 1.1. Hbase简介 1.2 Hbase,Hive, Mysql对比 1.3 Hbase数据模型 &#x1f959;region(区域) &#x1f959;rowkey(行键) &#x1f959;列族&#xff08;column family) &#x1f959;列&#xff08;column Qualifier) &#x1f959;版本&#xff08;version)-默认按…

Sui与数据平台ZettaBlock达成合作,为其公测提供数据

Sui一向以闪电般的速度、无限水平扩展著称&#xff0c;现已迅速成为DeFi活动的重要场所。近期&#xff0c;数据平台ZettaBlock宣布在其开创性的Web3数据平台发布中&#xff0c;选择Sui作为基础集成合作伙伴之一。在ZettaBlock的开放测试版发布之际&#xff0c;构建者和开发者将…

【node】初识node以及fs操作,path操作以及http操作(一)

1、不同浏览器使用不同的javaScript引擎 chrome > v8 Firefox > OdinMonkey&#xff08;奥丁猴&#xff09; safri > JSCore IE浏览器>Chakra(查克拉) 2、node是一个基于chrome v8引擎的javaScript运行环境 浏览器是JavaScript的前端运行环境&#xff0c;…

AcrelEMS-MED医院综合能效管理平台在医院电力中的应用

彭姝麟 Acrelpsl 0引言 全医院是公共服务组织&#xff0c;其机构的特殊性决定了医院在提供医疗服务的同时&#xff0c;也需要发挥榜样作用&#xff0c;通过进行能源管理系统的应用&#xff0c;为医院的电力使用和能源消耗进行好的管理&#xff0c;从而减少电能消耗&#xff0…

Web端3D图形引擎HOOPS Commuicator如何实现BIM轻量化?

面对建筑信息模型&#xff08;BIM&#xff09;中复杂大型模型的挑战&#xff0c;如何实现轻量化&#xff0c;并使其能在Web端流畅运行是我们需要解决的问题。而HOOPS Communicator正可凭借其出色的Web端3D模型敏捷解决性&#xff0c;为我们提供强有力的支撑。 HOOPS Communica…

【四】【算法分析与设计】贪心算法的初见

455. 分发饼干 假设你是一位很棒的家长&#xff0c;想要给你的孩子们一些小饼干。但是&#xff0c;每个孩子最多只能给一块饼干。 对每个孩子 i&#xff0c;都有一个胃口值 g[i]&#xff0c;这是能让孩子们满足胃口的饼干的最小尺寸&#xff1b;并且每块饼干 j&#xff0c;都有…

阿里云数据盘挂载目录

1、先登录服务器创建新目录aaa 2、云盘都快照备份下。后续操作完核实无误了&#xff0c;您根据您需求删除快照就行&#xff0c; 然后登录服务器内执行&#xff1a; fdisk -l lsblk blkid ll /aaa 3、执行&#xff1a;&#xff08;以下命令是进行数据盘做ext4文件系统并挂载到…

tigramite教程(五)使用TIGRAMITE 进行自助聚合和链接置信度量化

使用TIGRAMITE 进行自助聚合和链接置信度量化 自助聚合&#xff08;Bagging&#xff09;和置信度估计例子数据生成模型基本的PCMCIBagged-PCMCI使用优化后的pc_alpha进行自举聚合使用优化的pc_alpha进行CMIknn的自举聚合 TIGRAMITE是一个用于时间序列分析的Python模块。它基于P…

Elastic Stack--04--ES中的检索方式、Query DSL

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 1.ES中的检索方式第一种方式GET bank/_search # 检索bank下的所有信息&#xff0c;包括 type 和 docsGET bank/_search?q*&sortaccount_number:asc 第二种方式…