组件介绍
Elasticsearch
是一个基于Lucene的搜索服务器。提供搜集、分析、存储数据三大功能。
Elasticsearch是用java开发的,并作为apache许可条款下的开源项目发布。
Logstash
主要用来日志的搜集、分析、过滤;可以用它收集日志、转换日志、解析日志并将
他们作为数据提供给其他模块调用;以及将数据发送到向Elasticsearch等数据库中。
Filebeat
Fielbeat是用于转发和采集日志数据的轻量级服务,能监视指定的文件或位置,收集日志信息,
并将数据转发到es等。
相比于Logstash,Filebeat所占系统的cpu和内存几乎可以忽略不计。
可以用Filebeat代替logstash。
Kibana
可以让用户在 Elasticsearch 中使用图形和图表对数据进行可视化。
Kafka
适合做大吞吐数据的临时队列,将它放在filebeat和logstash中可以起到一个缓冲的作用,通常用于集群服务中。
ELK、EFK
ELK
Elasticsearch: 简称es,用来存储数据
Logstash: 收集网络中各个服务上的数据,将收集的数据存储到es中
Kibana:用于展示数据,数组源自es
注意三者版本号需要相同
EFK
Elasticsearch: 简称es,用来存储数据
Filebeat: 收集网络中各个服务上的数据,将收集的数据存储到es、logstash中
Kibana:用于展示数据,数组源自es
注意三者版本号需要相同
注意有时会将filebeat、kafka、logstash、elasticsearch、Kibana穿成一条链。
filebeat放在需要收集数据的机器上,另一个节点kafka缓冲将filebeat推过来的数据发送到logstash,然后logstash再将数据出入到es中,最后Kibana将日志信息做可视化。
ELK搭建
由于目前不会写logstash的配置文件实现把log文件导入一个还没有定义index的elasticsearch中,所以就暂时让logstash从一个es中读入到另一个es中。
环境准备
ubuntu虚拟机:ip=192.168.71.177, elasticsearch容器映射出端口9200
kali虚拟机:ip=192.168.71.128,logstash容器、elasticsearch容器映射端口9200,kibana容器映射端口5601
ubuntu中的es容器先准备好lab_index索引
kali中es容器不需要改动
修改kali中kibana容器
sudo vim /etc/kibana/kibana.yml
,修改elasticsearch.url为要关联的es的url
重启容器docker restart es_kibana
,docker logs -f es_kibana | grep Unable
如果没有unable之类的信息说明修改成功。并且可以访问ip:5601
查看页面。
修改logstash容器
在/usr/share/logstash/bin/
写一个配置文件lab.conf
input{
elasticsearch{
hosts => '192.168.71.177:9200'
index => 'lab_index'
query => '{"query":{"match_all":{}}}'
size => 30
scroll => '5s'
docinfo => true
}
}
output {
elasticsearch {
hosts => "192.168.71.128:9200"
index => "%{[@metadata][_index]}"
document_type => "%{[@metadata][_type]}"
document_id => "%{[@metadata][_id]}"
}
}
然后清除缓存rm /var/lib/logstash/.lock
运行./logstash -f test.conf
之后就可以在kibana网页看到相关信息,
但是kibana会报错Unable to fetch mapping. Do you have indices matching the pattern?
Kibana想映射es的一个索引,需要指定一个在es中已存在的索引,在页面中,有一个默认索引logstash-*
,只有安装了logstash才会有这个索引。
本实验是把不同服务放到不同容器中,所以kibana容器不会装logstash索引。这里直接改成es中一个存在的索引就行。