什么是ELK呢?
ELK是三个组件的缩写, 分别是elasticsearch, logstash, kibana. ELK平台可以用于实现日志收集、日志搜索和日志分析
1.elasticsearch(es): 它是个开源分布式搜索引擎,它的特点有:分布式,零配置,自动发现,索引自动分片,索引副本机制,restful风格接口,多数据源,自动搜索负载等。
2.logstash: 简单说是一个日志收集工具, 可以定义从哪里获取数据, 并且可以简单处理数据, 最后可以定义将数据输出到哪里, 一般输出到es.
3.kibana: 其实就是一个数据展示界面, 并且可以分析数据, 例如从es中读取数据进行展示分析. es自己也带有简单的展示dashboard: http://127.0.0.1:9200/_plugin/head/, 当然 前提是你安装了head插件
如何搭建一个ELK日志分析平台呢?
一.单机安装elasticsearch
1.利用安装elasticsearch的rpm包安装
yum install elasticsearch-2.3.3.rpm
2.配置elasticsearch的配置文件
cd /etc/elasticsearch/
vim elasticsearch.yml # 主配置文件
17 cluster.name: my-es # 集群的名称my-es
23 node.name: server1 # 当前节点的主机名
33 path.data: /var/lib/elasticsearch/ # 数据目录
37 path.logs: /var/log/elasticsearch/ # 日志目录
54 network.host: 172.25.1.1 # 当前主机的IP
58 http.port: 9200 # 对外端口号
3.安装java环境(因为Elasticsearch是用Java开发的)
rpm -ivh jdk-8u121-linux-x64.rpm
4.启动elasticsearch服务
/etc/init.d/elasticsearch start
打开服务后可以在浏览器中输入当前主机的IP和端口号查看(只有简单的数据,没有图形界面也没有分析等,所以我们选择安装相应图形界面的插件,方便分析处理数据)
5.安装插件:
cd /usr/share/elasticsearch/
cd /bin
./plugin list # 查看已经安装的插件
/usr/share/elasticsearch/bin/plugin install file:/root/elk/elasticsearch-head-master.zip
6.安装插件以后,我们在浏览器中查看,得到的就是比较便于观察和分析的web界面
7.在该web界面下建立索引尝试查询
二 . 集群Elasticsearch的安装和配置
Elasticsearch是一个开源的高扩展的分布式全文检索引擎,它可以近乎实时的存储、检索数据;本身扩展性很好,可以扩展到上百台服务器,处理PB级别的数据。
ES可以作为一个独立的单个搜索服务器。不过,为了处理大型数据集,实现容错和高可用性,ES可以运行在许多互相合作的服务器上。这些服务器的集合称为集群。
1.在server2和server3上安装elasticsearch-2.3.3.rpm和jdk-8u121-linux-x64.rpm
rpm -ivh jdk-8u121-linux-x64.rpm
yum install elasticsearch-2.3.3.rpm
2.编辑sevre1上的配置文件elasticsearch.yml
72行 discovery.zen.ping.unicast.hosts: ["server1", "server2","server3"]
# 表示该集群由三台主机构成,主机名分别是server1,server2和server3
将修改好的配置文件发送给server2和server3上,在server2上和server3上修改配置文件中的sevrername和ip
3.启动server2和sevrer3上的服务
/etc/init.d/elasticsearch start
4.为了将集群中三台主机所负责的功能模块分开,我们在配置文件中设定:
server1:
#server1是主节点,同时承担http查询任务
vim elasticsearch.yml
23 node.name: server1
24 node.master: true
25 node.data: false
26 http.enabled: true
server2:
# server2负责存储数据和http查询任务
vim elasticsearch.yml
23 node.name: server2
25 node.master: false
26 node.data: true
27 http.enabled: