# ELK 相关技术介绍
# 1. ELK 诞生的背景
# 1.1 没有 ELK 分析日志前
没有日志分析工具之前,运维工作存在哪些痛点?
- 痛点 1:生产出现故障后,运维需要不停的查看各种不同的日志进行分析?是不是毫无头绪?
- 痛点 2:项目上线出现错误,如何快速定位问题?如果后端节点过多、日志分散怎么办?
- 痛点 3:开发人员需要实时查看日志但又不想给服务器的登陆权限,怎么办?难道每天帮开发取日志?
- 痛点 4:如何在海量的日志中快速的提取我们想要的数据?比如:PV、UV、TOP10 的 URL?如果分析的日志数据量大,那么势必会导致查询速度慢、难度增大,最终则会导致我们无法快速的获取到想要的指标。
- 痛点 5:CDN 公司需要不停的分析日志,那分析什么?主要分析命中率,为什么?因为我们给用户承诺的命中率是 90% 以上。如果没有达到 90%,我们就要去分析数据为什么没有被命中、为什么没有被缓存下来。
# 1.2 使用 ELK 分析日志后
如上所有的痛点都可以使用日志分析系统 ELK 解决,通过 ELK,将运维所有的服务器日志,业务系统日志都收集到一个平台下,然后提取想要的内容,比如错误信息,警告信息等,当过滤到这种信息,就马上告警,告警后,运维人员就能马上定位是哪台机器、哪个业务系统出现了问题,出现了什么问题。
# 2. ELK 技术栈是什么
# 2.1 什么是 ELK
其实 ELK 不是一个单独的技术,而是一套技术的组合,是由 Elasticsearch、Logstash、Kibana 组合而成的。
ELK 是一套开源免费、功能强大的日志分析管理系统。ELK 可以将我们的系统日志、网站日志、应用系统日志等各种日志进行收集、过滤、清洗,然后进行集中存放并可用于实时检索、分析。
- E:Elasticsearch 数据存储;
- L:Logstash 数据采集、数据清洗、数据过滤;
- K:Kibana 数据分析、数据展示;
缺点:
- 1、Logstash 基于 Java 开发,内存消耗极高
- 2、Logstash 与 ElasticSerach 耦合度过紧,容易打爆 ES,造成数据丢失
# 2.2 什么是 EFK
简单来说就是将 Logstash 替换成了 Filebeat,那为什么要进行替换?
因为 Logstash 是基于 JAVA 开发的,在收集日志时会大量的占用业务系统资源,从而影响正常线上业务。而替换成 filebeat 这种较为轻量的日志收集组件,会让业务系统的运行更加的稳定。
缺点:
- 1、Filebeat 与 ElasticSearch 耦合度过紧,容易打爆 ES,造成数据丢失;
- 2、Filebeat 对日志格式的处理与转换,比较的弱;
# 2.3 什么是 ELFK
# 2.4 ELK + Kafka
该解决方案可支持每日 1TB 级别的业务日志处理。若贵公司业务日志量达到每日 10 TB,建议根据业务系统进行横向拆分,部署多套独立 ELK 集群。
Kafka 消息队列 可以将 Filebeat 与 ElasticSearch 进行解耦,从而可以避免 ES 被打爆的现象;
Logstash
- 1、可以从 Kafka 中获取数据,然后匀速写入 ElasticSearch 中:
- 2、能针对那些非结构化的数据,将其转为结构化数据,并可以对无用字段进行清洗;
# 2.4 EFK 收集哪些日志
- 代理:Haproxy、Nginx
- Web:Nginx、Tomcat、Httpd、PHP
- DB:mysql、redis、mongo、elasticsearch
- 存储:nfs、glusterfs、fastdfs
- 系统:message、security
- 业务:app
