ELK 提示Visualize: "field" is a required parameter和Saved "field" parameter is now invalid.的解决方法

0x01 产生原因


1546946468013.png

产生的原因是:因为在ES中有两个index定义的字段类型不一致导致的。

例如:

log_2019.1.1

GET /log_2019.1.1/_mapping
{
  "log_2019.1.1": {
    "mappings": {
      "type-1": {
        "properties": {
          "age": {
            "type": "long"        => 在log_2019.1.1type-1下的age映射为long
          }
        }
      }
    }
  }
}

log_2019.1.2

GET /log_2019.1.2/_mapping
{
  "log_2019.1.2": {
    "mappings": {
      "type-1": {
        "properties": {
          "age": {
            "type": "string"       => 在log_2019.1.2/type-1/age => 映射为string
          }
        }
      }
    }
  }
}

这样在使用kibana进行展示时,使用log_*就会存在两个索引,但是age的类型不同。

0x02 如果找到冲突的字段


现在知道了产生的原因,但是es记录了大量的日志,我们如何知道日志的那些字段冲突了呢?

其实kibana已经为我们提供了这样的功能

首先,进入kibana的mangement ==> Index Patterns,选择有冲突的index。这是我们可以看到页面会有提示conflict

1546947244011.png

其次,在fields中按type类型进行排序,可以找到存在conflict的字段类型。

1546947424873.png

最后,点击这两条后面的这个1546947463850.png这个按钮就可以进入详细信息的页面,这是就可以看到有哪些存在错误的index

1546947674462.png

0x03 怎么解决冲突


因为ES并不支持,mapping字段类型的修改,所以要修改类型的话,需要按如下步骤进行。

  1. 先新建一个新的index,保证是正确的字段类型。
  2. 将原来index的内容,复制到新的index中。
  3. 删除原来的index。
  4. 用旧的index名字替换新的index名字就行了。

有一点要说明一下,就是这个操作风险比较高,需要提前备份数据,并且小心操作。

猜你喜欢

转载自blog.csdn.net/yrx0619/article/details/86134811