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=true5. 地图可视化(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 的核心功能:
- Discover:探索数据、编写查询、保存搜索
- Visualize:创建各种图表(折线图、柱状图、饼图等)
- Dashboard:组合多个可视化,添加交互和过滤器
- Maps:地理位置可视化
- Canvas:创建个性化数据展示页面
- Dev Tools:执行 ES API 请求
留给你的问题:
假设你负责监控一个电商系统,需要创建一个监控仪表板。你会放哪些可视化?它们之间的关系是什么?
思考一下:
- 哪些指标是最重要的?
- 如何让仪表板既全面又不杂乱?
- 如何设计交互流程?
