# ES中无数据或数据不完整问题排查与解决方案
# 问题现象
运维门户监控无数据或日志记录不完整的情况,导致无法通过日志进行业务追踪、故障定位及数据分析。具体表现为:
- 调用日志页面无数据
- 综合监控页面无数据
- 管理门户-配置管理-日志索引管理节点管理正常、索引状态非green;
- 日志索引未生成或索引数据缺失;
- 日志文件/{Server安装目录}/server/EOS/_srv/work/esbmonitor下文件堆积,解析停滞。
# 原因分析及解决方案
以上现象是由ES中无数据或数据错误导致,遇到此类问题,请先查ES中数据是否存在或者完整,排查方案如下:
- 接口调用工具访问 ES索引查询数据:请求示例URL:https://ESiP:port/primeton_esb_log_2026xx/_search;
- 请求报文:es查询数据请求报文.json,查询时可修改时间段,时间段字段是$.query.bool.filter[2].range['0.timestamp'];
- ES中单笔数据是以数据组形式存储,查出几笔就有几组这样的数据存在:
- 接口只发布到ESBServer上,正常的数据应该包含0-5共7条数据(0编号的有2条记录,分别是0.timestamp、0.operationCode,其余1-5编号都是timestamp);
- 接口只发布到APIGateway,正常的数据应该包含0、6-9共6条数据;
- 同时发布ESBServer和APIGateway,会有0-9共11条数据。
以下是接口只发布到ESBServer上查询ES返回正常数据的示例,一共有2组数据,每组数据有0-5共7条记录,调用见下图,详细响应报文参考附件:es查询数据响应报文.json;
- 如果排查调用返回无数据(响应数据的$.hits.total.value的值是0),或者单条数据中记录不是7条(缺少其中几条记录),则说明ES中记录的数据异常。

查到ES中数据有问题,按照以下点排查处理导致ES数据异常的问题,方案如下:
# 1. 管理门户-配置管理-日志索引管理节点管理正常、索引状态非green;
分析:ES本身启动、或者分片有问题,导致索引状态异常;
解决方案:检查ES的日志,查看启动运行日志,根据日志的具体情况分析,重启尝试修复索引;
验证:登录Portal在管理门户-配置管理-日志索引管理-索引管理中查看索引状态。
# 2. 关闭了 monitor-logwriter.xml 中的写日志配置
分析:esb-monitor-logwriter.xml 是日志采集的核心配置文件,其中定义了日志输出的目的地、格式、过滤规则等。若其中的写日志配置被关闭(如 <logwriter enable> 节点是"false"),则日志数据无法生成。
解决方案:打开 {Server安装目录}/server/EOS/_srv/config/esb-monitor-logwriter.xml,确认 <logwriter enable>="true" ,且相关属性正确。
验证:重启日志采集服务,观察日志索引是否开始生成。
# 3. Elasticsearch 磁盘满、处于只读状态
分析:Elasticsearch 在磁盘使用率达到阈值(默认 95%)时会自动将索引设置为 read_only_allow_delete 模式,此时无法写入新数据。日志写入请求被拒绝,但上游日志生产者可能仍持续发送,造成日志积压或丢失。
解决方案:
- 清理 Elasticsearch 数据目录中无用的索引(如使用 Curator 或 ILM 策略删除过期索引)。
- 扩容磁盘或迁移数据。
- 执行 API 解除只读状态:
PUT _all/_settings { "index.blocks.read_only_allow_delete": null }
验证:确认磁盘使用率降至 90% 以下,日志写入恢复正常。
# 4. 日志过大,ES 解析卡住
分析:当日志单条体积过大(如包含超长报文、文件等)或日志量突增时,Elasticsearch 的 JSON 解析线程可能长时间阻塞,甚至触发 OutOfMemoryError。解析管道堵塞后,待解析的文件在 Logstash 或 Beats 端堆积,进而导致日志延迟或丢弃。
解决方案: 在管理门户-全局配置中配置记录报文上线,对于超大报文,将大报文落在固定的文件夹,不由ES解析。
验证:观察文件堆积数下降,日志索引速率稳定。
# 5. 无接口调用,没有索引生成
分析:日志索引通常是在接收到第一条日志时动态创建的。如果长时间无接口调用,则无日志产生,Elasticsearch 不会自动创建空索引,此为正常现象,但易被误判为日志不记录。
解决方案:通过监控系统确认是否有业务请求进入,若确实无调用,此为正常状态,无需处理。
验证:触发测试调用,验证日志索引自动生成。
# 6. Elasticsearch 账号、密码不正确或证书损坏
分析:若Server、Portal、APIGateway配置文件中配置了错误的 Elasticsearch 认证信息(用户名/密码错误)或 SSL/TLS 证书过期/损坏,会导致连接失败,日志无法写入。
解决方案:
1. 核对日志写入配置中的 username/password 或 api_key,确保与 ES 提供的一致。
2. 若使用 SSL,检查证书有效期,重新生成并分发证书。
3. 测试连接:通过 curl 或者接口调用工具验证认证是否成功。
验证:重启日志写入组件,确认错误日志消失,数据正常写入。