开源实时日志收集平台ELK由ElasticSearch、Logstash、Kibana三个开源工具组成,官方网址为:https://www.elastic.co/products
在Elastic 5.0版本之后,官方又加入了Beats套件,然后把他们统称为Elastic Stack。
ElasticSearch:是一个开源的分布式搜索引擎,其特点有:分布式,零配置,自动发现,索引自动分片,索引副本机制,Rest风格接口,多数据源,自动搜索负载等。
Logstash:是一个开源的日志收集和分析工具,能够将日志进行分析后,提供给ElasticSearch进行使用。
Kibana:可以为ElasticSearch和Logstash提供一个进行日志分析的友好Web界面,帮助汇总、分析、搜索重要日志。
Filebeat:是一个开源的文件收集器,最初是基于Logstash-forward源码的日志数据shipper,适合用于日志文件的收集。把Filebeat安装在服务器上,作为代理来监视日志目录或特定的日志文件,然后把日志数据转发到Logstash中进行分析,或者是直接转发到ElasticSearch中进行搜索。
ELK Stack的部署示意图如下。
整个ELK Stack由5个部分组成:JDK 8,ElasticSearch,Logstash,Filebeat,Kibana。文中所用的ELK Stack组件都是5.0以上版本。
因为整个ELK Stack都需要依赖于JDK 8环境,所以在搭建环境之前,需要先进行JDK的安装和环境变量配置。
1.1 判断JDK是否安装
执行java -version命令,如果打印出下图中的文字,说明JDK已经成功安装,并且配置了环境变量。
1.2 下载JDK
如果没有安装JDK,可以登录Oracle官网进行JDK 8的下载,下载地址为:http://www.oracle.com/technetwork/cn/java/javase/downloads/jdk8-downloads-2133151-zhs.html。
完成下载后,把JDK放到搭建ELK的环境里,执行tar -zxf jdk-8u111-linux-x64.tar.gz -C /usr/local命令,对JDK进行解压。
1.3 配置JDK环境变量
使用vim /etc/profile命令,对profile文件进行编辑。然后在文件末尾,添加以下内容。
export INSTALL4J_JAVA_HOME=/usr/local/java/jdk1.8.0_111 export JAVA_HOME=/usr/local/java/jdk1.8.0_111 export PATH=$JAVA_HOME/bin:$PATH |
然后退出当前用户,重新登录系统。
1.4 验证安装
完成JDK环境变量配置之后,可以通过java -version命令来检查JDK是否安装成功。
2、ElasticSearch
2.1 下载并解压
通过执行wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-5.0.1.tar.gz命令,可以进行ElasticSearch的压缩包下载。
下载完成后执行tar -zxf elasticsearch-5.0.1.tar.gz -C /usr/local命令,把ElasticSearch解压到/usr/local目录下。
2.2 修改配置文件
ElasticSearch的配置文件位于/usr/local/elasticsearch-5.0.1/config目录下。执行vim elasticsearch.yml修改配置文件,在配置文件中添加以下配置。
path.data: /var/lib/elasticsearch path.logs: /var/logs/elasticsearch network.host: 0.0.0.0 |
path.data和path.logs两个变量是对ElasticSearch数据存储目录和日志目录的配置。
Network.host变量,需要配置成0.0.0.0,是为了能让除了本机以外的机器,能通过浏览器成功访问ElasticSearch的地址(http://192.168.2.72:9200/)。
2.3 启动服务
完成配置文件修改后,在ElasticSearch的安装目录下,执行./bin/elsasticserach命令,进行服务器的启动。
ElasticSearch服务在linux系统中,不能直接使用root用户进行启动,需要创建一个非root用户,并且把ElasticSearch相关文件的所有者都修改为这个非root,然后使用该用户进行ElasticSearch的启动。
用户可以通过以下命令进行用户组、用户创建,和修改文件的所有者。
groupadd elsearch useradd elsearch -g elsearch -p elasticsearch chown -R elsearch elasticSearch.log |
服务启动的时候,可能会出现下面截图中的异常信息出现。
这个异常不影响ElasticSearch的使用,只要对linux内核进行升级,异常信息就不会再出现。
2.4 验证安装
可以通过访问http://IP:9200,来验证ElasticSearch是否启动成功。在浏览器中进行访问时,会在页面里返回以下信息。
3、Logstash
3.1 下载并解压
通过执行wget https://artifacts.elastic.co/downloads/logstash/logstash-5.0.1.tar.gz命令来进行Logstash的下载。
下载完成后执行tar -zxf logstash-5.0.1.tar.gz -C /usr/local命令,把Logstash解压到/usr/local目录下。
3.2 测试Logstash
解压完成后,在Logstash的目录下执行./bin/logstash -e 'input { stdin { } } output { stdout {} }'命令,启动Logstash。
启动完成后,直接在控制台中输入HelloWorld,然后回车,将会在控制台中打印出刚才输入的Helloworld。
3.3 创建配置文件
在Logstash的目录下,通过vim logstash-test.cnof命令,创建Logstash的配置文件。配置文件内容如下。
input { file { path =>["/home/test/test.log"] add_field => {"appName" => "test"} type =>"test" } beats { port => 5044 } } filter{ grok { match => {"message" => "\[%{TIMESTAMP_ISO8601:time}\]\[%{LOGLEVEL:level}\]\[%{JAVACLASS:class}:%{NUMBER}\]" } }
} output { elasticsearch { hosts => ["192.168.2.72:9200"] } stdout { codec => rubydebug } |
Input中的file,是用来从指定文件中读取文件数据,beats是配置了一个给Filebeat使用的端口号。
在filter里面,配置了一个grok插件,这个插件的作用是通过正则表达式,对收取到的日志数据进行解析。
在output中配置了两个数据输出方式,elasticsearch是向指定的ElasticSearch进行数据推送,stdout是把收到的数据在控制台进行输出。
3.4 使用配置文件启动
完成配置文件的编写后,在Logstash目录下,执行./bin/logstash -f logstash-test.conf命令,Logstash将会按照配置文件中的配置进行服务启动。
因为在配置文件中配置了file input,所以当服务启动起来后,可以通过执行echo "[2016-12-07 13:41:36,243][INFO][Test.SpringConfigFileLoader:94] Spring Config FileLoader load end.(17)" >>/home/test/test.log命令,向配置的文件里面写数据,模拟日志记录来测试Logstash。
4、Filebeat
4.1 下载并解压
通过执行wget https://artifacts.elastic.co/downloads/beats/filebeat/filebeat-5.0.2-linux-x86_64.tar.gz命令,进行Filebeat的下载。
下载完成后执行tar -zxf filebeat-5.0.2-linux-x86_64.tar.gz -C /usr/local命令,把Filebeat解压到/usr/local目录下。
4.2 配置文件修改
Filebeat的配置文件就在解压后的目录下,通过执行vim filebeat.yml命令,来进行配置文件的修改。可参照下面的内容进行修改。
filebeat.prospectors: - input_type: "log" paths: - /home/Test/default/work_temp/logs/trace.log fields: appName: default logType: trace
- input_type: "log" paths: - /home/Test/default/work_temp/logs/system.log fields: appName: default logType: system
- input_type: "log" paths: - /home/Test/default/work_temp/logs/engine.log fields: appName: default logType: engine
- input_type: "log" paths: - /home/Test/default/work_temp/logs/deploy.log fields: appName: default logType: deploy
multiline.pattern: ^\[ multiline.negate: true multiline.match: after
output.logstash: # The Logstash hosts hosts: ["192.168.2.72:5044"]
|
在配置文件中配置了4个input_type用来对4个日志文件进行监控,同时还对监控到的日志数据增加了appName和logType两个参数。
配置文件中的multiline参数,是用来进行数据多行读取,以实现一次能读取全部异常堆栈的目的。
然后在文件中配置了output.logstash,这是把收集到的日志数据发送到Logstash中进行解析,这里配置的端口需要与Logstash中beats插件配置的端口相对应。
4.3 服务启动
在Filebeat所在目录下,执行./filebeat -e -c filebeat.yml命令,就能完成Filebeat的启动。
5、Kibana
5.1 下载并解压
通过执行wget https://artifacts.elastic.co/downloads/kibana/kibana-5.0.1-linux-x86_64.tar.gz命令,进行Kibana的下载。
下载完成后执行tar -zxf kibana-5.0.1-linux-x86_64.tar.gz -C /usr/local命令,把Filebeat解压到/usr/local目录下。
5.2 配置文件修改
Kibana的配置文件位于解压后的conf目录下,执行vim kibana.yml命令进行配置文件的修改。
在配置文件中增加以下配置。
server.host: "0.0.0.0" elasticsearch.url: "http://192.168.2.72:9200" |
5.3 启动服务
在Kibana目录下,执行./bin/kibana命令,启动服务。
完成启动之后可以在浏览器中进行页面访问,地址为http://192.168.2.72:5601/。
首次登陆的时候,需要先配置索引,默认使用的索引是logstash-*,并且是基于时间的。建议把基于时间的选项取消,然后点击创建。
完成索引配置后,切换到Discover页面就可以开始进行日志数据的检索。