Kibana报告字段发生恩怨,如何解决?

mcdcgff0  于 2022-12-09  发布在  Kibana
关注(0)|答案(2)|浏览(251)

在Kibana中,我注意到在我刷新索引模式后,我的一个字段显示为conflicted

范例:

我知道这是因为ElasticSearch在该字段中发现了不同类型的值,我该如何确定?这导致我的可视化中断,因为它们无法处理冲突字段。我该如何针对现有数据解决此问题?

uyto3xhc

uyto3xhc1#

经过几个小时的摆弄和翻阅弹性文档,我终于找到了我问题的答案。
在ElasticSearch5.1(我使用的版本)中,您可以重新索引那些“有问题”的特定索引。
在Kibana中点击ManagementIndex Patterns,找到显示为conflicted的字段,然后点击相应的铅笔图标,查看字段的详细信息。在中,将显示不同字段类型下的索引。
我在Power-Shell中编写了一个脚本,它通过指定“有问题的索引”来自动执行此操作,然后它执行以下操作(假设您的有问题的索引名为:log-20170101):

  • log-20170101-1创建Map
  • log-20170101重新索引为log-20170101-1
  • 删除log-20170101
  • log-20170101创建Map
  • log-20170101-1重新索引为log-20170101
  • 删除log-20170101-1

现在,当您在Kibana中刷新索引模式时,您会注意到字段不再是conflicted
您可以阅读以下内容:MappingsRe-Indexing的函数
请确保在下面指定新Map时,使用要查找的适当Map数据类型。
您可以通过使用以下命令查询Elastic API来获取现有Map:

GET /_mapping/<your mapping name>

这是我在Power-Shell中编写的一个框架(示例)脚本,它非常基本,但我认为它可以提供帮助。

$index_list = @( 
    "log-20170101"
)

$index_list  | % {
    $index_name = $_

    $mapping_body = "
    {
        ""mappings"": {
            ""logevent"": {
                ""properties"": {
                    ""@timestamp"": {
                        ""type"": ""date""
                    },
                    ""correlationId"": {
                        ""type"": ""text"",
                        ""fields"": {
                            ""keyword"": {
                                ""type"": ""keyword"",
                                ""ignore_above"": 256
                            }
                        }
                    },
                    ""duration"": {
                        ""properties"": {
                            ""TotalMilliseconds"": {
                                ""type"": ""float""
                            }
                        }
                    }
                }
            }
        }
    }"

    $reindex_body = "{
        ""source"": {
            ""index"": ""$index_name""
        },
        ""dest"": {
            ""index"": ""$index_name-1""
        }
    }"

    $reindex_body_reverse = "{
        ""source"": {
            ""index"": ""$index_name-1""
        },
        ""dest"": {
            ""index"": ""$index_name""
        }
    }"

    Invoke-WebRequest -Uri http://elasticserver:9200/$index_name-1 -Method Put -Body $mapping_body
    Invoke-WebRequest -Uri http://elasticserver:9200/_reindex -Method Post -Body $reindex_body
    Invoke-WebRequest -Uri http://elasticserver:9200/$index_name -Method Delete
    Invoke-WebRequest -Uri http://elasticserver:9200/$index_name -Method Put -Body $mapping_body
    Invoke-WebRequest -Uri http://elasticserver:9200/_reindex -Method Post -Body $reindex_body_reverse
    Invoke-WebRequest -Uri http://elasticserver:9200/$index_name-1 -Method Delete
}

编辑

请参阅此post,了解如何设置默认Map,以尝试防止此问题再次发生。

wribegjk

wribegjk2#

进入菜单,堆栈管理-〉索引模式,选择索引,过滤搜索冲突的字段名称,如下图所示(参考图片),点击警告,查看哪个索引出错。进入索引管理,找到索引如果你不担心数据,删除索引,如下图所示,否则你必须使用ElasticSearchAPI重新Map和重新索引错误的数据类型

相关问题