背景
生产上有个 olap 集群,因业务特殊性,导致集群中索引数和索引分片数特别多,集群元数据信息特别庞大,通过 _cat/indices
,_cat/shards
命令去获取索引信息时耗时会特别长,可能导致集群卡顿,影响业务查询、写入,而且会返回超时。
针对返回超时,解决方案是直接在 Linux 机器上,通过 curl 命令,将结果写入到文件里。eg:
curl -XGET http://ip:esClusterHttpPort/_cat/shards?v >shards # 注意:如果 _cat/shards?v 后面要加其余参数,如 _cat/shards?v&s=node,则要对 & 符号进行转义: curl -XGET http://ip:esClusterHttpPort/_cat/shards?v\&s=node >shards
索引状态文件
_cat/shards
命令比 _cat/indices
命令所需消耗的集群资源更少,响应更快,但是无法获取到索引的UUID
。
生产上出现问题时,可直接通过在Linux机器上,获取到问题索引的UUID
,然后进入索引目录下,根据索引状态文件(格式:state-*.st)定位到具体索引名称后,再根据_cat/shards/indexName
,_cat/indices/indexName
命令,去获取单个索引的信息。
索引状态文件路径:由 elasticsearch.yml 中 path.data 配置的路径确定。eg:
path.data/nodes/0/indices/索引UUID/_state/
找到以 *.st 结尾的状态文件后,vim 打开是乱码(因为 *.st 是二进制文件),但仍可以辨别出索引名称。eg:
从图中可分辨出索引名称为:.monitoring-es-6-2019.10.29