刚接触 Kibana 的同学,十个里有九个会先打开 Dashboard 页面,看到一片空白,然后陷入迷茫。我当年第一次搭 Elastic Stack 也是这个状态——索引里明明有数据,集群健康也是绿的,但 Dashboard 就是不知道从哪里下手。这篇内容就围绕 Kibana 7.8.0 版本的 Dashboard 做一次完整梳理,从概念到实操,从图表选型到问题排查,适合刚搭好环境、准备做第一个可视化页面的初学者,也适合已经在用其他 BI 工具、想快速理解 Elastic Stack 看板工作方式的同学。我会尽量避开那种“照着点按钮”的保姆式教程写法,更多讲清楚每一步为什么要这样做,这样换一个场景、换一套数据,思考链路依然成立。
1. 为什么必须先把 Dashboard 概念吃透
1.1 Dashboard 在 Kibana 里的定位
先纠正一个观念:Kibana 不是一个“打开就能看到 Dashboard”的工具。它有至少四个功能入口,各管一摊:Discover 负责搜原始数据、Visualize 负责做单张图表、Dashboard 负责把多张图表拼成监控页面、Stack Management 负责索引模式和系统配置。很多人一上来就点 Dashboard,发现是空的,这不奇怪——因为 Dashboard 本身不产生数据,它只是一个“画框”,每个面板都链接到已保存的图表对象。
| 功能入口 | 主要作用 | Dashboard 入门中的角色 |
|---|---|---|
| Discover | 查询、查看原始文档 | 验证数据是否存在、排查数字对不上 |
| Visualize | 创建并保存单张图表 | Dashboard 的面板来源 |
| Dashboard | 组合图表、统一过滤和刷新 | 最终的监控看板 |
| Stack Management | 索引模式、高级设置、权限 | 创建 Dashboard 前必须先配置 |
所以,入门 Dashboard 的正确顺序是:准备好索引数据 → 在 Visualize 里做出图表并保存 → 回到 Dashboard 添加图表、调整布局 → 最后设置刷新和过滤,让页面变成一个可持续使用的看板。反过来,先在 Dashboard 里空想需要什么图,反而容易陷入“不知道选什么可视化类型、不知道数据从哪来”的尴尬。
1.2 7.8.0 这个版本为什么值得单独说
Kibana 版本演进很快,7.8.0 是个承上启下的位置。它仍以“创建可视化对象”为主流程,也就是先在 Visualize 里做图、保存,再拖进 Dashboard;而 8.x 之后大力推行的 Lens 拖拽式绘图,在 7.8 里还处于实验阶段,很多人用的仍是传统面板工作流。结果就是,看太老的教程,菜单对不上;看 8.x 的新教程,又找不到入口。这篇以 7.8.0 的实际界面为准,照着点基本不会迷路。
版本配套这里必须强调:Kibana 7.8.0 只能连 Elasticsearch 7.8.0。跨大版本或者小版本差距过大,登录后大概率弹出版本不匹配警告,甚至功能不可用。如果你手上就是 7.8 的 Elasticsearch,老老实实找同版本 Kibana 安装包,别图省事用 8.x 界面连 7.x 存储,后面会出现一堆莫名其妙的兼容问题。
1.3 入门需要的最小环境
先列一下准备条件,避免做到一半发现环境扛不住。
- Elasticsearch 与 Kibana 均为 7.8.0,本机部署即可,内存建议至少 4GB,数据量稍大就上 8GB。
- 浏览器用 Chrome 或 Edge 的较新版本,老掉牙的浏览器就别挣扎了。
- 数据源至少要有索引。没有现成业务数据,优先用 Kibana 自带的 Sample data,后面我会讲两种准备数据的方式。
- 权限方面,单机学习直接用 elastic 超级用户登录即可;公司环境则需要保证当前用户对目标索引有 read 权限,并且有访问 Dashboard、Visualize 菜单的权限。
这四样齐了,下面开始搭。
2. 可视化对象的关键前置:索引模式与数据准备
2.1 索引模式是 Dashboard 的地基
任何一张图表,创建前都要先选一个索引模式。索引模式解决的是“告诉 Kibana 你要看哪些索引里的数据”,既可以精确匹配一个索引名,也可以带通配符匹配一批索引,比如logstash-*、my_traffic_logs*。
在 7.8.0 里创建索引模式的路径是:左侧菜单 Stack Management → Index Patterns → Create index pattern。输入名称后,下一步会要求选择时间字段。如果索引里没有日期字段,可以选“不使用时间过滤器”,但绝大多数业务场景都有时间戳,选好时间字段后,Dashboard 的时间选择器才能真正生效,强烈建议保留。
这里有个常见误区:索引模式只是逻辑视图,不复制数据,也不影响原始索引。删掉索引模式不等于删数据,只是 Kibana 里看不到它了。反过来,索引里新增了字段后,索引模式的字段列表不会自动更新,需要手动点 Refresh field list,这一步很多教程不提,等做聚合发现字段找不到才想起来就晚了。
2.2 练习数据的两种搞法
如果你只是想快速体验 Dashboard,优先用自带样例数据。装好 Kibana 后进入首页,找到 Add sample data,里面通常有三套:Sample flight data、Sample web logs、Sample eCommerce orders。随便装一套,系统会自动创建对应的索引模式,并且预置了一批示例 Dashboard 和可视化对象。你甚至可以先把别人搭好的 Dashboard 打开看一遍,再拆掉自己重做。
如果想练手更贴近自己业务,可以用 Dev Tools 手动造索引。进入 Kibana 左侧 Dev Tools,在 Console 里执行:
PUT my_traffic_logs { "mappings": { "properties": { "timestamp": { "type": "date" }, "url_path": { "type": "keyword" }, "method": { "type": "keyword" }, "status_code": { "type": "integer" }, "response_time_ms": { "type": "integer" }, "region": { "type": "keyword" } } } }再用 bulk 写入几十条文档,比如:
POST my_traffic_logs/_bulk {"index":{}} {"timestamp":"2024-01-15T10:00:00Z","url_path":"/api/orders","method":"GET","status_code":200,"response_time_ms":120,"region":"华东"} {"index":{}} {"timestamp":"2024-01-15T10:01:00Z","url_path":"/api/products","method":"POST","status_code":503,"response_time_ms":860,"region":"华南"} {"index":{}} {"timestamp":"2024-01-15T10:02:00Z","url_path":"/api/search","method":"GET","status_code":200,"response_time_ms":230,"region":"华东"}写完数据后回到 Stack Management → Index Patterns,创建my_traffic_logs*,时间字段选timestamp。手动建索引后,字段列表记得点 Refresh field list,否则可能一片空白。
2.3 时间字段、时区与范围选择的坑
Dashboard 里数据不显示,十次有八次是时间问题。Elasticsearch 内部统一存 UTC 时间戳,Kibana 默认按浏览器时区展示,单机学习问题不大;但如果是日志系统采集的数据,服务器时间和本机时间差八小时,图表就会看起来“少了一段”或错位。
7.8.0 里要调整展示时区,可以到 Stack Management → Advanced Settings 修改dateFormat:tz,比如改成Asia/Shanghai。更关键的是时间范围——Dashboard 右上角的时间选择器决定了所有面板查询的时间区间,默认是最近 15 分钟。如果你造的数据是 1 月 15 日的,而现在系统时间是 2 月,Dashboard 自然一片空白。新手入门建议先把时间范围改成 Absolute,覆盖数据所在的时间段,或者干脆选 Last 7 days,给自己留足余量。
3. 从零搭出一个 Dashboard:核心操作链路
3.1 第一步:在 Visualize 里创建第一张图表
进入左侧 Visualize,点击 Create visualization,选择数据源my_traffic_logs,然后选图表类型。先选 Line,做一个按时间展示请求量变化的折线图。
右侧配置面板里,Metrics 默认是 Count,也就是对文档计数。接着在 Buckets 区域点击 Add bucket,选择 X-axis,聚合方式选 Date Histogram,字段选 timestamp,时间间隔可以先选 Auto,让 Kibana 自动决定分桶粒度。配置好后点执行按钮,图表区域应该出现一条随时间起伏的折线。
这个步骤背后就是 Kibana 可视化的核心模型:先决定统计指标(Metric),也就是 Y 轴;再决定按什么维度分组(Bucket),也就是 X 轴。后面所有复杂的图表,本质上都是在这个模型上扩展——加一个 Split series 就是多线对比,把 Date Histogram 换成 Terms 就是按类别统计。
3.2 第二步:把图表组织进 Dashboard
图表做好后,必须先点 Save,起个名字,比如“请求量时间趋势”。保存之后进入 Dashboard 菜单,点 Create new dashboard,页面是空白的。点顶部 Add 按钮,在弹出的面板列表里能看到刚才保存的折线图,点一下即可加入 Dashboard。
面板加入后可以拖拽边缘调整大小,也可以拖动位置。先放一张折线图,再放一张表格,看板的样子就出来了。7.8.0 还支持添加 Markdown 面板,在添加面板列表底部能找到 Text 面板,用来写说明文字、放链接,适合作为看板的标题注释。保存后它不会抢占太多排版空间,却能让看板用途一目了然。
3.3 第三步:保存、刷新与布局调整的完整闭环
布局满意后,点顶部 Save 保存整个 Dashboard,输入名称。这里要理解 7.8.0 的保存机制:Kibana 把每个可视化图表作为独立对象存到 Elasticsearch 的.kibana索引里,Dashboard 本身也是一个对象,记录的是“引用了哪些图表对象 + 各自的位置大小”。所以一旦你在 Visualize 里删掉某个图表,Dashboard 对应面板就会报错或消失。这种引用关系,和文件系统里的快捷方式很像。
Dashboard 还有一个实用功能:自动刷新。工具栏上刷新按钮旁边有下拉菜单,可以选择关闭、5 秒、30 秒、1 分钟等间隔。监控场景我一般选 30 秒到 5 分钟。太短会给 Elasticsearch 增加不必要的查询压力,太长又失去了看板实时性的意义。记住,刷新只是重新发起查询,不是建立推送连接,对系统开销要有预期。
4. 图表选型:数据形态与可视化类型的匹配逻辑
4.1 趋势与时间序列:Line 和 Area
折线图适合呈现随时间变化的趋势,比如请求量、响应延迟、错误率。创建折线图时,如果希望在同一张图里对比不同条件下的趋势,可以在 Buckets 里添加 Split series,聚合方式选 Terms,字段选region或method,一条折线就变成多条彩色折线,右上角会生成图例。
Area(面积图)配置几乎一样,区别只是把线下区域填充了颜色。单一序列时面积图更有视觉冲击力;多个序列时填充会互相遮挡,折线图反而清爽。7.8.0 里折线图还有一个易被忽略的选项:Options 里可以设置是否用断线连接空值。时间序列里某些桶没有数据时,默认显示为空档;开启连接后线条会直接跨越,看起来更连贯,但也遮掩了真实的数据缺口。生产环境我建议关掉,宁可看到断口,也不要把数据缺口糊弄过去。
4.2 占比与分布:Pie 和 Tag Cloud 的边界
饼图天然适合“整体中各类占比”,比如按接口分类的请求占比、按区域分类的错误占比。饼图配置里,Split slices 就是饼切的维度,也可以加多层。我的看法是:扇区不要超过五六个,再多就是彩虹转盘,人眼根本分不清哪个大哪个小。真想展示十几二十个类别的分布,用横向柱状图或 Data Table 会清楚得多。
Tag Cloud(标签云)在业务分析里用得不多,偶尔有文本词频需求。这里有个中文环境特有的坑:7.8.0 自带的 Tag Cloud 依赖分词结果,而 Elasticsearch 默认的 standard analyzer 对中文支持很弱,通常只会把整段中文当成一个词,或者切得支离破碎。除非索引 mapping 里专门配置了 ik_max_word 这类中文分词器,否则用 Tag Cloud 展示中文文本效果很差,不如直接用 Data Table 展示关键词 Top N。
4.3 明细与汇总:Data Table 和 Metric
Data Table 是最实用的图表类型,没有之一。它把聚合结果按行展示,比如按url_path分组的请求数、平均响应时间。配置里,Rows 相当于 SQL 的 GROUP BY,可以叠加多个字段,先按region再按method。Metric 聚合则相当于 SQL 里的 SUM、AVG、MAX。做接口监控时,我通常会放一张“近一小时平均耗时 Top 10 接口”表格,一眼就能找出慢接口。
Metric 面板最简单,只显示一个到几个数字,适合放核心指标,比如总请求量、错误率、平均延迟。7.8.0 的 Metric 面板可以配置多个 Metric 聚合,也可以设置标签。注意 Metric 大数字没有坐标轴,它只是把数字大字显示,适合做看板顶部指标;但如果想盯着趋势变化,还是得配折线图。
4.4 聚合配置的心法与常见误区
选对图只是第一步,聚合配置才决定图表质量。几个容易踩的误区:
第一,时间间隔过细。很多新手拿到一天的数据,Date Histogram 选 Minute 粒度,结果画出来几千个点,浏览器渲染卡死,图表密得像毛线团。正确做法是先 Auto 让 Kibana 估算,再根据图表宽度手动选一个产物点数量在 50 以内的间隔。第二,Terms 聚合的 Size 参数很关键。比如按接口分组时,默认可能只返回前 5 个,如果 Size 设太小,你的 Top 10 就是假 Top 10。第三,聚合类型选错,比如把响应时间总和当成平均值看。Sum、Average、Percentiles 语义完全不同,建议先放一张 Data Table 验证数字,再放心上图表。
5. 让 Dashboard 活起来的三种交互手法
5.1 全局时间选择器与自动刷新
Dashboard 的每个面板默认都跟随同一个全局时间范围。这个设计很关键,它保证页面所有图表处于同一时间段,不会出现“折线图是今天的、饼图是上周的”这种对不上的情况。右上角时间选择器支持相对时间、绝对时间、快速选项,入口很直观。
自动刷新前面提过,这里多说一句实现机制:Kibana 的刷新是在指定间隔后重新发起查询,而不是一条长连接推送数据。所以刷新间隔再短,Elasticsearch 每次也都要重新执行聚合。如果你的数据写入频率很低,没必要开 5 秒刷新;如果监控的业务量很大,建议搭配索引生命周期管理,避免 Dashboard 每次都在扫半个月的旧索引。对 7.8.0 来说,合理设置自动刷新,是保证看板可用性的第一课。
5.2 Dashboard 内过滤条件与图表联动
Dashboard 顶部有几个常驻交互入口。第一个是 KQL 查询框,可以输入类似status_code >= 400的过滤语句,回车后所有面板都会联动更新。这比在每张图里单独改条件高效得多。第二个是 Add filter 按钮,通过图形化表单添加过滤条件,适合不熟悉查询语法的人。
在旧版可视化里,直接点击图表上的数据块也会触发联动过滤。比如点一下饼图中的“华东”扇区,Dashboard 顶部会立刻出现一个region: 华东的过滤器,所有面板都聚焦到华东数据。这个交互对日常排障极有价值:从总览看到异常,点一下异常区域,其他图表立刻下钻,整个排查链路非常顺畅。但要注意,Filter 加多了会层层叠加,记得在顶部过滤器列表里经常清理,不然你可能会疑惑“为什么数据越来越少了”。
5.3 点图下钻:从看板到问题根因
下钻有两种常见形态。第一种是 Dashboard 内部的过滤联动,上面说过了。第二种是从图表跳到更细粒度的数据,最直接的办法是配合 Discover 使用——Dashboard 里看到异常时间段,用时间选择器框选该时段,再跳到 Discover 查原始日志,逐条看详情。
在 7.8.0 里,Data Table 本身就支持在表格行上点击某个值,再选择过滤。比如表格显示某个接口平均耗时最高,你点接口名并选择 Filter for value,整个 Dashboard 就聚焦到该接口的请求明细。这种“自总到分、由粗到细”的操作习惯,是看板工具区别于静态报告的核心价值。建议入门时多练几次,掌握后排查异常的效率会显著提升。
6. 7.8.0 实操中容易翻车的几个场景
6.1 有索引有数据,Dashboard 却一片空白
按我反复排障的经验,先按这个顺序自查:时间范围对不对,换成全部时间或绝对时间试一下;索引模式有没有选对,去 Stack Management 确认默认索引模式;映射的时间字段类型是不是 date,字段类型错了 Date Histogram 直接画不出来;KQL 过滤是不是太严格,清空 Query Bar 再试。
这里还要单独提醒一个细节:手动通过 Dev Tools 建索引后,创建索引模式时字段列表为空,很可能是因为 Kibana 还没刷新字段缓存。点一下索引模式详情里的 Refresh field list,再回去重试。这个问题在自动映射新字段时极其常见,是入门期最高频的坑之一。
6.2 图表有数据但数字和原始日志对不上
聚合计算对不上,多半出在“口径”上。比如饼图和 Data Table 的 Terms 聚合默认返回条数不一样,饼图可能只显示前几个扇区,Table 却显示了全部,拿两者对比自然会觉得比例不对。另一个隐藏原因是 Count 的统计口径问题,尤其在父子文档或嵌套对象存在时,Count 会和“文档数”的直观感受不同。
遇到这种对不上的情况,先不要怀疑 Kibana bug。回到 Discover,用同样的过滤条件数一下原始条数,把“看板数字”当成“结果”而不是“过程”。如果两侧数字一致,那就是聚合口径理解的问题;如果不一致,大概率是索引模式或者过滤条件设错了。
6.3 图表加载慢、Dashboard 白屏卡死
慢查询主要两个原因:时间范围扫的索引太多、聚合桶数太多。优化手段排序是:在 Dashboard 顶部加更精确的过滤条件;把 Date Histogram 的时间间隔调大;移除不必要的大图表;索引按天滚动命名的话,尽量使用my_traffic_logs-2024.01.15这类精确索引模式。
Elasticsearch 是越快返回越省资源的系统,Dashboard 上每个可视化背后都是一次独立查询。别随随便便塞十几个大面板进去,尤其是有 Terms 聚合的面板,每个都在做 group by,指数级推高开销。入门阶段先追求“少而准”,后面再慢慢加复杂度。
6.4 面板引用的图表被误删
Dashboard 只是图表的引用容器,误删 Visualize 里的图表对象后,Dashboard 对应位置会变成异常面板。好在 7.8.0 的删除不是立刻物理销毁,Elasticsearch 的.kibana索引里还保留这些对象,如果有该索引的访问权限,理论上可以通过快照或备份找回。
日常维护建议是:给图表命名带前缀和用途,比如“监控-请求量-趋势”,而不是“未命名图表”。正式环境更稳妥的做法是启用访问控制,让普通用户只有读权限,不能随手删除共享面板。多人协作的团队里,Dashboard 和 Visualize 目录的整理规则,往往比技术本身更重要。
6.5 从旧版迁移到 7.8.0 的可视化兼容
如果从 6.x 升级上来,大部分 Dashboard 能自动迁移,但有些可视化类型可能被标记为需要重建。升级前最好对.kibana索引做一次快照备份,然后到测试环境执行升级,逐个打开 Dashboard 检查面板。Timelion 这类面向时序的复杂表达式模块在 7.8.0 仍可用,但配置方式和普通聚合不同,升级后容易出现函数语法兼容问题,建议把复杂表达式逐步改写为标准聚合图表。
版本升级不是终点。升级后第一时间检查时间过滤器、索引模式默认值、日期格式这些全局设置有没有被重置。我自己就在一次升级后遇到过默认时区被改回 UTC 的事,看板上一堆图表集体错位八小时,排障花了不少时间。
最后分享一点个人心得。很多人觉得 Dashboard 只是把图拼起来,其实它的核心价值是“让看数据的人不用问问题”。我搭过不少监控看板,最有效的做法永远是先想清楚使用场景:给谁看、看什么周期、什么异常需要一眼发现,然后再倒推需要哪些图表,而不是打开可视化类型列表一个个试。Kibana 7.8.0 的 Dashboard 界面虽然不如后来的版本花哨,但“索引模式—可视化对象—Dashboard 引用”这套结构非常清晰,理解了底层逻辑,后面再用任何 BI 工具都会很快上手。如果你搭的过程中卡在某个具体问题上,欢迎把现象描述出来,排障思路往往比直接给答案更有价值。