Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >Elasticsearch数据写入报错whose UTF8 encoding is longer than the max length 32766的解决方法

Elasticsearch数据写入报错whose UTF8 encoding is longer than the max length 32766的解决方法

原创
作者头像
空洞的盒子
修改于 2025-03-18 08:28:00
修改于 2025-03-18 08:28:00
18800
代码可运行
举报
文章被收录于专栏:JD的专栏JD的专栏
运行总次数:0
代码可运行

完整异常信息如下:

代码语言:txt
AI代码解释
复制
Document contains at least one immense term in field=\"output\"
 (whose UTF8 encoding is longer than the max length 32766), all of which were skipped. 
Please correct the analyzer to not produce such terms.  

报错原因:

在索引mapping中,该字段被动态推断为了keyword类型,而Elasticsearch限制了单个字段的最大UTF-8编码长度为32766字节,通过对比原始数据发现,output字段存储的数据为大段的日志文本内容。导致数据超过了该限制。

解决办法如下:

解决方案1:修改Filebeat配置,限制字段长度

方式1.1:使用truncate_fields进行字段截断

当前场景是通过Filebeat向Elasticsearch写入数据。在Filebeat中我们可以使用truncate_fields处理超长字段,可以在配置中添加以下内容:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
processors:
  - truncate_fields:
      fields: ["output"]
      max_bytes: 32000
      fail_on_error: false

参数解释:

参数

释义

fields: ["output"]

仅对output 字段生效。

max_bytes: 32000

限制output 的最大字节数。

fail_on_error: false

避免因截断失败导致日志丢失。

适用情况:如果业务允许接受截断数据,则可以采用该方案。

方式 1.2:使用drop_fields直接删除该字段

如果output不是必须存储的字段,可以选择舍弃该字段:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
processors:
  - drop_fields:
      fields: ["output"]

适用情况:如果业务可以丢弃output字段数据,可以选择删除来保障主要数据的正常写入。

解决方案2:调整Elasticsearch的Mapping

如果我们需要让这条超长的日志文本进入Elasticsearch,我们可以通过修改索引Mapping的方式,调整output字段的类型。

方式2.1:将output设为keyword并启用ignore_above

修改索引的 Mapping,将output 设置为keyword,并添加ignore_above:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
PUT indexname/_mapping
{
  "properties": {
    "output": {
      "type": "keyword",
      "ignore_above": 32000
    }
  }
}

解释:

参数

释义

type: "keyword"

字段类型,适用于日志类数据,防止分词导致过长。

ignore_above: 32000

让Elasticsearch自动忽略超过32000字节的值,避免写入报错。

适用情况:需要保存output字段,但可以接受超长数据被忽略。

方式 2.2:将output设为text并禁用indexing

如果只想存储output字段值,但不希望这个字段被Elasticsearch索引(避免超长字段问题),则可以按照一下方式修改mapping:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
PUT indename/_mapping
{
  "properties": {
    "output": {
      "type": "text",
      "index": false
    }
  }
}

适用情况:只需要存储该字段数据,不需要对该字段进行搜索。

解决方案 3:使用Logstash的过滤器对该字段进行处理(Filebeat → Logstash → Elasticsearch)

需要先将Filebeat将数据发送至Logstash,然后通过logstash的过滤器处理后,在通过Logstash将数据发送至Elasticsearch,在Logstash中添加mutate过滤器进行处理:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
filter {
  mutate {
    replace => { "output" => "[TRUNCATED]" }
  }
}

或者:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
filter {
  ruby {
    code => "
      if event.get('output') && event.get('output').bytesize > 32000
        event.set('output', event.get('output')[0..31999])
      end
    "
  }
}

适用情况:使用Logstash作为中间处理层,通过Logstash的filter阶段超长字段。

方案选择建议

方案

适用场景

配置难度

影响

Filebeat truncate_fields

需要保留output字段,但可接受截断

超长字段会被截断

Filebeat drop_fields

output字段不重要

该字段会被删除

Elasticsearch ignore_above

需要索引但可忽略超长值

⭐⭐

超长数据会被忽略

Elasticsearch index: false

只存储但不搜索该字段

⭐⭐

不能搜索output字段数据

Logstash filter处理

使用Logstash作为数据中间层

⭐⭐

需要引入新的组件来处理问题字段,并需要修改Logstash规则

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
Elasticsearch Analyzer
Elasticsearch全文检索的核心是Text Analysis,而Text Analysis由Analyzer实现。
程序猿杜小头
2022/12/01
5660
基于Filebeat、Logstash和Elasticsearch实现微服务日志采集与存储
日志标准化是指所有微服务日志组件的配置均基于一个模板,模板即Logback日志组件的配置文件logback-spring.xml。在该配置文件中你可以定义日志的输出格式、日志的翻滚策略和基于日志级别分离的日志输出策略等。下面基于以下特性给出参考配置模板:
程序猿杜小头
2022/12/01
1.8K0
Elasticsearch 5.x 版本升级到 6.x 版本,数据写入异常处理方案
某客户将云ES从5.6.4版本升级到6.8.2版本后出现数据写入异常,数据丢失的情况。需协助紧急协助处理
zjiekou
2022/11/30
1.2K0
Elasticsearch 5.x 版本升级到 6.x 版本,数据写入异常处理方案
Logstash: 应用实践 - 装载 CSV 文档到 Elasticsearch
在进行我们这个实践之前,相信大家已经安装好自己的 Logstash 环境。如果大家还没安装好Logstash,可以参照我之前的文章 “如何安装Elastic栈中的Logstash”。
腾讯云大数据
2020/07/28
1.2K0
Logstash: 应用实践 - 装载 CSV 文档到 Elasticsearch
日志太多怎么搞?一套爬虫监控系统全搞定!
很多读者也咨询过我怎么去监控爬虫系统的日志?这里我们给出一个通用的轻量级监控系统架构方式---ELK+Filebeat+Docker,都知道分布式爬虫系统是由一个高可用的控制中心配合多个弹性工作节点组成,假定我们现在把各个工作节点封装成Docker镜像,那么我们通过监控Docker容器的状态来监控爬虫系统了。
云爬虫技术研究笔记
2019/11/05
1K0
日志太多怎么搞?一套爬虫监控系统全搞定!
logstash在Elasticsearch中创建的默认索引模板问题
在ELK架构中,使用logstash收集服务器中的日志并写入到Elasticsearch中,有时候需要对日志中的字段mapping进行特殊的设置,此时可以通过自定义模板template解决,但是因为logstash默认会向Elasticsearch提交一个名为logstash的模板,所以在定义logstash配置文件时有一些关键点需要注意。本文基于logstash-5.6.4和elastcisearch-5.6.4对需要注意的关键点进行列举。
bellen
2018/10/30
7.5K0
logstash在Elasticsearch中创建的默认索引模板问题
【升职加薪秘籍】我在服务监控方面的实践(4)-日志监控
在前一节,我们指标这种监控手段完成了机器层级的监控,通过它可以知道机器层面性能的瓶颈在哪里。后续本该讲讲应用层面监控,但是应用监控离不开日志打印,所以今天还是先介绍监控系统的另一种手段,日志监控。
蓝胖子的编程梦
2023/08/30
2230
【升职加薪秘籍】我在服务监控方面的实践(4)-日志监控
Elasticsearch 实战案例(索引切分、模板、别名、数据迁移)
基于ELK搭建的日志平台,前期匆忙建设过程中一些参数和设计未做过多的考虑,上线后就需要不断根据实际情况做调整,而一些调整限于ELK的一些特性,一旦操作不当就会出现丢数据、数据写入异常、数据查不到等情况。
高广超
2019/02/25
2.7K0
Elasticsearch 实战案例(索引切分、模板、别名、数据迁移)
深究|Elasticsearch单字段支持的最大字符数?
在业务系统中,遇到过两个问题: 问题1:设置为keyword类型的字段,插入很长的大段内容后,报字符超出异常,无法插入。 问题2:检索超过ignore_above设定长度的字段后,无法返回结果。 思考:Elasticsearch单字段支持的最大字符数? 本文是基于设置ignore_above之后引申的问题展开讨论与思考。 01 ignore_above的作用? ES中用于设置超过设定字符后,不被索引或者存储。 Strings longer than the ignore_above setting wil
铭毅天下
2018/03/20
4.6K0
深究|Elasticsearch单字段支持的最大字符数?
日志分析新范式:手把手教你用Filebeat导入腾讯云ES
Filebeat 是 Elastic Stack 中的一部分,是用于转发和集中日志数据的轻量级传送器。它作为代理安装在您的服务器上,监控指定的日志文件或目录,收集日志事件,并将它们转发到 Elasticsearch 或 Logstash 进行索引和处理。
腾讯QQ大数据
2024/08/26
3610
日志分析新范式:手把手教你用Filebeat导入腾讯云ES
Logstash中如何处理到ElasticSearch的数据映射
Logstash作为一个数据处理管道,提供了丰富的插件,能够从不同数据源获取用户数据,进行处理后发送给各种各样的后台。这中间,最关键的就是要对数据的类型就行定义或映射。
大江小浪
2018/07/24
3.9K0
Logstash中如何处理到ElasticSearch的数据映射
WAF防火墙数据接入腾讯云ES最佳实践(上)
本文描述问题及解决方法适用于 腾讯云 Elasticsearch Service(ES)。
岳涛
2023/08/09
1.5K2
WAF防火墙数据接入腾讯云ES最佳实践(上)
LogStash的配置详解
Logstash用{}来定义区域。区域内可以包括插件去预定义,可以在一个区域内定义多个插件。插件区域则可以定义键值对来设置。示例:
趣学程序-shaofeer
2023/09/09
1.6K0
触类旁通Elasticsearch:原理
ES被设计为处理海量数据的高性能搜索场景。海量数据具体说至少应该是数亿文档,而高性能具体说就是从数亿文档中任意搜索需要的信息,应该在秒级返回结果。既然ES的一切都是为了性能而设计,从逻辑设计和物理设计两个角度考察ES的数据组织,对于理解ES的工作原理会有帮助。
用户1148526
2019/05/25
7850
一起学 Elasticsearch 系列 -Mapping
本篇讲解Elasticsearch中非常重要的一个概念:Mapping,Mapping是索引必不可少的组成部分。
BookSea
2023/11/13
4800
一起学 Elasticsearch 系列 -Mapping
干货 | 论Elasticsearch数据建模的重要性
数据模型是抽象描述现实世界的一种工具和方法,是通过抽象的实体及实体之间联系的形式,用图形化的形式去描述业务规则的过程,从而表示现实世界中事务的相互关系的一种映射。 核心概念:
铭毅天下
2018/10/09
2.8K0
干货 | 论Elasticsearch数据建模的重要性
logstash与filebeat组件的使用
Logstash 作为 Elasicsearch 常用的实时数据采集引擎,可以采集来自不同数据源的数据,并对数据进行处理后输出到多种输出源;
空洞的盒子
2023/11/11
7770
Elasticsearch:Dynamic mapping
Elasticsearch 最重要的功能之一是它试图摆脱你的方式,让你尽快开始探索你的数据。 要索引文档,你不必首先创建索引,定义映射类型和定义字段 - 你只需索引文档,那么 index,type 和 field 将自动生效。比如:
腾讯云大数据
2020/09/28
8170
Elasticsearch:Dynamic mapping
Elasticsearch Mapping
Elasticsearch Mapping用于定义文档。比如:文档所拥有的字段、文档中每个字段的数据类型、哪些字段需要进行索引等。本文将先后从mapping type、mapping parameter、mapping field和mapping explosion这四个维度展开。
程序猿杜小头
2022/12/01
9100
第十三章·Kibana深入-使用地图统计客户端IP
-多年互联网运维工作经验,曾负责过大规模集群架构自动化运维管理工作。 -擅长Web集群架构与自动化运维,曾负责国内某大型金融公司运维工作。 -devops项目经理兼DBA。 -开发过一套自动化运维平台(功能如下): 1)整合了各个公有云API,自主创建云主机。 2)ELK自动化收集日志功能。 3)Saltstack自动化运维统一配置管理工具。 4)Git、Jenkins自动化代码上线及自动化测试平台。 5)堡垒机,连接Linux、Windows平台及日志审计。 6)SQL执行及审批流程。 7)慢查询日志分析web界面。
DriverZeng
2022/09/26
1.3K0
第十三章·Kibana深入-使用地图统计客户端IP
推荐阅读
相关推荐
Elasticsearch Analyzer
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验