EFK收集nginx日志


准備三台centos7的服務器 兩核兩G的  

關閉防火牆和SELinux

systemctl stop firewalld

setenforce 0
1.每一台都安裝jdk
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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM