【Kubernetes】日志平台EFK+Logstash+Kafka【理论】

一,日志处理方案

方案一,【EFK】:Elasticsearch + Fluentd(或Filebeat) + Kibana

Elasticsearch(简称:ES):实时,分布式存储,可扩展,日志分析工具。

Fluentd/Filebeat:日志数据收集。Filebeat更轻量级。

Kibana:数据可视化(UI界面)

方案二,【ELK】:Elasticsearch + Logstash + Kibana

Logstash:日志收集,聚合,处理。损耗性能,但可处理多种格式的日志。

流程:app应用程序 --> Logstash --> ElasticSearch--> Kibana --> 浏览器

考虑到聚合端(日志处理、清洗等)负载问题和采集端传输效率,一般在日志量比较大的时候在采集端和聚合端增加队列,以用来实现日志消峰。

方案三,【ELK】 + Filebeat

流程:**Filebeat (采集) ---> Logstash(聚合、处理) ---> ElasticSearch (存储) --->Kibana (展示) **

方案四,Filebeat + ElasticSearch +Kibana

**Filebeat (采集、处理) ---> ElasticSearch(存储) --->Kibana (展示) **

方案五,加入缓存机制(推荐)

**Filebeat (采集) ---> Kafka/Redis(消峰) ---> Logstash (聚合、处理) ---> ElasticSearch (存储) --->Kibana (展示) **

日志处理有延迟,产生阻塞,添加 Kafka/Redis 缓存。


二,重点组件介绍

(1)Filebeat组件

1,Filebeat家族

Filebeat是Beats中的一员。

Beats包含六种工具:

1、Packetbeat:网络数据(收集网络流量数据)

2、Metricbeat:指标(收集系统、进程和文件系统级别的CPU和内存使用情况等数据)

3、Filebeat:日志文件(收集文件数据)

4、Winlogbeat:windows事件日志(收集Windows事件日志数据)

5、Auditbeat:审计数据(收集审计日志)

6、Heartbeat:运行时间监控(收集系统运行时的数据)

2,Filebeat传输方案

2-1 output.elasticsearch

bash 复制代码
output.elasticsearch:
  hosts: ["192.168.40.180:9200"]

2-2 output.logstash

bash 复制代码
output.logstash:
  hosts: ["192.168.40.180:5044"]

2-3 output.kafka

bash 复制代码
output.kafka:  # 引入kafka缓存
  enabled: true
  hosts: ["192.168.40.180:9092"]
  topic: elfk8stest

(2)Logstash组件

1,介绍

Logstash 是一个应用程序日志、事件的传输、处理、管理和搜索的平台。它可以对应用程序日志进行收集管理,提供 Web 接口用于查询和统计。

Logstash 能够动态地转换和解析数据,不受格式或复杂度的影响:

1、利用 Grok 从非结构化数据中派生出结构

2、从 IP 地址破译出地理坐标

3、将 PII 数据匿名化,完全排除敏感字段

4、整体处理不受数据源、格式或架构的影响

Logstash 事件处理的三个阶段:输入 > 过滤器 > 输出

2,组件
  • 输入(Input):采集各种样式、大小和来源的数据(必要元素)
  • 过滤器(filter):实时解析和转换数据(可选元素)
  • 输出(output):选择你的存储,导出你的数据(必要元素)

常用的Input模块:Logstash ,file,syslog,redis,beats

常用的Filter模块:grok(非结构转结构数据),mutate,drop,clone,geoip(添加IP地址地理信息)

常用的Output模块:elasticsearch,file,graphite,statsd

3,常用code插件

json:以JSON格式对数据进行编码或解码。

multiline:将多行文本事件(如java异常和堆栈跟踪消息)合并为单个事件。

yaml 复制代码
input {
      kafka {
        bootstrap_servers => "192.168.40.180:9092"
        auto_offset_reset => "latest"
        consumer_threads => 5
        decorate_events => true
        topics => ["elktest"]
      }
}
          
output { 
    elasticsearch { 
        hosts => ["192.168.40.180:9200"]
        index => "elkk8stest-%{+YYYY.MM.dd}"
        }
}   

(3)Fluentd组件

1,介绍

Fluentd是一个针对日志的收集、处理、转发系统。通过丰富的插件系统,可以收集来自于各种系统或应用的日志,转化为用户指定的格式后,转发到用户所指定的日志存储系统之中。

(4)Logagent组件

Logagent 是 Sematext 提供的传输工具,它用来将日志传输到 Logsene(一个基于 SaaS 平台的 Elasticsearch API),因为 Logsene 会暴露 Elasticsearch API,所以 Logagent 可以很容易将数据推送到 Elasticsearch 。


三,各日志采集工具对比

名称 优点 缺点
Filebeat 无依赖,占用资源少,5.x 版本具备过滤能力 应用范围有限
Logstash 灵活,插件多 资源消耗(默认的堆大小是1GB),不支持缓存
Fluentd 插件多 数据结构化强,不灵活
Logagent 轻量又快速,有本地缓冲,可掩盖敏感数据信息 没有 Logstash 灵活
Logtail 阿里云开发使用,占用机器cpu、内存资源最少 类型解析弱
Rsyslog 传输快,最轻的解析器 配置难,相关资料少,会有bug

重点:Filebeat、Fluentd、Logstash

【相关阅读】

【kubernetes】集群日志管理 - ELK

相关推荐
像风一样自由20207 小时前
52.Docker部署大模型应用从本地开发到服务化运行
运维·人工智能·docker·容器·大模型·智能体
陈陈CHENCHEN11 小时前
【Kubernetes】纯 IPv6 K8s 用 socat 打通 IPv4 服务
云原生·容器·kubernetes
灯澜忆梦16 小时前
【docker】#4 | Docker 自定义镜像与 Dockerfile
运维·docker·容器
吴声子夜歌18 小时前
Docker入门与实战——实战案例(编程开发)(一)
运维·docker·容器
ClouGence20 小时前
开源数据库管理工具 CloudDM 4.4.0 发布,新增 Kafka、SAP HANA 数据源
数据库·kafka
RobinXYuan20 小时前
【Kafka 源码手记】01 从消息队列到 Event Streaming
kafka·源码阅读
JavaEdge.20 小时前
Docker Compose部署Dify
运维·docker·容器
wzq11_66620 小时前
Kubernetes集群——网络管理
云原生·容器·kubernetes
java_logo1 天前
Docker 部署 Portainer CE:轻松搭建容器管理平台
运维·docker·容器·portainer·容器管理·轩辕镜像·portainer-ce