Kibana 是一款开源的数据分析和可视化平台,它是 Elastic Stack 成员之一,通俗的说就是 Elasticsearch 的web管理后台。可以使用 Kibana 对 Elasticsearch 索引中的数据进行搜索、查看、交互操作。您可以很方便的利用各种图表对数据进行多元化的分析和呈现。
安装
Elasticsearch安装请参考:ES安装说明
依赖JDK版本
JDK 1.8以上,没有安装jdk可以安装jdk,配置好Java环境变量。
通过压缩包安装
# 下载压缩包
curl -O https://artifacts.elastic.co/downloads/kibana/kibana-7.8.0-linux-x86_64.tar.gz
# 解压缩
tar -xzf kibana-7.8.0-darwin-x86_64.tar.gz
# 进入安装目录
cd kibana-7.8.0-darwin-x86_64/
# 启动kibana
./bin/kibana
启动kibana通过http://localhost:5601/直接访问即可。
也可以直接到官网下载安装包
https://www.elastic.co/cn/downloads/kibana
提示: kibana默认配置无须账号和密码即可登录,自动连接本地安装的Elasticsearch,如果需要配置账号需要安装X-pack插件,其他配置参考后续章节。
docker安装
docker pull docker.elastic.co/kibana/kibana:7.8.0
kibana镜像详细配置可以参考:https://hub.docker.com/_/kibana
准备测试数据
导入数据
为了方便测试kibana的功能,我们直接使用kibana官网提供的测试数据,直接通过kibana后台导入测试数据即可,操作如下。
步骤1:
步骤2:
步骤3:
测试数据说明
下面是一条航班数据样本,介绍下部分字段信息
{
"_index": "kibana_sample_data_flights", // 航班索引名称
"_type": "_doc",
"_id": "MEkjEHMBJlts2AvaxCbj",
"_version": 1,
"_score": null,
"_source": {
"FlightNum": "SQIY3O9", // 航班编号
"DestCountry": "GB", // 目标国家简称
"OriginWeather": "Clear", // 出发天气
"OriginCityName": "Osaka", // 出发城市
"AvgTicketPrice": 644.8724392684487, // 平均价格
"DistanceMiles": 5948.821557153384, // 距离,英里
"FlightDelay": true, // 航班是否延误
"DestWeather": "Clear", // 目的地天气
"Dest": "London Gatwick Airport", // 目的地
"FlightDelayType": "Carrier Delay", // 航班延误原因
"OriginCountry": "JP", // 出发国家
"timestamp": "2020-07-02T15:28:44", // 时间
"DestLocation": { // 目的地经纬度
"lat": "51.14810181",
"lon": "-0.190277994"
},
"OriginLocation": { // 出发地经纬度
"lat": "34.4272995",
"lon": "135.2440033"
},
"DestCityName": "London", // 目的地城市
...忽略....
}
}
查询数据
通过kibana的Discover功能查询索引数据,首先需要创建一个索引模式(index pattern),索引模式其实就是一个支持通配符的索引名表达式,用于支持搜索多个索引的数据,后续章节会介绍索引模式。
前面导入测试数据的时候,已经自动创建了一个kibana_sample_data_flights的索引模式,直接进入Discover页面,效果如下
kibana的discover支持Kibana Query Language (KQL)语法,就是一套简单的查询语法,通过KQL可以编写查询条件查询数据。
提示:Kibana Query Language (KQL)语法不等同于Elasticsearch的查询语法,是一套全新的东西,不过KQL比较简单,KQL语法介绍。
例如:
查询航班编号等于LVOO2CA的航班信息
匹配语法:
字段名: 搜索值
查询表达式:FlightNum : LVOO2CA
通过图表呈现数据
kibana支持丰富的图表组件,结合ES聚合查询语句可以生成各种图表。
我们点击第一个图表[Flights] Airline Carrier,进入看看
这是统计各个航空公司的航班信息占比,后续的章节详细介绍各种图表的配置方式。
调试ES查询语句
前面提到通过KQL语法在Discover页面查询数据,其实也可以使用ES查询语句直接查询数据,如果想通过ES查询语句查询数据,进入控制台(console)页面即可
Kibana 配置详解
默认安装,Kibana会自动连接本地安装的Elasticsearch,本节详细介绍Kibana的配置项。
配置文件路径:${kibana安装目录}/config/kibana.yml
Kibana使用Yaml格式描述配置项。
配置文件例子
默认情况下,配置项都使用井号(#)注释,可以手动删除注释符。
# 端口号
server.port: 5601
# 绑定地址
server.host: "localhost"
# ES服务地址
elasticsearch.hosts: ["http://localhost:9200"]
# ES账号 ES没有设置账号密码可以不配置。
#elasticsearch.username: "kibana"
# ES密码
#elasticsearch.password: "pass"
...忽略....
修改配置文件后,重启kibana即可。
配置参数说明
-
server.port: 默认值: 5601 Kibana 由后端服务器提供服务,该配置指定使用的端口号。
-
server.host: 默认值: "localhost" 指定后端服务器的主机地址。
-
server.basePath: 如果启用了代理,指定 Kibana 的路径,该配置项只影响 Kibana 生成的 URLs,转发请求到 Kibana 时代理会移除基础路径值,该配置项不能以斜杠 (/)结尾。
-
server.maxPayloadBytes: 默认值: 1048576 服务器请求的最大负载,单位字节。
-
server.name: 默认值: "您的主机名" Kibana 实例对外展示的名称。
-
server.defaultRoute: 默认值: "/app/kibana" Kibana 的默认路径,该配置项可改变 Kibana 的登录页面。
-
elasticsearch.url: 默认值: "http://localhost:9200" 用来处理所有查询的 Elasticsearch 实例的 URL 。
-
elasticsearch.preserveHost: 默认值: true 该设置项的值为 true 时,Kibana 使用 server.host 设定的主机名,该设置项的值为 false 时,Kibana 使用主机的主机名来连接 Kibana 实例。
-
kibana.index: 默认值: ".kibana" Kibana 使用 Elasticsearch 中的索引来存储保存的检索,可视化控件以及仪表板。如果没有索引,Kibana 会创建一个新的索引。
-
kibana.defaultAppId: 默认值: "discover" 默认加载的应用。
-
tilemap.url: Kibana 用来在 tile 地图可视化组件中展示地图服务的 URL。默认时,Kibana 从外部的元数据服务读取 url,用户也可以覆盖该参数,使用自己的 tile 地图服务。例如:"https://tiles.elastic.co/v2/default/{z}/{x}/{y}.png?elastic_tile_service_tos=agree&my_app_name=kibana"
-
tilemap.options.minZoom: 默认值: 1 最小缩放级别。
-
tilemap.options.maxZoom: 默认值: 10 最大缩放级别。
-
tilemap.options.attribution: 默认值: "© Elastic Tile Service" 地图属性字符串。
-
tilemap.options.subdomains: 服务使用的二级域名列表,用 {s} 指定二级域名的 URL 地址。
-
elasticsearch.username: 和 elasticsearch.password: Elasticsearch 设置了基本的权限认证,该配置项提供了用户名和密码,用于 Kibana 启动时维护索引。Kibana 用户仍需要 Elasticsearch 由 Kibana 服务端代理的认证。
-
server.ssl.enabled 默认值: "false" 对到浏览器端的请求启用 SSL,设为 true 时, server.ssl.certificate 和 server.ssl.key 也要设置。
-
server.ssl.certificate: 和 server.ssl.key: PEM 格式 SSL 证书和 SSL 密钥文件的路径。
-
server.ssl.keyPassphrase 解密私钥的口令,该设置项可选,因为密钥可能没有加密。
-
server.ssl.certificateAuthorities 可信任 PEM 编码的证书文件路径列表。
-
server.ssl.supportedProtocols 默认值: TLSv1、TLSv1.1、TLSv1.2 版本支持的协议,有效的协议类型: TLSv1 、 TLSv1.1 、 TLSv1.2 。
-
server.ssl.cipherSuites 默认值: ECDHE-RSA-AES128-GCM-SHA256, ECDHE-ECDSA-AES128-GCM-SHA256, ECDHE-RSA-AES256-GCM-SHA384, ECDHE-ECDSA-AES256-GCM-SHA384, DHE-RSA-AES128-GCM-SHA256, ECDHE-RSA-AES128-SHA256, DHE-RSA-AES128-SHA256, ECDHE-RSA-AES256-SHA384, DHE-RSA-AES256-SHA384, ECDHE-RSA-AES256-SHA256, DHE-RSA-AES256-SHA256, HIGH,!aNULL, !eNULL, !EXPORT, !DES, !RC4, !MD5, !PSK, !SRP, !CAMELLIA. 具体格式和有效参数可通过OpenSSL cipher list format documentation 获得。
-
elasticsearch.ssl.certificate: 和 elasticsearch.ssl.key: 可选配置项,提供 PEM格式 SSL 证书和密钥文件的路径。这些文件确保 Elasticsearch 后端使用同样的密钥文件。
-
elasticsearch.ssl.keyPassphrase 解密私钥的口令,该设置项可选,因为密钥可能没有加密。
-
elasticsearch.ssl.certificateAuthorities: 指定用于 Elasticsearch 实例的 PEM 证书文件路径。
-
elasticsearch.ssl.verificationMode: 默认值: full 控制证书的认证,可用的值有 none 、 certificate 、 full 。 full 执行主机名验证,certificate 不执行主机名验证。
-
elasticsearch.pingTimeout: 默认值: elasticsearch.requestTimeout setting 的值,等待 Elasticsearch 的响应时间。
-
elasticsearch.requestTimeout: 默认值: 30000 等待后端或 Elasticsearch 的响应时间,单位微秒,该值必须为正整数。
-
elasticsearch.requestHeadersWhitelist: 默认值: [ 'authorization' ] Kibana 客户端发送到 Elasticsearch 头体,发送 no 头体,设置该值为[]。
-
elasticsearch.customHeaders: 默认值: {} 发往 Elasticsearch的头体和值, 不管 elasticsearch.requestHeadersWhitelist 如何配置,任何自定义的头体不会被客户端头体覆盖。
-
elasticsearch.shardTimeout: 默认值: 0 Elasticsearch 等待分片响应时间,单位微秒,0即禁用。
-
elasticsearch.startupTimeout: 默认值: 5000 Kibana 启动时等待 Elasticsearch 的时间,单位微秒。
-
pid.file: 指定 Kibana 的进程 ID 文件的路径。
-
logging.dest: 默认值: stdout 指定 Kibana 日志输出的文件。
-
logging.silent: 默认值: false 该值设为 true 时,禁止所有日志输出。
-
logging.quiet: 默认值: false 该值设为 true 时,禁止除错误信息除外的所有日志输出。
-
logging.verbose 默认值: false 该值设为 true 时,记下所有事件包括系统使用信息和所有请求的日志。
-
ops.interval 默认值: 5000 设置系统和进程取样间隔,单位微妙,最小值100。
-
status.allowAnonymous 默认值: false 如果启用了权限,该项设置为 true 即允许所有非授权用户访问 Kibana 服务端 API 和状态页面。
-
cpu.cgroup.path.override 如果挂载点跟 /proc/self/cgroup 不一致,覆盖 cgroup cpu 路径。
-
cpuacct.cgroup.path.override 如果挂载点跟 /proc/self/cgroup 不一致,覆盖 cgroup cpuacct 路径。
-
console.enabled 默认值: true 设为 false 来禁用控制台,切换该值后服务端下次启动时会重新生成资源文件,因此会导致页面服务有点延迟。
-
elasticsearch.tribe.url: Elasticsearch tribe 实例的 URL,用于所有查询。
-
elasticsearch.tribe.username: 和 elasticsearch.tribe.password: Elasticsearch 设置了基本的权限认证,该配置项提供了用户名和密码,用于 Kibana 启动时维护索引。Kibana 用户仍需要 Elasticsearch 由 Kibana 服务端代理的认证。
-
elasticsearch.tribe.ssl.certificate: 和 elasticsearch.tribe.ssl.key: 可选配置项,提供 PEM 格式 SSL 证书和密钥文件的路径。这些文件确保 Elasticsearch 后端使用同样的密钥文件。
-
elasticsearch.tribe.ssl.keyPassphrase 解密私钥的口令,该设置项可选,因为密钥可能没有加密。
-
elasticsearch.tribe.ssl.certificateAuthorities: 指定用于 Elasticsearch tribe 实例的 PEM 证书文件路径。
-
elasticsearch.tribe.ssl.verificationMode: 默认值: full 控制证书的认证,可用的值有 none 、 certificate 、 full 。 full 执行主机名验证, certificate 不执行主机名验证。
-
elasticsearch.tribe.pingTimeout: 默认值: elasticsearch.tribe.requestTimeout setting 的值,等待 Elasticsearch 的响应时间。
-
elasticsearch.tribe.requestTimeout: Default: 30000 等待后端或 Elasticsearch 的响应时间,单位微秒,该值必须为正整数。
-
elasticsearch.tribe.requestHeadersWhitelist: 默认值: [ 'authorization' ] Kibana 发往 Elasticsearch 的客户端头体,发送 no 头体,设置该值为[]。
-
elasticsearch.tribe.customHeaders: 默认值: {} 发往 Elasticsearch的头体和值,不管 elasticsearch.tribe.requestHeadersWhitelist 如何配置,任何自定义的头体不会被客户端头体覆盖
Kibana Discover数据查询
Kibana Discover功能,主要用于查询Elasticsearch数据,通过Kibana Query Language (KQL)查询语法实现数据查询。
创建索引模式
索引模式介绍
要使用Discover的功能首先需要创建索引模式(Index patterns), 索引模式其实就是包含通配符(*)的索引名,我们需要查询ES的数据,首先得知道要查询的索引(index)名字,但是有时候,我们想查询一批索引的数据。
例如:
同时查询下面索引的数据
-
tizi365_log_202005
-
tizi365_log_202006
-
tizi365_log_202007
那么我们可以使用 tizi365_log* 作为索引模式,可以匹配以tizi365_log为前缀的所有索引名。
例子
我们依然使用前面导入的航班数据,下面介绍如何创建新的索引模式
步骤1:打开管理页面(Management)
步骤2:
因为前面的章节导入航班数据的时候,自动创建了一个名字叫kibana_sample_data_flights的航班数据索引,如果我们只想搜索kibana_sample_data_flights索引的数据,则不需要通配符,直接使用kibana_sample_data_flights这个名字作为索引模式即可,如下图
因为导入测试数据的时候,自动创建了同名的索引模式,为了演示,我们这里使用kibana_sample_data_flig* 作为索引模式(使用了通配符星号,代表匹配任意字符)。
步骤3:
配置时间过滤器,主要用于排序和作为默认的数据过滤条件。
到此为止索引模式已经创建好了,下面我切换到Discover页面看看。
Discover 功能介绍
进入Discover页面,默认展示的索引数据不一定是我们想看的数据,可以点击change切换到kibana_sample_data_flig* 索引模式,如下图
查询数据
我们可以通过KQL查询语法查询ES数据,可以把你感兴趣的字段名称和值当做搜索的条件,对于数字字段您可以使用比较运算符,例如大于(>)、小于(<)或等于(=)。您可以使用逻辑运算符 AND,OR 和 NOT 连接搜索条件。
提示:KQL查询语法和ES查询语法不一样,KQL是一种比ES查询语法更简单的语法规则,KQL语法介绍。
例如:
查询航班机票平均价格大于300且小于600的航班信息
AvgTicketPrice > 300 and AvgTicketPrice < 600
查询航班编号等于 1MAEYXT 的航班信息
FlightNum : 1MAEYXT
例子:
过滤字段
默认查询结果展示索引的所有字段,信息比较多,我们可以选择展示指定的文档字段。
Discover左侧可以直接选择需要展示的文档字段。
上图我们仅展示航班编号和平均票价
Kibana 查询语法
Kibana Query Language (KQL)查询语法是Kibana为了简化ES查询设计的一套简单查询语法,Kibana支持索引字段和语法补全,可以非常方便的查询数据。
等值匹配(equals)
用于查询字段值
语法:
字段名: 匹配值
例子:
FlightNum: 4H2KUBH
查询FlightNum字段匹配"4H2KUBH"字符串的文档。
等值匹配也支持通配符(*),通过通配符实现模糊搜索
例子:
FlightNum: 4H*BH
存在检测(exists)
匹配包含指定字段的文档。
语法:
字段名:*
例子:
FlightNum:*
匹配包含FlightNum字段的文档。
关系运算符
关系运算符只能用在数值和时间类型的字段
支持关系运算符如下:
-
<= 小于等于
-
>= 大于等于
-
< 小于
-
> 大于
例子:
AvgTicketPrice >= 300
逻辑运算符
支持逻辑运算符如下:
-
and
-
or
例子:
AvgTicketPrice > 300 and AvgTicketPrice < 600
AvgTicketPrice大于300且AvgTicketPrice小于600
Kibana 开发工具(Dev Tools)
Kibana开发工具(Dev Tools)主要提供了下面三种功能
-
调试Elasticsearch查询表达式
-
分析Elasticsearch查询表达式性能
-
调试grok
Console
通过Console(控制台)调试Elasticsearch查询表达式
例子:
Search Profiler
分析Elasticsearch查询表达式性能
例子:
Grok Debugger
主要用于支持在线调试Logstash grok表达式。
例子:
kibana 饼图 (Pie)
本章介绍使用Kibana的Visualize绘制饼图
效果图:
提示: 测试数据沿用之前章节导入的航班数据,如何导入测试数据,请参考Kibana快速入门。
步骤1
打开Kibana的Visualize页面
步骤2
选择饼图
步骤3
选择数据源,即选择Kibana创建的索引模式,这里选择航班数据。
步骤4
设置饼图指标聚合,这里我们统计航班信息总数,因此选择count,当然默认就是count,可以不用设置。
例如:切换至sum聚合
步骤5
设置饼图的桶聚合,这里我们按航空公司分组统计航班信息总数
设置桶聚合参数
运行结果如下
保存图表
kibana 折线图 (Line)
本章介绍使用Kibana的Visualize绘制折线图 (Line)
效果图:
提示: 测试数据沿用之前章节导入的航班数据,如何导入测试数据,请参考Kibana快速入门。
步骤1
打开Kibana的Visualize页面
步骤2
选择折线图
步骤3
选择数据源,即选择Kibana创建的索引模式,这里选择航班数据。
步骤4
设置折线图(Line)的Y轴的聚合指标,这里我们统计每天的航班信息总数,因此选择count,当然默认就是count,可以不用设置。
步骤5
设置折线图(Line)X轴,X轴主要由桶聚合实现分组,我们这里根据每天统计航班信息。
配置桶聚合参数
运行效果
kibana 柱状/条形图(Bar)
本章介绍使用Kibana的Visualize绘制柱状图也叫条形(Vertical Bar)图,Kibana支持垂直柱状图(Vertical Bar)和水平柱状图(Horizontal Bar)两种,这里介绍垂直柱状图的配置,水平柱状图配置类似。
垂直柱状图:
水平柱状图:
提示: 测试数据沿用之前章节导入的航班数据,如何导入测试数据,请参考Kibana快速入门。
步骤1
打开Kibana的Visualize页面
步骤2
选择Vertical Bar, 创建垂直柱状图
步骤3
选择数据源,即选择Kibana创建的索引模式,这里选择航班数据。
步骤4
设置Y轴的聚合指标,这里我们统计每天的航班信息总数,因此选择count,当然默认就是count,可以不用设置。
步骤5
设置柱状图X轴,X轴主要由桶聚合实现分组,我们这里根据每天统计航班信息。
配置垂直柱状图x轴桶聚合参数
运行效果