Kibana 可视化和仪表盘

22 May 2026 – wusfe · 5 min read

Kibana 可视化和仪表盘

Kibana 是 Elastic Stack 的"门面"。日志采集入库只是第一步,让数据变得可见、可探索、可监控,才是 Kibana 的核心价值。本文将系统介绍 Kibana 四大可视化工具的使用方法,并从零搭建一个 Nginx 监控面板。


1. Discover:快速搜索和查看日志

Discover 是最常用的功能入口,用于浏览和搜索索引中的数据。

基础操作

操作 说明
Index Pattern 选择 选择要查询的索引(如 nginx-*
时间范围 右上角时间选择器,支持绝对/相对时间
KQL 搜索 用户友好的查询语法
Lucene 搜索 传统 Lucene 查询语法(功能更强)
字段列表 左侧可展开,查看字段 Top 5 值
列自定义 选择要显示的字段列

KQL vs Lucene 对比

查询 KQL Lucene
精确匹配 status: 200 status:200
范围查询 response_time > 1000 response_time:[1000 TO *]
多条件 AND status: 200 and method: GET status:200 AND method:GET
通配符 message: *timeout* message:*timeout*
字段存在 message: * _exists_:message
短语匹配 message: "connection refused" message:"connection refused"

KQL 是 ES 7.x 后引入的,语法更友好、自动补全更好,推荐日常使用。Lucene 语法在特殊场景(正则、模糊搜索)仍有用。

实用 Discover 技巧

# 找出所有 5xx 错误的请求
response_code >= 500 and response_code < 600

# 找出响应时间超过 2 秒的请求
response_time > 2000 and not (uri_path: "/health")

# 找出来自特定 IP 段的错误
client_ip: "10.0.*" and response_code >= 500

2. Lens:拖拽式可视化

Lens 是 Kibana 7.x 推出的零门槛可视化工具,拖拽字段即可生成图表。

支持的图表类型

图表类型 适用场景 ES 聚合类型
柱状图 按维度统计数量 terms + count
折线图 时序趋势 date_histogram
饼图 占比分布 terms + count
热力图 二维分布 date_histogram + terms
表格 多维度列表 terms + max/min/avg
指标 单个数值 sum/avg/cardinality

Lens 操作流程(以 Nginx 状态码分布为例)

Step 1:进入 Visualize Library -> Create visualization -> Lens

Step 2:选择数据视图(如 nginx-*

Step 3:拖拽字段:

  • 横轴:拖入 response_code.keyword
  • 竖轴:拖入 Records(即 count)

Step 4:选择图表类型 -> Bar vertical

Step 5:右侧配置:

  • 标题:Nginx 响应状态码分布
  • 图例位置:右侧
  • 数值标签:开启

生成的 ES DSL 框架类似:

{
  "aggs": {
    "status_distribution": {
      "terms": {
        "field": "response_code.keyword",
        "size": 10
      }
    }
  }
}

3. TSVB(Time Series Visual Builder)

TSVB 专为时序数据设计,比 Lens 更灵活,支持数学运算、自定义颜色、标注线。

TSVB 三大模式

模式 说明
Timeseries 时间序列折线图
Metric 单值指标面板
Top N 排名
Gauge 仪表盘
Markdown 自定义文本

实战:Nginx QPS 折线图

配置

  • Aggregation:Count
  • Group by:Filters,按 response_code 分组
  • 过滤器 1:response_code:[200 TO 299](2xx)
  • 过滤器 2:response_code:[300 TO 399](3xx)
  • 过滤器 3:response_code:[400 TO 499](4xx)
  • 过滤器 4:response_code:[500 TO 599](5xx)

这样生成的折线图会按状态码类别显示不同颜色的折线,一眼看出 QPS 和错误率趋势。

TSVB 实用技巧:添加百分比标注

TSVB 支持自定义公式。例如展示 5xx 占比:

# 在 Series Options -> Data Formatter -> Custom 中
# 或者添加第二个 Series:
.es(index=nginx-*, timefield=@timestamp, metric=count:response_code.keyword).divide(
  .es(index=nginx-*, timefield=@timestamp, metric=count)
).multiply(100).label("Error Rate %")

4. Dashboard:组合可视化

添加好仪表盘后,可以把多个可视化拼成一个 Dashboard。

Dashboard 关键功能

功能 说明
时间联动 Dashboard 上的所有面板共享同一个时间范围
刷新间隔 可设自动刷新(5s / 30s / 1m / 5m)
面板筛选 点击图表中的某个数据点会作为全局筛选器
保存/分享 支持导出 Embed iframe、Share Link
全屏模式 适合大屏展示

刷新间隔建议

场景 建议刷新间隔
实时监控大屏 30s ~ 1min
运营看板 5min
日报分析 不需要自动刷新

踩坑提醒:Dashboard 自动刷新频率过高(如 5 秒)且面板中包含复杂聚合,会在 ES 上产生大量重复查询,增大搜索线程池压力。请根据业务需求和 ES 负载合理设置。


5. 从零搭建 Nginx 监控面板

仪表盘布局设计

第一行:核心指标
┌──────────┐ ┌──────────┐ ┌──────────┐ ┌──────────┐
│  总QPS    │ │ 2xx 请求 │ │ 4xx 请求 │ │ 5xx 请求 │
│  (TSVB)   │ │  (TSVB)  │ │  (TSVB)  │ │  (TSVB)  │
└──────────┘ └──────────┘ └──────────┘ └──────────┘

第二行:趋势图
┌──────────────────────────────────────────────────┐
│             QPS 趋势(按状态码分色)                │
│                  (TSVB Timeseries)                │
└──────────────────────────────────────────────────┘

第三行:分布分析
┌───────────────────────┐ ┌────────────────────────┐
│   状态码分布(饼图)   │ │   响应时间 P99 趋势     │
│      (Lens)           │ │      (TSVB)            │
└───────────────────────┘ └────────────────────────┘

第四行:详情
┌──────────────────────────────────────────────────┐
│              慢请求 Top 10 URL                     │
│                (Lens Table)                       │
└──────────────────────────────────────────────────┘

各面板配置要点

总 QPS(TSVB - Metric 模式):

  • Agg: Count,显示为 string 格式
  • 颜色:正常绿色,异常红色(通过 Rules 设置)

QPS 趋势按状态码分色(TSVB - Timeseries 模式):

  • 按 2xx/3xx/4xx/5xx 分别建 4 个 Series
  • 颜色:绿/蓝/黄/红
  • 线宽:2px,点大小:0

响应时间 P99 趋势(TSVB - Timeseries 模式):

  • Agg: Percentile,选择 response_time 字段,值 99
  • 叠加 50 百分位线(P50 用虚线表示中位数)

慢请求 Top 10 URL(Lens - Table 模式):

  • Rows: uri_path.keyword (Top 10)
  • Metrics: Max of response_timeCount of records
  • Max of response_time 降序排列

6. Dashboard 导出导入(Saved Objects)

Dashboard 通过 Saved Objects 机制管理,支持导出为 NDJSON 文件。

导出

Kibana -> Stack Management -> Saved Objects
-> 勾选要导出的 Dashboard 和相关 Visualization
-> Export -> 下载 .ndjson 文件

导出时注意勾选 Include related objects,否则只导出 Dashboard 定义,关联的 Visualization 不会一起导出。

导入

Kibana -> Stack Management -> Saved Objects
-> Import -> 选择 .ndjson 文件
-> 如果 conflicts -> 选择 Skip 或 Override

通过 API 导出导入(自动化)

# 导出
curl -X POST "localhost:5601/api/saved_objects/_export" \
  -H "kbn-xsrf: true" \
  -H "Content-Type: application/json" \
  -d '{
    "objects": [{"type": "dashboard", "id": "your-dashboard-id"}],
    "includeReferencesDeep": true
  }' \
  -o dashboard.ndjson

# 导入
curl -X POST "localhost:5601/api/saved_objects/_import" \
  -H "kbn-xsrf: true" \
  --form file=@dashboard.ndjson

总结

工具 适用场景 学习曲线
Discover 日志搜索、问题排查
Lens 快速可视化、业务报表
TSVB 时序数据监控、指标看板
Dashboard 组合展示、大屏监控
Canvas 精美幻灯片、年报

Kibana 的学习路径建议:先用 Discover 熟悉数据结构和查询语法,然后用 Lens 快速出图,遇到时序场景切 TSVB,最后拼成 Dashboard。不要一上来就追求花哨的 Canvas 大屏——先把数据看清、查准、告警到位,才是真正的价值所在。