本文汇总了ES集群在日常运维中查看日志时的常见问题,包括日志查询语法、白名单限制下的陌生IP识别等场景。
日志查询语法参考
问题: ES 控制台日志查询如何获取想要的信息?能否提供语法参考和示例?
回答:
基础查询示例
以查询 content 包含关键字 health,level 为 info,host 为 172.16.xx.xx 的主日志为例,查询条件示例为:
host:172.16.xx.xx AND content:health AND level:info慢日志高级查询
查询耗时超过指定值的慢日志
慢日志中可以使用
search_time_ms:>1000来查询耗时超过 1 秒的慢日志。访问日志中排除特定索引并筛选大请求体
在访问日志中可以使用
NOT test_index AND bodySize:>4000来排除 test_index 索引,同时筛选查询请求体大小超过 4000 的请求,常用于定位异常慢查询。查询耗时在指定范围内的日志
如果需要查询耗时在 2~3 毫秒之间的日志,可以使用:
index_time_ms: [2.0 TO 3.0]
系统索引过滤
问题: 慢日志中存在大量以点开头的系统索引日志,如何屏蔽?
回答: 可以使用 NOT index_name: .monitoring* 来屏蔽系统索引日志。

Indexing 慢日志查询
问题: 如何根据写入字段的值查询对应的 indexing 慢日志?
回答: indexing 慢日志中插入的 body 部分嵌套在 content 字段内。如果需要根据实际写入某个字段的值来查询对应 indexing 慢日志,例如获取 hour 值为 12 的日志,可以这样查询:
content: "\"hour\":\"12\""

查询语法注意事项
支持 Lucene 查询语法
ES 日志查询支持基于 Lucene 的日志查询语法,详细参考:Elasticsearch Query String Syntax
AND 运算符必须大写
注意:AND 需要大写,小写不生效。例如下面截图中,使用小写
and连接条件时,仍然会召回 data-j-0 节点的日志。
更多语法参考官方文档:查询日志
白名单限制下访问日志中出现陌生 IP 是什么原因?
问题: 在设置了白名单的情况下,访问日志中出现了非业务侧的 IP 地址,使用该 IP 查询显示归属地为美国,这是什么原因?是否存在风险?
回答:
这是正常现象,不存在安全风险。原因如下:
该 IP 是 Kibana 节点的内网 IP
例如 21.154.xx.xx 这个 IP 实际上是 ES 集群 Kibana 节点的 IP 地址。由于目前无法从 ES 控制台或 API 直接获取该信息,但它是一个私网 IP 地址。
私网 IP 被误解析为公网 IP
当您将这个私网 IP 作为公网 IP 去查询时,会被错误地解析为美国的 IP 地址。
验证方法
方法一: 通过
GET _cat/nodes?v命令对比集群的其他节点,可以发现这些 IP 都在同一个大网段下方法二: 在访问日志中使用
remote: 21.154.xx.xx查询,会发现 uri 中基本都是.reporting-*、.kibana*、.monitoring-*等系统索引的查询历史,这是 Kibana 自动进行的系统索引请求
如何屏蔽这些系统索引日志
如果您想验证这些 IP 确实是 Kibana 的系统请求,可以使用以下查询条件屏蔽所有系统索引:
remote: 21.154.xx.xx AND NOT uri: .reporting-* AND NOT uri: .kibana* AND NOT uri: .monitoring-* AND NOT uri: apm* AND NOT uri: .ml*执行后会发现访问日志数量锐减到特别少,这也可以佐证该场景下的 IP 确实是 Kibana 节点的系统请求。
结论: 这类来自 Kibana 节点 IP 的系统索引请求可以忽略,不属于异常访问。