linux-tutorial 之 Kibana 实战:从 Discover 查询语法到可视化与仪表盘
【免费下载链接】linux-tutorial:penguin: Linux教程,主要内容:Linux 命令、Linux 系统运维、软件运维、精选常用Shell脚本项目地址: https://gitcode.com/GitHub_Trending/lin/linux-tutorial
导读
Kibana 是 Elastic 技术栈(ELK)中负责"展示与分析"的一环,它将 Elasticsearch 中的索引数据渲染为可检索、可聚合、可可视化的报表。本文以 linux-tutorial 仓库中的 Kibana 专题文档为骨架,系统讲解 Kibana 的核心使用链路:通过 Discover 进行数据探索、掌握完整的查询字符串(query string)语义、利用 Visualize 创建饼图与柱状图、并通过 Dashboard 整合共享视图。读完本文,你将能够独立完成一个日志检索、聚合分析与报表展示的完整闭环。
一、Kibana 在 ELK 技术栈中的定位
在进入具体操作之前,先明确 Kibana 所处的位置。ELK 是 Elastic 公司旗下三款产品 Elasticsearch、Logstash、Kibana 的首字母组合,Kibana 负责"将 Elasticsearch 的数据分析并渲染为可视化的报表"(详见 Elastic 技术栈 README)。
从架构上看,数据流通常是:日志源 → Logstash / Beats 采集 → Elasticsearch 存储索引 → Kibana 检索与展示。Kibana 本身不存储数据,它通过 HTTP 接口连接 Elasticsearch,所有检索条件最终都会被翻译为 Elasticsearch 的查询 DSL 下发执行。因此,理解 Kibana 的搜索栏语法,本质上就是理解 Elasticsearch 的 Query String 查询语法。
仓库中 elastic-quickstart.md 给出了 Kibana 最基本的接入步骤:
- 下载对应版本的 Kibana 包并解压到本地;
- 修改
config/kibana.yml,设置elasticsearch.url指向 Elasticsearch 实例; - 运行
bin/kibana(Windows 下为bin\kibana.bat); - 浏览器访问
http://localhost:5601。
注意:ELK 三个组件建议使用统一的版本号,避免因版本不一致导致组件间通讯异常。仓库中 install_kibana.sh 即针对 kibana 6.0.1 / 6.2.4 / 6.3.1 提供了可选安装,并为
config/kibana.yml写入如下最小可用配置:
server.port: 5601 server.host: "0.0.0.0" elasticsearch.url: "http://127.0.0.1:9200"其中server.host设置为0.0.0.0表示允许局域网内其他机器通过 Kibana 页面访问数据;elasticsearch.url指向本机 9200 端口的 Elasticsearch 实例。日常启动/停止可以通过仓库中的 boot-elk.sh 完成,例如:
./boot-elk.sh kibana start ./boot-elk.sh kibana stop二、Discover:Kibana 的数据查询入口
单击侧面导航栏中的Discover,即可进入 Kibana 的数据查询功能页面。
在搜索栏中,你可以输入 Elasticsearch 查询条件来搜索数据。你可以在Discover页面中浏览查询结果,并在Visualize页面中基于已保存的搜索条件创建可视化。
2.1 索引模式(Index Pattern)的作用
当前索引模式显示在查询栏下方。索引模式决定了提交查询时搜索哪些索引:
- 要搜索一组不同的索引,请从下拉菜单中选择不同的模式;
- 要新增索引模式,请前往
Management / Kibana / Index Patterns,点击Add New创建。
典型的场景是:Logstash 或 Beats 将日志写入以日期为后缀的索引(如logstash-2026.09.16),此时可在索引模式中使用通配符(如logstash-*)一次性覆盖全部日志索引。
实战提示:如果打开 Kibana 页面时提示
Warning No default index pattern. You must select or create one to continue.或Unable to fetch mapping. Do you have indices matching the pattern?,通常意味着 Logstash 尚未成功把日志写入 Elasticsearch,或者索引模式与真实索引名不匹配。此时应优先检查 Logstash 与 Elasticsearch 之间的连通性(详见 elastic-quickstart.md 的安装 FAQ 部分)。
2.2 构建查询与选择展示字段
你可以使用字段名称和感兴趣的值来构建搜索:
- 对于数字字段,可以使用比较运算符,如大于(
>)、小于(<)或等于(=); - 可以将多个条件用逻辑运算符
AND、OR、NOT链接,且全部必须使用大写。
默认情况下,每个匹配的文档都显示所有字段。若要精简展示列,将鼠标悬停在"可用字段(Available fields)"列表上,点击想包含的每个字段旁边的添加按钮即可。例如只添加account_number字段,结果显示将变为包含五个账号的简单列表,极大提升日志浏览效率。
三、查询语义:搜索栏的完整语法指南
Kibana 的搜索栏遵循 Elasticsearch Query String 查询语义。查询字符串会被解析为一系列术语(term)和运算符(operator):
- 一个术语可以是一个单词(如
quick、brown); - 也可以是用双引号包围的短语(如
"quick brown")。
下面按类别逐一说明可用的查询语法。
3.1 字段名称
在搜索条件中会搜索默认字段(default_field),但也可以在查询语法中显式指定其他字段:
| 查询意图 | 查询语法 |
|---|---|
status字段包含关键字active | status:active |
title字段包含quick或brown(省略OR时使用默认运算符) | title:(quick OR brown)title:(quick brown) |
author字段精确匹配短语"John Smith" | author:"John Smith" |
book.title、book.content、book.date任一字段包含quick或brown(\*表示通配符) | book.\*:(quick brown) |
title字段包含任意非 null 值 | _exists_:title |
3.2 通配符
查询字符串提供?和*两个通配符:
?表示任意单个字符;*表示任意零个或多个字符。
qu?ck bro*使用通配符时有三个必须注意的坑:
- 性能:通配符查询会占用大量内存,执行性能较差,请慎用;
- 纯通配符优化:纯通配符
*会被改写成 exists 查询以提高效率,因此field:*会匹配包含空值的文档(如{"field": ""}),但不会匹配字段丢失或显式置为 null 的文档(如{"field": null}); - 前导通配符:在单词开头使用通配符(如
*ing)查询量特别大,因为索引中的全部术语都需要逐一检查。可以通过将allow_leading_wildcard设置为false来禁用前导通配符。
3.3 正则表达式
可以用/将正则表达式包裹在查询字符串中进行查询,例如:
name:/joh?n(ath[oa]n)/该查询会匹配john、jon、johan、joan等形式的姓名。
3.4 模糊查询
使用~运算符可以进行模糊查询。例如我们实际想查询quick brown forks,但由于拼写错误输入了:
quikc\~ brwn\~ foks\~依然可以查回想要的结果。其原理是:
- 模糊查询使用Damerau-Levenshtein 距离来查找所有匹配最多两次更改的项;
- 所谓"更改"指单个字符的插入、删除或替换,或两个相邻字符的换位;
- 默认编辑距离为
2,而编辑距离为1已足以捕捉约 80% 的人类拼写错误,可通过数字后缀显式指定:
quikc\~13.5 近似检索(Proximity Search)
短语查询(如john smith)要求所有词条按完全相同顺序出现;而近似检索允许指定的单词相互分开或顺序不同,并可指定短语中单词的最大编辑距离:
"fox quick"\~5字段中的文本越接近查询字符串中指定的原始顺序,文档就被认为越相关。以上面示例查询对比:短语"quick fox"会比"quick brown fox"更近似查询条件。
3.6 范围查询
可以为日期、数字或字符串字段指定范围:
- 闭区间用方括号
[min TO max]; - 开区间用花括号
{min TO max}。
常见示例:
| 查询意图 | 查询语法 |
|---|---|
| 2012 年的所有日子 | date:[2012-01-01 TO 2012-12-31] |
| 数字 1 到 5 | count:[1 TO 5] |
alpha与omega之间且不含两端的标签 | tag:{alpha TO omega} |
| 10 以上的数字 | count:[10 TO *] |
| 2012 年以前的所有日期 | date:{* TO 2012-01-01} |
| 1 到 5,但不包括 5 | count:[1 TO 5} |
开区间与闭区间可以组合使用(如上表最后一行)。单边无界范围也可以直接使用比较运算符:
age:>10 age:>=10 age:<10 age:<=10还可以用AND运算符求两个查询结果的交集:
age:(>=10 AND <20) age:(+>=10 +<20)3.7 Boosting(权重提升)
使用^运算符让一个术语比其他术语更相关。例如,想查找所有关于狐狸的文档,但特别关注"狐狸"本身:
quick^2 fox- 默认提升值是
1,可以是任意正浮点数; - 0 到 1 之间的提升值会降低相关性;
- 提升也可以作用于短语或组:
"john smith"^2 (foo bar)^43.8 布尔操作
默认情况下,只要一个词匹配,所有词都是可选的。搜索foo bar baz会返回包含foo、bar、baz中任意一个或多个的文档。
在查询字符串中可用的布尔控制手段分为两类:
(1)+与-运算符(首选)
+表示该术语必须存在;-表示该术语不得存在;- 其余未标注的术语都是可选的。
例如:
quick brown +fox -news含义是:fox必须存在、news必须不存在、quick和brown可有可无。
(2)AND、OR、NOT(也可写作&&、||、!)
这些运算符存在优先级:NOT优先于AND,AND优先于OR。注意与+/-的区别:+和-仅影响运算符右侧的术语,而AND、OR会同时影响左右两侧的术语。
3.9 分组
多个术语或子句可以用圆括号组合成子查询:
(quick OR brown) AND fox分组还能配合字段定位或 boosting 使用:
status:(active OR pending) title:(full text search)^23.10 保留字与转义
如果需要在查询中把运算符字符当作普通字符使用,必须用反斜杠\转义。例如搜索(1 + 1) = 2,需要写成:
\(1\+1\)\=2查询字符串的保留字符为:
+ - = && || > < ! ( ) { } [ ] ^ " ~ * ? : \ /无法正确转义这些特殊字符会导致语法错误,从而阻止查询运行。
3.11 空查询
如果查询字符串为空或仅包含空格,则查询会生成一个空的结果集(不会返回全量数据)。
四、Visualize:以图形化方式查看数据
想用可视化的方式展示数据,请单击侧面导航栏中的Visualize。该工具支持以多种方式查看数据,如饼图(Pie)、柱状图(Vertical Bar)、曲线图、分布图等。要开始创建,点击蓝色的Create a visualization按钮或+按钮,然后从可视化类型列表中选择一种。
说明:可视化可以基于"已保存的搜索"构建,也可以直接输入新的搜索条件。若输入新搜索,需要先选择索引模式来指定要搜索的索引;默认搜索匹配所有文档。
4.1 创建饼图(Pie)
要指定图表中展示哪些数据,需要借助 Elasticsearch 的存储桶聚合(bucket aggregation)。分组汇总就是把与搜索条件匹配的文档归类到不同分类中(也称分组)。为每个分类定义一个存储桶的步骤:
- 单击
Split Slices(拆分切片); - 在
Aggregation列表中选择Terms——注意:这里的 Terms 是 ELK 采集数据时定义好的字段或标签; - 在
Field列表中选择level.keyword; - 点击"应用更改"按钮(apply-changes button)更新图表。
最初,一个"切片"包含整个饼图;配置完成后饼图会按所选字段(如日志级别level.keyword)的取值分布切分为多个扇区。完成后,点击页面最上方一栏的Save按钮即可保存该图表。
说明:这里选择
level.keyword而非level,是因为 Kibana 6.x 中keyword类型字段才参与分桶聚合。字段类型可以在索引模式的字段列表中确认,这是实际排障中非常常见的"坑"。
4.2 创建柱状图(Vertical Bar)
创建柱状图的操作与饼图类似:
- 点击蓝色的
Create a visualization或+按钮,选择Vertical Bar; - 选择索引模式。在尚未定义任何 bucket 时,你会看到一个大柱,表示与默认通配符查询匹配的文档总数;
- 指定 Y 轴所代表的字段(通常为计数或数值聚合);
- 指定 X 轴所代表的字段(通常是分类字段);
- 点击"应用更改"按钮更新图表。
同样,完成后点击页面最上方一栏的Save按钮保存图表。
五、Dashboard:整合与共享可视化
Dashboard用于整合和共享Visualize集合,将多个图表聚合到一块大屏中,适合运维监控与报表场景。操作步骤如下:
- 点击侧面导航栏中的
Dashboard; - 点击"添加(Add)",显示已保存的可视化列表;
- 点击之前保存的
Visualize,然后点击列表底部的小向上箭头关闭可视化列表; - 将鼠标悬停在可视化对象上,会显示允许你编辑、移动、删除和调整可视化对象大小的容器控件。
通过拖拽布局,你可以把"日志级别饼图 + 请求量柱状图"等组合为一张实时监控面板,之后每次进入 Dashboard 即可一站式查看关键指标。
六、实战串联:从日志采集到 Kibana 检索分析
要真正把上述语法用起来,需要一条完整的数据链路。仓库在 codes/linux/soft/elk 目录下提供了整套配套配置:
采集端:filebeat.yml 中定义了 Filebeat 采集路径、多行日志合并规则,并将采集到的日志发送到 Logstash 的 5044 端口:
output.logstash: hosts: ["192.168.28.32:5044"]同时它还会把
setup.kibana.host指向 Kibana 地址(如192.168.28.11:5601),用于自动加载仪表盘模板。传输处理端:logstash.conf 监听 TCP 9251 端口接收
json_lines格式日志,解析后写入 Elasticsearch:input { tcp { port => 9251 codec => json_lines mode => server tags => ["javaapp"] } } output { elasticsearch { hosts => ["localhost:9200"] } stdout { codec => rubydebug } }展示端:数据进入 Elasticsearch 后,即可在 Kibana 的 Discover 中执行本文所述的各类查询。例如:
- 查看某个应用全部 ERROR 日志:
level:ERROR; - 查看最近 10 分钟且包含关键字
NullPointerException的日志:message:NullPointerException配合时间过滤器; - 按日志级别统计分布:在 Visualize 中用
level.keyword字段做 Terms 聚合生成饼图; - 观察错误数量随时间走势:用柱状图或折线图按时间桶聚合。
- 查看某个应用全部 ERROR 日志:
Java 应用侧(可选):仓库 elastic-quickstart.md 还演示了通过
logstash-logback-encoder将 Java 日志直接经 TCP 推送至 Logstash 的做法,对应配置见 logback.xml。
七、结语
Kibana 的日常使用可归纳为三条主线:Discover(检索)→ Visualize(可视化)→ Dashboard(整合)。其中检索语法是地基——本文覆盖的字段限定、通配符、正则、模糊查询、近似检索、范围、boosting、布尔组合与分组转义,足以应对绝大多数日志排查与分析场景。配合仓库中 install_kibana.sh、boot-elk.sh 等脚本以及 Elastic 技术栈 README 中的配套文档,即可搭建起一套可落地的日志中心方案。从源码结构看,仓库还提供了 elastic-beats.md、elastic-logstash.md 等姊妹篇文档,可以按需深入。
【免费下载链接】linux-tutorial:penguin: Linux教程,主要内容:Linux 命令、Linux 系统运维、软件运维、精选常用Shell脚本项目地址: https://gitcode.com/GitHub_Trending/lin/linux-tutorial
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考