> 技术文档 > 【EFK】k8s部署ElasticSearch+Fluentd+Kibana进行日志收集_elasticsearch+fluent+kibana

【EFK】k8s部署ElasticSearch+Fluentd+Kibana进行日志收集_elasticsearch+fluent+kibana


一、为什么使用EFK

EFK Stack为开发者提供了一套完整而灵活的日志管理系统。通过结合Elasticsearch的存储和搜索功能、Fluentd的采集和处理功能以及Kibana的展示和分析功能,开发者可以实现日志的收集、存储、搜索、分析和可视化。相比其他日志管理方案,EFK Stack在高性能和低资源消耗方面表现出色。特别是Fluentd和Filebeat等轻量级的日志收集工具,使得EFK Stack在资源有限或需要快速部署的场景中更具优势。

  • ElasticSearch:Elasticsearch是一个基于Lucene的分布式搜索和分析引擎,能够快速存储、搜索和分析大量数据。它适用于构建实时分析应用程序,并提供全文搜索、结构化搜索、分析以及分布式、多租户能力的功能。
  • Fluentd:Fluentd是一个开源的数据收集器,能够从各种来源(如应用程序、服务器、消息队列等)实时地采集日志数据。它支持多种数据输入和输出的插件,可以轻松地集成到各种环境中。Fluentd在容器化环境中表现出色,特别是与Kubernetes等容器编排系统结合使用时。它能够自动发现和管理容器日志,确保日志数据的完整性和准确性。
  • Kibana:Kibana是一个基于Elasticsearch的可视化分析平台,提供了丰富的图表和可视化功能。用户可以通过Kibana对日志数据进行搜索、分析和可视化,以便更好地理解应用程序的运行状态和日志信息。

二、版本信息

Kubernetes版本:1.28.14
ElasticSearch版本:7.2.0
Fluentd版本:1.16
Kibana版本:7.2.0

三、部署ES

编写yaml创建ES的Service,使用有状态应用StatefulSet创建ES集群,使用NFS做PV,存储ES数据到PV中

#创建ES的Servicekind: ServiceapiVersion: v1metadata: name: elasticsearch namespace: k8s-logging labels: app: elasticsearchspec: selector: app: elasticsearch clusterIP: None ports: - port: 9200 name: rest - port: 9300 name: inter-node---#使用statefulset部署ESapiVersion: apps/v1kind: StatefulSetmetadata: name: es-cluster namespace: k8s-loggingspec: serviceName: elasticsearch replicas: 2 selector: matchLabels: app: elasticsearch template: metadata: labels: app: elasticsearch spec: tolerations: - key: \"node-role.kubernetes.io/control-plane\" operator: \"Exists\" effect: \"NoSchedule\" containers: - name: elasticsearch image: 192.168.119.150/k8s_repository/elasticsearch:7.2.0 imagePullPolicy: IfNotPresent resources: limits:  cpu: 1000m requests:  cpu: 100m ports: - containerPort: 9200 name: rest protocol: TCP - containerPort: 9300 name: inter-node protocol: TCP volumeMounts: - name: esdata mountPath: /usr/share/elasticsearch/data env: - name: cluster.name value: k8s-logs - name: node.name