Elasticsearch 查询

从实际使用场景出发,介绍夜莺 Elasticsearch 日志告警:索引、query string 过滤、时间字段、数值提取与 Group By 分组,以及日志延迟的处理。

概述

Elasticsearch 日志告警对日志做查询和统计分析,及时发现异常并触发告警——比如「支付服务 5 分钟内错误日志超过 10 条」。它的思路是:先用查询过滤出目标日志,再用统计函数把日志压成一个数值,最后拿这个数值判阈值

字段 必填 说明
数据源类型 / 数据源 Elasticsearch 类型,并选中已接入的 ES 数据源
索引 两种指定方式:直接填索引(单索引 gb、多索引 gb,us、前缀通配 g*,u*),或选择已管理的索引模式
过滤条件 query string 语法过滤日志(见下文)
时间字段 以日志中的哪个日期字段作为查询时间范围依据
查询时间范围 查询过去多长时间的日志(如 5 分钟)
数值提取 对过滤后的日志做统计:count / sum / avg / min / max 等,结果赋给 $A
Group By 按字段分组,每个分组独立产生告警
告警条件 基于统计值判阈值,如 $A > 10
高级配置:查询延迟 日志有写入延迟时,把查询窗口整体前移 N 秒

下面按实际使用场景介绍。

场景一:错误日志数量告警

最典型的日志告警——统计一段时间内的错误日志条数,超阈值就告警。「支付服务 5 分钟内 ERROR 日志超过 10 条」:

  • 索引app-logs-*
  • 过滤条件level:ERROR AND service:payment
  • 时间范围:5 分钟
  • 数值提取count()
  • 告警条件$A > 10

配好后点「数据预览」验证能查到日志、统计值合理,再保存。

场景二:按维度分组告警(Group By)

想让每台主机、每个接口单独告警,用 Group By。「按主机和状态码统计 5xx 错误,某台机器某状态码超过 50 次就告警」:

  • 索引nginx-*
  • 过滤条件status:[500 TO 599]
  • 时间范围:15 分钟
  • 数值提取count()
  • Group Byhost, status
  • 告警条件$A > 50

分组后每个 (host, status) 组合独立判定,事件标签里带对应的 hoststatus

场景三:统计类告警(响应时间、唯一值)

数值提取不止 count,还能算平均值、唯一值等。「订单接口平均响应时间超过 1 秒」:

  • 索引nginx-access-*
  • 过滤条件path:"/api/v1/order*" AND response_time:>500
  • 时间范围:10 分钟
  • 数值提取avg(response_time)
  • Group Bypath
  • 告警条件$A > 1000

query string 过滤语法速查

过滤条件用 ES 的 query string 语法:

用途 写法
字段包含某值 status:active
字段匹配多值之一 title:(quick OR brown)
完整短语 author:"John Smith"
通配符 qu?ck(单字符)、bro*(多字符)
模糊匹配 quikc~"fox quick"~5
数值/日期范围 count:[1 TO 5]age:>=10
布尔组合 quick AND brownquick OR brownquick NOT fox

完整语法见 ES query string 文档

日志延迟:查不到刚写入的日志怎么办

有些场景日志会延迟入库。如果延迟 3 分钟,而你查最近 3 分钟,就会查不到数据。在高级配置里设「查询延迟」(如 180s),查询会把开始和结束时间都向前偏移 180 秒,避开尚未落盘的时间窗口。

常见问题

Q1:ES 查询返回的字段怎么对应到告警表达式?

A:「数值提取」的结果就是 $A(如 count()$A)。配了 Group By 时,分组字段成为事件标签,可在表达式里用 $A.<字段名> 引用。例如按 host 分组,事件标签带 host=n9e01

Q2:查询语句太复杂,怎么调试?

A:先在 Kibana 或直接 curl ES 把 query string 跑通,再复制到 n9e 的「数据预览」验证返回结构,最后写告警条件。别直接在告警页反复试——反馈太慢。

Q3:ES 8.x 和 7.x 兼容吗?

A:n9e 用 ES 标准 Search API,主流 7.x / 8.x 都兼容。区别主要在 ES 8 默认开启 security + HTTPS,数据源配置时注意账号密码和证书。

Q4:OpenSearch 能用 ES 告警类型吗?

A:可以,OpenSearch fork 自 ES 7.10,DSL 兼容。n9e 也提供独立的 OpenSearch 数据源类型,优先选 OpenSearch

参考资料

更新时间 2026-07-17

快猫星云 联系方式 快猫星云 联系方式
快猫星云 联系方式
快猫星云 联系方式
快猫星云 联系方式
快猫星云