ELK(Elastic search,Logstash,Kibana)是时下比较流行的日志检索框架,三者均为Elastic公司的产品,所以三者基本上达到了密不可分的地步。
Elastic search:是一个分布式数据存储以及检索架构,基于Lucene(一个开放源代码的全文检索引擎工具包)实现,通信方面是基于restful接口,为当前世界上最流行的企业级搜索架构(比solr还流行)。
Logstash:是一个日志框架,主要对日志进行收集、分析和处理。
Kibana:是一个web可视化的交互工具,主要对es进行数据的存储、查看和搜索。
1.下载安装包
三者版本均为6.8.3,没有下最新版的,目前最新版7.4.2要求jdk版本是11,我的是1.8的jdk,所以下6.x版本就可以了,以下是下载地址:
elastic search:https://www.elastic.co/cn/downloads/elasticsearch
logstash:https://www.elastic.co/cn/downloads/logstash
kibana:https://www.elastic.co/cn/downloads/kibana
三者的下载都是一样的,看清楚名字别下错了就好(不愧是同一个公司的产品)。我们主要下载tar.gz安装包和sha,sha是一个完整性校验的东西,如果你觉得你的下载没问题其实可以不下这玩意。(这是国外网站,所以下载速度慢,我是在本地下载了再通过xftp传服务器的,服务器用wget下载一个es花了个把小时。。。)
2.安装Elastic search
这里提一句,安装ELK需要首先安装jdk环境,这个很简单,网上有安装步骤,或者参考:https://blog.csdn.net/liu1160848595/article/details/102838318。
2.1 解压安装包
我就不用sha检查安装包了,我直接开始安装了。将文件从下载目录解压到指定的解压目录:
#-C为指定解压目录
[root@VM_0_4_centos elasticSearch]# tar -zxvf elasticsearch-6.8.3.tar.gz -C /usr/ELK/
可以看到解压目录有解压文件,文件目录如下所示:
2.2 修改配置文件
修改config目录下的elasticsearch.yml中的host及port
[root@VM_0_4_centos elasticsearch-7.4.2]# vim config/elasticsearch.yml
增加以下两条配置:
network.host: 0.0.0.0
http.port: 9200
2.3 启动es
启动bin目录下的elasticsearch
[root@VM_0_4_centos elasticsearch-7.4.2]# ./bin/elasticsearch
当发现started的时候代表启动成功了
es的安装问题太多了,我单独记录下来了:CentOS7下安装elastic search错误记录
这时候我新开了一个xshell窗口,运行以下命令测试连接:
[root@VM_0_4_centos ~]# curl http://172.17.0.4:9200
这是我的内网ip,es好像是不能外网访问的,我找了网上的一些方法配置外网访问都不成功,也可能是我找的姿势不对,不过也不强求,我只要内网访问就行,下面是访问成功的显示:
3 安装Logstash
es安装成功之后,接着安装logstash。
3.1 解压安装包
将下载好的logstash安装包解压到指定目录:
[lgs@VM_0_4_centos logstash]$ tar -zxvf logstash-6.8.3.tar.gz -C /usr/ELK/
可以看到解压目录如下:
3.2 启动程序
进入logstash安装目录,执行以下命令启动:
[lgs@VM_0_4_centos logstash-6.8.3]$ ./bin/logstash -e 'input { stdin { } } output { stdout {} }'
稍等一会启动成功之后,输入字符串可以看到输出如下:
这次启动没es那么多幺蛾子,心里还是很舒畅的。
接下来配置日志输出到es中,在config目录下创建一个脚本文件:logs.conf,写入下面内容:
input {
tcp {
mode => "server"
host => "0.0.0.0"
port => 4560
codec => json_lines
}
}
output {
elasticsearch {
hosts => "172.17.0.4:9200"
index => "logstash-%{+YYYY.MM.dd}"
}
}
其中:下面的hosts为es的地址和端口,index为es的索引。
接下来按配置文件启动:
[lgs@VM_0_4_centos logstash-6.8.3]$ ./bin/logstash -f ./config/logs.conf
这里启动的时候突然给我出现了一个错,之前也没出现:
[lgs@VM_0_4_centos logstash-6.8.3]$ ./bin/logstash -f ./config/logs.conf
Java HotSpot(TM) Server VM warning: INFO: os::commit_memory(0xaac00000, 1006632960, 0) failed; error='Cannot allocate memory' (errno=12)
#
# There is insufficient memory for the Java Runtime Environment to continue.
# Native memory allocation (mmap) failed to map 1006632960 bytes for committing reserved memory.
# An error report file with more information is saved as:
# /usr/ELK/logstash-6.8.3/hs_err_pid12341.log
这个是因为服务器内存很小,但是es和logstash默认的都是分配1G内存,导致我的服务器分配不过来,所以需要将es和logstash的内存改成适合的就好,我按照网上的方法修改了一下logstash的jvm内存,再启动就没问题了:
在config/jvm.options里修改:-Xms768m ,-Xmx768m
下面是启动成功的界面:
至此,logstash也安装成功了!
4 安装kibana
现在安装ELK的最后一个,kibana
4.1 解压安装包
首先将kibana的安装包解压到指定目录
[root@VM_0_4_centos kibana]# tar -zxvf kibana-6.8.3-linux-x86_64.tar.gz -C /usr/ELK/
解压后的目录如下:
4.2 修改配置文件
kibana需要修改地址和端口供远程访问,所以需要简单配置一下:修改config/kibana.yml文件,添加以下几行:
#开放端口
server.port: 5601
#设置远程访问
server.host: “0.0.0.0”
#配置es地址
elasticsearch.hosts: [“http://172.17.0.4:9200”]
[root@VM_0_4_centos kibana-6.8.3-linux-x86_64]# vim config/kibana.yml
4.3 启动kibana
启动bin目录下的kibana,可以后台启动并将输出追加到nohup.out中:nohup ./bin/kibana &,我这里就简单启动一下,不让他后台启动。
[root@VM_0_4_centos kibana-6.8.3-linux-x86_64]# ./bin/kibana
这时候理论上已经可以启动了,但是出现了一个比较尴尬的事情,我的服务器配置很低,内存才2G,所以三个框架装上去了之后,启动Kibana的时候老是说连接不上es,我跑到es那边看看,发现已经被kill掉了,重启es还是在半路上就killed了
还是内存太小的问题,没办法只能改内存,把es的内存改到256m,这时候es才能启动成功。一般来说es的数据量不会小,所以应该分配一个比较大的内存,但是我这里只是用来学习的服务器,所以不会有大数据量,所以就先这么用着。
kibana启动成功:
kibana启动成功之后,就可以在浏览器直接访问了(如果没开放对应的防火墙需要先开放系统5601端口的防火墙):
下面是远程访问kibana的界面:
此时此刻,ELK的环境已经部署好了,但是真正的挑战还未开始,而ELK也只是这类日志处理方式的一种比较原始的方式而已(单机版的),后期如果有机会,我会在此基础上加上kafka,Filebeat这些框架,再通过与其他分布式框架的结合,来进行实战演练。