1. 传统问题:

微服务系统下服务器数量过大,如果还在使用依次登录每台机器的传统方法查询日志,这样效率非常低下。ELK 是elastic公司提供的一套完整的日志收集以及展示的解决方案,是三个产品的首字母缩写,分别是ElasticSearch、Logstash 和 Kibana。

1、ElasticSearch是一个基于Lucene的开源分布式搜索服务器。它的特点有:分布式,零配置,自动发现,索引自动分片,索引副本机制,restful风格接口,多数据源,自动搜索负载等。它提供了一个分布式多用户能力的全文搜索引擎,基于RESTful web接口。Elasticsearch是用Java开发的,并作为Apache许可条款下的开放源码发布,是第二流行的企业搜索引擎。能够达到实时搜索,稳定,可靠,快速,安装使用方便

2、Logstash是一个完全开源的工具,它可以对你的日志进行收集、过滤、分析,核心流程:Logstash事件处理有三个阶段:inputs → filters → outputs。是一个接收,处理,转发日志的工具。

Input插件:input插件主要用来接收数据源,Logstash支持接收多种数据源,常用的有下面的几种形式:

1, file读取一个文件,一行一行的读取

2, redis:可以从redis服务器中读取数据,此时redis类似于一个消息缓存组件

3, kafka:可以从kafka集群中读取数据,kafak加上logstash的架构一般用在数据量较大的业务场景下,kafak可以用作数据的缓冲和存储。

4, filebeat是一个文本收集器,性能文档,并且占用资源少,logstash可以接收filebeat发送过来的数据

常用的filter插件:

Filter插件主要用于数据的过滤、解析和格式化,常见的filter插件如下:

1、 grok插件是最重要的插件,可解析并结构化任意数据,支持正则表达式,并提供了很多内置的规则和模板;

2、 mutate:此插件提供了丰富的基础数据类型处理能力,包括类型转换、字符串处理等

3、 date:此插件可以用来转换日志记录中的时间字符串

4、 geoip:此插件可以依据IP地址提供对于的地域信息,包括国家、城市、经纬度等,对于可视化地图和区域统计很有效

output插件:output插件用于数据的输出,一个logstash事件可以穿过多个output,直到所有的output处理完毕,这个事件才算结束,输出的插件常见的有下面的几种:

1、 elasticSearch:发送数据到elasticSearch中

2、 file,发送数据到file中

3、 redis 发送数据到redis中

4、 kafak,发送数据到kafak中

Kibana是一个基于Web的图形界面,用于搜索、分析和可视化存储在 Elasticsearch指标中的日志数据。它利用Elasticsearch的REST接口来检索数据,不仅允许用户创建他们自己的数据的定制仪表板视图,还允许他们以特殊的方式查询和过滤数据

搭建架构演示

1、每台服务器集群节点安装Logstash日志收集系统插件

2、每台服务器节点将日志输入到Logstash中

3、Logstash对日志进行分析过滤后,根据每天创建不同的索引,输出到ElasticSearch中

4、浏览器使用安装Kibana查询日志信息

缺点:

1、每个节点部署logstash,在数据量较大,logstash运行时占用CUP、内存大,会对节点性能造成一定的影响,严重影响业务的的性能;

2、没有将日志数据进行缓存,存在丢失的风险。

3、logstash运行依赖java环境

Logstash收集日志依赖于Java环境,用来收集日志比较重,占用内存和CPUFilebeat相对轻量,占用服务器资源小一般选用Filebeat来进行日志收, logstash运行必须服务器要安装了jdk,依赖java环境,如果当前运行的收集的日志没有jdk,那么就无法收集日志,并且logstash占用内存和cpu

第二种:Filebeat -> Elasticsearch -> Kibana

优点:

1、 filebeat比logstash更加轻量级,占用系统资源极少,非常适合安装在生产机器上

2、 filebeat基于Go语言,没有任何依赖,配置文件简单

缺点:

  1. Filebeat:但不支持正则、不能移除字段等。Filebeat收集到日志可以不依赖logstash直接将数据传递给es,如果需要对日志进行分析和过滤就需要logstash;如果不经过logstash,Filebeat发过来的无用字段比较多直接发生会导致es文件过大,可以利用 logstash上的文件进行配置,去除无效字段;

logstash agent 监控并过滤日志,将过滤的日志内容发给 kafka或redis,logstashServer 将日志收集一起交给elasticsearch。引入了消息队列机制作为缓存池,即使logstashServer出现异常,由于日志暂存在kafaka消息队列中,能避免日志数据丢失,但是还是没有解决性能问题。

方案四:

Filebeat是一个日志文件托运工具,做为一个agent安装到服务器上,filebeat会监控日志目录或者指定的日志文件,追踪读取这些文件;

将filebeat 作为日志收集器,相比logstach,filebeat更轻量,占用资源更少,filebeat采集日志后,发送到消息队列kafaka或redis暂存起来,起到一个缓冲池的作用,能缓解日志峰值处理压力;

然后logstash去消息队列中获取,利用filter功能过滤分析,然后存储到elasticsearch中,再通过kibana图形化直观展示。缺点就是部署较复杂,如果是正式环境还要考虑集群部署,避免单点。

elk4的更多相关文章

  1. ELK4之进阶学习

    1.精确查找和模糊查找(term和match的区别) match经过分析(analyer)的, term是不经过分词,直接去倒排索引中查找精确的值. 2.建议器的简介(最左前缀或者自带的做) (1)直 ...

随机推荐

  1. React面试题(超详细,附答案)

    生命周期 组件将要挂载时触发的函数:componentWillMount 组件挂载完成时触发的函数:componentDidMount 是否要更新数据时触发的函数:shouldComponentUpd ...

  2. RabbitMQ 高级应用

    本文是作者原创,版权归作者所有.若要转载,请注明出处. 本文RabbitMQ版本为rabbitmq-server-3.7.17,erlang为erlang-22.0.7.请各位去官网查看版本匹配和下载 ...

  3. MyBatis主配置文件

    MyBatis的使用非常简单,使用流程整体可以分成以下四步: public class UserDaoTest { private SqlSessionFactory sqlSessionFactor ...

  4. Vue父子组件传值以及父调子方法、子调父方法

    稍微总结了一下Vue中父子间传值以及相互调方法的问题,非常基础.希望可以帮到你!先来个最常用的,直接上代码: 1.父传值给子组件 父组件: <template> <div> & ...

  5. Android studio环境配置(运行报错)

    报错的种类有很多,下面的方法能解决大多数: 所有路径不能用中文,不能有空格,逗号句号也不能用中文,项目文件路径也不行 首先要配置Java环境,这个就不多说了, 这里有以下JAVA_HOME的配置,下图 ...

  6. java实现黄金队列

    ** 黄金队列** 黄金分割数0.618与美学有重要的关系.舞台上报幕员所站的位置大约就是舞台宽度的0.618处,墙上的画像一般也挂在房间高度的0.618处,甚至股票的波动据说也能找到0.618的影子 ...

  7. Android开发之修改Manifest中meta-data的数据

    代码 private void initFMMap() { ApplicationInfo appInfo = null; try { appInfo = this.getPackageManager ...

  8. Java实现圆柱体表面积和体积的计算

    题目描述: Java编程实现圆柱体表面积和体积的计算,要求从键盘上输入圆的半径和高,然后输出结果. 题目分析: 首先定义Circle类,然后在main方法中创建Circle类的对象c,利用对象c访问其 ...

  9. OSI七层模型及各层作用

    物理层:建立.维护.断开物理连接 数据链路层:该层的作用包括了物理地址寻址,数据的成帧,流量控制,数据的检错,重发等.该层控制网络层与物理层之间的通信,解决的是所传输数据的准确性的问题.为了保证传输, ...

  10. ubuntu安装ssh服务器

    1.安装 sudo apt-get install openssh-server 2.配置文件路径 / etc/ssh/sshd_config 3.操作 sudo /etc/init.d/ssh st ...