哪位兄弟知道,怎么在 filebeat 的 json 模板里使用自定义的 analyzer

filebeat version: 7.17.3

json 模板是这样的

{
  "index_patterns": ["test_logs*"],
  "template": {
    "settings": {
      "number_of_shards": 1
    },
    "mappings": {
      "properties": {
        "message123": {
          "type": "text",
          "analyzer": "ik_max_word"
        },
        "level123": {
          "type": "keyword"
        }
      }
    },
    "aliases": {}
  }
}

但是生成的索引里,message123 字段没有 analyzer,level123字段的类型也不对

{
  "version": 4,
  "mapping_version": 2,
  "settings_version": 1,
  "aliases_version": 1,
  "routing_num_shards": 1024,
  "state": "open",
  "settings": {
    "index": {
      "creation_date": "1652257343314",
      "number_of_shards": "1",
      "number_of_replicas": "1",
      "uuid": "Aut0taBNSFqe0oH0tR_hIQ",
      "version": {
        "created": "7080199"
      },
      "provided_name": "test_logs"
    }
  },
  "mappings": {
    "_doc": {
      "properties": {
        "@timestamp": {
          "type": "date"
        },
        "message123": {
          "type": "text",
          "fields": {
            "keyword": {
              "ignore_above": 256,
              "type": "keyword"
            }
          }
        },
        "log": {
          "properties": {
            "file": {
              "properties": {
                "path": {
                  "type": "text",
                  "fields": {
                    "keyword": {
                      "ignore_above": 256,
                      "type": "keyword"
                    }
                  }
                }
              }
            },
            "offset": {
              "type": "long"
            }
          }
        },
        "level123": {
          "type": "text",
          "fields": {
            "keyword": {
              "ignore_above": 256,
              "type": "keyword"
            }
          }
        }
      }
    }
  },
  "aliases": [],
  "primary_terms": {
    "0": 1
  },
  "in_sync_allocations": {
    "0": [
      "Sesp4gsmSRCSHxG6nJPX5w"
    ]
  },
  "rollover_info": {}
}

网上有教程说改 fields.yml,但 GitHub 上,明显还不支持这么做,貌似 8.1 才可以

尝试下这个做法,在摄入日志前,先做 filebeat setup ; 在 setup 完了以后,在修改 filebeat 的索引 mapping ,加入你需要的 analyzer,

也可以通过修改 fields.yml 的方式在修改 mapping 设置,加上你所需要的。7.17 应该是 ok 的。

感谢帮助 :grinning:

我大概试了一下您说的:

  1. 我关闭了 json 模板(不关就不会走 fields.yml),去修改 fields.yml,并没有得到我想要
    fields.yml,注意:一个 text 类型,一个 keyword 类型
  - name: message123
    level: core
    type: text
    description: 'one message.'
    example: Hello World
  - name: level123
    level: core
    type: keyword
    description: 'one level.'
    example: error

我得到的索引类型:两个都是 keyword 类型

{
  "message123": {
    "ignore_above": 1024,
    "type": "keyword"
  },
  "level123": {
    "ignore_above": 1024,
    "type": "keyword"
  }
}
  1. 手动使用 filebeat setup,这种方式能说的再清晰一些么?我做了这个,但完全没有作用
./filebeat setup --index-management -E 'output.elasticsearch.hosts=["172.16.100.128:9200"]' -E 'output.elasticsearch.username="elastic"' -E 'output.elasticsearch.password="temppwd"'  -E 'setup.template.json.enabled=true'  -E 'setup.template.json.path="/opt/filebeat/index/template/golang_logs_index_template.json"'  -E 'setup.template.json.name="golang_logs_index_template"'

我知道 filebeat setup 是手动加载索引模板的方法,但是我不知道它是怎么和 ./filebeat -e -c test01.yml 中的 test01.yml 关联的

我知道原因了,是 json 模板里多了一级 template

不错,定位到原因就好。