K8S部署ELK(五):集成Kibana实现日志可视化

目录

[1. Kibana 简介](#1. Kibana 简介)

[1.1 主要功能](#1.1 主要功能)

[1.2 核心组件](#1.2 核心组件)

[1.3 主要特点](#1.3 主要特点)

[1.4 典型应用场景](#1.4 典型应用场景)

[1.5 主要优势](#1.5 主要优势)

[1.6 简单使用示例](#1.6 简单使用示例)

[2. 部署Kibana](#2. 部署Kibana)

[2.1 创建Namespace](#2.1 创建Namespace)

[2.2 创建Service](#2.2 创建Service)

[2.2 创建ConfigMap](#2.2 创建ConfigMap)

[2.3 创建Deployment](#2.3 创建Deployment)

[2.4 部署所有资源](#2.4 部署所有资源)

[2.5 检查Pod状态](#2.5 检查Pod状态)

[3. Kibana界面配置](#3. Kibana界面配置)

[3.1 访问Kibana](#3.1 访问Kibana)

[3.2 创建索引](#3.2 创建索引)

[3.3 展示数据](#3.3 展示数据)


1. Kibana 简介

Kibana 是一个开源的数据可视化和分析平台,是 Elastic Stack(原 ELK Stack)的核心组件之一,专门设计用于与 Elasticsearch 协同工作。

1.1 主要功能

  1. 数据可视化:创建丰富的图表、仪表板和交互式报表

  2. 数据探索:通过直观界面查询和分析 Elasticsearch 中的数据

  3. 日志分析:与 Logstash 和 Beats 配合进行日志管理和分析

  4. 应用监控:通过 APM 功能监控应用程序性能

  5. 机器学习:提供异常检测和预测分析功能

1.2 核心组件

  1. Discover:原始数据浏览和搜索界面

  2. Visualize:创建各种可视化图表(柱状图、饼图、热图等)

  3. Dashboard:将多个可视化组合成交互式仪表板

  4. Canvas:创建像素完美的信息展示板

  5. Maps:地理空间数据分析

  6. Machine Learning:异常检测和预测分析

  7. APM:应用性能监控

  8. Dev Tools:开发者工具(包含 Console 用于直接与 ES 交互)

1.3 主要特点

  • 直观的 Web 界面:基于浏览器的用户友好界面

  • 实时分析:数据变化几乎实时反映在可视化中

  • 高度可定制:支持自定义可视化插件和仪表板

  • 强大的查询能力:支持 Lucene 查询语法和 Kibana Query Language (KQL)

  • 安全集成:支持基于角色的访问控制

1.4 典型应用场景

  1. 日志分析和故障排查

  2. 业务指标监控和报告

  3. 应用性能监控(APM)

  4. 网络安全分析

  5. 物联网(IoT)数据分析

  6. 运营智能和业务分析

1.5 主要优势

  1. 与 Elasticsearch 深度集成:专为 Elasticsearch 设计,提供最佳性能

  2. 丰富的可视化类型:从简单图表到复杂地理空间可视化

  3. 交互式仪表板:支持钻取和下钻分析

  4. 时间序列分析:特别适合处理时间序列数据

  5. 警报功能:可以设置基于条件的警报通知

1.6 简单使用示例

  1. 连接到 Elasticsearch 索引

  2. 在 Discover 中探索原始数据

  3. 使用 Visualize 创建柱状图显示错误日志随时间变化

  4. 将多个可视化组合到 Dashboard

  5. 设置当错误率超过阈值时触发警报

Kibana 是企业级数据分析和可视化的强大工具,特别适合需要从大规模数据中提取洞察的场景,是日志分析、业务智能和运维监控的理想解决方案。

2. 部署Kibana

2.1 创建Namespace

复制代码
kubectl create namespace elk

2.2 创建Service

复制代码
vim kibana-service.yaml
复制代码
apiVersion: v1
kind: Service
metadata:
  name: kibana
  namespace: elk
spec:
  selector:
    app: kibana
  type: NodePort
  ports:
  - port: 5601
    targetPort: 5601
    nodePort: 30601

2.2 创建ConfigMap

复制代码
vim kibana-configmap.yaml
复制代码
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"

2.3 创建Deployment

复制代码
vim kibana-deployment.yaml
复制代码
---
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: node-role.kubernetes.io/control-plane
                operator: DoesNotExist  # 排除 Master 节点
      containers:
      - name: kibana
        image: swr.cn-north-4.myhuaweicloud.com/ddn-k8s/docker.io/library/kibana:7.17.3
        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"
        livenessProbe:
          httpGet:
            path: /api/status
            port: 5601
          initialDelaySeconds: 30
          periodSeconds: 10
      volumes:
      - name: config
        configMap:
          name: kibana-config
      - name: logs
        emptyDir: {}

2.4 部署所有资源

复制代码
[root@master1 Kibana]# ls
kibana-configmap.yaml  kibana-deployment.yaml  kibana-service.yaml
[root@master1 Kibana]# kubectl apply -f ./
configmap/kibana-config created
deployment.apps/kibana created
service/kibana created

2.5 检查Pod状态

复制代码
[root@master1 Kibana]# kubectl get pod -n elk 
NAME                        READY   STATUS    RESTARTS      AGE
elasticsearch-0             1/1     Running   1 (41m ago)   21h
filebeat-6db9l              1/1     Running   1 (41m ago)   22h
filebeat-qllxg              1/1     Running   1 (42m ago)   22h
filebeat-r5hw7              1/1     Running   1 (42m ago)   22h
kafka-0                     1/1     Running   1 (42m ago)   21h
kibana-86f8465644-grxzd     1/1     Running   0             34s
logstash-6d88fd886d-2cg9p   1/1     Running   0             13m

3. Kibana界面配置

3.1 访问Kibana

查看NodePort

复制代码
[root@master1 Kibana]# kubectl get svc -n elk 
NAME                    TYPE        CLUSTER-IP       EXTERNAL-IP   PORT(S)             AGE
elasticsearch           NodePort    10.103.12.46     <none>        9200:31409/TCP      21h
elasticsearch-cluster   ClusterIP   None             <none>        9200/TCP            21h
kafka-headless          ClusterIP   None             <none>        9092/TCP,9093/TCP   21h
kibana                  NodePort    10.100.76.108    <none>        5601:30601/TCP      5m19s
logstash                ClusterIP   10.100.103.152   <none>        5044/TCP            18m

访问:http://192.168.48.10:30601

3.2 创建索引

打开左侧导航栏,依次点击Stack Management-->索引模式-->创建索引。

3.3 展示数据

相关推荐
❀͜͡傀儡师5 小时前
Docker 安装部署 OceanBase
docker·容器·oceanbase
我能知道个啥8 小时前
一次Kubernetes集群故障处理案例:etcd无法选出Leader导致Kubernetes API-Server启动失败
kubernetes
David爱编程9 小时前
Cilium 与 Calico 网络安全能力横向评测
云原生·容器·kubernetes
David爱编程9 小时前
Kubernetes中使用Calico实现零信任网络访问控制
云原生·容器·kubernetes
热心市民梁先生11 小时前
oect刷入arm系统安装docker
运维·docker·容器
睡觉z11 小时前
k8s日志收集
容器·kubernetes·jenkins
Joemt12 小时前
ubuntu22.04离线一键安装gpu版docker
docker·容器·eureka
潮落拾贝16 小时前
k8s+isulad 国产化技术栈云原生技术栈搭建2-crictl
云原生·容器·kubernetes·国产化