参考文章:
Filebeat 模块与配置
开始使用Filebeat
https://www.cnblogs.com/cjsblog/p/9517060.html

filebeat配置文件模块
A modules模块(nginx模块为例)
1 nginx模块说明
2 设置并运行模块
3 重新指定模块中的变量
B input日志输入模块
1 排除行和包含行
2 json格式日志
3 multiline多行日志处理
C output输出模块

  1. 配置Elasticsearch output
  2. index和indices指定索引名
  3. 配置Logstash output
  4. 配置redis output

filebeat配置文件模块

filebeat配置文件主要分如下三块

模块 模块用途
modules 自带的常用日志格式的模块
input 日志输入模块
output 日志输出模块

A modules模块(nginx模块为例)

Filebeat提供了一组预先构建的模块,可以使用这些模块快速实现并部署一个日志监控解决方案,,支持常见的日志格式,如Nginx、Apache2和MySQL等。

1 nginx模块说明

nginx模块解析Nginx创建的access和error日志,当运行模块的时候,它在底层执行一些任务:

设置默认的日志文件路径
确保将每个多行日志事件作为单个事件发送
使用ingest节点解析和处理日志行,将数据塑造成适合在Kibana中可视化的结构
部署显示日志数据的dashboards
这个模块需要ingest-user-agent和ingest-geoip两个Elasticsearch插件

2 设置并运行模块

第1步:配置文件启用modules和指定output
output一定要指定,至于是输出到reids,还是logstash或是es,就看具体需要了

[root@file_redis ~]# cat /etc/filebeat/filebeat.yml
filebeat.config.modules:
  path: ${path.config}/modules.d/*.yml
  reload.enabled: false
output.redis:
  hosts: ["10.0.0.11"]
  port: 6379
  password : 'abcd1234e'
  key: "filebeat-1101"
  db: 3
  timeout: 5

第2步:加载nginx模块并重启filebeat

filebeat modules enable nginx
systemctl restart filebeat.service 

第3步:访问nginx并查看redis第3个库是否有日志产生

curl 127.0.0.1
redis-cli -h 10.0.0.11 -a abcd1234e
10.0.0.11:6379> select 3
OK
10.0.0.11:6379[3]> KEYS *
1) "filebeat-1101"
10.0.0.11:6379[3]> lrange filebeat-1101 0 1
...很多数据,省略显示...

3 重新指定模块中的变量
通过在配置文件中指定变量设置,可以覆盖模块文件中的默认设置,如nginx日志路径:

  • module: nginx
    access:
    enabled: true
    var.paths: [“/path/to/log/nginx/access.log*”]
    error:
    enabled: true
    var.paths: [“/path/to/log/nginx/error.log*”]
    其它模块配置大同小异,不再赘述,更多请参考 filebeat日志模块

B input日志输入模块

除了使用自带的模块读入日志数据外,更多的是自己写input模块按自己的需要读取日志,一个配置文件中,可以指定多个日志输入源:

filebeat.inputs:
- type: log
  paths:
    - /var/log/system.log
    - /var/log/wifi.log
- type: log
  paths:
    - "/var/log/apache2/*"

1 排除行和包含行

默认情况下,没有行被删除,所有的行都会被导出。空行被忽略。

  • exclude_lines 排除行
    一组正则表达式,用于匹配想要排除的行。Filebeat会丢弃匹配的行。
    下面的例子配置Filebeat删除以DBG开头的行:
    `bash
    filebeat.inputs:
  • type: log
  • exclude_lines: [‘^DBG’]
    include_lines 包含行 一组正则表达式,用于匹配想要包含的行。Filebeat只会导出那些匹配这组正则表达式的行。 下面是一个例子,配置Filebeat导出以ERR或者WARN开头的行:bash
    filebeat.inputs:
  • type: log

    include_lines: [‘^ERR’, ‘^WARN’]
    `
  • 排除行和包含航同时被定义
    如果 include_lines 和 exclude_lines 都被定义了,那么Filebeat先执行 include_lines 后执行 exclude_lines,而与这两个选项在配置文件中被定义的顺序没有关系。
    下面的例子导出那些除了以DGB开头的所有包含sometext的行:
    filebeat.inputs:
  • type: log

    include_lines: [‘sometext’]
    exclude_lines: [‘^DBG’]

    2 json格式日志2 json格式日志

    这些选项使得Filebeat将日志作为JSON消息来解析。例如:
json.keys_under_root: true
json.add_error_key: true
json.message_key: log

为了启用JSON解析模式,必须至少指定下列设置项中的一个:

  • keys_under_root
    默认情况下,解码后的JSON被放置在一个以”json”为key的输出文档中。
    如果启用这个设置,那么这个key在文档中被复制为顶级。默认是false。

  • overwrite_keys
    如果keys_under_root被启用,那么在key冲突的情况下,解码后的JSON对象将覆盖Filebeat正常的字段

  • add_error_key
    如果启用,则当JSON反编排出现错误的时候Filebeat添加 “error.message” 和 “error.type: json”两个key

  • message_key
    可选的配置,在应用行过滤和多行设置的时候指定一个JSON key。
    指定的这个key必须在JSON对象中是顶级的,而且其关联的值必须是一个字符串

  • ignore_decoding_error
    可选的配置,指定是否JSON解码错误应该被记录到日志中。默认是false。

    3 multiline多行日志处理

    典型的java错误日志,都是由很多行组成的,如果按单行收集,就不能正确的处理日志,需要用到多行处理功能,需要用到一下设置.

  • multiline.pattern
    指定用于匹配多行的正则表达式

  • multiline.negate
    定义模式是否被否定。默认false。

  • multiline.match
    指定Filebeat如何把多行合并成一个事件。可选的值是after或者before

  • multiline.flush_pattern
    指定一个正则表达式,多行将从内存刷新到磁盘。

  • multiline.max_lines
    可以合并成一个事件的最大行数。如果一个多行消息包含的行数超过max_lines,则超过的行被丢弃。默认是500。
    案例1:简单的java多行日志

Exception in thread "main" java.lang.NullPointerException
        at com.example.myproject.Book.getTitle(Book.java:16)
        at com.example.myproject.Author.getBookTitles(Author.java:25)
        at com.example.myproject.Bootstrap.main(Bootstrap.java:14)

为了把这些行合并成单个事件,用写了多行配置:

multiline.pattern: ‘^[[:space:]]’
multiline.negate: false
multiline.match: after
这个配置将任意以空格开始的行合并到前一行

案例2:更复杂的例子

Exception in thread "main" java.lang.IllegalStateException: A book has a null property
       at com.example.myproject.Author.getBookIds(Author.java:38)
       at com.example.myproject.Bootstrap.main(Bootstrap.java:14)
Caused by: java.lang.NullPointerException
       at com.example.myproject.Book.getId(Book.java:22)
       at com.example.myproject.Author.getBookIds(Author.java:35)
       ... 1 more

为了合并这个,用下面的配置:

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

在这个例子中,模式匹配下列行:

以空格开头,后面跟 at 或者 … 的行
以 Caused by: 开头的行

C output输出模块

1. 配置Elasticsearch output

当指定Elasticsearch作为output时,Filebeat通过Elasticsearch提供的HTTP API向其发送数据。例如:

output.elasticsearch:
hosts: [“https://localhost:9200"]
如果es开启了认证,则需要添加如下配置

output.elasticsearch:
hosts: [“https://localhost:9200"]
username: “filebeat_internal”
password: “YOUR_PASSWORD”

2. index和indices指定索引名

索引名字默认是”filebeat-%{[beat.version]}-%{+yyyy.MM.dd}”(例如,”filebeat-6.3.2-2017.04.26”)。
如果想改变这个设置,需要配置 setup.template.name 和 setup.template.pattern 选项。
如果想要根据日志中不同的内容行,生产不同的索引,就需要用到indices的条件格式

output.elasticsearch:
hosts: [“http://localhost:9200"]
index: “logs-%{[beat.version]}-%{+yyyy.MM.dd}”
indices:

- index: "critical-%{[beat.version]}-%{+yyyy.MM.dd}"
  when.contains:
    message: "CRITICAL"
- index: "error-%{[beat.version]}-%{+yyyy.MM.dd}"
  when.contains:
    message: "ERR"

3. 配置Logstash output

output.logstash:
hosts: [“127.0.0.1:5044”]
上面是配置Filebeat输出到Logstash,那么Logstash本身也可以有输出配置,例如:

input {
beats {
port => 5044
}
}

output {
elasticsearch {
hosts => [“http://localhost:9200"]
index => “%{[@metadata][beat]}-%{[@metadata][version]}-%{+YYYY.MM.dd}”
}
}

4. 配置redis output

output.redis:
hosts: [“10.0.0.11”]
port: 6379
password : ‘abcd1234e’
key: “filebeat-1101”
db: 3
timeout: 5

文档更新时间: 2023-08-09 07:20   作者:月影鹏鹏
IT运维支持-AIWALY-月影工作室