ElasticSearch / OpenSearch
接入 ES 或 OpenSearch 集群,选择索引模式与时间字段,跑一条日志查询。
这页办完你会得到:一个接好的 ES 集群、一个可复用的索引模式, 以及一条在日志检索里真的查出日志的查询。
先说一条会影响你怎么用的差别:开源版里 ElasticSearch 能在日志检索和仪表盘里用, OpenSearch 只能用来配告警规则。 两者都能注册成数据源、都能配日志告警规则, 但 OpenSearch 用不了探索器和仪表盘。有日志检索需求的,优先用 ElasticSearch 类型。
开始之前
- ES 的 HTTP 地址,比如
http://10.0.0.21:9200; - 夜莺 Center 所在机器能访问它;
- ES 8.x 默认开着 X-Pack security,准备好账号密码;
- 索引里得有一个日期类型的字段(通常是
@timestamp),夜莺按它过滤时间范围。
1. 注册数据源
集成中心 → 数据源 → 新增 → Elasticsearch。
HTTP 这一段是个可以加行的列表:点标题旁边的 + 可以填多个节点地址,
夜莺会在这些地址间轮询。
| 字段 | 说明 |
|---|---|
| 名称 | 必填,规则和查询里按它选数据源 |
| HTTP | 节点地址,http://localhost:9200 这种写法。至少一个 |
| 超时(单位:ms) | 默认 10000 |
| 用户名 / 密码 | ES 开了认证就填。ES 8.x 默认要填 |
| 版本 | 留空即可,保存时夜莺会自己去取。要指定就按 x.y.z 写,例如 7.10.2 |
| 最大并发分片请求数 | 默认 5。分片特别多的集群把它调小,避免一次查询把 ES 打满 |
| 最小时间间隔(s) | 默认 10。按时间自动分组的下限,建议设成写入频率——每分钟写一次就填 60 |
「允许写入」这个开关开源版用不到,保持关闭。

点 测试连通性并保存。ES 类型这一步做的是取版本号:取到了就把版本填进配置, 取不到不会阻断保存,但结果页会告诉你原因——所以看到「已保存,未验证连通性」别急着走, 先把原因看完。
2. 建一个索引模式
查询时有两种指定数据范围的方式:
- Indices:直接写索引名,支持通配符,比如
log-*。临时查一下用这个; - Index patterns:预先定义好的索引模式,把索引名和时间字段绑成一条记录, 之后查询和告警规则直接选它。
索引模式在 /log/index-patterns 这个页面管理(ES 查询编辑器里索引模式框右边那个齿轮
图标也能跳过去)。点 新增索引模式,一条索引模式包含:
| 字段 | 填什么 |
|---|---|
| 数据源 | 属于哪个 ES 数据源 |
| 名称 | 索引名或通配符,比如 log-prod-* |
| 时间字段 | @timestamp 之类的日期字段 |
列表里能看到的就是这三列加操作列。索引模式被告警规则引用时删不掉,会被挡下来。
为什么值得先建一个:时间字段只用填一次;换句话说, 之后每条查询和每条规则都不用再回答「哪个字段是时间」。
3. 跑一条日志查询
数据查询 → 日志,数据源选你刚建的这个。左侧依次选:
- 检索方式:
Indices或Index patterns; - 索引 / 索引模式;
- 日期字段(选 Indices 时才需要单独选);
- 语法:KQL 或 Lucene;
- 查询条件:例如
status:500 AND method:GET。
有日志列表出来就说明通了。查不到日志先确认时间范围——右上角的时间选择器默认只查最近一段, 历史日志要主动往前拉。
4. 按查询结果告警
日志类规则和指标规则的差别只在「查什么」:指标规则写 PromQL,日志规则写一次查询统计, 再对统计出来的数拿表达式判定。
在 告警通知 → 规则管理 → 新增 里,数据源类型选 Elasticsearch(或 OpenSearch), 查询部分除了索引、时间字段、查询条件,还多两组:
- 值字段:用哪个数值参与判定。除了 count、sum、avg、min、max, 还支持 p90 / p95 / p99 这类分位数;
- Group By:按某个字段分组。分几组就产生几条序列, 每组各自判定、各自出事件,事件标签里带着分组值。
举三个能直接照抄的形态:
- 十分钟内 4xx 超过 2 条,按主机分组:查询条件筛出 4xx,值字段用 count,Group By 选
host.hostname,告警条件> 2; - 接口 95 分位耗时超过 1700ms:值字段对
request_time取 p95,Group By 选remote_addr; - 慢请求条数超过 10 条:查询条件
request_time > 1900,值字段 count,Group By 选request_uri。
写完点 数据预览,先确认这条查询真的返回了你预期的数字,再去配阈值。
OpenSearch 不一样的地方
OpenSearch fork 自 ES 7.10,接入表单几乎一样(超时默认值是 100000 而不是 10000), 但在开源版里:
- 能注册数据源、能配日志告警规则;
- 不能在日志检索里检索,也不能在仪表盘上画图——这两处都不支持, OpenSearch 数据源在开源版的数据源下拉框里不会出现。
所以如果你的诉求是「先看日志再决定告警」,用 ElasticSearch 类型接入。
排障
保存时提示取不到版本。 先在夜莺 Center 那台机器上
curl http://<es>:9200/_cluster/health:拿不到 200 就是网络或认证的问题;
ES 8.x 默认自签证书,要打开「跳过 SSL 验证」。
能选到索引但查不到数据。 三件事按顺序查:日期字段选对没有、 索引通配符有没有匹配到真实索引、时间范围里是不是真的没数据。
跨多个集群怎么办。 一个集群一个数据源。同集群下跨索引查,
在索引里写通配符(log-prod-*)就行。
下一步
- 认真写日志规则:日志类告警规则
- 检索技巧和索引模式详解:日志检索与索引模式
- 换一种日志存储:Loki / VictoriaLogs