[单master节点k8s部署]21.EFK日志收集平台介绍

大型系统是一个分布式部署的架构,不同的服务模块部署在不同的服务器上,问题出现时,大部分情 况需要根据问题暴露的关键信息,定位到具体的服务器和服务模块,构建一套集中式日志系统,可以提高 定位问题的效率。
日志级别

日志有四种级别,依次是debug,info,warning和error。如果设置为收集info级别日志,则debug级别的信息就不会收集,如果是warning级别,则该级别下的日志就不会收集。具体收集到哪个等级需要按照实际情况,因为日志收集非常的耗费内存。

EFK

对于大型系统,日志需要集中的收集和管理,EFK是目前主流的日志收集管理技术栈之一,包括ElasticResearch\Fluentd\Kibana,Elasticsearch:用于存储和索引日志数据。而Fluentd用于收集处理和转发日志,相比于另一个技术栈ELK中使用的Logstash,Fluentd更加轻量级,因此对于新手使用更加友好,在这里我们使用Fluentd。而Kibana是一个可视化的插件。

具体流程为:

应用程序(AppServer)–>Logstash/Fluentd收集–>ElasticSearch存储和管理–>Kibana组织展示(处理数据、生成图表)–>浏览器(Browser)

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

ELK+filebeat

Logstash是一个比较好的工具,但是不够轻量级,因此如果使用Logstash,一般会结合filebeat使用,filebeat是一个轻量级的日志收集插件,而Logstash仅进行日Logstash 可以作为中央日志处理器,处理来自多个 Filebeat 实例的数据,进行复杂的日志处理和转换。相比纯 ELK 栈,ELK+Filebeat 在日志收集层更轻量高效。相比 EFK (Elasticsearch, Fluentd, Kibana),它保持了 Elastic Stack 的一致性和集成优势。

其他解决方案
Logstash(采集、处理)—> ElasticSearch (存储)—>Kibana (展示)
Logstash(采集)—> Logstash(聚合、处理)—> ElasticSearch (存储)—>Kibana (展示)
Filebeat(采集、处理)—> ElasticSearch (存储)—>Kibana (展示)
Filebeat(采集)—> Logstash(聚合、处理)—> ElasticSearch (存储)—>Kibana (展示)
Filebeat(采集)—> Kafka/Redis(消峰) —> Logstash(聚合、处理)—> ElasticSearch (存
储)—>Kibana (展示)
Elastic Stack
Elastic Stack 是一套 适用于数据采集、扩充、存储、分析和可视化的免费开源工具。人们通常将 Elastic Stack 称为 ELK Stack(代指 Elasticsearch、Logstash 和 Kibana),目前 Elastic Stack 包括一系列丰富的轻量型 数据采集代理,这些代理统称为 Beats,可用来向 Elasticsearch 发送数据。
目前 Beats 包含六种工具:
1、Packetbeat:网络数据(收集网络流量数据)
2、Metricbeat:指标(收集系统、进程和文件系统级别的 CPU 和内存使用情况等数据)
3、Filebeat:日志文件(收集文件数据)
4、Winlogbeat:windows 事件日志(收集 Windows 事件日志数据)
5、Auditbeat:审计数据(收集审计日志)
6、Heartbeat:运行时间监控(收集系统运行时的数据)
FileBeat
Filebeat 是用于转发和收集日志数据的轻量级传送工具。Filebeat 监视你指定的日志文件或位置,收集日志事件,并将它们转发到 Elasticsearch 或 Logstash 中。 
Filebeat 的工作方式如下:启动 Filebeat 时,它将启动一个或多个输入,这些输入将在为日志数据指定的位置中查找。对于 Filebeat 所找到的每个日志,Filebeat 都会启动收集器。每个收集器都读取单个日志以获取新内容,并将新日志数据发送到 libbeat,libbeat 将聚集事件,并将聚集的数据发送到为Filebeat 配置的输出。
Logstash
logstash是一个开源的数据收集和处理工具,主要用于数据的采集、转换和传输,可以从文件、TCP/UDP、Kafka、数据库等源获取数据,并 将处理后的数据发送到一个或多个目的地。但是重要的是它的转换功能, 将来自不同源的数据统一为一致的格式,便于后续分析和存储。
假设以下是收集的apache和json格式的日志:
192.168.1.1 - - [18/Aug/2024:10:00:00 +0000] "GET /index.html HTTP/1.1" 200 1234 "http://example.com" "Mozilla/5.0"
{"timestamp": "2024-08-18T10:05:00", "level": "INFO", "message": "User login successful", "user_id": 12345}

通过logstach的功能进行转换,就可以转换为一致的格式:

input {
  file {
    path => "/var/log/apache/access.log"
    type => "apache"
  }
  file {
    path => "/var/log/app/application.log"
    type => "application"
  }
}

filter {
  if [type] == "apache" {
    grok {
      match => { "message" => "%{COMBINEDAPACHELOG}" }
    }
    date {
      match => [ "timestamp", "dd/MMM/yyyy:HH:mm:ss Z" ]
      target => "@timestamp"
    }
    mutate {
      add_field => { "event_type" => "web_access" }
    }
  }
  else if [type] == "application" {
    json {
      source => "message"
    }
    date {
      match => [ "timestamp", "ISO8601" ]
      target => "@timestamp"
    }
    mutate {
      add_field => { "event_type" => "app_log" }
    }
  }
}

output {
  elasticsearch {
    hosts => ["localhost:9200"]
    index => "unified_logs-%{+YYYY.MM.dd}"
  }
}

这个配置做了以下工作:

  1. 定义两个输入源,分别读取Apache日志和应用日志。

  2. 对于Apache日志:

    • 使用grok过滤器解析Combined Log Format。
    • 将日期字符串转换为标准时间戳。
    • 添加一个"event_type"字段,值为"web_access"
    • Logstash 能够动态地转换和解析数据,不受格式或复杂度的影响: 1、利用 Grok 从非结构化数据中派生出结构 2、从 IP 地址破译出地理坐标 3、将 PII 数据匿名化,完全排除敏感字段 ,整体处理不受数据源、格式或架构的影响
  3. 对于应用日志:

    • 使用json过滤器解析JSON格式的日志。
    • 将ISO8601格式的时间戳转换为标准时间戳。
    • 添加一个"event_type"字段,值为"app_log"。
  4. 最后,将处理后的数据输出到Elasticsearch,使用统一的索引模式,如下:

{
  "@timestamp": "2024-08-18T10:00:00.000Z",
  "event_type": "web_access",
  "client_ip": "192.168.1.1",
  "request": "/index.html",
  "response_code": 200,
  "user_agent": "Mozilla/5.0"
}

{
  "@timestamp": "2024-08-18T10:05:00.000Z",
  "event_type": "app_log",
  "level": "INFO",
  "message": "User login successful",
  "user_id": 12345
}

fluentd

Fluentd 通常比 Logstash 更省资源。这主要是因为 Fluentd 是用 C 和 Ruby 编写的,而 Logstash 是用 Java 编写的。Fluentd 的内存占用通常较小,这在资源受限的环境中是一个明显的优势。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值