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

发布于:2025-08-04 ⋅ 阅读:(16) ⋅ 点赞:(0)

目录

1. Kibana 简介

1.1 主要功能

1.2 核心组件

1.3 主要特点

1.4 典型应用场景

1.5 主要优势

1.6 简单使用示例

2. 部署Kibana

2.1 创建Namespace

2.2 创建Service

2.2 创建ConfigMap

2.3 创建Deployment

2.4 部署所有资源

2.5 检查Pod状态

3. Kibana界面配置

3.1 访问Kibana

3.2 创建索引

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 展示数据


网站公告

今日签到

点亮在社区的每一天
去签到