Elasticsearch&Logstash&Kibana日志搜索架构搭建(1)

又是好久没有进行更新博客了…前端时间一直在忙Docker的事情,然后你懂的。我想将ELK的集群架构写完之后再去慢慢的写Docker的事情(因为Docker的文字量太大讲的太多)。回到正题,这篇文章主要讲解三个组件的各自用法,随后下一篇博客才讲解架构搭建,不过在说ELK架构之前首先说说它的基础框架Lucene。

关于Lucene:

Lucene是apache基金会其下的一款开源的搜索引擎程序,但是该程序只有搜索引擎的基本框架,没有任何前端支持!①不提供搜索界面②不抓取任何原始文档,其实Lucene只是一个开发库,也可以说是一个搜索引擎(只有后端框架)。对于非开发人员来说肯定压根没法使用(甚至安装),如果对这个底层架构有更多的了解可以访问:http://lucene.apache.org

什么是Elasticsearch:

Elasticsearch是基于Lucene上构建的一个前端,拥有:用户搜索的界面、开源、分布式、Restful的全文本搜索引擎,此外它还是一个分布式实时文档存储,其中每个文档的每个field均是被索引的数据,且可被搜索,也是一个带实时分析功能的分布式搜索引擎,能够扩展至数以百计的节点实时处理PB级别的数据。

首先我们先安装一个Elasticsearch来看看这个接口是什么样子的!

安装Elasticsearch:

首先得去官网上下载Elasticsearch的安装包,安装包支持多种比如RPM、DEB、源码等方式。下载地址点这里!我这边提供的是RPM包的安装方式。

其实源码安装也非常简单由于Elasticsearch是JROBY研发所以需要安装jdk的安装包(可以使用oracle或者使用openjdk最好在1.8.0版本或以上)如果使用openjdk的rpm包,需要安装三个包:devel headless和原包!然后安装Elasticsearch官网下下载的rpm包安装即可。但是源码安装自定义较高但是还得添加环境变量,不然启动会比较麻烦。

我提供的JDK是oralce的版本并且还是二进制版本放在/opt目录下面。不管你是使用源码还是RPM包都需要安装JDK最好是1.8版本以上!

安装jdk:

cd /opt
tar -xf jdk-8u111-linux-x64.tar.gz
ln -s jdk1.8.0_111/ jdk
#这样就算安装好了,随后添加好环境变量就能使用。
vim /etc/profile.d/java.sh
export JAVA_HOME=/opt/jdk
export PATH=$JAVA_HOME/bin:$PATH
#随后使用source加载就行
source /etc/profile.d/java.sh
java -version
java version "1.8.0_111"
Java(TM) SE Runtime Environment (build 1.8.0_111-b14)
Java HotSpot(TM) 64-Bit Server VM (build 25.111-b14, mixed mode)

安装Elasticsearch:

yum localinstall -y elasticsearch-5.6.1.rpm
#这样就算安装完毕了,随后看看安装生成的文件:
rpm -ql elasticsearch
/etc/elasticsearch/elasticsearch.yml
/etc/elasticsearch/jvm.options
/etc/elasticsearch/log4j2.properties
/etc/elasticsearch/scripts
/etc/init.d/elasticsearch
/etc/sysconfig/elasticsearch
/usr/lib/sysctl.d/elasticsearch.conf
/usr/lib/systemd/system/elasticsearch.service
......
关于Elasticsearch的配置文件:

配置文件在/etc/elasticsearch/*一共有三个文件,首先看看elasticsearch.yml:

node.name: node-1 #节点名,默认为node-1
cluster.name: my-application #集群名称:
#一般中小环境不会涉及,不过搭建集群是会使用名字来判断是否与之在同一集群
path.data: /path/to/data #elaseicsearch放置数据的存放位置,默认在/var/lib/elasticsearch/
path.logs: /path/to/logs #elasticsearch方式日志的存放位置,默认在/var/log/elasticsearch/
network.host: IP #elasticsearch的监听地址,默认为环回口127.0.0.1
http.port: 9200 #elasticsearch的监听端口,默认为9200

然后看看jvm.options 这里面主要写的配置都是启动elasticsearch时jvm的配置。对于运维来说只要看一个参数就行:

-Xms2g #elasticsearch最小内存
-Xmx2g #elasticsearch最大内存

其他的可以找JAVA程序员看看,如果需要对Elasticsearch进行修改的情况下!

最后看看log4j2.properties这个配置文件,打开后如果你不是JAVA程序员你会觉得里面的内容莫名其妙,但是里面的配置文件是程序中抽出来的,如果需要可以进行改动(前提你公司有JAVA程序员指导)!

关于Elasticsearch启动:

修改完配置文件之后那么可以进行启动了,使用RPM包启动非常简单,直接使用systemctl start elasticsearch即可,随后别忘了去看elssticsearch的日志,或者过1分钟查看端口是否监听来判断是否启动!这里有几点需要注意

  1. 如果没有启动成功多半是JAVA环境的问题,关于配置JAVA环境得去/etc/sysconfig/elasticsearch中寻找关键字# Elasticsearch Java path 比如我的JAVA环境位置在/opt/jdk中那么修改为:JAVA_HOME=/opt/jdk即可!在这个配置文件中还有其他选项比如# Elasticsearch data directory修改elasticsearch的数据存放位置如果不是默认的/var/lib/elasticsearch的话得进行修改。当然还有日志存放位置这边我就不多说了,请自行查看!
  2. 如果能够启动并且能够输出日志但是还是显示启动失败,请去查看日志(默认位置在/var/log/elasticsearch/elasticsearch.log)可能会出现这个失败字段:java.lang.IllegalStateException: Failed to create node environment其实并没有输出什么有用的信息,别着急随后慢慢往下面看!到这里:Caused by: java.nio.file.AccessDeniedException: /opt/elasticsearch_data/nodes 然后你就明白了,elasticsearch使用RPM包安装之后所有日志、数据存放都使用的是elasticsearch的属主属组。所以如果需要更改日志、数据存放位置别忘了修改属主属组!

启动完毕以后那就试试看elasticsearch的接口吧!

使用elasticsearch API:

想要与Elasticsearch进行交互必须使用curl接口进行,不过现在有很多插件自己调用curl,可以不用使用CLI接口来操作Elasticsearch直接登入web就能对Elasticsearch进行控制!这边的调用接口其实就是演示一下elasticsearch,别忘了在你的linux发行版中安装curl命令!

比如测试elasticsearch是否存在可以使用:

curl -XGET ‘http://192.168.80.50:9200/?pretty’ #写清楚请求方法,随后跟上elasticsearch的
{
“name” : “FxNKsQF”,
“cluster_name” : “elasticsearch”,
“cluster_uuid” : “c3QHokyyQf-KeLu_r_legw”,
“version” : {
“number” : “5.6.1”,
“build_hash” : “667b497”,
“build_date” : “2017-09-14T19:22:05.189Z”,
“build_snapshot” : false,
“lucene_version” : “6.6.1”
},
“tagline” : “You Know, for Search” #这里可以看到测试elasticsearch成功。
}

比如查看有多少查询API子命令可以使用:

curl -XGET ‘http://192.168.80.50:9200/_cat/?pretty’
=^.^=
/_cat/allocation
/_cat/shards
/_cat/shards/{index}
/_cat/master
/_cat/nodes
/_cat/tasks
/_cat/indices
/_cat/indices/{index}
/_cat/segments
/_cat/segments/{index}
/_cat/count
/_cat/count/{index}
/_cat/recovery
/_cat/recovery/{index}
/_cat/health
/_cat/pending_tasks
/_cat/aliases
/_cat/aliases/{alias}
/_cat/thread_pool
/_cat/thread_pool/{thread_pools}
/_cat/plugins
/_cat/fielddata
/_cat/fielddata/{fields}
/_cat/nodeattrs
/_cat/repositories
/_cat/snapshots/{repository}
/_cat/templates

看来可以使用的查询接口还是很多的,查询命令为_cat后面跟上子命令可以查看。

随后看看节点的相关信息:

curl -XGET ‘http://192.168.80.50:9200/_cat/nodes?v’
ip                    heap.percent   ram.percent     cpu   load_1m   load_5m   load_15m   node.role   master name
192.168.80.50         58                        96                8            0.01           0.08              0.19               mdi *          FxNKsQF

看来调用API其实并不是很复杂,不过里面命令很多!如果有需要可以查看elasticsearch的接口文档进行详细查看,点这里

elasticsearch的API接口虽然简单,但是非常的丰富涉及的内容不是本博客说的完的,如果直接使用elasticsearch来进行存储日志除非你是开发人员进行调用API接口进行设计程序否则还是接下来看看logstash吧!

什么是logstash:

logstash实现向生产日志服务器上收集日志(前提要安装agent端口),并通过一个管道存储在Elasticsearch之中(其实就是调用elasticsearch的API)。logstash支持多数据获取机制,通过tcp/udp协议、文件、syslog、windows事件查看器、Ereatlogs及STDIN等;获取到数据以后它支持对数据进行过滤,修改等操作送给elasticsearch存储!logstash使用JROBY语言研发,所以需要JVM为前提!

关于logstash工作流程:

关于logstash的工作流程:

安装logstash:

安装logstash其实和elasticsearch类似,也需要jdk的支持。安装jdk环境在elasticsearch部分中中已经讲过了,请自行查看!RPM包安装elasticsearch DEB包同理:

#在安装之前如果你和我一样使用的oracle的jdk包并且二进制安装别忘了添加一条软链:
ln -s /YOUR/JDK/PATH/bin/java /usr/bin/java
#随后进行安装
yum install logstash-5.6.1.rpm -y
#安装的时候会寻找/usr/bin/java这个二进制文件如果没有安装会保存导致启动文件不会安装!
logstash的配置文件:

配置文件在/etc/logstash/*中里面的文件还是很多的,一个一个来说:

第一个是jvm.options,这个配置文件其实和elasticsearch类似,其实大多数修改的数值是内存最大和最小值,不过Logstash最小值只有256m所以不用担心内存问题。

第二个看看log4j2.properties,其实和elasticsearch一样…这里不必赘述。

第三个看startup.options,这个是logstash启动的环境寻找选项,其实和elasticsearch中/etc/sysconfig/elasticsearch一样。不过刚刚我在安装过程中已经添加好了软链所以这里面的“JAVACMD=”选项保持在/usr/bin/java也没有问题,当然也可以进行修改!甚至PID文件位置也能修改。

最后一个看看真正的配置文件logstash.yml:

#在非集群环境中一般用到四个选项:
path.data: /var/lib/logstash #数据临时存放位置,默认/var/lib/logstash
path.config: /etc/logstash/conf.d #logstash处理日志配置文件存放位置
path.logs: /var/log/logstash #日志存放位置

如果你有对处理日志的配置文件位置有所改动的话别忘了使用Logstash属主属组!这边使用/etc/logstash/conf.d下面建立配置文件:

vim /etc/logstash/conf.d/logstash_index.conf
input{ #日志流输入设置
 file{ #通过文件形式查找日志
path => "/usr/local/tomcat/logs/catalina.out" #日志位置
start_position => "beginning" #日志文件从哪里开始搜索,默认为从头开始通过管道传送
}
}
output{ #日志输出设置
 elasticsearch {
 hosts => "192.168.80.50:9200" #elasticsearch的地址、端口
 index => "logstash_app" #给输出日志打上标签
#注意:此标签非常关键用于区分应用将来在kibana可以方便添加。
 }
 stdout{
 codec=>rubydebug
 }
}

这样就算将logstash构建完毕了,接下来就可以启动了!

启动logstash:

启动也非常的简单,如果是RPM包安装并且安装成功直接使用systemctl start logstash即可随后使用ps -aux | grep “logstash”查看进程是否存在即可!

不过如果你是下载二进制包的话可能会麻烦点,进入/YOUR/LOGSTASH/PATH/bin中有一个logstash的启动脚本文件,启动的时候千万别直接./logstash start这样否则肯定出错。启动时候记得将logstash放入使用nohup命令将程序托管后放入后台,启动应该这样:nohup ./logstash -f /YOUR/LOGSTASH/PASH/YOUR.conf 2>&1 & 其中表示指明Logstash的日志流管理的配置文件。

如果启动成功后可以去elasticsearch中使用API来查看传送的日志信息,首先我们要查找所有管道传送的日志索引使用:curl -XGET ‘http://192.168.80.50:9200/_search?pretty’  来查看,其中包含了索引、标签、字段等信息。当然查询数据可能更麻烦一些,不过如果就这样使用curl调用elasticsearch可能不会符合当初的想法(还不如用grep查找日志呢)所以又有一个新的工具kibana!

什么是kibana?

kibana是elasticsearch的插件用于展示elasticsearch的集群数据,搜索数据,查看状态等web段的一款简便工具。这样就省去了调用elasticearch的API接口的麻烦!

kibana安装、配置、启动:

安装直接使用RPM包或者DEB包安装即可,kibana已经自带web的集成应用所以一般情况下内部使用可以无需进行代理。配置文件在/etc/kibana下面一个叫做kibana.yml文件:

vim /etc/kibana/kibana.yml
server.port: 5601 #修改kibana的监听端口,默认为5601建议不要80端口!
server.host: "192.168.80.50" #修改kibana的监听地址
elasticsearch.url: "http://192.168.80.50:9200" #修改kibana的调用elasticsearch的API接口

随后就是启动kibana了,启动直接使用systemctl start kibana启动即可!

结语:

这么快就到结语了?还没有说如果将三个应用结合使用呢,不着急下一篇讲解!

Comments

Leave a Reply

Your email address will not be published. Name and email are required