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次