【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

相关推荐
丁总学Java16 分钟前
在 Docker 中进入 Redis 容器后,可以通过以下方法查看 Redis 版本:
redis·docker·容器
丁总学Java19 分钟前
docker -私有镜像仓库 - harbor安装
运维·docker·容器·harbor
骅青1 小时前
使用k8s部署java前后端服务
java·容器·kubernetes
2401_840192272 小时前
k8s中,服务的自动注册、自动感知、负载均衡,三个功能的含义及测试验证
docker·kubernetes·负载均衡
张某布响丸辣2 小时前
Docker-Compose:简化Docker容器编排的利器
docker·容器·eureka
it技术分享just_free3 小时前
kubernetes K8S 挂载分布式存储 ceph
运维·分布式·ceph·云原生·容器·kubernetes·k8s
Xinan_____4 小时前
Linux——k8s、deployment、pod
linux·docker·kubernetes
福大大架构师每日一题5 小时前
19.2 编写dockerfile和k8s yaml
云原生·容器·kubernetes
weixin_453965005 小时前
[单master节点k8s部署]24.构建EFK日志收集平台(三)
容器·kubernetes
weixin_453965005 小时前
[单master节点k8s部署]23.构建EFK日志收集平台(二)
docker·容器·kubernetes