1. 程式人生 > 其它 >fliebeat+kafka的ELK日誌分析平臺

fliebeat+kafka的ELK日誌分析平臺

目錄

一.環境講解

當前結構,Filebeat部署在需要收集日誌的機器上,收集日誌,輸出到zk+kakfa叢集這個中介軟體中。logstash從kafka叢集消費資訊,並根據配置內容,進行格式轉化和過濾,整理好的資料會發給elastic進行儲存。elastic能對大容量的資料進行接近實時的儲存、搜尋和分析操作。最後由kibana提供web介面,呼叫elastic做資料分析,然後展示出來。

注意點:
1.filebeat啟動後,只會讀取最新輸入的日誌,類似tail -f
2.kafka叢集的內容,logstash讀取一條,就會消失一條,不會造成重複讀取
3.這套系統裡,只有elastic儲存資料

#當前用5臺機器模擬,實際可使用2-3臺,將zk+kafka叢集每臺都進行部署,也可以1臺,部署多例項。

[nginx服務]
    主機名 = nginx-server
    系統 = centos-7.3
    地址 = 1.1.1.1
    軟體 = nginx-1.8 80
           filebeat-7.4.2

[zk+kafka叢集]
    主機名 = kafka-1
    系統 = centos-7.3
    地址 = 1.1.1.2
    軟體 = jdk-1.8
           zookeeper-3.5 2181
           kafka-2.0.0 9092

    主機名 = kafka-2
    系統 = centos-7.3
    地址 = 1.1.1.3
    軟體 = jdk-1.8
           zookeeper-3.5 2181
           kafka-2.0.0 9092

[elasticsearch]
    主機名 = elastic-server
    系統 = centos-7.3
    地址 = 1.1.1.4
    軟體 = jdk-1.8
           elasticsearch-7.4.2 9200

[logstash+kibana]
    主機名 = lk-server
    系統 = centos-7.3
    地址 = 1.1.1.5
    軟體 = jdk-1.8
           logstash-7.4.2 9600
           kibana-7.4.2 5601

注意事項:
1.filebeat的版本要一致,在官網都有對應的包
2.filebeat連線kafka的版本,是有支援範圍的,可檢視官方文件filebeat-kafka配置
3.不同版本elk需要的jdk版本也不同,需要看好說明

二.部署配置

配置kafka叢集

操作伺服器(kafka-1,kafka-2)
1.這裡使用2臺組建kafka叢集,可根據需求新增或刪減節點。部署可檢視文章kafka叢集部署

2.按照上述連線,啟動並測試好kafka叢集,確保可正常使用

配置日誌輸出端

操作伺服器(nginx-server)
1.Nginx作為日誌輸出端,這裡也可以用自定義檔案代替,然後手動插入內容
yum -y install nginx-1.8

若沒有包,可擴充套件epel或者原始碼安裝nginx-1.6

2.啟動並本地訪問,促使產生日誌
systemctl start nginx
curl http://127.0.0.1
cat /var/log/nginx/access.log

3.安裝filebeat
curl -L -O https://artifacts.elastic.co/downloads/beats/filebeat/filebeat-7.4.2-x86_64.rpm
rpm -vi filebeat-7.4.2-x86_64.rpm

4.建立資料夾,這裡使用自建立的配置檔案,方便修改維護
mkdir conf
cd conf

建立filebeat配置檔案,格式一定要對齊,因為是yml格式的。啟動後,filebeat會在kafka中建立一個叫nginx-log的topic
vim filebeat-nginx.yml

filebeat.inputs:
- type: log
  paths:
    - /var/log/nginx/access.log

output.kafka:
  hosts: ["1.1.1.2:9092", "1.1.1.3:9092"]
  topic: 'nginx-log'

具體的引數解釋,可以檢視filebeat配置檔案詳解

5.啟動filebeat,這裡會把啟動日誌輸出到當前目錄filebeat.log檔案中,方便檢視
nohup /usr/share/filebeat/bin/filebeat -e -c filebeat-nginx.yml &>> filebeat.log &

若不是這個地址,可以用如下命令,去查詢這個命令位置在哪
rpm -ql filebeat

6.等半分鐘,然後檢視filebeat程序和日誌,是否啟動有問題
ps -aux |grep filebeat

檢視日誌,沒有異常情況,就可以進行下一步了
cat filebeat.log

7.寫入日誌
curl http://127.0.0.1

操作伺服器(kafka-1)
8.kafka中應該有新的topic nginx-log產生,test是建立叢集時,測試功能建立的
cd /usr/local/kafka
bin/kafka-topics.sh --list --zookeeper localhost:2181

檢視topic裡的訊息內容,可以看到日誌資訊的
bin/kafka-console-consumer.sh --bootstrap-server localhost:9092 --topic nginx-log --from-beginning

配置logstash

操作伺服器(lk-server)
1.先安裝jdk-1.8
yum install java-1.8.0 -y

2.下載logstash的二進位制包並部署
wget https://artifacts.elastic.co/downloads/logstash/logstash-7.4.2.tar.gz
tar -xf logstash-7.4.2.tar.gz
mv logstash-7.4.2 /usr/local/logstash

3.建立資料夾,這裡使用自建立的配置檔案,方便修改維護
mkdir conf
cd conf

建立logstash配置檔案,格式一定要對齊,因為是yml格式的。啟動後會從kafka取資料,並傳輸給elasticsearch,中間是對nginx的日誌資料,進行正則分段
vim logstash-nginx.yml

input {
  kafka  {
    auto_offset_reset => "latest"
    bootstrap_servers => "1.1.1.2:9092,1.1.1.3:9092"
    topics => ["nginx-log"]
    group_id => "logstash-file"
    codec => "json"
  }
}

filter {
  grok {
    match => {
      "message" => "%{IPORHOST:clientip} \[%{HTTPDATE:time}\] \"%{WORD:verb} %{URIPATHPARAM:request} HTTP/%{NUMBER:httpversion}\" %{NUMBER:http_status_code} %{NUMBER:bytes} \"(?<http_referer>\S+)\" \"(?<http_user_agent>\S+)\" \"(?<http_x_forwarded_for>\S+)\""
    }
  }
}

output {
  elasticsearch {
    hosts => ["192.168.56.106:9200"]
      index => "nginx-%{+YYYY.MM.dd}"
  }
}

具體的引數解釋,可以檢視logstash配置檔案詳解

4.啟動logstash,這裡會把啟動日誌輸出到當前目錄logstash.log檔案中,方便檢視
nohup /usr/local/logstash/bin/logstash -f logstash-nginx.yml &>> logstash.log &

5.等半分鐘,然後檢視logstash程序和日誌,是否啟動有問題
ps -aux|grep logstash

程序是啟動著的,則檢視日誌,看看有沒有異常
cat logstash.log

配置elasticsearch

操作伺服器(elastic-server)
1.先安裝jdk-1.8
yum install java-1.8.0 -y

2.下載elasticsearch的二進位制包,直接解壓即用
wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-7.4.2-linux-x86_64.tar.gz
tar -xf elasticsearch-7.4.2-linux-x86_64.tar.gz
mv elasticsearch-7.4.2-linux-x86_64 /usr/local/elastic

3.修改elasticsearch的配置檔案
vim /usr/local/elastic/config/elasticsearch.yml

cluster.name: nginx-elk
node.name: node-1
cluster.initial_master_nodes: node-1
path.data: /data
path.logs: /var/log/elastic
bootstrap.memory_lock: false
network.host: 0.0.0.0
http.port: 9200

4.建立資料目錄和日誌目錄
mkdir /data
mkdir /var/log/elastic
groupadd elastic
useradd -g elastic elastic
chown -R elastic:elastic /data /var/log/elastic

5.修改啟動記憶體,一般為記憶體的1/2
vim /usr/local/elastic/config/jvm.options

-Xms512m
-Xmx512m

6.切換到elastic,啟動服務
su - elastic

啟動後檢視日誌,這個要等一會,會慢慢刷出來,如果到最後直接退出了,就是有報錯,沒通過預檢查,需要將報錯條目找出來,按照文件elastic報錯解析進行解決
/usr/local/elastic/bin/elasticsearch

若都符合要求,會卡在日誌介面,使用ctl + c強制停止,然後用如下命令在後臺啟動
/usr/local/elastic/bin/elasticsearch -d

配置kibana

操作伺服器(lk-server)
1.下載二進位制包,解壓即用
wget https://artifacts.elastic.co/downloads/kibana/kibana-7.4.2-linux-x86_64.tar.gz
tar -xf kibana-7.4.2-linux-x86_64.tar.gz
mv kibana-7.4.2-linux-x86_64 /usr/local/kibana

2.修改kibana配置檔案
vim /usr/local/kibana/config/kibana.yml

server.host: "1.1.1.5"
server.port: 5601
server.name: "testlog"
xpack.reporting.encryptionKey: "a_random_string"
xpack.security.encryptionKey: "something_at_least_32_characters"
elasticsearch.hosts: "http://1.1.1.4:9200"

3.啟動kibana,如果是root啟動,要加允許引數
/usr/local/kibana/bin/kibana --allow-root

檢視輸出是否有error項,如果是warning則問題不大,只是一些外掛之類的沒載入,可正常使用。錯誤和警告解決可查閱kibana報錯說明解決

若都符合要求,會卡在日誌介面,使用ctl + c強制停止,然後用如下命令在後臺啟動
nohup /usr/local/kibana/bin/kibana --allow-root &>> kibana.log &

4.檢視elasticsearch的索引,是否kibana使用了elasticsearch建立預設索引
curl http://1.1.1.4:9200/_cat/indices

5.訪問nginx,製造一些訪問記錄
curl http://1.1.1.1

稍等一會,再檢視elastichsearch記錄,會有之前在logstash輸出部分,index選項所設定的nginx-日期的索引名

這裡green表示沒問題,yellow表示接受到資料了,但沒有做副本,read表示有問題,沒接受到資料。

四.kibana圖形操作

建立索引

1.新增新的日誌採集項,點選Management-> Index Patterns,比如新增nginx系統日誌。注意後面的不要忘了。

這裡建立nginx並且設定的是@timestamp為索引匹配,後面的資料會根據這個時間戳查詢

2.預設情況下,kibana需要設定一個預設索引

設定預設索引,點選五角星圖示即可,這樣在其他模組中會自動根據預設索引顯示出需要的介面,否則空索引是沒有介面使用的。

3.點選discover,則會顯示預設索引的工資空間,顯示的資料預設是15分鐘,你可以自己調整時間段後refresh重新整理查詢到你想要的資料。如果你選擇的索引模式配置了time欄位,則文件隨時間的分佈將顯示在頁面頂部的直方圖中。

這裡要把時間設定為一天內,不然可能不會顯示資料

設定圖形展示

1.選擇建立新的視覺化圖形

2.選擇餅狀圖

3.選擇nginx日誌的索引

4.選擇add新增一個條件進行篩選

5.選擇message,這個是在logastch中設定的,屬於粗略設定,這個列儲存了整個訪問記錄。這裡匹配本地127訪問的記錄,進行篩選。

6.可以看到一共7次訪問,這裡只記錄了5次

本文版權歸作者所有,歡迎轉載,請務必新增原文連結。