参考文章:
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输出模块
- 配置Elasticsearch output
- index和indices指定索引名
- 配置Logstash output
- 配置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”两个keymessage_key
可选的配置,在应用行过滤和多行设置的时候指定一个JSON key。
指定的这个key必须在JSON对象中是顶级的,而且其关联的值必须是一个字符串ignore_decoding_error
可选的配置,指定是否JSON解码错误应该被记录到日志中。默认是false。3 multiline多行日志处理
典型的java错误日志,都是由很多行组成的,如果按单行收集,就不能正确的处理日志,需要用到多行处理功能,需要用到一下设置.
multiline.pattern
指定用于匹配多行的正则表达式multiline.negate
定义模式是否被否定。默认false。multiline.match
指定Filebeat如何把多行合并成一个事件。可选的值是after或者beforemultiline.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