Skip to content

Kibana 核心功能:可视化大盘(Dashboard)、探索数据(Discover)、图表绘制(Visualize)

你已经学会了如何收集日志(Logstash)和存储数据(Elasticsearch),现在的问题是:数据在那里,如何让它们「可见」?

Kibana 就是这个问题的答案——它是 ES 的可视化界面,让数据从冰冷的数字变成直观的图表。

1. Kibana 概览

1.1 Kibana 的核心功能

┌─────────────────────────────────────────────────────────────┐
│                      Kibana 功能矩阵                          │
│                                                               │
│   ┌─────────────┐  ┌─────────────┐  ┌─────────────┐         │
│   │   Discover  │  │  Visualize  │  │  Dashboard  │         │
│   │  探索数据   │  │  绘制图表   │  │  可视化大盘 │         │
│   └─────────────┘  └─────────────┘  └─────────────┘         │
│                                                               │
│   ┌─────────────┐  ┌─────────────┐  ┌─────────────┐         │
│   │    Dev Tools│  │   Canvas    │  │   Maps      │         │
│   │  开发工具   │  │  数据画布   │  │   地图可视化│         │
│   └─────────────┘  └─────────────┘  └─────────────┘         │
│                                                               │
└─────────────────────────────────────────────────────────────┘

1.2 主页导航

┌─────────────────────────────────────────────────────────────┐
│  ┌───────────────────────────────────────────────────────┐  │
│  │  Home  │  Discover  │  Visualize  │  Dashboard  │ ... │  │
│  └───────────────────────────────────────────────────────┘  │
│                                                               │
│  ┌───────────────────────────────────────────────────────┐  │
│  │                                                        │  │
│  │   最近打开           最近查看的仪表板                    │  │
│  │   ┌─────────┐      ┌─────────┐ ┌─────────┐            │  │
│  │   │ index1 │      │ sales   │ │  logs   │            │  │
│  │   └─────────┘      └─────────┘ └─────────┘            │  │
│  │                                                        │  │
│  │   新建                    添加数据                      │  │
│  │   ┌─────────┐ ┌─────────┐ ┌─────────┐ ┌─────────┐     │  │
│  │   │ 搜索    │ │ 可视化  │ │ 仪表板  │ │ 上传文件 │     │  │
│  │   └─────────┘ └─────────┘ └─────────┘ └─────────┘     │  │
│  │                                                        │  │
│  └───────────────────────────────────────────────────────┘  │
└─────────────────────────────────────────────────────────────┘

2. Discover:探索数据

2.1 界面布局

┌─────────────────────────────────────────────────────────────┐
│  Discover                                                    │
│  ┌───────────────────────────────────────────────────────┐  │
│  │ 时间范围选择器  │ 🔍 KQL 查询框 │ ┌─────┐ ┌─────┐     │  │
│  └───────────────────────────────────────────────────────┘  │
│  ┌───────────────────────────────────────────────────────┐  │
│  │                                                        │  │
│  │   @timestamp    │  message      │  level  │  service │  │
│  │  ─────────────────────────────────────────────────────│  │
│  │   2024-01-15 10:00 │  App started  │  INFO  │ user-svc │  │
│  │   2024-01-15 10:01 │  Login success│  INFO  │ auth-svc │  │
│  │   2024-01-15 10:02 │  Error occur  │  ERROR │ order-svc│  │
│  │   ...                                                  │  │
│  │                                                        │  │
│  └───────────────────────────────────────────────────────┘  │
│  ┌───────────────────────────────────────────────────────┐  │
│  │  文档数量: 1,234,567    显示字段: 0 / 12 已选择      │  │
│  └───────────────────────────────────────────────────────┘  │
└─────────────────────────────────────────────────────────────┘

2.2 时间范围选择

Kibana 提供了丰富的时间选择方式:

时间选择器选项:
├── 快速选择
│   ├── Last 15 minutes
│   ├── Last 30 minutes
│   ├── Last 1 hour
│   ├── Last 24 hours
│   └── Last 7 days
├── 相对时间
│   └── Now - 1h/h/d/w
├── 绝对时间
│   └── 2024-01-15 00:00:00 至 2024-01-16 00:00:00
└── 实时刷新
    └── 每 5 秒 / 10 秒 / 30 秒 / 1 分钟

2.3 查询语言:KQL

Kibana Query Language(KQL)是 Kibana 的查询语言,比 Lucene 语法更简洁。

java
// 基本查询
message: "error"                    // 字段包含 error
status: 200                        // 精确匹配
service: ("user-svc" or "auth-svc")  // OR 条件

// 范围查询
bytes: >= 1000 and bytes < 5000    // 范围
response_time: 100 TO 500          // 范围(另一种写法)

// 通配符
user_agent: /Mozilla\/5.*/         // 正则表达式

// 逻辑组合
level: ERROR and service: user-svc  // AND
status: >= 400 or level: WARN      // OR

// 存在性
user_id: *                         // user_id 字段存在

// NOT
not level: DEBUG                    // 排除

2.4 保存搜索

保存搜索流程:

1. 编写查询 → message: "error"
2. 设置时间范围 → Last 24 hours
3. 点击 Save → 保存为 "Error Logs 24h"
4. 可以创建可视化或仪表板引用此搜索

3. Visualize:图表绘制

3.1 可视化类型

Kibana 支持多种可视化类型:

类型说明适用场景
Line折线图趋势分析
Area面积图累积量展示
Bar柱状图对比分析
Pie饼图占比分析
Heat Map热力图密度分布
Data Table数据表格明细展示
Metric指标卡KPI 展示
Goal目标图目标完成度
Gauge仪表盘实时状态
Map地图地理位置

3.2 创建可视化流程

创建可视化步骤:

1. 选择索引模式
   └─→ 选择数据来源(my-logs-*)

2. 选择可视化类型
   └─→ 选择 Metric(指标卡)

3. 配置指标
   └─→ 聚合方式:Count / Average / Sum / Max / Min
   └─→ 字段:bytes

4. 样式配置
   └─→ 颜色、标签、格式

5. 保存可视化
   └─→ 保存为 "Total Traffic"

3.3 聚合配置

java
// 聚合类型

// Metric Aggregations(指标聚合)
Count        // 文档数量
Average      // 平均值
Sum          // 总和
Min          // 最小值
Max          // 最大值
Median       // 中位数
Percentiles  // 百分位数
Cardinality  // 去重计数

// Bucket Aggregations(桶聚合)
Date Histogram    // 按时间分桶
Terms             // 按字段值分桶
Range             // 按范围分桶
Histogram         // 按固定间隔分桶
Filter            // 按过滤器分桶
Significant Terms // 显著词分析

3.4 图表配置面板

可视化配置面板:

┌─────────────────────────────────────────────────────────────┐
│  Data                                                    │
│  ┌─────────────────┐  ┌─────────────────┐                │
│  │  Metrics        │  │  Buckets        │                │
│  │  ┌───────────┐  │  │  ┌───────────┐ │                │
│  │  │ Count     │  │  │  │ Date      │ │                │
│  │  └───────────┘  │  │  │ Histogram │ │                │
│  │                 │  │  └───────────┘ │                │
│  └─────────────────┘  └─────────────────┘                │
│                                                             │
│  ┌─────────────────────────────────────────────────────┐  │
│  │  Options                                             │  │
│  │  ┌───────────────────────────────────────────────┐  │  │
│  │  │  ○ Smooth Line   ○ Stepped   ○ Linear         │  │  │
│  │  │  ☑ Show Dots    ☑ Show Value                  │  │  │
│  │  └───────────────────────────────────────────────┘  │  │
│  └─────────────────────────────────────────────────────┘  │
└─────────────────────────────────────────────────────────────┘

4. Dashboard:可视化大盘

4.1 仪表板布局

┌─────────────────────────────────────────────────────────────┐
│  Sales Dashboard                          [编辑] [全屏] [分享] │
│  ┌─────────────────────────────────────────────────────┐  │
│  │  ┌──────────────┐  ┌──────────────┐ ┌────────────┐ │  │
│  │  │ Total Sales  │  │ Orders       │ │   Revenue  │ │  │
│  │  │   ¥123,456   │  │    8,234     │ │   ¥9,876K  │ │  │
│  │  └──────────────┘  └──────────────┘ └────────────┘ │  │
│  │  ┌───────────────────────────────────────────────┐ │  │
│  │  │                                               │ │  │
│  │  │         每日销售趋势 (折线图)                  │ │  │
│  │  │                                               │ │  │
│  │  └───────────────────────────────────────────────┘ │  │
│  │  ┌──────────────────┐  ┌─────────────────────────┐ │  │
│  │  │   销售占比 (饼图) │  │   Top Products (表格)   │ │  │
│  │  │                   │  │   ┌─────────────────┐  │ │  │
│  │  │    ┌──┐           │  │   │ Product  │ Sales │  │ │  │
│  │  │    │  │           │  │   │ ─────── │ ──────│  │ │  │
│  │  │    └──┘           │  │   │ item A  │ 1,234 │  │ │  │
│  │  └──────────────────┘  └─────────────────────────┘ │  │
│  └─────────────────────────────────────────────────────┘  │
└─────────────────────────────────────────────────────────────┘

4.2 添加面板

添加可视化到仪表板:

1. 点击 Add → 选择已保存的可视化
   └─→ 选择 "Daily Sales Trend"

2. 或点击 Create new → 创建新可视化
   └─→ 新的可视化会自动添加

3. 调整布局
   └─→ 拖拽调整大小
   └─→ 拖拽调整位置

4.3 交互功能

仪表板交互:

┌─────────────────────────────────────────────────────────────┐
│  交互功能                                                    │
│                                                               │
│  🔍 全局过滤器                                               │
│  ├─→ 按服务过滤:service: user-svc                          │
│  ├─→ 按状态过滤:status >= 400                              │
│  └─→ 时间过滤器(应用于所有面板)                            │
│                                                               │
│  📊 点击穿透(Drill Down)                                   │
│  ├─→ 点击饼图中的 "user-svc" → 只显示 user-svc 数据          │
│  └─→ 关联其他可视化                                        │
│                                                               │
│  🔄 自动刷新                                                 │
│  └─→ 开启后自动刷新数据                                     │
│                                                               │
│  📅 时间同步                                                 │
│  └─→ 所有面板使用相同的时间范围                              │
│                                                               │
└─────────────────────────────────────────────────────────────┘

4.4 分享与嵌入

java
// 分享方式

// 方式一:分享链接
// Kibana → Share → 复制链接

// 方式二:嵌入 iframe
<iframe
  src="http://kibana:5601/app/dashboards/embed?..."
  width="100%"
  height="800"
></iframe>

// 方式三:直接链接到只读版本
http://kibana:5601/app/dashboards/abc123?embed=true

5. 地图可视化(Maps)

5.1 创建地图

地图可视化流程:

1. 选择 Maps 应用
2. 添加图层
   ├─→ Document Layer(文档图层)
   │   └─→ 选择索引和坐标字段

   └─→ Tile Layer(瓦片图层)
       └─→ 选择地图样式(Dark、Light、Satellite)
3. 配置样式
   └─→ 颜色、大小、图标
4. 保存地图

5.2 热力图

热力图配置:

1. 选择 Choropleth 或 Heatmap 图层
2. 选择聚合方式:Sum、Average
3. 选择权重字段:request_count
4. 配置颜色渐变:Low → High
5. 效果:深色区域表示请求密集

6. Canvas:数据画布

Canvas 让你可以创建个性化的数据展示页面:

Canvas 工作区:

┌─────────────────────────────────────────────────────────────┐
│  ┌──────────────────┐                                       │
│  │    ┌────────┐    │                                       │
│  │    │ Sales  │    │  ← 可拖拽的元素                       │
│  │    │ ¥100K  │    │                                       │
│  │    └────────┘    │                                       │
│  │                  │                                       │
│  │    ┌────────┐    │                                       │
│  │    │ Orders │    │                                       │
│  │    │  8,234 │    │                                       │
│  │    └────────┘    │                                       │
│  └──────────────────┘                                       │
│                                                               │
│  Canvas 支持:                                               │
│  ✓ 文本框(自定义字体、颜色)                               │
│  ✓ 可视化元素(复制 Visualize 中的图表)                     │
│  ✓ 背景图片                                                 │
│  ✓ 动态数据(支持表达式)                                    │
│                                                               │
└─────────────────────────────────────────────────────────────┘

7. Dev Tools:开发工具

7.1 Console

Console(类似 Postman):

┌─────────────────────────────────────────────────────────────┐
│  Console                                                  │
│  ┌─────────────────────────────────────────────────────┐  │
│  │ GET /_cluster/health                                  │  │
│  │                                                       │  │
│  │ {                                                    │  │
│  │   "cluster_name": "my-cluster",                      │  │
│  │   "status": "green",                                │  │
│  │   ...                                                │  │
│  │ }                                                    │  │
│  └─────────────────────────────────────────────────────┘  │
│                                                             │
│  支持语法高亮、自动补全、快捷键                              │
│  Ctrl+Enter:执行请求                                       │
│  Ctrl+Space:自动补全                                       │
│                                                             │
└─────────────────────────────────────────────────────────────┘

7.2 常用 API

java
// 集群健康
GET /_cluster/health

// 索引列表
GET /_cat/indices?v

// 分片状态
GET /_cat/shards?v

// 搜索测试
GET /my-index/_search
{
  "query": {
    "match": { "message": "error" }
  }
}

8. 实际工作流程

完整的 Kibana 使用流程:

1. 创建索引模式(Index Pattern)
   └─→ Management → Stack Management → Index Patterns
   └─→ 添加 "logs-*" 索引模式

2. 探索数据(Discover)
   └─→ 了解数据结构
   └─→ 编写查询测试

3. 创建可视化(Visualize)
   └─→ 销售趋势图
   └─→ 错误分布饼图
   └─→ Top 10 服务柱状图

4. 组合仪表板(Dashboard)
   └─→ 添加所有可视化
   └─→ 设置全局过滤器
   └─→ 布局调整

5. 分享与告警
   └─→ 分享给团队
   └─→ 设置告警规则

总结

Kibana 的核心功能:

  1. Discover:探索数据、编写查询、保存搜索
  2. Visualize:创建各种图表(折线图、柱状图、饼图等)
  3. Dashboard:组合多个可视化,添加交互和过滤器
  4. Maps:地理位置可视化
  5. Canvas:创建个性化数据展示页面
  6. Dev Tools:执行 ES API 请求

留给你的问题

假设你负责监控一个电商系统,需要创建一个监控仪表板。你会放哪些可视化?它们之间的关系是什么?

思考一下:

  • 哪些指标是最重要的?
  • 如何让仪表板既全面又不杂乱?
  • 如何设计交互流程?

基于 VitePress 构建