沉梦手记 沉梦手记
首页
  • 基础篇
  • 集合篇
  • 并发篇
  • JVM
  • 新特性
  • 计算机网络
  • 操作系统
  • 数据结构与算法
  • 基础篇
  • MySql
  • Redis
  • 达梦数据库
  • Spring
  • SpringBoot
  • Mybatis
  • Shiro
  • 设计须知
  • UML画图
  • 权限校验
  • 设计模式
  • API网关
  • 网络通信
  • 消息队列
  • SpringCloud
  • 分布式事务
  • 云存储
  • 搜索引擎
  • 音视频处理
  • Linux 与容器化运维
  • 开发工具篇
  • 工具库篇
  • 开发技巧篇
  • 工具类系列
  • 随笔
  • 前端环境搭建
  • HTML与CSS
  • JS学习
  • Axios入门
  • Vue Router入门
  • Pinia入门
  • Vue3入门
  • Vue3进阶
  • 黑马Vue3
  • 脚手架搭建
  • 瑞吉外卖
  • 黑马点评
  • vue-blog
  • 沉梦接口开放平台
  • 用户中心
  • 聚合搜索平台
  • 仿12306项目
  • 壁纸小程序项目
  • RuoYi-Vue
  • 博客搭建
  • 网站收藏箱
  • 断墨寻径摘录
  • 费曼学习法
Github (opens new window)

沉梦听雨

时间是最好的浸渍剂,而沉淀是最好的提纯器🚀
首页
  • 基础篇
  • 集合篇
  • 并发篇
  • JVM
  • 新特性
  • 计算机网络
  • 操作系统
  • 数据结构与算法
  • 基础篇
  • MySql
  • Redis
  • 达梦数据库
  • Spring
  • SpringBoot
  • Mybatis
  • Shiro
  • 设计须知
  • UML画图
  • 权限校验
  • 设计模式
  • API网关
  • 网络通信
  • 消息队列
  • SpringCloud
  • 分布式事务
  • 云存储
  • 搜索引擎
  • 音视频处理
  • Linux 与容器化运维
  • 开发工具篇
  • 工具库篇
  • 开发技巧篇
  • 工具类系列
  • 随笔
  • 前端环境搭建
  • HTML与CSS
  • JS学习
  • Axios入门
  • Vue Router入门
  • Pinia入门
  • Vue3入门
  • Vue3进阶
  • 黑马Vue3
  • 脚手架搭建
  • 瑞吉外卖
  • 黑马点评
  • vue-blog
  • 沉梦接口开放平台
  • 用户中心
  • 聚合搜索平台
  • 仿12306项目
  • 壁纸小程序项目
  • RuoYi-Vue
  • 博客搭建
  • 网站收藏箱
  • 断墨寻径摘录
  • 费曼学习法
Github (opens new window)
  • API网关

  • 网络通信

  • 消息队列

  • Spring Cloud

  • 分布式事务

  • 云存储

  • 搜索引擎

    • Elasticsearch入门
    • Elasticsearch之DSL篇
    • Elasticsearch之HTTP篇
    • Kibana使用指南
      • 核心功能模块
      • Discover:日志浏览与搜索
        • 基本操作流程
        • 时间范围选择
        • 字段过滤
        • 列定制
        • 自动刷新
        • 保存与加载
      • KQL 查询语法
        • 精准匹配
        • 模糊匹配
        • 逻辑组合
        • 范围查询
        • 字段存在性
        • 转义特殊字符
        • KQL vs Lucene 语法对比
      • 字段类型与查询方式
        • 类型对照表
        • 查看字段类型
        • 方法一:Dev Tools Console
        • 方法二:Kibana Discover
        • 方法三:Stack Management
        • 常见问题:字段不能模糊搜索
      • Lens:可视化图表
        • 常用图表类型
        • 创建 QPS 趋势图
        • 创建响应时间 P95 趋势图
      • Dashboard:监控面板
        • 创建 Dashboard
        • 实用技巧
      • Dev Tools:ES 控制台
        • 查询类命令
        • 排障类命令
        • 权限问题
      • 索引与索引模板
        • 按天分索引
        • 索引模板的作用
        • 查看现有配置
      • 常见排障场景
        • 场景一:通过 traceId 追踪完整调用链
        • 场景二:查找某个第三方接口的调用记录
        • 场景三:查找错误日志
        • 场景四:统计某接口的响应时间分布
        • 场景五:确认某服务的 QPS
      • 学习参考
    • Lucene查询语法
  • 音视频处理

  • Linux 与容器化运维

  • 微服务
  • 搜索引擎
沉梦听雨
2026-07-31
目录

Kibana使用指南

# Kibana 使用指南

Kibana 是 Elastic Stack 的可视化平台,用于搜索、查看和分析 Elasticsearch 中存储的数据。


# 核心功能模块

模块 用途 典型场景
Discover 浏览和搜索原始文档 日常排障、查看单条日志
Lens 拖拽式可视化图表 QPS 统计、响应时间分布
Dashboard 聚合多个可视化面板 服务监控大盘
Dev Tools 直接操作 ES 的控制台 调试 DSL、查看 mapping
Stack Management 管理索引模式、保存对象 配置 Index Pattern
Alerting 设置告警规则 错误率超阈值告警

# Discover:日志浏览与搜索

Discover 是日常排障最常用的模块,用于浏览原始文档和执行即席查询。

# 基本操作流程

选择 Index Pattern → 设置时间范围 → 输入 KQL 查询 → 查看结果 → 添加字段列 → 保存查询
1

# 时间范围选择

右上角时间选择器支持三种模式:

模式 说明 示例
快速选择 预设常用时间范围 最近 15 分钟 / 1 小时 / 24 小时 / 7 天
绝对时间 精确指定起止时间 2026-07-31 14:00:00 ~ 2026-07-31 15:00:00
相对时间 相对于当前时间 现在 - 30 分钟

排障建议:先缩小时间范围再查询,避免全量扫描导致页面卡顿。

# 字段过滤

左侧字段列表提供快捷过滤:

  • 点击字段名 → +:过滤出该字段存在的文档
  • 点击字段值 → +:按该值过滤
  • 点击字段值 → -:排除该值

顶部 Filter 栏支持更精细的操作:

  • 编辑:修改过滤条件
  • 临时禁用:点击开关图标,不删除但暂时不生效
  • 反转:将 is 变为 is not
  • Pin:跨页面切换时保留该过滤条件

# 列定制

  1. 左侧字段点击 + 添加到表格列
  2. 表格列可拖拽排序
  3. 点击列头可排序(仅限数值和日期类型)
  4. 配置完成后可保存为 Saved Search

# 自动刷新

时间选择器旁可设置 Auto-refresh:

  • 10s / 30s / 1m / 5m / 15m
  • 适合实时监控场景

# 保存与加载

操作 说明
Save Query 保存当前查询条件,下次直接加载
Saved Search 保存查询 + 列配置,可在 Dashboard 中引用
Open 加载已保存的查询

# KQL 查询语法

KQL(Kibana Query Language)是 Kibana 查询栏的默认语法,专为日志查询设计,比 Lucene 语法更简洁。

# 精准匹配

# 字段值完全匹配
service.name: "user-service"

# 多值匹配(OR 语义)
service.name: ("user-service", "order-service")

# 数值匹配
response.code: 200

# 布尔值
is_error: true
1
2
3
4
5
6
7
8
9
10
11

# 模糊匹配

# 通配符匹配(* 匹配任意字符,? 匹配单个字符)
uri: *ehome-picture*
message: error?timeout

# 前缀匹配
uri: "http://vnet-vpaas*"

# 模糊搜索(~ 后跟编辑距离,允许 N 个字符差异)
message: "error~1"
message: "timeout~2"
1
2
3
4
5
6
7
8
9
10

# 逻辑组合

# AND
service.name: "user-service" and response.code: 200

# OR
service.name: "user-service" or service.name: "order-service"

# NOT
not service.name: "user-service"

# 组合(括号优先级最高)
(service.name: "user-service" or service.name: "order-service") and response.code: 200
1
2
3
4
5
6
7
8
9
10
11

# 范围查询

# 数值范围(闭区间)
response.time: [100 TO 500]

# 时间范围
@timestamp: ["2026-07-31T00:00:00" TO "2026-07-31T23:59:59"]

# 开放范围
response.time: [100 TO *]
response.time: [* TO 500]
1
2
3
4
5
6
7
8
9

# 字段存在性

# 字段存在
uri: *

# 字段不存在
not uri: *
1
2
3
4
5

# 转义特殊字符

以下字符在 KQL 中有特殊含义,需用 \ 转义:

+ - = && || > < ! ( ) { } [ ] ^ " ~ * ? : \ /
1

示例:

message: "error\(timeout\)"
uri: "https\:\/\/example\.com"
1
2

# KQL vs Lucene 语法对比

特性 KQL Lucene
字段匹配 field: value field: value
多值 OR field: ("a", "b") field: (a OR b)
逻辑运算 and / or / not AND / OR / NOT
范围查询 field: [1 TO 10] field:[1 TO 10]
嵌套查询 支持嵌套对象 不支持
默认行为 不指定字段时搜索所有字段 不指定字段时搜索 _all
可读性 更高 较低

切换方式:Stack Management → Advanced Settings → query:language 可切换 KQL / Lucene。


# 字段类型与查询方式

能否模糊匹配取决于字段在 ES 中的 mapping 类型。

# 类型对照表

类型 支持的查询方式 能否模糊匹配 典型场景
text 分词后匹配(match) 可以 日志内容、URL、描述
keyword 精确匹配(term) 只能精准 状态码、服务名、IP
text + keyword 子字段 两者都支持 uri 模糊,uri.keyword 精准 多用途字段
long / integer 数值范围 不支持 响应时间、状态码
date 时间范围 不支持 @timestamp
boolean true / false 不支持 是否错误
ip IP / CIDR 范围 不支持 客户端 IP

# 查看字段类型

# 方法一:Dev Tools Console

# 查看某个字段的 mapping
GET ehome-vnet-vpaas-media-accessreq-*/_mapping/field/uri

# 查看完整 mapping
GET ehome-vnet-vpaas-media-accessreq-*/_mapping
1
2
3
4
5

返回示例:

{
  "ehome-vnet-vpaas-media-accessreq-2026.07.31": {
    "mappings": {
      "properties": {
        "uri": {
          "type": "text",
          "fields": {
            "keyword": {
              "type": "keyword",
              "ignore_above": 256
            }
          }
        }
      }
    }
  }
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17

# 方法二:Kibana Discover

  1. 进入 Kibana → Discover
  2. 选择对应 Index Pattern
  3. 左侧字段列表中,字段名旁边的图标表示类型:
图标 类型 说明
t text 支持模糊匹配
t keyword 仅精准匹配
# number 数值类型
日历 date 日期类型
false boolean 布尔类型

# 方法三:Stack Management

Stack Management → Index Management → 找到索引 → Mappings 标签页

# 常见问题:字段不能模糊搜索

原因:字段被映射为 keyword 类型,只能精准匹配。

解决方案:

  1. 临时方案:在 KQL 中用通配符

    uri.keyword: *ehome-picture*
    
    1

    注意:keyword 类型用通配符性能较差,仅适合临时排查。

  2. 根本方案:修改 Index Template,将字段改为 text + keyword

    PUT _index_template/ehome-vnet-vpaas-media-accessreq-template
    {
      "index_patterns": ["ehome-vnet-vpaas-media-accessreq-*"],
      "template": {
        "mappings": {
          "properties": {
            "uri": {
              "type": "text",
              "fields": {
                "keyword": {
                  "type": "keyword",
                  "ignore_above": 256
                }
              }
            }
          }
        }
      }
    }
    
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19

    注意:修改模板只对新创建的索引生效,旧索引需要 reindex。


# Lens:可视化图表

Lens 是 Kibana 的拖拽式可视化工具,无需写代码即可创建图表。

# 常用图表类型

图表类型 适用场景 X 轴 Y 轴
折线图 时间序列趋势 @timestamp Count / Avg
柱状图 分类对比 keyword 字段 Count / Sum
饼图 占比分布 keyword 字段 Count
数据表 明细列表 分组字段 多个指标
指标卡 单值展示 - Count / Avg

# 创建 QPS 趋势图

  1. 进入 Lens:主菜单 → Visualize Library → Create visualization → Lens
  2. 选择数据源:左侧选择 Index Pattern
  3. 设置 Y 轴:拖入 Records(Count),代表日志条数
  4. 设置 X 轴:拖入 @timestamp,设为 Date Histogram,间隔 1s
  5. 添加过滤:service.name is your-service
  6. 保存:点击 Save,命名后可在 Dashboard 中引用

# 创建响应时间 P95 趋势图

  1. Y 轴:response.time,聚合方式选 Percentile,值为 95
  2. X 轴:@timestamp,间隔 1m
  3. 过滤:uri: "/api/v1/login"

# Dashboard:监控面板

Dashboard 将多个可视化组件聚合到一个页面,适合构建监控大盘。

# 创建 Dashboard

  1. 主菜单 → Dashboard → Create
  2. 点击 Add from library,选择已保存的 Lens 图表
  3. 拖拽调整面板布局和大小
  4. 顶部可添加全局过滤器,对所有面板生效
  5. 保存 Dashboard

# 实用技巧

  • 时间范围联动:右上角时间选择器对所有面板生效
  • 面板钻取:点击图表中的数据点可查看明细
  • 自动刷新:设置 Auto-refresh 实现实时监控
  • 分享:可生成分享链接或嵌入 iframe

# Dev Tools:ES 控制台

Dev Tools 提供 Console 直接操作 ES,是排障和调试的利器。

# 查询类命令

// 查看所有索引
GET _cat/indices?v

// 查看索引 mapping
GET ehome-vnet-vpaas-media-accessreq-*/_mapping

// 查看索引 settings
GET ehome-vnet-vpaas-media-accessreq-*/_settings

// 搜索文档
GET ehome-vnet-vpaas-media-accessreq-*/_search
{
  "query": {
    "match": {
      "uri": "ehome-picture"
    }
  },
  "size": 10,
  "sort": [
    { "@timestamp": "desc" }
  ]
}

// 按条件计数
GET ehome-vnet-vpaas-media-accessreq-*/_count
{
  "query": {
    "term": {
      "service.name.keyword": "user-service"
    }
  }
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32

# 排障类命令

// 集群健康状态
GET _cluster/health

// 节点信息
GET _cat/nodes?v

// 分片状态
GET _cat/shards/ehome-vnet-vpaas-media-accessreq-*?v

// 索引大小和文档数
GET _cat/indices/ehome-vnet-vpaas-media-accessreq-*?v&h=index,docs.count,store.size

// ILM 策略
GET _ilm/policy

// 索引模板
GET _index_template/*accessreq*
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17

# 权限问题

执行命令返回 403 时:

{
  "error": {
    "type": "security_exception",
    "reason": "no permissions for [indices:monitor/settings/get] and User [name=xxx]"
  },
  "status": 403
}
1
2
3
4
5
6
7

需要联系 ES 管理员添加对应权限。


# 索引与索引模板

# 按天分索引

日志数据通常按天滚动创建索引:

ehome-vnet-vpaas-media-accessreq-2026.07.31
ehome-vnet-vpaas-media-accessreq-2026.07.30
ehome-vnet-vpaas-media-accessreq-2026.07.29
1
2
3

通配符查询:

写法 含义
accessreq-2026.07.31 只查当天一个索引
accessreq-* 查所有日期的索引
accessreq-2026.07.* 查 2026 年 7 月所有索引

# 索引模板的作用

新索引创建时,ES 自动匹配模板,应用预定义的 mapping 和 settings:

日志产生 → Filebeat/Logstash 采集
  → 索引名带日期后缀(accessreq-2026.07.31)
  → ES 匹配 index_patterns: "accessreq-*"
  → 自动套用 Index Template 的 mapping
  → 新索引创建完成,数据写入
1
2
3
4
5

# 查看现有配置

// 列出所有匹配的索引
GET _cat/indices/ehome-vnet-vpaas-media-accessreq-*?v

// 查看索引模板
GET _index_template/*accessreq*

// 旧版模板(ES 7.x 之前)
GET _template/*accessreq*
1
2
3
4
5
6
7
8

# 常见排障场景

# 场景一:通过 traceId 追踪完整调用链

traceId: "d8e3e6f295764701a0b0488b2782c926"
1

一个 traceId 可跨多个索引(accessReq、remoteReq、stdout),在 Discover 中切换 Index Pattern 即可看到不同维度的日志。

# 场景二:查找某个第三方接口的调用记录

# remoteReq.log 中模糊匹配 URL
url: *ehome-picture*

# accessReq.log 中精准匹配 URI(keyword 类型)
uri.keyword: "https://ehome-picture.ctseelink.cn"
1
2
3
4
5

# 场景三:查找错误日志

# 按错误码过滤
response.code: 500

# 按日志级别过滤
level: "ERROR"

# 按关键词模糊搜索
message: *timeout*

# 组合查询
level: "ERROR" and message: *timeout*
1
2
3
4
5
6
7
8
9
10
11

# 场景四:统计某接口的响应时间分布

  1. 进入 Lens → 选择 Index Pattern
  2. X 轴:@timestamp(Date Histogram,间隔 1 分钟)
  3. Y 轴:response.time(Percentile,P95)
  4. 过滤:uri: "/api/v1/login"

# 场景五:确认某服务的 QPS

  1. 进入 Lens → 选择 Index Pattern
  2. Y 轴:Records(Count)
  3. X 轴:@timestamp(Date Histogram,间隔 1s)
  4. 过滤:service.name is your-service

QPS 的定义:这里统计的是"日志 QPS",即每秒产生的日志条数。它通常可以近似反映服务的请求 QPS,但两者并不完全相等(例如,一个请求可能产生多条日志,或者某些请求没有日志)。要获得最精确的请求 QPS,最好在应用的网关或入口层进行监控。


# 学习参考

  • Kibana 官方文档 (opens new window)
  • KQL 语法参考 (opens new window)
  • Lens 文档 (opens new window)
  • Dev Tools Console 文档 (opens new window)
上次更新: 2026/7/31 17:22:42
Elasticsearch之HTTP篇
Lucene查询语法

← Elasticsearch之HTTP篇 Lucene查询语法→

Theme by Vdoing | Copyright © 2023-2026 沉梦听雨 | MIT License
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式