Filebeat 7.x发送数据到Elasticsearch,如何重命名索引, 如何为module添加fileds?

2,255 阅读1分钟

问题一: 如何重命名index?

根据文档: Load the index template in Elasticsearch介绍,我们知道Filebeat默认发送到Elasticsearch中索引名称格式是:"filebeat-%{[agent.version]}-%{+yyyy.MM.dd}"

当前我们需要修改,index名称为:mysql-%{[fields.type]}-%{[agent.version]}-%{+yyyy.MM.dd} 首先我们需要特别关注文档中的两个提示:

  1. 第一点:setup.template

也就是说如果我们在filebeat.yml中修改了output.elasticsearch.index,那么我们需要同时修改filebeat.yml中的setup.template.namesetup.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}"

  1. 第二点:setup.ilm 后来再次研究文档,注意到了两个提示:

那么我们如何知道自己的Elasticsearch支持index lifecycle management同时还启用了。

我们在运行./filebeat -e -c itcast_output_es.yaml的日志中看到这个提示:

图片中的ILM就是index lifecycle management的简写。所以正是因为启用了index lifecycle management,导致我们设置setup.template.namesetup.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后,成功了。