什么是ELK?ELK是由Elasticsearch、Logstash、Kibana 三个开源的组件组成的一个组合体,其主要特点有如下几个:
1、处理方式灵活:elasticsearch是实时全文索引,具有强大的搜索功能。
2、配置相对简单:elasticsearch全部使用JSON接口,logstash使用模块配置,kibana的配置文件部分更简单。
3、检索性能高:基于优秀的设计,虽然每次查询都是实时,但是也可以达到百亿级数据的查询秒级响应。
4、集群线性扩展:elasticsearch和logstash都可以灵活线性扩展。
5、前端操作绚丽:kibana的前端设计比较绚丽,而且操作简单。
下面我们初步部署一下这个组件,初步感受一下其是个什么东东;
我是在一台测试机器上部署的,是一台物理机,当然这个在虚拟机也可以部署,只要装好docker引擎的linux系统都应该可以部署成功;
预装环境 |
版本 |
---|---|
操作系统 | centos 7.6 |
内存 | 大于4G |
docker-compose | 1.29.2 |
docker 引擎 | 20.10.12 |
为了更好,更方便的部署环境,我们尽量采用基于docker的环境来部署这3个组件,这三个组件都有官方提供的docker容器包供我们使用,所以部署起来还是很方便的。
1.首先安装docker引擎,和docker-compose组件,具体的安装步骤这里不赘述;
2.在宿主机操作系统里执行修改/etc/fstab文件内容,注释掉这一行 /dev/mapper/centos-swap swap,如下图:这个似乎不是必须做的,但做了以后效率应该会提升;
3.然后在就是宿主机的磁盘上,建个新的文件夹,名字自己定,新建一个docker-compose.yml的文件,内容如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 |
|
4.定位到文件docker-compose.yml文件所在的目录,在当前路径下执行命令:docker-compose up -d
如下图:
如果使用这个docker-compose部署方式有问题,可以使用docker命令的方式来部署,具体docker部署的详细过程,可以参考:
elasticsearch的docker部署
kibana的docker部署
logstash的docker部署
首先,我们执行命令:docker ps 看一下有几个容器在运行,如果有2个或者3个容器运行都算正常;
刚开始查看容器的时候,可能会看到3个容器在运行,包括logstash的容器,一会可能logstash的容器就退出了,这个是正常的,因为logstash这个容器默认装好一个后,就必须以交互模式运行才不会退出,以 运行的模式运行该容器就会退出的,一会我们以交互模式验证一下是否部署好就可以了;在这之前,我们得先验证一下elasticsearch这个容器中的组件是否正常运行:
在命令行里输入curl http://127.0.0.1:9200 查看响应结果,如下:
说明部署成功了;
当然我们用可以在浏览器里直接访问这个容器所对应的宿主机的ip和端口来进行访问验证,我这里宿主机的ip是192.168.13.64,所以在浏览器里输入:192.168.13.64:9200 ,也会看到如下响应,说明成功了;
同样的,在本地命令行里输入: curl http://127.0.0.1:5601,查看响应,不报错就行,如下:
这种验证方法不直观,更好的方法是在浏览器里验证,输入:192.168.13.64:5601,会有一次重定向跳转,到如下页面说明部署成功;
因为logstash和es配合还依赖于file
1 |
|
以交互模式启动logstash的容器后,在容器内部,输入命令:logstash -e "input { stdin {} } output{stdout{}}"
把标准的输入输出作为logstash的输入和输出验证是否启动,界面如下:
当出现The stdin plugin is now waiting for input提示后,随便在命令行输入一些字符,回车,就会收到logstash给的响应字段,说明logstash是能正常运行的;
如果我们想让logstash和Elasticsearch能配合使用,我们需要另外一个插件filebeat;
logstash 和filebeat都具有日志收集功能,filebeat更轻量,占用资源更少,但logstash 具有filter功能,能过滤分析日志。一般都是filebeat采集日志,然后发送到MQ中,然后logstash去读取,利用filter功能过滤分析,然后存储到elasticsearch中,至于filebeat和logstash是否可以配合使用,这里时间问题就不多说了,留给后续给大家分享;