准备三个两核两G大小的服务器
1.关闭防火墙
1 2 | systemctl stop firewalld setenforce 0 |
2.每一台安装jd环境


查看是否安装成功
java -version
出现版本号则为成功

上传zookeeper和kafka(每一台都需要安装)

将解压包解压后分别移出
zookeeper的解压包移到 /usr/local/zookeeper
kafka的解压包移到 /usr/local/kafka
1 mv kafka_2.11-2.2.0 /usr/local/kafka
2 mv zookeeper-3.4.14 /usr/local/zookeeper
进入 /usr/local/zookeeper中 创建文件
cd /usr/local/zookeeper
mkdir {zkdatalog,zkdata}
进入/usr/loca/zookeeper/conf 复制一个配置文件 修改复制出来的配置文件
cd /usr/local/zookeeper/conf
cp zoo_sample.cfg zoo.cfg
vim zoo.cfg
进入zoo.cfg配置文件中的注释行删掉 server 1 2 3 是三台ip虚拟机的ip

保存退出后 在每一台主机上 进行myid的修改
第一台: echo “1” > /usr/local/zookeeper/zkdata/myid
第二台: echo "2" > /usr/local/zookerper/zkdata/myid
第三台: echo "3" > /usr/local/zookerper/zkdata/myid
启动服务后,依次按着顺序启动zookeeper
cd /usr/local/zookeeper/conf
./zkServer.sh start

启动后查看zookeeper的状态
1 2 | cd /usr/local/zookeeper/bin . /zkServer .sh status |
第一台:

第二台:

第三台:

zookeeper搭建成功
kafka开始搭建 (每一台都进行这个操作)
cd /usr/local/kafka/config
vim server.properties
第一台:
1 2 3 | broker. id =1 advertised.listeners=PLAINTEXT: //kafka01 :9092 zookeeper.connect=192.168.135.129:2181,192.168.135.130:2181,192.168.135.132:2181 |
第二台:
1 2 3 | broker. id =2 advertised.listeners=PLAINTEXT: //kafka02 :9092 zookeeper.connect=192.168.135.129:2181,192.168.135.130:2181,192.168.135.132:2181 |
第三台
1 2 3 | broker. id =3 advertised.listeners=PLAINTEXT: //kafka03 :9092 zookeeper.connect=192.168.135.129:2181,192.168.135.130:2181,192.168.135.132:2181 |
进入 /etc/hosts进行编辑 (每一台都是如此)
1 2 3 4 5 | vim /etc/hosts 192.168.135.129 kafka01 192.168.135.130 kafka02 192.168.135.132 kafka03 |
启动kafka (每一台虚拟机都是如此)
1 2 | cd /usr/local/kafka/bin . /kafka-server-start .sh -daemon .. /config/server .properties |
查看端口 查看是否启动成功

kafka搭建成功
创建一个主题
1 2 | cd /usr/local/kafka/bin . /kafka-topics .sh --create --zookeeper 192.168.135.130:2181(随便一个虚拟机的ip) --replication-factor 2 --partitions 3 <br>--topic aaa |
这样就代表创建成功了aaa的这个主题

查看我们都有哪些主题
1 | . /kafka-topics .sh --list --zookeeper 192.168.135.130 |

模拟一个生产者在(第一台虚拟机)
1 | . /kafka-console-producer .sh --broker-list 192.168.135.129:9092 --topic aaa |
模拟一个消费者(第二台虚拟机)
1 | . /kafka-console-consumer .sh --bootstrap-server 192.168.135.130:9092 --topic aaa --from-beginning |
呈现的结果:
第一台生产(输入一个字符)

第二台消费(第一台生产什么第二台就消费出什么)

我们为了方便可以做一个创建topic的脚本
在第一台虚拟机上:
1 2 3 4 5 6 7 | vim kafka-create-topic.sh #!/bin/bash read -p "请输入一个topic主题:" topic cd /usr/local/kafka/bin . /kafka-topics .sh --create --zookeeper 192.168.135.130:2181 --replication-factor 2 --partitions 3 <br>--topic $(topic) |
创建一个新的yum源
1 2 3 4 5 6 7 8 9 10 | cd /etc/yum .repo.d vim filebeat.repo<br>将以下代码赋值到filebeat.repo里<br> [filebeat-6.x] name=Elasticsearch repository for 6.x packages baseurl=https: //artifacts .elastic.co /packages/6 .x /yum gpgcheck=1 gpgkey=https: //artifacts .elastic.co /GPG-KEY-elasticsearch enabled=1 autorefresh=1 type =rpm-md |
保存退出后即可下载filebeat
1 | yum -y install filebeat |
编辑filebeat配置文件
vim /etc/filebeat/filebeat.yml (paths这里如果你有nginx才可以写)

nginx是创建的一个主题

上面提到nginx 如果没有nginx 可以yum安装一个nginx
1 2 | yum -y install epel* yum -y install nginx |
启动nginx和filebeat
1 2 3 | systemctl start filebeat systemctl enable filebeat systemctl start nginx |
可以给nginx生产一些数据(第一台操作)
1 | yum -y install httpd-tools<br>ab -n1000 -c 200 http: //127 .0.0.1 /ccc (可多执行几遍)<br>curl -I 192.168.135.129:80<br> |
在第二台上消费
1 | . /kafka-console-consumer .sh --bootstrap-server 192.168.135.130:9092 --topic nginx --from-beginning |
出现以下东西则为成功

现在开始收集多个日志 system nginx secure 和日志 编辑filebeat的配置文件
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 | #讲filebeat的input改成下面的样子 filebeat.inputs: #这个是收集nginx的日志 - type : log enabled: true paths: - /var/log/nginx/ *.log //nginx 的日志文件 fields: log_topics: nginx5 // 这个是收集nginx的topic #这个是收集system的日志 - type : log enabled: true paths: - /var/log/messages //system 的日志文件目录 fields: log_topics: messages // 这个是收集system的topic #收集secure的日志 - type : log enabled: true paths: - /var/log/secure //secure 的日志文件 fields: log_topics: secure // 这个是收集secure的topic output.kafka: enabled: true hosts: [ "192.168.18.140:9092" , "192.168.18.141:9092" , "192.168.18.142:9092" ] topic: '%{[fields][log_topics]}' |
注意:一点更要创建三个topic 就是上面的配置文件提到的topic 可以使用上面的脚本创建topic 重启filebeat
systemctl restart filebeat
我是用了三台服务器来做EFK集群
接下来在第二胎安装logstash 在第三胎安装ES集群(就是elasticsearch和kibana)
安装
1 2 3 4 5 | 安装logstash在第二台 rpm -ivh logstash-6.6.0.rpm 安装 kibana 和elasticsearch rpm -ivh elasticsearch-6.6.2.rpm rpm -ivh kibana-6.6.2-x86_64.rpm |
编辑elasticsearch的配置文件
1 2 3 4 | vim /etc/elasticsearch/elasticsearch .yml ############################ network.host: 192.168.18.142 http.port: 9200 |
启动elasticsearch
1 | systemctl restart elasticsearch |
编辑kibana的配置文件
1 2 3 4 5 6 7 8 | vim /etc/kibana/kibana .yml ###################### server.port: 5601 server.host: "0.0.0.0" elasticsearch.hosts: [ "http://192.168.18.142:9200" ] 然后启动kibana systemctl restart kibana |
现在开始 编写logstash的三个配置文件
cd /etc/logstash/conf.d
现在是messages的 vim messages.conf
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | input { kafka { bootstrap_servers => [ "192.168.18.140:9092,192.168.18.141:9092,192.168.18.142:9092" ] group_id => "logstash" topics => "messages" consumer_threads => 5 } } output { elasticsearch { hosts => "192.168.18.142:9200" index => "messages-%{+YYYY.MM.dd}" } } |
现在是nginx的 vim nginx.conf
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | input { kafka { bootstrap_servers => [ "192.168.18.140:9092,192.168.18.141:9092,192.168.18.142:9092" ] group_id => "logstash" topics => "nginx5" consumer_threads => 5 } } filter { grok { match => { "message" => "%{NGINXACCESS}" } } } output { elasticsearch { hosts => "192.168.18.142:9200" index => "nginx1_log-%{+YYYY.MM.dd}" } } |
现在是secure的 vim secure.conf
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | input { kafka { bootstrap_servers => [ "192.168.18.140:9092,192.168.18.141:9092,192.168.18.142:9092" ] group_id => "logstash" topics => "secure" consumer_threads => 5 } } output { elasticsearch { hosts => "192.168.18.142:9200" index => "secure-%{+YYYY.MM.dd}" } } |
添加管道
1 2 3 4 5 6 7 8 | vim /etc/logstash/pipelines .yml - pipeline. id : messages path.config: "/etc/logstash/conf.d/messages.conf" - pipeline. id : nginx path.config: "/etc/logstash/conf.d/nginx.conf" - pipeline. id : secure path.config: "/etc/logstash/conf.d/secure.conf" |
正则匹配
cd /usr/share/logstash/vendor/bundle/jruby/2.3.0/gems/logstash-patterns-core-4.1.2/patterns
vim nginx_access
URIPARAM1 [A-Za-z0-9$.+!*'|(){},~@#%&/=:;_?\-\[\]]*
NGINXACCESS %{IPORHOST:client_ip} (%{USER:ident}|- ) (%{USER:auth}|-) \[%{HTTPDATE:timestamp}\] "(?:%{WORD:verb} (%{NOTSPACE:request}|-)(?: HTTP/%{NUMBER:http_version})?|-)" %{NUMBER:status} (?:%{NUMBER:bytes}|-) "(?:%{URI:referrer}|-)" "%{GREEDYDATA:agent}"
重启logstash systemctl restart logstash
可以在第二台机器上查看模拟消费者的状态 messages的
执行下面的命令可以显示出日志内容就是成功
1 2 | cd /usr/local/kafak/bin . /kafka-console-consumer .sh --bootstrap-server 192.168.18.141:9092 --topic messages --from-beginning<br><br> |

可以在第二台机器上查看模拟消费者的状态 secure的
执行下面的命令可以显示出日志内容就是成
1 2 | cd /usr/local/kafak/bin . /kafka-console-consumer .sh --bootstrap-server 192.168.18.141:9092 --topic secure --from-beginning |

可以在第二台机器上查看模拟消费者的状态 nginx的 nginx的可以生产一些日志文件 创建一些访问记录
执行下面的命令可以显示出日志内容就是成功
1 2 | cd /usr/local/kafak/bin . /kafka-console-consumer .sh --bootstrap-server 192.168.18.141:9092 --topic nginx5 --from-beginning |
