准備三台centos7的服務器 兩核兩G的
關閉防火牆和SELinux
systemctl stop firewalld
setenforce 0
rpm -ivh jdk-8u131-linux-x64_.rpm 准備中... ################################# [100%] 正在升級/安裝... 1:jdk1.8.0_131-2000:1.8.0_131-fcs ################################# [100%] Unpacking JAR files... tools.jar... plugin.jar... javaws.jar... deploy.jar... rt.jar... jsse.jar... charsets.jar... localedata.jar... java -version //執行這條命令可以看到jdk的版本 就是jdk環境配置成功 java version "1.8.0_131" Java(TM) SE Runtime Environment (build 1.8.0_131-b11) Java HotSpot(TM) 64-Bit Server VM (build 25.131-b11, mixed mode)
2. 因為我裝的是無圖形化界面的centos 每一台虛擬機都需要
yum -y install wget cd /usr/local/src ##這個下載的是zookeeper wget http://mirrors.cnnic.cn/apache/zookeeper/zookeeper-3.4.14/zookeeper-3.4.14.tar.gz ##這個下載的是kafka wget http://mirrors.tuna.tsinghua.edu.cn/apache/kafka/2.2.0/kafka_2.11-2.2.0.tgz
3. 解壓zookeeper 然后移動到/usr/local/zookeeper kafka做同樣的操作 kafka移動到/usr/local/kafka
tar -zxf zookeeper-3.4.14.tar.gz mv zookeeper-3.4.14 /usr/local/zookeeper tar -zxf kafka_2.11-2.2.0.tgz mv kafka_2.11-2.2.0 /usr/local/kafka
4.在 /usr/local/zookeeper創建兩個目錄 zkdatalog zkdata
cd /usr/local/zookeeper
mkdir {zkdatalog,zkdata}
5.進入/usr/loca/zookeeper/conf 復制一個配置文件 修改復制出來的配置文件
cd /usr/local/zookeeper/conf cp zoo_sample.cfg zoo.cfg vim zoo.cfg ******************************* tickTime=2000 initLimit=10 syncLimit=5 dataDir=/usr/local/zookeeper/zkdata datalogDir=/usr/local/zookeeper/zkdatalog clientPort=2181 server.1=192.168.18.140:2888:3888 server.2=192.168.18.141:2888:3888 server.3=192.168.18.142:2888:3888 *******************************
6. 每一台的操作都不一樣
第一台 echo '1' > /usr/local/zookeeper/zkdata/myid 第二台 echo '2' > /usr/local/zookeeper/zkdata/myid 第三胎 echo '3' > /usr/local/zookeeper/zkdata/myid
7.啟動服務 啟動的時候按順序開啟 第一台 第二台 第三台
cd /usr/local/zookeeper/bin ./zkServer.sh start ZooKeeper JMX enabled by default Using config: /usr/local/zookeeper/bin/../conf/zoo.cfg Starting zookeeper ... STARTED
8.查看是否開啟 zookpeer 的狀態
第一台 顯示這個狀態表示成功 ./zkServer.sh status ZooKeeper JMX enabled by default Using config: /usr/local/zookeeper/bin/../conf/zoo.cfg Mode: follower 第二台 ./zkServer.sh status ZooKeeper JMX enabled by default Using config: /usr/local/zookeeper/bin/../conf/zoo.cfg Mode: leader 第三台 ./zkServer.sh status ZooKeeper JMX enabled by default Using config: /usr/local/zookeeper/bin/../conf/zoo.cfg Mode: follower
搭建kafka
第一台 cd /usr/local/kafka/config vim server.properties ********************* broker.id=1 advertised.listeners=PLAINTEXT://kafka01:9092 zookeeper.connect=192.168.18.140:2181,192.168.18.141:2181,192.168.18.142:2181 (三台服務器的IP地址) 第2台 cd /usr/local/kafka/config vim server.properties ********************* broker.id=2 advertised.listeners=PLAINTEXT://kafka02:9092 zookeeper.connect=192.168.18.140:2181,192.168.18.141:2181,192.168.18.142:2181 (三台服務器的IP地址) 第3台 cd /usr/local/kafka/config vim server.properties ********************* broker.id=3 advertised.listeners=PLAINTEXT://kafka03:9092 zookeeper.connect=192.168.18.140:2181,192.168.18.141:2181,192.168.18.142:2181 (三台服務器的IP地址)
10.vim /etc/hosts
添加以下內容在每一台服務器上 192.168.18.140 kafka01 192.168.18.141 kafka02 192.168.18.142 kafka03
11.啟動kafka的命令 每一台都啟動kafka
cd /usr/local/kafka/bin
./kafka-server-start.sh -daemon ../config/server.properties
啟動之后可以查看端口9092
ss -ntlp | grep 9092
12.創建主題 topics
cd /usr/local/kafka/bin ./kafka-topics.sh --create --zookeeper 192.168.18.140:2181(這個ip地址隨便寫三台服務器中的一個就可以)--replication-factor 2 --partitions 3 --topic wg007
查看主題 如果可以顯示剛剛創建的就是成功了
cd /usr/local/kafka/bin ./kafka-topics.sh --list --zookeeper 192.168.18.140:2181
模擬生產者 執行代碼后就會有一個小的 >
cd /usr/local/kafka/bin ./kafka-console-producer.sh --broker-list 192.168.18.140:9092 --topic wg007 >
在第二台服務器上模擬消費者
/usr/local/kafka/bin/kafka-console-consumer.sh --bootstrap-server 192.168.18.141:9092 --topic wg007 --from-beginning
測試模擬生產者和消費者是否成功
在模擬生產者的服務器上寫一些東西 可以在模擬消費者的服務器上可以看到表示成功如下所示
寫一個腳本用來創建kafka的topic
cd /usr/local/kafka/bin vim kafka-create-topics.sh ################################# #!/bin/bash read -p "請輸入一個你想要創建的topic:" topic cd /usr/local/kafka/bin ./kafka-topics.sh --create --zookeeper 192.168.18.140:2181 --replication-factor 2 --partitions 3 --topic ${topic}
創建一個新的yum源
vim /etc/yum.repo.d/filebeat.repo ***加入以下內容 [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
安裝
yum -y install filebeat
編輯filebeat的配置文件
cd /etc/filebeat vim filebeat.yml 修改以下內容 enabled: true paths: - /var/log/nginx/*.log //寫這個路徑的前提是安裝nginx output.kafka: enabled: true # Array of hosts to connect to. hosts: ["192.168.18.140:9092","192.168.18.141:9092","192.168.18.142:9092"] topic: nginx5 //寫這個nginx_log1 的前提是有nginx_log1的topic 上面有生產者的腳本
安裝nginx
yum -y install epel*
yum -y install nginx
啟動nginx和filebeat
systemctl start filebeat
systemctl enable filebeat
systemctl start nginx
可以給ningx生產一些數據
yum -y install httpd-tools ab -n1000 -c 200 http://127.0.0.1/cccc //這條命令可以多執行幾次
可以在安裝filebeat的服務器上測試一下nginx的服務
curl -I 192.168.18.140:80
在模擬消費者的服務器上 如果可以顯示一下內容 表示成功了
cd /usr/local/kafka/bin ./kafka-console-consumer.sh --bootstrap-server 192.168.18.141:9092 --topic nginx5(這里的topic的名字一定要和filebeat的配置文件里的一致) --from-beginning
如圖所示
現在開始收集多個日志 system nginx secure 和日志 編輯filebeat的配置文件
#講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)
安裝
安裝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的配置文件
vim /etc/elasticsearch/elasticsearch.yml ############################ network.host: 192.168.18.142 http.port: 9200
啟動elasticsearch
systemctl restart elasticsearch
編輯kibana的配置文件
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
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
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
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}" } }
添加管道
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的
執行下面的命令可以顯示出日志內容就是成功
cd /usr/local/kafak/bin ./kafka-console-consumer.sh --bootstrap-server 192.168.18.141:9092 --topic messages --from-beginning<br><br>
可以在第二台機器上查看模擬消費者的狀態 secure的
執行下面的命令可以顯示出日志內容就是成功
cd /usr/local/kafak/bin ./kafka-console-consumer.sh --bootstrap-server 192.168.18.141:9092 --topic secure --from-beginning
可以在第二台機器上查看模擬消費者的狀態 nginx的 nginx的可以生產一些日志文件 創建一些訪問記錄
執行下面的命令可以顯示出日志內容就是成功
cd /usr/local/kafak/bin ./kafka-console-consumer.sh --bootstrap-server 192.168.18.141:9092 --topic nginx5 --from-beginning