配置环境:
CentOS7.3
Test1:192.168.1.222
Test2:192.168.1.223
Test3:192.168.1.224
1、 安装java环境以及依赖包 (test2 和test3都要安装)
yum –y install epel-release
yum –y install java-1.8.0 git wget lrzsz
2、安装elasticsearch (可以先在一台安装,后面把目录移过去再改一下配置文件即可)
[root@test2~]#wget https://download.elastic.co/elasticsearch/elasticsearch/elasticsearch-1.7.3.tar.gz
[root@test2 ~]# tar -xf elasticsearch-1.7.3.tar.gz -C /usr/local
3、修改配置文件
[root@test2 ~]# vim /usr/local/elasticsearch-1.7.3/config/elasticsearch.yml
32 cluster.name: elk-cluster #集群名称
40 node.name: "test2" #节点名称,不能和其他的一样
47 node.master: true #节点是否会被当选为主节点
51 node.data: true #是否存储数据
107 index.number_of_shards: 5 #索引分片的个数
111 index.number_of_replicas: 1 #分片的副本个数
145 path.conf: usr/local/elasticsearch-1.7.3/config/ #配置文件的路径
149 path.data: /data/es/data #存放数据的目录
159 path.work: /data/es/work #工作目录路径
163 path.logs: /usr/local/elasticsearch-1.7.3/logs/ #日志文件路径
167 path.plugins: /data/es/plugins #插件路径
184 bootstrap.mlockall: true #内存不向swap交换
212 network.host: 192.168.1.223 #当前节点IP地址
224 http.port: 9200 #对外提供的服务端口
231 http.enabled: true #启用http
326 discovery.zen.ping.unicast.hosts: ["192.168.1.223", "192.168.1.224"] #集群每个节点IP地址,也可以使用els、els.shuaiguoxia.com等名称,需要各节点能够解析
4、创建相关目录
[root@test2 ~]# mkdir -p /data/es{data,work,plugins}
[root@test2 ~]# cd /usr/local/elasticsearch-1.7.3/
[root@test2 elasticsearch-1.7.3]# mkdir logs
5、启动es
[root@test2 ~]# cd /usr/local/elasticsearch-1.7.3/bin/
[root@test2 bin]# nohup sh elasticsearch & #忽略输入并把输出追加到"nohup.out”
[root@test2 ~]# netstat -antulp | grep -E "9200|9300" #查看端口是否开启
用浏览器输入ip地址+端口号测试一下,如果出现这个就是成功了
6、test2这台安装完成了,把目录丢给test3
[root@test2 ~]# scp -r /usr/local/elasticsearch-1.7.3/ 192.168.1.224:/usr/local/
#test2也要创建好相应 的目录,配置文件的话把IP nodename改一下就行 其他配置都相同
7、安装es的管理插件,可以清晰直观的看到es集群的状态
[root@test2 ~]# /usr/local/elasticsearch-1.7.3/bin/plugin -i mobz/elasticsearch-head
安好后访问一下
浏览器输入:http://192.168.1.223:9200/_plugin/head/
Logstash安装
在test1上安装Logstassh
1、 Logstash需要安装java环境
[root@test1 ~]# yum -y install java-1.8.0
2、安装logstash
[root@test1~]# wget https://download.elastic.co/logstash/logstash/logstash-2.0.0.tar.gz
[root@test1~]#tar -xf logstash-2.0.0.tar.gz -C /usr/local/
[root@test1~]#cd /usr/local
[root@test1~]#mkdir etc
3、用Logstash向es集群写数据
[root@test1 etc]# cd /usr/local/logstash-2.0.0/etc/
[root@test1 etc]# cat logstash.conf
input { #数据的输入从标准输入
stdin {}
}
output { #数据的输出我们指向es集群
elasticsearch {
hosts => ["192.168.1.223:9200","192.168.1.224:9200"] #es主机的ip以及端口
}
}
[root@test1 bin]#/usr/local/logstash/bin/logstash -f /usr/local/logstash-2.0.0/etc/logstash.conf --configtest --verbose
Configuration OK #检查配置文件是否有语法错误
[root@test1 bin]# ./logstash -f ../etc/logstash.conf
4、现在把系统日志收集到es去
修改刚才的配置文件 ,然后再启动就可以了
[root@test1 etc]# cat logstash.conf
input { #这里输入使用的文件,即日志文件secure
file{
path => ["/var/log/secure"] #这是日志文件的绝对路径
start_position => "beginning" #这表示从secure的第一行开始读取
}
}
output { #输出到es
elasticsearch {
hosts => ["192.168.1.223:9200","192.168.1.224:9200"]
index => "system-secure-%{+YYYY-MM}" #这里将按照这个索引格式来创建索引
}
}
启动logstash后,我们来看head这个插件的web页面
ok,系统日志我们已经成功的收集到了且已经写入到es集群中,那上面的演示是logstash直接将日志写入到es集群中的,这种场合我觉得如果量不是很大的话直接像上面已将将输出output定义到es集群即可,如果量大的话需要加上消息队列来缓解es集群的压力。
Kafka集群安装配置:
前面写了kafka的集群安装配置了 放在这篇文章里
https://blog.csdn.net/weixin_43112000/article/details/84108042
Kafka集群搭建好后将test1上面的logstash的输出改到kafka上面去 修改如下
[root@test1 etc]# cat logstash.conf
input {
file{
type => "system-secure"
path => ["/var/log/secure"]
start_position => "beginning"
}
}
output {
kafka {
bootstrap_servers => ["192.168.1.222:19092,192.168.1.223:19092,192.168.1.224:19092"]
topic_id => "system-secure"
}
}
进到logstash的bin目录执行命令
[root@test1 bin]# cd /usr/local/logstash/bin/
[root@test1 bin]# ./logstash -f ../etc/logstash.conf
Default settings used: Filter workers: 1
Logstash startup completed
到test2这台机器上看kafka有没有创建新的topic
[root@test2 bin]# ./kafka-topics.sh --list --zookeeper localhost:12181
发现确实生成了
进去看看
[root@test2 bin]# ./kafka-console-consumer.sh --zookeeper 127.0.0.1:12181 --topic system-secure --from-beginning
发现数据写进去了,这时候可以试试开多一个窗口去远程test2,数据在不断的写入
现在我们要把kafka收集到的数据发给es集群中去
在kafka集群上安装Logstash,安装过程看一下上面,这里不再赘述了,这里我再test1使用logstash将kafka上的数据发送给es
修改logstash的配置文件
[root@test1 etc]# cat /usr/local/logstash-2.0.0/etc/logstash.conf
input {
kafka {
zk_connect => "192.168.1.222:12181,192.168.1.223:12181,192.168.1.224:12181"
topic_id => "system-secure"
codec => plain
reset_beginning => false
consumer_threads => 5
decorate_events => true
}
}
output {
elasticsearch {
hosts => ["192.168.1.223:9200","192.168.1.224:9200"]
index => "test-system-secure-%{+YYYY-MM}"
}
}
检测一下会不会报错
[root@test1 etc]# /usr/local/logstash/bin/logstash -f /usr/local/logstash-2.0.0/etc/logstash.conf --configtest –verbose
Ok,语法没有问题,为了看出效果,到test2上随便写一段话到/var/log/secure 里去 看看能不能到es里看到数据
[root@test2 log]# echo “我将随便写几句话进es里” >> /var/log/secure
#解释一下为什么要写东西到test2这台机器上的secure日志,因为test2上的logstash收集/var/log/secure的日志发送给test2上的kafka集群,然后test1上的logstash负责将kafka集群上收集来的日志发送给test3(2)的ES集群上
在浏,览器输入ES的地址
可以看到kafka上的topic确实通过Logstash顺利的将数据写到了ES上去
进去看看 刚才写的话确实发到了这里
Ok,现在去部署一下Kibana
切到test2上,因为这台机器上有ES
[root@test2~]# wget https://download.elastic.co/kibana/kibana/kibana-4.1.0-linux-x64.tar.gz
[root@test2 ~]# tar -xf kibana-4.1.0-linux-x64.tar.gz -C /usr/local/
[root@test2 ~]# cd /usr/local/
[root@test2 local]# ln -sv kibana-4.1.0-linux-x64 kibana
[root@test2 local]# vim kibana/config/kibana.yml
修改完后启动kibana #用nohup将kibana放在后台启动
[root@test2 bin]# nohup sh /usr/local/kibana/bin/kibana &
注意,如果进到kibana并用es上的索引名创建后出现这个界面,可能是时间设置有问题,最好就设置为今天或者今年都可以
Ok,搭建的过程到这里就完了,具体的使用方法还需要慢慢的探索