第一节 ELK介绍
日志是程序产生的,遵循一定格式(通常包含时间戳)的文本数据。通常由服务器生成,输出到不同的文件中,一般会有系统日志、 应用日志、安全日志。这些日志分散地存储在不同的机器上。通常当系统发生故障时,工程师需要登录到各个服务器上,使用 grep / sed / awk 等 Linux 脚本工具去日志里查找故障原因。在没有日志系统的情况下,首先需要定位处理请求的服务器,如果这台服务器部署了多个实例,则需要去每个应用实例的日志目录下去找日志文件。每个应用实例还会设置日志滚动策略(如:每天生成一个文件),还有日志压缩归档策略等。
这样一系列流程下来,对于排查故障以及及时找到故障原因,造成了比较大的麻烦。因此,把这些日志集中管理,并提供集中检索功能,不仅可以提高诊断的效率,同时对系统情况有个全面的理解,避免事后救火的被动。日志数据在以下几方面具有非常重要的作用:
1.数据查找:通过检索日志信息,定位相应的 bug ,找出解决方案
2.服务诊断:通过对日志信息进行统计、分析,了解服务器的负荷和服务运行状态
3.数据分析:可以做进一步的数据分析,比如根据请求中的课程 id ,找出 TOP10 用户感兴趣课程。
业界通用的日志数据管理解决方案—ELK, 它主要包括 Elasticsearch 、 Logstash 和 Kibana 三个系统。
Logstash :数据收集处理引擎。支持动态的从各种数据源搜集数据,并对数据进行过滤、分析、丰富、统一格式等操作,然后存储以供后续使用。
Kibana :可视化化平台。它能够搜索、展示存储在 Elasticsearch 中索引数据。使用它可以很方便的用图表、表格、地图展示和分析数据。
Elasticsearch :分布式搜索引擎。具有高可伸缩、高可靠、易管理等特点。可以用于全文检索、结构化检索和分析,并能将这三者结合起来。Elasticsearch 基于 Lucene 开发,现在使用最广的开源搜索引擎之一,Wikipedia 、StackOverflow、Github 等都基于它来构建自己的搜索引擎。
Filebeat :轻量级数据收集引擎。基于原先 Logstash-fowarder 的源码改造出来。换句话说:Filebeat就是新版的 Logstash-fowarder,也会是 ELK Stack 在 shipper 端的第一选择。
单机版架构
这种架构下把 Logstash 实例与 Elasticsearch 实例直接相连。Logstash 实例直接通过 Input 插件读取数据源数据(比如 Java 日志, Nginx 日志等),经过 Filter 插件进行过滤日志,最后通过 Output 插件将数据写入到 ElasticSearch 实例中。
集群版架构
该架构首先由Logstash分布于各个节点上搜集相关日志、数据,并经过分析、过滤后发送给远端服务器上的Elasticsearch进行存储。Elasticsearch将数据以分片的形式压缩存储并提供多种API供用户查询,操作。用户亦可以更直观的通过配置Kibana Web Portal方便的对日志查询,并根据数据生成报表。
优点:搭建简单,易于上手。
缺点:Logstash耗资源较大,运行占用CPU和内存高。另外没有消息队列缓存,存在数据丢失隐患。
消息队列版架构
引入了消息队列机制,位于各个节点上的Logstash Agent先将数据/日志传递给Kafka(或者Redis),并将队列中消息或数据间接传递给Logstash,Logstash过滤、分析后将数据传递给Elasticsearch存储。最后由Kibana将日志和数据呈现给用户。因为引入了Kafka(或者Redis),所以即使远端Logstash server因故障停止运行,数据将会先被存储下来,从而避免数据丢失。
优点:适合于较大集群的解决方案,引入了消息队列机制,均衡了网络传输,从而降低了网络闭塞尤其是丢失数据的可能性。
缺点:由于Logstash中心节点和Elasticsearch的负荷会比较重,需要配置集群模式,且依然存在Logstash占用系统资源过多的问题。
LogStash-forward版架构
首先,Logstash-forwarder将日志数据搜集并统一发送给主节点上的Logstash,Logstash分析、过滤日志数据后发送至Elasticsearch存储,并由Kibana最终将数据呈现给用户。
这种架构解决了Logstash在各计算机点上占用系统资源较高的问题。经测试得出,相比Logstash,Logstash-forwarder所占用系统CPU和MEM几乎可以忽略不计。另外,Logstash-forwarder和Logstash间的通信是通过SSL加密传输,起到了安全保障。如果是较大集群,可以配置logstash集群和Elasticsearch集群,引入High Available机制,提高数据传输和存储安全。但在此种架构下Logstash-forwarder和Logstash间通信必须由SSL加密传输,这样便有了一定的限制性。
Beats版架构
将Logstash-forwarder替换为Beats。经测试,Beats满负荷状态所耗系统资源和Logstash-forwarder相当,但其扩展性和灵活性有很大提高。Beats platform目前包含有Packagebeat、Topbeat和Filebeat三个产品,均为Apache 2.0 License。同时用户可根据需要进行二次开发。
不管采用上面哪种ELK架构,都包含了其核心组件,即:Logstash、Elasticsearch 和Kibana。当然这三个组件并非不能被替换,只是就性能和功能性而言,这三个组件已经配合的很完美,是密不可分的。各系统运维中究竟该采用哪种架构,可根据现实情况和架构优劣而定。
软件 | 版本 | 下载地址 |
Java | 1.8及以上 | |
Elasticsearch | 7.5.2 | https://www.elastic.co/cn/downloads/past-releases#elasticsearch |
Elasticsearch-head-master | https://github.com/zt1115798334/elasticsearch-head-master | |
Logstash | 7.5.2 | https://www.elastic.co/cn/downloads/past-releases#logstash |
kibana | 7.5.2 | https://www.elastic.co/cn/downloads/past-releases#kibana |
filebeat | 7.5.2 | https://www.elastic.co/cn/downloads/past-releases#filebeat |
安装参考教程:Elasticsearch7.x(二)——详细的记录一个简易的 Spring boot 2.x 集成 ELK的demo_笑里笑外~的博客-CSDN博客
启动Elasticsearch服务
- 进入Elasticsearch安装目录,双击bin目录下的elasticsearch.bat
- 显示started则成功启动
- 可在浏览器地址栏输入127.0.0.1:9200查看
启动Elasticsearch-head服务
- 进入Elasticsearch-head文件目录,进入cmd窗口,输入 npm start即可启动
- 在浏览器地址栏输入127.0.0.1:9100查看
启动logstash服务
- 进入logstash安装目录下的bin目录,新建 logstash.conf,加入以下信息并保存
创建springboot项目
- 引入依赖
- 修改application.yml文件
- 新建logback.xml
- 生成日志
- 查看数据
启动Elasticsearch和Elasticsearch-head服务同上节。
启动Logstash服务
- 进入logstash安装目录下的bin目录,新建 logstash_mysql.conf,加入以下信息并保存
- 在bin目录下进入cmd窗口,输入 .\logstash -f .\logstash_mysql.conf,即可启动该服务
- 查看数据
启动Elasticsearch和Elasticsearch-head服务同上节。
启动logstash服务
- 进入logstash安装目录的bin目录,新建 logstash_log.conf,加入以下信息并保存
- 在bin目录下进入cmd窗口,输入 .\logstash -f .\logstash_log.conf,即可启动该服务
启动filebeat服务
- 进入fileBeat文件目录,编辑filebeat.yml文件
转存失败重新上传取消转存失败重新上传取消转存失败重新上传取消转存失败重新上传取消正在上传…重新上传取消转存失败重新上传取消
- 进入cmd控制,输入filebeat.exe运行该服务
- 查看数据
转存失败重新上传取消转存失败重新上传取消转存失败重新上传取消转存失败重新上传取消正在上传…重新上传取消转存失败重新上传取消
转存失败重新上传取消转存失败重新上传取消转存失败重新上传取消转存失败重新上传取消正在上传…重新上传取消转存失败重新上传取消