一、传统系统日志收集的问题
在传统项目中,如果在生产环境中,有多台不同的服务器集群,如果生产环境需要通过日志定位项目的Bug的话,需要在每台节点上使用传统的命令方式查询,这样效率非常底下。
通常,日志被分散在储存不同的设备上。如果你管理数十上百台服务器,你还在使用依次登录每台机器的传统方法查阅日志。这样是不是感觉很繁琐和效率低下。当务之急我们使用集中化的日志管理,例如:开源的syslog,将所有服务器上的日志收集汇总。
集中化管理日志后,日志的统计和检索又成为一件比较麻烦的事情,一般我们使用grep、awk和wc等Linux命令能实现检索和统计,但是对于要求更高的查询、排序和统计等要求和庞大的机器数量依然使用这样的方法难免有点力不从心。
命令方式:
tail -n 300 myes.log | grep 'node-1'
tail -100f myes.log
二、ELK原理
L:会将每天的日志文件生成一个索引,以此区分
模块安装L -> 通过L收集本地日志 -> 转发到ES JSON格式 -> Kibana 展示
ELK分布式日志收集系统介绍
ElasticSearch是一个基于Lucene的开源分布式搜索服务器。它的特点有:分布式,零配置,自动发现,索引自动分片,索引副本机制,restful风格接口,多数据源,自动搜索负载等。它提供了一个分布式多用户能力的全文搜索引擎,基于RESTful web接口。Elasticsearch是用Java开发的,并作为Apache许可条款下的开放源码发布,是第二流行的企业搜索引擎。设计用于云计算中,能够达到实时搜索,稳定,可靠,快速,安装使用方便。
Logstash是一个完全开源的工具,它可以对你的日志进行收集、过滤、分析,支持大量的数据获取方法,并将其存储供以后使用(如搜索)。说到搜索,logstash带有一个web界面,搜索和展示所有日志。一般工作方式为c/s架构,client端安装在需要收集日志的主机上,server端负责将收到的各节点日志进行过滤、修改等操作在一并发往elasticsearch上去。
Kibana是一个基于浏览器页面的Elasticsearch前端展示工具,也是一个开源和免费的工具,Kibana可以为 Logstash 和 ElasticSearch 提供的日志分析友好的 Web 界面,可以帮助您汇总、分析和搜索重要数据日志
ELK分布式日志收集原理
1、每台服务器集群节点安装Logstash日志收集系统插件
2、每台服务器节点将日志输入到Logstash中
3、Logstash将该日志格式化为json格式,根据每天创建不同的索引,输出到ElasticSearch中
4、浏览器使用安装Kibana查询日志信息
环境安装
1、安装ElasticSearch
2、安装Logstash
3、 安装Kibana
三、Logstash介绍
Logstash是一个完全开源的工具,它可以对你的日志进行收集、过滤、分析,支持大量的数据获取方法,并将其存储供以后使用(如搜索)。说到搜索,logstash带有一个web界面,搜索和展示所有日志。一般工作方式为c/s架构,client端安装在需要收集日志的主机上,server端负责将收到的各节点日志进行过滤、修改等操作在一并发往elasticsearch上去。
核心流程:Logstash事件处理有三个阶段:inputs → filters → outputs。是一个接收,处理,转发日志的工具。支持系统日志,webserver日志,错误日志,应用日志,总之包括所有可以抛出来的日志类型。
Logstash环境安装
1、上传logstash安装包(资料)
2、解压tar –zxvf logstash-6.4.3.tar.gz
3、在config目录下放入mayikt01.conf 读入并且读出日志信息
日志收集模式
Logstash读取本地文件地址,实时存放在ES中,以每天格式创建不同的索引进行存放。
Kibana 平台查询 GET /es-2018.11.27/_search
四、ELK+Kafka实现分布式日志收集原理
使用SpringAop进行日志收集,然后通过kafka将日志发送给logstash,logstash再将日志写入elasticsearch,这样elasticsearch就有了日志数据了,最后,则使用kibana将存放在elasticsearch中的日志数据显示出来,并且可以做实时的数据图表分析等等。
五、ELK+Kafka实现分布式日志收集职责
logstash做日志对接,接受应用系统的log,然后将其写入到elasticsearch中,logstash可以支持N种log渠道,kafka渠道写进来的、和log目录对接的方式、也可以对reids中的log数据进行监控读取,等等。
elasticsearch存储日志数据,方便的扩展特效,可以存储足够多的日志数据。
kibana则是对存放在elasticsearch中的log数据进行:数据展现、报表展现,并且是实时的。
六、传统ELK实现思路图
缺点:实时性不强。logstash冗余。如果服务器增加则logstash也需要增加。
1. logstash太多了,扩展不好。
2. 读取IO文件,可能会产生日志丢失
3. 不是实时性
七、ELK + Kafka实现
八、思考问题
1.哪些日志信息需要输入logstash
(error级别)
2.AOP 异常通知 服务与服务之间如何区分日志索引文件(服务名称) hotel- 2019/10/01 11:05 order- 2019/10/01 11:05
3.在分布式日志收集中,相同的服务集群的话是不需要区分日志索引文件。
4.目的为了 统一管理相同节点日志我信息。
5.相同的服务集群的话,是不需要区分日志索引文件 搜索日志的时候,如何定位服务器节点信息?
不需要,只需要在集群中日志信息指定IP就行了,分布式日志收集就是将多个集群收集在一起。