
1.10 Elasticsearch-Kibana Discover & Dev Tools 速成
目标:30 min 内掌握 Kibana 最常用的两块主屏——Discover(探查)与 Dev Tools(控制台),能把日志搜出来、能把命令跑下去,并能把结果搬得上 PPT。
1. 课前准备:把“枪”上膛
- 一套能用的 ES + Kibana(8.x 最佳,7.x 亦可)。
- 至少有一个已写入数据的索引(后文用
nginx-2025.11.01举例,字段含@timestamp、remote_ip、request、status)。 - 浏览器 + 1920×1080 分辨率(省得面板挤成“千层饼”)。
2. Discover:把日志当 Google 搜
Kibana → 左侧汉堡菜单 → Discover。
2.1 选索引模式(Index Pattern)
首次进入会提示创建索引模式。输入 nginx-* → 时间字段选 @timestamp → Create → 完成。
技巧:用通配符一次性把
nginx-2025.11.01、nginx-2025.10.31都罩住,省得每天新建。
2.2 时间控件:先锁范围再谈性能
右上角时间选择器默认是 Last 15 minutes。生产环境日志若按天滚动,直接点 Relative → Last 24 hours;排障时再切到 Absolute 并输入精确起止。
快捷键:
t→ 弹出时间控件shift + →/←→ 时间平移
2.3 搜索栏:KQL 三板斧
Kibana Query Language(KQL)比 Lucene 语法更“人话”:
| 需求 | 写法 |
|---|---|
| 查 404 | status:404 |
| 查 4xx 且来源北京 | status:[400 TO 499] AND geoip.city_name:"Beijing" |
| 查 request 里带 /api/user/* | request:/\/api\/user\/.*/ |
注意:KQL 默认区分字段类型,字符串别丢引号,数字别加引号。
2.4 过滤桶(Filter Pills)与时间直方图
- 点击搜索结果左侧 “+” 即可把该值加为过滤条件,支持 is、is not、exists、range 四件套。
- 直方图拖动鼠标可“框选”时间区间,自动放大。
2.5 列字段(Columns)& 排序
- 鼠标悬停日志 → “+” 添加列;拖动列头可排序;点击列头右侧 “x” 可删除。
- 保存为 Saved Search(页面右上角 Save),后续可做可视化或告警。
2.6 导出:CSV 与 Share
- Share → CSV Reports → Generate;后台会生成异步下载链接,适合甩锅给运维。
- Share → Permalink 可生成带时间戳与查询语句的短链,贴 Jira 里直接可复现。
3. Dev Tools:ES 的“瑞士军刀”
左侧菜单 → Dev Tools → 进入 Console。
3.1 三窗口布局
- Editor(左):写请求。
- Response(右):看返回。
- History(底部小闹钟):自动存最近 500 条,支持关键字搜索。
3.2 快捷语法:省略 curl 全套
GET nginx-2025.11.01/_search
{
"size": 0,
"aggs": {
"status_codes": {
"terms": { "field": "status", "size": 10 }
}
}
}
提示:不用加
curl -XGET "http://ip:9200",Kibana 自动补全集群地址与认证头。
3.3 自动补全与快捷键
Ctrl + Space→ 字段名、API 全提示。Ctrl + /→ 一键注释/取消注释。Ctrl + Enter→ 执行;多请求时用 “小扳手” → “Copy as cURL” 可生成回滚脚本。
3.4 批量模板:_bulk、_reindex 秒级演练
POST _bulk
{ "index": { "_index": "test", "_id": "1" } }
{ "msg": "hello" }
{ "delete": { "_index": "test", "_id": "2" } }
Console 会把 _bulk 按换行符自动拆成 ND-JSON,无需手动加 \n。
3.5 结果折叠与对比
- 点击响应区 “>” 可折叠子节点;
- 多 Tab 场景下,右键 “Compare response bodies” 可 diff 两次返回,排查 mapping 变更差异。
3.6 生产注意:关掉 “auto-format” 防误伤
Settings → Disable auto-formatting;防止 1 MB 聚合结果直接把浏览器卡死。
4. 实战 10 分钟:从“发现”到“修复”
场景:运营反馈 08:45 开始大量 499。
-
Discover
时间选 08:30–09:00,KQL 输入status:499,直方图峰值 08:47。
添加 Filter →upstream_addr: "10.0.0.15:8080",确认仅该组后端。 -
Dev Tools 验证
GET nginx-2025.11.01/_search { "query": { "bool": { "filter": [ { "term": { "status": 499 } }, { "range": { "@timestamp": { "gte": "2025-11-01T08:45:00" } } } ] } }, "aggs": { "per_minute": { "date_histogram": { "field": "@timestamp", "fixed_interval": "1m" } } } }返回显示 08:47–08:52 每分钟 3k+,之后陡降。
-
根因
关联跳板机日志,发现 08:47 发布新版 JVM,GC 日志出现 “Stop-the-world 5.2 s”。回滚后 499 归零。 -
沉淀
- Discover 保存为 “499_异常模板”;
- Dev Tools 聚合语句存 History → Star,下次 30 秒复现。
5. 常见坑与排查口诀
| 症状 | 口诀 | 真因 |
|---|---|---|
| Discover 空白 | “先索引模式后时间” | 索引模式没覆盖到真实索引,或时间字段选错 |
Dev Tools 报 401 | “看 cookie 再看 space” | 多 Space 场景,cookie 的 space 与请求不一致 |
聚合结果 doc_count_error 过高 | “分片+size 太小” | 调大 shard_size 或直接 show_term_doc_count_error: true |
| CSV 下载 0 字节 | “字段 500 限制” | 高级设置 → discover:searchFieldsFromSource 关掉 |
6. 小结:一分钟记忆卡
- Discover:索引模式 → 时间 → KQL → Filter → Saved Search → CSV。
- Dev Tools:GET/POST 省 curl →
Ctrl+Space补全 → History 存模板 → 回滚靠 cURL。 - 排查三板斧:先看直方图峰值 → 加过滤缩小范围 → Console 聚合二次确认。
把这两块屏玩顺,日志就在你鼠标底下,而不是在凌晨 3 点的微信电话里。
更多技术文章见公众号: 大城市小农民
3750

被折叠的 条评论
为什么被折叠?



