Kibana 是为 Elasticsearch设计的开源分析和可视化平台。你可以使用 Kibana 来搜索,查看存储在 Elasticsearch 索引中的数据并与之交互,容易实现高级的数据分析和可视化,以图标的形式展现出来。在生产环境中,Kibana的仪表盘功能能够帮助运维人员快速发现系统异常和性能瓶颈,为故障排查和性能优化提供有力支持。同时,Kibana的数据可视化功能还能够为业务人员提供直观的数据展示和分析工具,帮助他们更好地了解业务情况。

参考文章:

k8s部署ELK系列五:集成Kibana实现日志可视化

ELK总结——第四篇Kibana的简介

ELK日志文件分析系统——K(Kibana)

Kibana

简介

Kibana是一个基于Web的数据可视化工具,它能够与Elasticsearch无缝集成,通过友好的用户界面为用户提供实时数据分析、监控和可视化等功能。Kibana不仅提供了丰富的图表类型,如柱状图、折线图、饼图等,还支持自定义仪表盘和视图,让用户能够根据自己的需求快速创建和展示数据。

使用场景

  • 实时监控通过 histogram 面板,配合不同条件的多个 queries 可以对一个事件走很多个维度组合出不同的时间序列走势。时间序列数据是最常见的监控报警了。

  • 问题分析关于 elk 的用途,可参照其对应的商业产品 splunk 的场景:使用 Splunk 的意义在于使信息收集和处理智能化

    其操作智能化表现在:

    • 搜索通过下钻数据排查问题,通过分析根本原因来解决问题;

    • 实时可见性可以将对系统的检测和警报结合在一起,便于跟踪 SLA 和性能问题;

    • 历史分析可以从中找出趋势和历史模式,行为基线和阈值,生成一致性报告。

关键特性

特性 说明
多维度分析 支持时间序列、地理空间、文本等多类型数据交叉分析
实时仪表盘 可组合多个可视化组件,自动刷新数据(默认15秒间隔)
Dev Tools 内置Elasticsearch查询调试界面,支持DSL语法验证
机器学习集成 与Elastic ML模块联动,实现异常检测(如流量突增预警)

应用意义‌

  • 降低数据分析门槛‌:通过拖拽界面替代SQL/DSL编写,使非技术人员快速生成报表
  • 统一监控平台‌:整合日志(Nginx)、指标(Prometheus)等多源数据,实现全栈可观测性
  • ‌合规审计支持‌:记录用户操作日志(如查询历史),满足GDPR等法规要求

Linux环境下安装Kibana

安装Kibana非常简单,只需按照官方文档的指引进行安装和配置即可。在配置Kibana时,需要指定Elasticsearch的地址和端口,以便Kibana能够与Elasticsearch进行通信。此处 Kibana 与 Elasticsearch 安装在同一主机,安装基本步骤如下:

环境准备

  1. 安装Java依赖(JRE 11+)

    1
    2
    sudo apt update && sudo apt install openjdk-11-jre -y     # 更新包列表并安装OpenJDK JRE
    java -version # 验证Java版本,输出需包含"11.x.x"
  2. 创建专用用户(可选但推荐)

    1
    2
    sudo useradd kibana_user     # 新建用户避免root权限风险
    sudo passwd kibana_user # 设置用户密码

下载与安装

  1. 手动下载(通用方式)

    1
    2
    3
    4
    5
    6
    7
    8
    wget https://artifacts.elastic.co/downloads/kibana/kibana-8.13.4-linux-x86_64.tar.gz     # 下载二进制包
    tar -zxvf kibana-8.13.4-linux-x86_64.tar.gz -C /opt/ # 解压到/opt目录
    sudo chown -R kibana_user:kibana_user /opt/kibana-8.13.4 # 赋权给专用用户

    # 命令解析
    wget # 从Elastic官网下载指定版本Kibana。
    tar -zxvf # 解压压缩包(-z解压gzip,-x解包,-v显示过程,-f指定文件)。
    chown -R # 递归修改目录所有权,确保Kibana进程权限合规。
  2. APT安装(Debian/Ubuntu推荐)

    1
    2
    3
    4
    5
    6
    7
    8
    wget -qO - https://artifacts.elastic.co/GPG-KEY-elasticsearch | sudo apt-key add -  # 添加Elastic GPG密钥
    echo "deb https://artifacts.elastic.co/packages/8.x/apt stable main" | sudo tee /etc/apt/sources.list.d/elastic.list # 配置APT仓库
    sudo apt update && sudo apt install kibana # 安装Kibana并自动注册服务

    # 命令解析
    apt-key add # 导入密钥以验证软件包真实性
    tee /etc/apt/sources.list.d/elastic.list # 写入仓库配置到独立文件
    apt install kibana # 自动安装并配置systemd服务
  3. 配置文件解析

    编辑 /etc/kibana/kibana.yml(APT安装)或 /opt/kibana-8.13.4/config/kibana.yml(手动安装):

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    server.port: 5601                                         # 监听端口,默认5601
    server.host: "0.0.0.0" # 允许所有IP访问(生产环境可指定内网IP)
    elasticsearch.hosts: ["http://192.168.98.201:9200"] # Elasticsearch集群地址
    i18n.locale: "zh-CN" # 设置为中文界面
    logging.dest: /var/log/kibana.log # 自定义日志路径

    # 关键参数
    server.host: "0.0.0.0" # 开放网络访问(默认localhost仅本地访问)。
    elasticsearch.hosts:["ip:port"] # 必须指向已部署的Elasticsearch节点URL。
    i18n.locale: "zh-CN" # 本地化支持,提升中文用户体验。
  4. 服务管理与启动

    • 启动服务

      1
      2
      sudo systemctl start kibana             # 启动Kibana服务
      sudo systemctl enable kibana # 设置开机自启
    • 监控状态与日志

      1
      2
      sudo systemctl status kibana             # 检查运行状态(输出"Active: active"表示成功)
      journalctl -u kibana -f # 实时查看日志(过滤"Server running"确认启动)
  5. 部署验证
    1. 访问Kibana Web界面‌:

      浏览器打开 http://<服务器IP>:5601,显示欢迎页即部署成功

      浏览器打开 http://<服务器IP>:5601/api/status返回JSON格式状态信息

    2. 检查Elasticsearch连接‌:在Kibana的 ‌Dev Tools‌ 中输入 GET /,返回ES集群信息表示通信正常。

  6. 生产调优建议
    • 资源隔离‌: 使用专用用户运行Kibana,避免权限冲突。
    • 配置热重载‌: 添加 --config.reload.automatic 启动参数,支持动态加载配置变更。
    • 安全加固‌: 启用SSL加密(参考 server.ssl 配置)及防火墙规则限制访问IP。

Kibana的基本使用

1.创建索引模式

左侧菜单栏找到并进入Management,点击“Create index pattern”按钮来添加索引模式。第一个索引模式自动配置为默认的索引默认,以后当你有多个索引模式的时候,你就可以选择将哪一个设为默认。(提示:Management > Index Patterns)

2.用Discover交互式探索数据

  • 可以访问与所选择的索引默认匹配的每个索引中的每个文档,如果你选择的索引模式配置了time字段,则文档随时间的分布将显示在页面顶部的直方图中

  • 可以提交查询请求,过滤搜索结构,并查看文档数据,可以看到匹配查询请求的文档数量,以及字段值统计信息

    • 提交一个查询请求时,直方图、文档表和字段列表都会更新,以反映搜索结果。命中(匹配到的文档)总数会显示在工具栏中。文档表格中显示了前500个命中。默认按时间倒序排列,首先显示最新的文档。可以通过点击Time列来逆转排序顺序。
  • 设置时间过滤:Discover > 顶端导航栏右侧 Last 15 minutes > Time Range > Absolute >选择时间

  • 搜索数据:可以在搜索框中输入查询条件来查询当前索引模式匹配的索引。查询时,使用Kibana标准的查询语言(基于Lucene的查询语法)或者完全基于JSON的Elasticsearch查询语言DSL。Kibana查询语言可以使用自动完成和简化的查询语法作为实验特性,可以在查询栏的**选项**菜单下进行选择。

  • 查看文档数据:Table 列是控制列表显示的字段,在查看文档数据的时候点那个像书一样的小图标

  • 查看字段数据统计:看左侧列表

  • 查看文档上下文:View surrounding documents

3.Lucene查询语法

Kibana查询语言基于Lucene查询语法。下面是一些提示:

  1. 执行一个文本搜索,可以简单的输入一个文本字符串。例如,如果想搜索web服务器的日志,可以输入关键字”safari“,这样就可以搜索到所有有关”safari”的字段
  2. 搜索一个特定字段的特定值,可以用字段的名称作为前缀。例如,输入”status:200“,将会找到所有status字段的值是200的文档
  3. 搜索一个范围值,可以用括号范围语法,**[START_VALUE TO END_VALUE]。例如,为了找到状态码是4xx的文档,可以输入status:[400 TO 499]**
  4. 指定更改复杂的查询条件,可以用布尔操作符 AND , OR , 和 NOT。例如,为了找到状态码是4xx并且extension字段是php或者html的文档,可以输入status:[400 TO 499] AND (extension:php OR extension:html)

基本命令

服务管理命令

1
2
3
bin/kibana --help             # 查看所有支持参数
# 作用:显示Kibana支持的全部命令行参数及简要说明
# 关键输出:包括-e(环境变量)、-c(配置文件路径)等参数说明

启动参数解析

1
2
3
4
5
6
7
8
9
10
11
bin/kibana \
--host=0.0.0.0 \ # 监听所有网络接口
--port=5601 \ # 指定服务端口(默认5601)
--elasticsearch.hosts=http://es-node:9200 \ # 强制指定ES集群地址
--logging.json=true # 日志输出为JSON格式(便于ELK采集)

# 逐行解释
--host=0.0.0.0 # 允许远程访问(默认localhost仅本地访问)
--port # 覆盖kibana.yml中的端口配置
--elasticsearch.hosts # 运行时动态指定ES连接地址
--logging.json # 结构化日志输出,适合日志分析系统处理

插件管理命令

1
2
3
4
5
6
7
bin/kibana-plugin list                                 # 查看已安装插件
bin/kibana-plugin install x-pack # 安装X-Pack安全插件
bin/kibana-plugin remove timeline # 删除指定插件

# 关键参数
install # 支持本地ZIP包或官方插件名称
remove # 卸载后需重启Kibana生效

调试与维护命令

1
2
3
4
5
6
bin/kibana --optimize                                 # 前端资源预编译(生产环境必执行)
bin/kibana --no-watch # 禁用配置文件热重载(调试用)

# 特殊场景
--optimize # 提升页面加载速度,部署后首次运行需执行
--no-watch # 排查配置问题时关闭自动重载

系统集成命令

1
2
3
4
5
curl -XGET 'localhost:5601/api/status'                 # 检查服务健康状态

# 返回字段
status.overall.state # green表示服务正常
metrics.elasticsearch.client.total_active_sockets # ES连接数

生产环境完整示例

1
2
3
4
5
bin/kibana \
--config=/etc/kibana/prod.yml \ # 指定配置文件
--pid.file=/var/run/kibana.pid \ # 记录进程ID
--logging.dest=/var/log/kibana-prod.log \ # 日志重定向
--plugin-path=plugins/alerting # 加载自定义插件目录

参数组合意义‌:

  1. 使用独立配置文件避免冲突
  2. 通过PID文件便于服务管理
  3. 集中日志输出到指定文件
  4. 扩展自定义告警插件功能

与Elasticsearch联调命令

1
2
3
# 在Kibana Dev Tools中执行 
GET _cat/indices?v # 验证ES索引可访问性
POST _sql?format=json {"query":"SELECT * FROM logs LIMIT 10"} # 测试SQL查询翻译

通过合理组合这些命令,可实现从开发调试到生产部署的全生命周期管理。建议配合nohup或systemd实现后台运行。


Metricbeat

Windows下安装启动Kibana

安装Kibana非常简单,只需按照官方文档的指引进行安装和配置即可。在配置Kibana时,需要指定Elasticsearch的地址和端口,以便Kibana能够与Elasticsearch进行通信。安装基本步骤如下:

  1. 下载Kibana,下载链接 :Download Kibana Free | Get Started Now | Elastic。注意需要保证其版本号与Elasticsearch和Kibana两者的版本号一样,小到小版本号。
  2. 下载后解压。找到kibana/bin目录下面的kibana.bat文件,双击执行它,启动成功后,可在浏览器访问 http://localhost:5601/。http://localhost:5601/status 可以访问Kibana服务器状态页面。
  3. 注意:kibana数据从Elasticsearch而来,在启动kibana需要先启动Elasticsearch

Metricbeat进行Logstash运行状态的监控

参考原文链接:https://zhangphil.blog.csdn.net/article/details/126183984

metricbeat监控logstash运行状态上报Elasticsearch后Kibana可视化查看:

  1. 首先假定已经启动logstash,Elasticsearch,Kibana。并且已经安装部署metricbeat,本文均基于8.3.3版本。

    1. logstash配置output输出到Elasticsearch,启动;
    2. Elasticsearch启动;
    3. Kibana启动
  2. 启用logstash-xpack 模块:

    1
    metricbeat modules enable logstash-xpack

    此时会在modules.d文件目录(metricbeat/metricbeat-8.3.3/modules.d)下多出一个logstash-xpack.yml文件:

    1
    2
    3
    4
    5
    6
    - module: logstash
    xpack.enabled: true
    period: 10s
    hosts: ["localhost:9600"]
    #username: "user"
    #password: "secret"
  3. 命令行启动 Metricbeat:

    1
    metricbeat -e
  4. 在浏览器打开http://localhost:5601/

    找到stack monitoring点进去,页面会有提示:xpack.monitoring.collection.enabled is set to false ,不管它,直接点进蓝色按钮 Turn on monitoring 即可。

  5. 看到了监控界面,选择logstash版面,这里包括所有正在监控的logstash节点:总览,节点详情统计图表,数据上报流水线,均可点进去查看。

Metricbeat发送监控数据到远程Elasticsearch

参考原文链接:https://zhangphil.blog.csdn.net/article/details/126231371

默认metricbeat发送数据到同一台机器的9200端口。

如果metricbeat与Elasticsearch不在同一台机器(不同IP地址),需要在metricbeat.yml文件里面配置Elasticsearch的主机地址端口:

1
2
3
output.elasticsearch:
# Array of hosts to connect to.
hosts:["localhost:9200"]

如果kibana和Elasticsearch在同一台机器上,不必再配置metricbeat到kibana的地址。

如果Elasticsearch和kibana不在同一台机器上,那么需要在metricbeat.yml里面配置到kibana的主机端口地址:

1
2
setup.kibana:
# Kibana Host

Elasticsearch端口配置

Elasticsearch默认的http访问端口是9200,若启动时9200端口已被占用,Elasticsearch会自动占用9201端口。如果需要指定一个特别端口,只需要把config/elasticsearch.yml中的http.port注释去掉,重新定义一个端口数值即可:

1
# http.port:9200

kibana连接Elasticsearch主机端口配置

Elasticsearch与Kibana在同一台主机,且Elasticsearch的默认启动端口配置不变(9200)时,Kibana启动后会自动识别和寻址9200端口上的Elasticsearch。

但若Elasticsearch端口修改了,需要在Kibana写明最新的Elasticsearch端口,修改Kibana的配置文件config/kibana.yml:

1
# elasticsearch.hosts:["http://localhost:9200"]

Kibana实战部署

在 Kubernetes 集群中,应用服务的日志对故障排查和性能分析至关重要。为解决不便于集中管理和持久化存储的问题,可采用目前主流日志分析解决方案【ELK(Elasticsearch + Logstash + Kibana)】,其中 Kibana 实现日志可视化展示,是日志分析中不可或缺的工具。

创建Namespace(elk-namespace.yaml)

1
2
3
4
5
# 创建一个新的命名空间,用于部署 ELK 相关的资源
apiVersion: v1
kind: Namespace
metadata:
name: elk

创建Service(kibana-service.yaml)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
# 创建一个 Kubernetes 服务(Service),以便暴露 Kibana Web 界面
apiVersion: v1
kind: Service
metadata:
name: kibana
namespace: elk
spec:
selector:
app: kibana
type: NodePort
ports:
- port: 5601
targetPort: 5601
nodePort: 30601

创建ConfigMap(kibana-configmap.yaml)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
# 创建一个 ConfigMap 来存储 Kibana 配置文件。配置项包括 Elasticsearch 的地址、Kibana 的日志设置以及访问设置
apiVersion: v1
kind: ConfigMap
metadata:
name: kibana-config
namespace: elk
data:
kibana.yml: |
server.port: 5601
server.host: "0.0.0.0"
elasticsearch.hosts: ["http://elasticsearch-0.elasticsearch-cluster.elk.svc.cluster.local:9200"]
kibana.index: ".kibana"
logging.dest: /usr/share/kibana/logs/kibana.log
i18n.locale: "zh-CN"
server.publicBaseUrl: "http://kibana.elk.svc.cluster.local:5601"

创建Depoyment(kibana-deployment.yaml)

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
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
# 使用 Deployment 方式部署 Kibana,此处我们将 Kibana 配置为与 Elasticsearch 集群通信,并挂载之前创建的 ConfigMap
apiVersion: apps/v1
kind: Deployment
metadata:
name: kibana
namespace: elk
spec:
replicas: 1
selector:
matchLabels:
app: kibana
template:
metadata:
labels:
app: kibana
spec:
affinity:
nodeAffinity: # 资源有限,这里配置节点亲和性,尽量调度到node1节点
preferredDuringSchedulingIgnoredDuringExecution:
- weight: 100
preference:
matchExpressions:
- key: kubernetes.io/hostname
operator: In
values:
- node1
containers:
- name: kibana
image: harbor.local/k8s/kibana:7.17.0 # 内网仓库镜像
ports:
- containerPort: 5601
env:
- name: ELASTICSEARCH_HOSTS
value: "http://elasticsearch-0.elasticsearch-cluster.elk.svc.cluster.local:9200"
volumeMounts:
- name: config
mountPath: /usr/share/kibana/config/kibana.yml
subPath: kibana.yml
- name: logs
mountPath: /usr/share/kibana/logs
resources:
requests:
cpu: "200m"
memory: "500Mi"
limits:
cpu: "500m"
memory: "1Gi"
# 如果不开启kibana认证就可以这样配
#livenessProbe:
#httpGet:
#path: /api/status
#port: 5601
#initialDelaySeconds: 90
#periodSeconds: 10
livenessProbe:
exec:
command:
- bash
- -c
- |
curl -u elastic:elastic -fs http://kibana.elk.svc.cluster.local:5601/api/status > /dev/null
initialDelaySeconds: 30
periodSeconds: 10
volumes:
- name: config
configMap:
name: kibana-config
- name: logs
emptyDir: {}

部署所有资源

1
2
3
4
5
# 将上述 YAML 文件保存后,使用以下命令统一部署
kubectl apply -f elk-namespace.yaml
kubectl apply -f kibana-service.yaml
kubectl apply -f kibana-configmap.yaml
kubectl apply -f kibana-deployment.yaml

验证Kibana Pod状态

1
kubectl get pod -n elk