在 Kibana 里搜 level:error 结果 0 条,同一时间段的日志明明有 300 多条 ERROR,换成大写才搜到。第一次遇到会往复杂处想,其实漏掉的多是个小前提。

GET logs/_search
{ "query": { "term": { "level.keyword": "error" } } }

level 字段是 keyword 类型 区分大小写 没有做小写归一化。查询时也没用分词字段 精确匹配对不上。这一点先确认清楚,后面就不用反复试。

「日志检索大小写」相关的验证我通常做两遍,改完一次、隔天再看一次,确认不是临时生效。新版本先放一台机器上跑一天再全量,问题一般在这段时间暴露。

备份不是备了就行,恢复一次才算数,很多备份文件打开才发现是空的。接口问题先分清是没发出去、发出去了没收到,还是收到了处理失败。

偶发问题先统计频率,一小时几次和一天一次,查法完全不同。

具体做法是,写入时把 level 统一转小写;字段映射里同时保留 text 和 keyword 两个子字段;查询用 term 查 keyword 或用 match 查 text;把常用查询存成 saved search 避免手写出错。

改完照着核一遍,level:error 能命中全部 300 多条 数量与监控计数一致。

作者 9823189