定位问题
业务侧的数据类型是uint64位,通过filebeat传输到logstash,然后输出到elasticsearch。
运营QA等人员在kibana上查数据发现会有丢失查不到的情况
发现es的日志有大量的报错如下:
Caused by: com. fasterxml. jackson. core. JsonParseException: Numeric value ( 18446744073709551615 ) out of range of long ( - 9223372036854775808 - 9223372036854775807 )
和开发确认相关字段长度是uint64,但是es索引使用默认mapping的数据类型是long,导致业务数据id长度超过了mapping的字段长度没法储存。
解决方案
需要修改索引的mapping字段类型,但是es的索引一旦建立就不能修改了,只能重建索引和迁移数据
搭建测试环境,还原现有索引和mapping
docker 部署ELK(7.5.1),还原线上报错
docker pull elasticsearch: 7.5 .1
docker run - e ES_JAVA_OPTS= "-Xms256m -Xmx256m" - d - p 9200 : 9200 - p 9300 : 9300 - v / data/ es/ config/ elasticsearch. yml: / usr/ share/ elasticsearch/ config/ elasticsearch. yml - v / data/ es/ data: / usr/ share/ elasticsearch/ data - - name ES 2bd69c322e98
cat elasticsearch. yml | grep - v '^$' | grep - v '^#'
path. data: / data/ es/ data
path. logs: / data/ es/ log
xpack. security. enabled: true
indices. query. bool . max_clause_count: 4096
indices. fielddata. cache. size: 10 %
indices. breaker. fielddata. limit: 50 %
indices. breaker. request. limit: 50 %
xpack. monitoring. collection. enabled: true
docker pull kibana: 7.5 .1
docker run - d - - name= kibana - - link 0d1b2dfb511f : elasticsearch - p 5601