背景

最近在OpenSearch查看线上日志的时候,发现某个索引下有些字段无法直接在界面上筛选,搜索到也不高亮,非常的不方便,就像下面这样 image

字段左侧两个筛选按钮禁用了无法点击,提示

Unindexed fields can not be searched

右侧则有感叹号提示

No cached mapping for this field. Refresh field list from the Management > Index Patterns page

浅析

索引模式(Index Pattern)是用于定义OpenSearch中索引的元数据信息的。它包含了索引中包含的所有字段的名称、数据类型、分析器、存储方式等信息。当用户进行搜索或聚合操作时,Kibana需要根据字段映射信息来解析查询请求,以便正确地查询并返回结果。

"No cached mapping for this field"提示意味着无法找到字段映射信息,而"Unindexed fields can not be searched"则是由于没有正确的字段映射信息导致无法搜索未索引字段。这通常发生在索引模式被修改后,但是缓存还没有更新时,或者在新索引被创建但是还没有刷新字段列表时。

解决这个问题的方法是在Kibana的管理页面中刷新字段列表,以确保所有字段的映射信息都是最新的。在这个页面中,Kibana会缓存映射信息以提高性能,如果新加入了一个字段,则需要刷新字段列表才能使其可搜索。

解决

在OpenSeach里,从Stack Management进入 Index patterns页面,找到对应的索引模式,点击右上角刷新按钮

image

大部分情况刷新完问题就解决了,但是实际上也可能会引入新的问题,比如下面这样直接搜索报错: image

F12查看请求,可以看到opensearch返回了400

image

错误信息:

Trying to retrieve too many docvalue_fields. Must be less than or equal to: [100] but was [215]. This limit can be set by changing the [index.max_docvalue_fields_search] index level setting

由于我们刷新了字段列表,导致搜索的字段超过了默认100的上限,最简单的方法是在【Dev Tools】里用下面REST API上调该索引模式的max_docvalue_fields_search

PUT /your-index-*/_settings
{
  "index" : {
    "max_docvalue_fields_search" : 300
  }
}

成功后会返回"acknowledged" : true

image

这些做完之后,在OpenSearch上查看、筛选日志就一切正常了:)

参考

https://github.com/elastic/kibana/issues/22897

文章推荐

Java 网络编程 - RMI 框架

Spring Boot 配置文件总结

C++ | 类继承

MySql中执行计划如何来的——Optimizer Trace

Centos7 开机时遇到initramfs-xxx.img not found错误导致虚...

Redis源码之SDS简单动态字符串

prometheus-adapter的配置解析

JSON 与 Java 对象之间的转化

fork语句遇见for循环语句

Java多线程开发CompletableFuture的应用

CSS必知必会

定制ASP.NET 6.0的应用配置