ELK有坑,千万别踩

前言

起源许多年前,一个刚结婚的名叫 Shay Banon 的失业开发者,跟着他的妻子去了伦敦,他的妻子在那里学习厨师 。在寻找一个赚钱的工作的时候,为了给他的妻子做一个食谱搜索引擎,他开始使用 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进行展示
环境如下elasticsearch master 10.5.2.175:9200elasticsearch salve 10.5.2.176:9200logstash 172.17.211.153 启动命令: nohup /usr/local/logstash/bin/logstash -f /usr/local/logstash/config/agent.conf -w 10 -l /usr/local/logstash/logs/logstash-plain.log &nginx es-head: 172.16.211.143:9100kibana: 172.16.211.143:5601【ELK有坑,千万别踩】架构如下:
ELK有坑,千万别踩

文章插图
 
加redis/kafa的原因:在生产环境中,我们的日志可能会有瞬时高峰,而这个时候如果直接存入es,可能会导致es承受不住,从而影响日志的收集和查询 。
一般情况下,我们会将日志存直接放到kafka或者redis这种读写性能非常高的应用中,作为一个缓存,然后通过下游组件(例如logstash)进行消费、过滤后存入ES,然后通过可视化界面查看 。
ELK的工作流程
  • logstash客户端收集到日志后将日志存入到redis之类的缓存中
  • Logstash_server将数据从redis中提取出来并根据/usr/local/logstash/patterns下的文件(文件名随意取)这里叫grok-patterns里面根据不同的日志,比如Apache、nginx服务规定的不同格式来进行切割,切割完毕后将日志存入到elastaicsearch中,格式里面的key vlaue值就是els中的字段和值
  • elastaicsearch对logstash_server发送过来的值进行集群保存,提供被调用接口以及快速的搜索服务(这里还可以安装分词插件,当做搜索引擎)
  • kibana对es根据条件进行搜索并对搜索到的数据进行展示,使我们看起来更加直观 。
一、elasticsearchElasticsearch 是一个开源的搜索引擎,建立在一个全文搜索引擎库 Apache Lucene™ 基础之上 。Lucene 可以说是当下最先进、高性能、全功能的搜索引擎库—无论是开源还是私有 。
中文文档https://www.elastic.co/guide/cn/elasticsearch/guide/current/intro.html#intro
elasticsearch的安装具体安装可以参考https://www.cnblogs.com/yanjieli/p/11187430.html这个教程,这里直说下配置和思路,首先懂思路,安装看教程就行 。
需要有jdk环境vim /etc/elasticsearch/jvm.options2g2g1.vim /etc/elasticsearch/elasticsearch.ymlhttp.port: 9200discovery.zen.ping.unicast.hosts: ["10.5.2.175","10.5.2.176"]network.host: 10.5.2.1752.vim /etc/systemd/system.confDefaultLimitNOFILE=65536DefaultLimitNPROC=32000DefaultLimitMEMLOCK=infinity3.vim /etc/security/limits.conf* soft nofile 65536* hard nofile 65536* soft nproc 32000* hard nproc 32000* hard memlock unlimited* soft memlock unlimited4.vim /etc/sysconfig/elasticsearchJAVA_HOME=/usr/java/jdk1.8.0_1515.vim /usr/lib/systemd/system/elasticsearch.service[Service]LimitMEMLOCK=infinityelasticsearch的问题启动elasticsearch失败,报找不到JAVA环境,可明明系统是有的 解决方法如下:
vim /etc/sysconfig/elasticsearchJAVA_HOME=/usr/java/jdk1.8.0_151elasticsearch的概念
index 索引 相当于数据库里的“数据库” 他是我们存储和索引关联数据的地方
type 类数据 将一类的数据放到一起 相当于数据库中的“表”
id 相当于数据库表中的一行