【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

相关推荐
KevinAha5 小时前
Kafka 3.5 源码导读
kafka
求积分不加C5 小时前
-bash: ./kafka-topics.sh: No such file or directory--解决方案
分布式·kafka
nathan05295 小时前
javaer快速上手kafka
分布式·kafka
wuxingge7 小时前
k8s1.30.0高可用集群部署
云原生·容器·kubernetes
激流丶8 小时前
【Kafka 实战】Kafka 如何保证消息的顺序性?
java·后端·kafka
志凌海纳SmartX8 小时前
趋势洞察|AI 能否带动裸金属 K8s 强势崛起?
云原生·容器·kubernetes
锅总8 小时前
nacos与k8s service健康检查详解
云原生·容器·kubernetes
BUG弄潮儿9 小时前
k8s 集群安装
云原生·容器·kubernetes
Code_Artist9 小时前
Docker镜像加速解决方案:配置HTTP代理,让Docker学会科学上网!
docker·云原生·容器
颜淡慕潇11 小时前
【K8S系列】kubectl describe pod显示ImagePullBackOff,如何进一步排查?
后端·云原生·容器·kubernetes