【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

相关推荐
皮皮蟹虾饺7 小时前
DNS协议指南:从报文格式到安全加密与 K8s 实战
安全·容器·kubernetes
千寻girling8 小时前
记录第一次学习 Docker
学习·docker·容器
迷糊小面包9 小时前
Docker Hadopp集群版部署搭建及常规问题解疑
运维·docker·容器
烁34710 小时前
Docker
运维·docker·容器
网络中的夜鹰11 小时前
轩辕镜像一键安装Docker和Docker Compose脚本
运维·docker·容器
lihongbao8011 小时前
kuboard v3创建用户分配命名空间
kubernetes·kuboard
江湖有缘14 小时前
Docker部署HamsterBase Tasks任务管理工具
运维·docker·容器
很楠爱上14 小时前
Docker 从入门到实战:核心概念、微服务编排与环境移植完全指南
docker·微服务·容器
Qres82115 小时前
docker & WSL & Ubuntu安装记录
ubuntu·docker·容器·wsl
java_cj16 小时前
从kubectl源码学pprof:生产环境性能分析的实战指南
运维·云原生·容器·kubernetes