起源许多年前,一个刚结婚的名叫ShayBanon的失业开发者,跟着他的妻子去了伦敦,他的妻子在那里学习厨师。在寻找一个赚钱的工作的时候,为了给他的妻子做一个食谱搜索引擎,他开始使用Lucene的一个早期版本。直接使用Lucene是很难的,因此Shay开始做一个抽象层,Java开发者使用它可以很简单的给他们的程序添加搜索功能。他发布了他的第一个开源项目Compass。后来Shay获得了一份工作,主要是高性能,分布式环境下的内存数据网格。这个对于高性能,实时,分布式搜索引擎的需求尤为突出,他决定重写Compass,把它变为一个独立的服务并取名Elasticsearch。第一个公开版本在2010年2月发布,从此以后,Elasticsearch已经成为了Github上最活跃的项目之一,他拥有超过300名contributors(目前736名contributors)。一家公司已经开始围绕Elasticsearch提供商业服务,并开发新的特性,但是,Elasticsearch将永远开源并对所有人可用。据说,Shay的妻子还在等着她的食谱搜索引擎…
有3台机器
2台做elasticsearch的主副节点
1台做kibana和elasticsearch_head由于机器匮乏我还在这台机器上部署了logstash和nginx服务(虽然下面的架构中都提到了redis等缓存,但是暂时没有加该服务,后期会研究添加上的)
先说目的:将nginx的日志通过logstash收集后发送到ela,然后kibana进行展示
环境如下elasticsearchmaster10.5.2.175:9200elasticsearchsalve10.5.2.176:9200logstash172.17.211.153启动命令:nohup/usr/local/logstash/bin/logstash-f/usr/local/logstash/config/agent.conf-w10-l/usr/local/logstash/logs/logstash-plain.log&nginxes-head:172.16.211.143:9100kibana:172.16.211.143:5601架构如下:
加redis/kafa的原因:
在生产环境中,我们的日志可能会有瞬时高峰,而这个时候如果直接存入es,可能会导致es承受不住,从而影响日志的收集和查询。一般情况下,我们会将日志存直接放到kafka或者redis这种读写性能非常高的应用中,作为一个缓存,然后通过下游组件(例如logstash)进行消费、过滤后存入ES,然后通过可视化界面查看。
vim/etc/sysconfig/elasticsearchJAVA_HOME=/usr/java/jdk1.8.0_151elasticsearch的概念index索引相当于数据库里的“数据库”他是我们存储和索引关联数据的地方
type类数据将一类的数据放到一起相当于数据库中的“表”
id相当于数据库表中的一行
下面的命令可以查看当前节点的所有Index。
pertty在网页中格式化输出响应内容
增
问题解决:
在elasticsearch中没有当天的索引
头一天使用过的bj日志第二天无法收集到,原因是昨天logstash已经收集过一遍,就被打过了标签,今天再使用的话,如果这个日志是不再增加的就不会被收集,因为日志中没有新的内容进来,解决方法如下:
systemctldaemon-reload这里由于是二进制的安装方法,所以要设置一个systemctlstartkibana.service的启动方法
kibana查询语法基于Lucene
Lucene是apache软件基金会4jakarta项目组的一个子项目,是一个开放源代码的全文检索引擎工具包,但它不是一个完整的全文检索引擎,而是一个全文检索引擎的架构,提供了完整的查询引擎和索引引擎,部分文本分析引擎(英文与德文两种西方语言)。Lucene的目的是为软件开发人员提供一个简单易用的工具包,以方便的在目标系统中实现全文检索的功能,或者是以此为基础建立起完整的全文检索引擎。Lucene是一套用于全文检索和搜寻的开源程式库,由Apache软件基金会支持和提供。Lucene提供了一个简单却强大的应用程式接口,能够做全文索引和搜寻。在Java开发环境里Lucene是一个成熟的免费开源工具。就其本身而言,Lucene是当前以及最近几年最受欢迎的免费Java信息检索程序库。人们经常提到信息检索程序库,虽然与搜索引擎有关,但不应该将信息检索程序库与搜索引擎相混淆。Lucene最初是由DougCutting开发的,在SourceForge的网站上提供下载。在2001年9月作为高质量的开源Java产品加入到Apache软件基金会的Jakarta家族中kibana在ELK阵营中用来查询展示数据elasticsearch构建在Lucene之上,过滤器语法和Lucene相同
当在els中有了当天的索引,就可以到kibana中取创建索引模式了,只是这里提供了一手动创建的方式,无法自动进行,需要本地定义脚本的方式进行自动索引的创建。
等所有索引都创建完毕后,在下面就能看到了
然后在下面这个里面就能看到我们的索引里面的数据情况了,前提是你的logstash成功将切割后的日志发送到了els中
方法如下:
第一点:KB、ES版本不一致(网上大部分都是这么说的)
解决方法:把KB和ES版本调整为统一版本
第二点:kibana.yml中配置有问题(通过查看日志,发现了Error:NoLivingconnections的问题)
第三点:浏览器没有缓过来
解决方法:刷新几次浏览器。
分析的必要性:顶级
Filebeat是收集日志的另外一种方式,二者区别在于以下
Filebeat用于日志收集和传输,相比Logstash更加轻量级和易部署,对系统资源开销更小,日志流架构的话,Filebeat适合部署在收集的最前端,Logstash相比Filebeat功能更强,可以在Filebeat收集之后,由Logstash进一步做日志的解析,至于kafka也可以考虑添加,然后收集的数据都存放在elasticsearch中。
在logstash客户端的配置文件中会有这么一个配置文件
启动方法基于最基础的nohup方式nohup/usr/local/logstash/bin/logstash-f/usr/local/logstash/conf/agent.conf&>/dev/null也可以用daemontools来进行管理安装yum-yinstallsupervisord--enablerepo=epel在/etc/supervisord.conf配置文件里添加内容,定义你要启动的程序:[program:elkpro_1]environment=LS_HEAP_SIZE=5000mdirectory=/opt/logstashcommand=/opt/logstash/bin/logstash-f/etc/logstash/pro1.conf--pluginpath/opt/logstash/plugins/-w10-l/var/log/logstash/pro1.log[program:elkpro_2]environment=LS_HEAP_SIZE=5000mdirectory=/opt/logstashcommand=/opt/logstash/bin/logstash-f/etc/logstash/pro2.conf--pluginpath/opt/logstash/plugins/-w10-l/var/log/logstash/pro2.log然后启动servicesupervisordstart即可。logstash会以supervisord子进程的身份运行,你还可以使用supervisorctl命令,单独控制一系列logstash子进程中某一个进程的启停操作:supervisorctlstopelkpro_2关于grok语法官方给定的语法
如果你使用的正则语言可以将nginx日志进行匹配,就可以成功对日志进行切割,效果看下图:
解决说是要设置锚点目前不懂什么意思先放到这里
另外一种说法,暂时不会用,先放着1.if"_grokparsefailure"in[tags]{drop{}}2.match语句跟第一个一样的没啥要点,看着官网例子搞就行了3.尽量用grok吧,grep功能以后要去掉的。当时想的另外一种解决方法就是改nginx的日志格式成json形式的,但是我不想用这种方法。