问题一: 如何重命名index?
根据文档: Load the index template in Elasticsearch介绍,我们知道Filebeat默认发送到Elasticsearch中索引名称格式是:"filebeat-%{[agent.version]}-%{+yyyy.MM.dd}"
。
当前我们需要修改,index名称为:mysql-%{[fields.type]}-%{[agent.version]}-%{+yyyy.MM.dd}
首先我们需要特别关注文档中的两个提示:
- 第一点:
setup.template
也就是说如果我们在filebeat.yml
中修改了output.elasticsearch.index
,那么我们需要同时修改filebeat.yml
中的setup.template.name
、setup.template.pattern
。
最初我的filebeat.yml
文件内容如下:
setup.template.settings:
index.number_of_shards: 3
filebeat.config.modules:
path: ${path.config}/modules.d/*.yml
reload.enabled: false
setup:
template:
name: "mysql"
pattern: "mysql-*"
output.elasticsearch:
enabled: true
hosts: ["127.0.0.1:8080"]
index: "mysql-%{[agent.version]}-%{+yyyy.MM.dd}"
然而再次运行Filebeat后,上面修改一点用处都没有。发送的数据index格式还是"filebeat-%{[agent.version]}-%{+yyyy.MM.dd}"
。
- 第二点:
setup.ilm
后来再次研究文档,注意到了两个提示:
index lifecycle management
同时还启用了。
我们在运行./filebeat -e -c itcast_output_es.yaml
的日志中看到这个提示:
ILM
就是index lifecycle management
的简写。所以正是因为启用了index lifecycle management
,导致我们设置setup.template.name
、setup.template.pattern
没生效。
当前我们需要禁止 index lifecycle management
启动,使用setup.ilm.enabled:false
最后配置filebeat.yaml
:
setup.template.settings:
index.number_of_shards: 3
filebeat.config.modules:
path: ${path.config}/modules.d/*.yml
reload.enabled: false
setup:
template:
name: "mysql"
pattern: "mysql-*"
setup.ilm.enabled: false
output.elasticsearch:
enabled: true
hosts: ["127.0.0.1:8080"]
index: "mysql-%{[agent.version]}-%{+yyyy.MM.dd}"
backoff:
init: 10
max: 600
此时我们已经能正确在Elasticsearch中创建index:
问题二: Filebeat 7.x版本如何给modules.d/mysql.yaml
添加fields
?
第一次尝试配置如下,文件modules.d/mysql.yml
:
- module: mysql
# Slow logs
slowlog:
enabled: true
var.paths: ["/data/home/lukexwang/Document/mysqllog/20001/slow-query.log*"]
close_inactive: 25h
close_renamed: true
close_removed: true
clean_renamed: true
clean_removed: true
fields:
type: "slowlog"
server_ip: "127.0.0.1"
server_port: 20002
instance: "127.0.0.1#20002"
输出结果中根本没有fields
这个key。说明上面var.paths
下这些配置项,如close_inactive
等应该都没有生效。
在文档MySQL Module中也没用任何提示。偶然的机会在文档filebeat.reference.yml上看到module
配置文件中,也有input
字段。
抱着试一试的态度做了如下配置:
- module: mysql
# Error logs
error:
enabled: true
var.paths: ["/data/home/lukexwang/Document/mysqldata/20001/data/VM_76_145_centos.err*"]
input:
close_inactive: 25h
close_renamed: true
close_removed: true
clean_renamed: true
clean_removed: true
fields:
type: "errlog"
server_ip: "127.0.0.1"
server_port: 20002
instance: "127.0.0.1#20002"
# Slow logs
slowlog:
enabled: true
var.paths: ["/data/home/lukexwang/Document/mysqllog/20001/slow-query.log*"]
input:
close_inactive: 25h
close_renamed: true
close_removed: true
clean_renamed: true
clean_removed: true
fields:
type: "slowlog"
server_ip: "127.0.0.1"
server_port: 20002
instance: "127.0.0.1#20002"
再次启动filebeat
后,成功了。