Skywalking OAP 后端出现【 id is too long】异常


Skywalking OAP 后端写入 ES 时出现【 id is too long】异常

Skywalking OAP 后端出现【 id is too long】异常

Skywalking OAP 后端写入 ES 时出现【 id is too long】异常

  • Spring Cloud 与 Docker 实战
  • 进入 Skywalking OAP 容器,日志中出现如下异常日志:

    oap logs

    还有如下日志:

    2019-03-0109:12:11,578- org.apache.skywalking.oap.server.core.register.worker.RegisterPersistentWorker-3264081149[DataCarrier.IndicatorPersistentWorker.endpoint_inventory.Consumser.0.Thread] ERROR []-ValidationFailed:1: id is too long, must be no longer than 512 bytes but was:684;
    
    org.elasticsearch.action.ActionRequestValidationException:ValidationFailed:1: id is too long, must be no longer than 512 bytes but was:684;
    

    根据第一张图片中的异常信息,猜测是探针在往 OAP 注册,而 OAP 正在将元数据写入到 Elasticsearch 中由于 id 值太长报错了。同理,是因为skywalking 在往elasticsearch 中 endpoint_inventory 索引写数据时,索引的 id 值太长了。这种频率在疯狂的刷新。

    随后深入 Elasticsearch 源码发现:server/src/main/java/org/elasticsearch/action/index/IndexRequest.java

            if (id != null && id.getBytes(StandardCharsets.UTF_8).length > 512) {
                validationException = addValidationError("id is too long, must be no longer than 512 bytes but was: " +
                                id.getBytes(StandardCharsets.UTF_8).length, validationException);
            }
    

    不过这里并没有具体指出是哪一个 id 过长,不太方便排查。因此,提了一个 PR 将具体信息输出来,不过得在 Elasticsearch 8.0 才有。 相关 PR:https://github.com/elastic/elasticsearch/pull/49433

    该异常可能造成结果

    当 Skywalking OAP 在注册或者写入 ES 时,当服务名、实例名或者 URL 名过长就会导致该异常。而 skywalking 注册/写入失败后会不断的重试,就会有上面日志不断刷的现象。严重后果可能导致 Skywalking OAP 不可用。

    如何避免?

    注意服务名、实例名、URL 名称不要取太长即可。


    -------他日江湖相逢 再当杯酒言欢-------

    「真诚赞赏,手留余香」

    Jared.Tan

    真诚赞赏,手留余香

    使用微信扫描二维码完成支付


    相关推荐