ELK+Filebeat+Kafka+Zookeeper

本實驗基于ELFK已經搭好的情況下 ELK日志分析

架構解析

第一層、數據采集層
數據采集層位于最左邊的業務服務器集群上,在每個業務服務器上面安裝了filebeat做日志收集,然后把采集到的原始日志發送到Kafka+zookeeper集群上。第二層、消息隊列層
原始日志發送到Kafka+zookeeper集群上后,會進行集中存儲,此時,filbeat是消息的生產者,存儲的消息可以隨時被消費。第三層、數據分析層
Logstash作為消費者,會去Kafka+zookeeper集群節點實時拉取原始日志,然后將獲取到的原始日志根據規則進行分析、清洗、過濾,最后將清洗好的日志轉發至Elasticsearch集群。第四層、數據持久化存儲
Elasticsearch集群在接收到logstash發送過來的數據后,執行寫磁盤,建索引庫等操作,最后將結構化的數據存儲到Elasticsearch集群上。第五層、數據查詢、展示層
Kibana是一個可視化的數據展示平臺,當有數據檢索請求時,它從Elasticsearch集群上讀取數據,然后進行可視化出圖和多維度分析。

搭建ELK+Filebeat+Kafka+Zookeeper

zIP:               所屬集群:                                                        端口:
192.168.83.11      Elasticsearch+Kibana+kafka+zookeeper+nginx反向代理                9100 9200 5601 9092 3288 8080            都可以安裝filebeat
192.168.83.12      Elasticsearch+Logstash+kafka+zookeeper+filebeat+nginx反向代理     9100 9200 9600 9092 3288 隨機 8080
192.168.83.13      Elasticsearch+kafka+zookeeper+nginx反向代理     z                  9100 9200 9092 3288 

root@elk2 ~]# netstat -antp |grep filebeat
tcp        1      0 192.168.83.12:40348     192.168.83.11:9092      CLOSE_WAIT  6975/filebeat       
tcp        0      0 192.168.83.12:51220     192.168.83.12:9092      ESTABLISHED 6975/filebeat  

1.3臺機子安裝zookeeper

 wget https://dlcdn.apache.org/zookeeper/zookeeper-3.8.0/apache-zookeeper-3.8.0-bin.tar.gz --no-check-certificate

1.1 解壓安裝zookeeper軟件包

cd /opt上傳apache-zookeeper-3.8.0-bin.tar.gz包tar zxf apache-zookeeper-3.8.0-bin.tar.gz  解包
mv apache-zookeeper-3.8.0-bin /usr/local/zookeeper-3.8.0 #將解壓的目錄剪切到/usr/local/
cd /usr/local/zookeeper-3.8.0/conf/
cp zoo_sample.cfg zoo.cfg  備份復制模板配置文件為zoo.cfg

1.2 修改Zookeeper配置配置文件

cd /usr/local/zookeeper-3.8.0/conf    #進入zookeeper配置文件匯總
ls 后可以看到zoo_sample.cfg模板配置文件
cp zoo_sample.cfg zoo.cfg 復制模板配置文件為zoo.cfg
mkdir -p /usr/local/zookeeper-3.8.0/data  
mkdir -p dataLogDir=/usr/local/zookeeper-3.8.0/1ogs
vim zoo.cfg
# The number of milliseconds of each tick
tickTime=2000
# The number of ticks that the initial 
# synchronization phase can take
initLimit=10
# The number of ticks that can pass between 
# sending a request and getting an acknowledgement
syncLimit=5
# the directory where the snapshot is stored.
# do not use /tmp for storage, /tmp here is just 
# example sakes.
dataDir=/usr/local/zookeeper-3.8.0/data  
dataLogDir=/usr/local/zookeeper-3.8.0/1ogs
# the port at which the clients will connect
clientPort=2181
# the maximum number of client connections.
# increase this if you need to handle more clients
#maxClientCnxns=60
#
# Be sure to read the maintenance section of the 
# administrator guide before turning on autopurge.
#
# https://zookeeper.apache.org/doc/current/zookeeperAdmin.html#sc_maintenance
#
# The number of snapshots to retain in dataDir
#autopurge.snapRetainCount=3
# Purge task interval in hours
# Set to "0" to disable auto purge feature
#autopurge.purgeInterval=1## Metrics Providers
#
# https://prometheus.io Metrics Exporter
#metricsProvider.className=org.apache.zookeeper.metrics.prometheus.PrometheusMetricsProvider
#metricsProvider.httpHost=0.0.0.0
#metricsProvider.httpPort=7000
#metricsProvider.exportJvmInfo=true
server.1=192.168.83.11:3188:3288
server.2=192.168.83.12:3188:3288
server.3=192.168.83.13:3188:3288
scp zoo.cfg  elk2:/usr/local/zookeeper-3.8.0/conf/zoo.cfg  
scp zoo.cfg  elk3:/usr/local/zookeeper-3.8.0/conf/zoo.cfg 

1.3 設置myid號以及啟動腳本 到這里就不要設置同步了,下面的操作,做好一臺機器一臺機器的配置。

echo 1 >/usr/local/zookeeper-3.8.0/data/myid
# node1上配置echo 2 >/usr/local/zookeeper-3.8.0/data/myid
#node2上配置echo 3 >/usr/local/zookeeper-3.8.0/data/myid
#node3上配置

1.4 兩種啟動zookeeper的方法

cd /usr/local/zookeeper-3.8.0/bin
ls
./zkServer.sh start  #啟動 一次性啟動三臺,,才可以看狀態
./zkServer.sh status #查看狀態
[root@elk1 bin]# ./zkServer.sh  status
/usr/bin/java
ZooKeeper JMX enabled by default
Using config: /usr/local/zookeeper-3.8.0/bin/../conf/zoo.cfg
Client port found: 2181. Client address: localhost. Client SSL: false.
Mode: follower[root@elk2 bin]# ./zkServer.sh  status
/usr/bin/java
ZooKeeper JMX enabled by default
Using config: /usr/local/zookeeper-3.8.0/bin/../conf/zoo.cfg
Client port found: 2181. Client address: localhost. Client SSL: false.
Mode: leader[root@elk3 bin]# ./zkServer.sh  status
/usr/bin/java
ZooKeeper JMX enabled by default
Using config: /usr/local/zookeeper-3.8.0/bin/../conf/zoo.cfg
Client port found: 2181. Client address: localhost. Client SSL: false.
Mode: follower

1.5腳本啟動 推薦

第2種啟動3臺節點需要執行的腳本#//配置啟動腳本,腳本在開啟啟動執行的目錄中創建
vim /etc/init.d/zookeeper
#!/bin/bash
#chkconfig:2345 20 90
#description:Zookeeper Service Control Script
ZK_HOME='/usr/local/zookeeper-3.8.0'
case $1 in
start)echo "----------zookeeper啟動----------"$ZK_HOME/bin/zkServer.sh start
;;
stop)echo "---------- zookeeper停止-----------"$ZK_HOME/bin/zkServer.sh stop
;;
restart)echo "---------- zookeeper 重啟------------"$ZK_HOME/bin/zkServer.sh restart
;;
status)echo "---------- zookeeper 狀態------------"$ZK_HOME/bin/zkServer.sh status
;;
*)echo "Usage: $0 {start|stop|restart|status}"
esac
cd /usr/local/zookeeper-3.8.0/bin
在節點1服務操作
chmod +x /etc/init.d/zookeeper
chkconfig --add zookeeper   #加入到系統管理
service zookeeper start  啟動服務
service zookeeper status  查看狀態后 是 follower
在節點2服務操作
chmod +x /etc/init.d/zookeeper
chkconfig --add zookeeper   #加入到系統管理
service zookeeper start  啟動服務
service zookeeper status  查看狀態后 是 leader     第二臺啟動的,他是leader
在節點3服務操作
chmod +x /etc/init.d/zookeeper
chkconfig --add zookeeper   #加入到系統管理
service zookeeper start  啟動服務
service zookeeper status  查看狀態后 是 follower

2. 安裝 kafka(3臺機子都要操作)

#下載kafka
cd /opt
wget http://archive.apache.org/dist/kafka/2.7.1/kafka_2.13-2.7.1.tgz
上傳kafka_2.13-2.7.1.tgz到/opt
tar zxf kafka_2.13-2.7.1.tgz
mv kafka_2.13-2.7.1 /usr/local/kafka

2.2 修改配置文件

cd /usr/local/kafka/config/
cp server.properties server.properties.bak
vim server.properties192.168.83.11配置
broker.id=1
listeners=PLAINTEXT://192.168.83.11:9092
zookeeper.connect=192.168.83.11:2181,192.168.83.12:2181,192.168.83.13:2181
192.168.83.13配置
broker.id=2
listeners=PLAINTEXT://192.168.83.12:9092
zookeeper.connect=192.168.83.11:2181,192.168.83.12:2181,192.168.83.13:21810:2181192.168.83.13配置
broker.id=3
listeners=PLAINTEXT://192.168.83.13:9092
zookeeper.connect=192.168.83.11:2181,192.168.83.12:2181,192.168.83.13:2181

2.3 將相關命令加入到系統環境當中

vim /etc/profile   末行加入
export KAFKA_HOME=/usr/local/kafka
export PATH=$PATH:$KAFKA_HOME/bin
source /etc/profile
[root@elk1 config]# scp /etc/profile elk2:/etc/profile
profile                                                                        100% 1888     1.4MB/s   00:00    
[root@elk1 config]# scp /etc/profile elk3:/etc/profile
profile 

2.3 將相關命令加入到系統環境當中

cd /usr/local/kafka/config/
kafka-server-start.sh -daemon server.properties
netstat -antp | grep 9092

2.4Kafka 命令行操作

創建topickafka-topics.sh --create --zookeeper 192.168.121.10:2181,192.168.121.12:2181,192.168.121.14:2181 --replication-factor 2 --partitions 3 --topic test
–zookeeper:定義 zookeeper 集群服務器地址,如果有多個 IP 地址使用逗號分割,一般使用一個 IP 即可
–replication-factor:定義分區副本數,1 代表單副本,建議為 2
–partitions:定義分區數
–topic:定義 topic 名稱查看當前服務器中的所有 topickafka-topics.sh --list --zookeeper 192.168.121.10:2181,192.168.121.12:2181,192.168.121.14:2181查看某個 topic 的詳情kafka-topics.sh  --describe --zookeeper 192.168.121.10:2181,192.168.121.12:2181,192.168.121.14:2181發布消息kafka-console-producer.sh --broker-list 192.168.121.10:9092,192.168.121.12:9092,192.168.121.14:9092  --topic test消費消息kafka-console-consumer.sh --bootstrap-server 192.168.121.10:9092,192.168.121.12:9092,192.168.121.14:9092 --topic test --from-beginning–from-beginning:會把主題中以往所有的數據都讀取出來修改分區數kafka-topics.sh 
--zookeeper 192.168.80.10:2181,192.168.80.11:2181,192.168.80.12:2181 --alter --topic test --partitions 6刪除 topickafka-topics.sh 
--delete --zookeeper 192.168.80.10:2181,192.168.80.11:2181,192.168.80.12:2181 --topic test

3.配置數據采集層filebeat

3.1 定制日志格式

3.1 定制日志格式
[root@elk2 ~]# vim /etc/nginx/nginx.conf
user nginx;
worker_processes auto;error_log /var/log/nginx/error.log notice;
pid /var/run/nginx.pid;events
{worker_connections 1024;
}http
{include /etc/nginx/mime.types;default_type application/octet-stream;#    log_format main2 '$http_host $remote_addr - $remote_user [$time_local] "$request" '
#    '$status $body_bytes_sent "$http_referer" '
#    '"$http_user_agent" "$upstream_addr" $request_time';
#    access_log /var/log/nginx/access.log main2;log_format  json '{"@timestamp":"$time_iso8601",''"@version":"1",''"client":"$remote_addr",''"url":"$uri",''"status":"$status",''"domain":"$host",''"host":"$server_addr",''"size":$body_bytes_sent,''"responsetime":$request_time,''"referer": "$http_referer",''"ua": "$http_user_agent"''}';access_log  /var/log/nginx/access.log  json;sendfile on;#tcp_nopush     on;keepalive_timeout 65;#gzip  on;upstream elasticsearch{zone elasticsearch 64K;server 192.168.83.11:9200;server 192.168.83.12:9200;server 192.168.83.13:9200;}server{listen 8080;server_name localhost;location /{proxy_pass http://elasticsearch;root html;index index.html index.htm;}}include /etc/nginx/conf.d/*.conf;
}

3.2安裝filebeat

[root@elk2 ~]# wget https://artifacts.elastic.co/downloads/beats/filebeat/filebeat-6.0.0-x86_64.rpm
[root@elk2 ~]#  rpm -ivh filebeat-6.0.0-x86_64.rpm

3.3 修改配置文件filebeat.yml

[root@elk2 ~]# vim /etc/filebeat/filebeat.ymlenabled: truepaths:- /var/log/nginx/*.log
#-------------------------- Elasticsearch output ------------------------------
output.kafka:# Array of hosts to connect to.hosts: ["192.168.83.11:9092","192.168.83.12:9092","192.168.83.13:9092"] #145topic: "nginx-es"

3.4 啟動filebeat

[root@elk2 ~]# systemctl restart filebeat 

4、所有組件部署完成之后,開始配置部署

4.1 在kafka上創建一個話題nginx-es

kafka-topics.sh --create --zookeeper 192.168.83.11:2181,192.168.83.12:2181,192.168.83.13:2181 --replication-factor 1 --partitions 1 --topic nginx-es 

4.2 修改logstash的配置文件

[root@elk2 ~]# vim /etc/logstash/conf.d/nginxlog.conf 
input{
kafka{topics=>"nginx-es"codec=>"json"decorate_events=>truebootstrap_servers=>"192.168.83.11:9092,192.168.83.12:9092,192.168.83.13:9092"}
}
output {elasticsearch {hosts=>["192.168.83.11:9200","192.168.83.12:9200","192.168.83.13:9200"]index=>'nginx-log-%{+YYYY-MM-dd}'}
}
重啟logstash
systemctl restart logstash

4.3 驗證網頁

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/42039.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/42039.shtml
英文地址,請注明出處:http://en.pswp.cn/web/42039.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

conda和pip

1.眾所周知,pip的確是python官方(PyPA)推薦的Python軟件包安裝管理工具,在安裝Python軟件包時,第一反應應該是pip。正是由于pip是Python官方推薦的“正統”工具,所以pip只專注于Python軟件包之間的依賴&…

Matlab手搓線性回歸-非正規方程法

原理:wxb,x是輸入,求得的結果與真實值y求均方誤差。 采用鏈式法則求導 參數更新,梯度下降法(批量梯度下降) 隨機生成數據: m100;生成100個數據,并添加隨機噪聲 clear; …

基于flask的貓狗圖像預測案例

📚博客主頁:knighthood2001 ?公眾號:認知up吧 (目前正在帶領大家一起提升認知,感興趣可以來圍觀一下) 🎃知識星球:【認知up吧|成長|副業】介紹 ??如遇文章付費,可先看…

二次元轉向SLG,B站游戲的破圈之困

文 | 螳螂觀察 作者 | 夏至 2023年是B站游戲的滑鐵盧,盡管這年B站的游戲營收還有40多億,但相比去年大幅下降了20%,整整少了10億,這是過去5年來的最大跌幅,也是陳睿接管B站游戲業務一年以來,在鼻子上碰的第…

鴻蒙語言基礎類庫:【@ohos.process (獲取進程相關的信息)】

獲取進程相關的信息 說明: 本模塊首批接口從API version 7開始支持。后續版本的新增接口,采用上角標單獨標記接口的起始版本。開發前請熟悉鴻蒙開發指導文檔:gitee.com/li-shizhen-skin/harmony-os/blob/master/README.md點擊或者復制轉到。…

昇思13天

ResNet50遷移學習 ResNet50遷移學習總結 背景介紹 在實際應用場景中,由于訓練數據集不足,很少有人會從頭開始訓練整個網絡。普遍做法是使用在大數據集上預訓練得到的模型,然后將該模型的權重參數用于特定任務中。本章使用遷移學習方法對Im…

放棄華為OD,選擇最合適而不是最難得

時間不知不覺邁入了七月,五月嘗試去重新找一份工作,但釋放出來的崗位太少了,難得有進華為OD的機會,還是比較核心的部門,但思來想起,還是放棄了。 如果想去,是很有機會的,一路過關斬…

imx6ull/linux應用編程學習(13) CMAKE

什么是cmake? cmake 工具通過解析 CMakeLists.txt 自動幫我們生成 Makefile,可以實現跨平臺的編譯。cmake 就是用來產生 Makefile 的工具,解析 CMakeLists.txt 自動生成 Makefile: cmake 的使用方法 cmake 就是一個工具命令&am…

怎么將aac文件弄成mp3格式?把aac改成MP3格式的四種方法

怎么將aac文件弄成mp3格式?手頭有一些aac格式的音頻文件,但由于某些設備或軟件不支持這種格式,你希望將它們轉換成更為通用的MP3格式。而且音頻格式的轉換在現在已經是一個常見且必要的操作。aac是一種相對較新的音頻編碼格式,通常…

大模型增量預訓練新技巧-解決災難性遺忘

大模型增量預訓練新技巧-解決災難性遺忘 機器學習算法與自然語言處理 2024年03月21日 00:02 吉林 以下文章來源于NLP工作站 ,作者劉聰NLP NLP工作站. AIGC前沿知識分享&落地經驗總結 轉載自 | NLP工作站 作者 | 劉聰NLP 目前不少開源模型在通用領域具有不錯…

G1 和 CMS

1、CMS CMS(Concurrent Mark Sweep,并發標記清除,是為了解決早期垃圾收集器在執行垃圾回收時導致應用程序暫停時間過長的問題而設計的。 CMS的工作流程主要包括以下幾個階段: 初始標記(Initial Mark)&…

一體化運維監控平臺:賦能各行業用戶運維升級

在當今數字化轉型的大潮中,企業IT系統的復雜性和規模不斷攀升,對運維團隊提出了前所未有的挑戰。如何高效、精準地監控和管理IT基礎設施,確保業務連續性和穩定性,成為所有企業關注的焦點。美信,自2007年成立以來&#…

el-scrollbar實現自動滾動到底部(AI聊天)

目錄 項目背景 實現步驟 實現代碼 完整示例代碼 項目背景 chatGPT聊天消息展示滾動面板,每次用戶輸入提問內容或者ai進行流式回答時需要不斷的滾動到底部確保展示最新的消息。 實現步驟 采用element ui 的el-scrollbar作為聊天消息展示組件。 通過操作dom來實…

端、邊、云三級算力網絡

目錄 端、邊、云三級算力網絡 NPU Arm架構 OpenStack kubernetes k3s輕量級Kubernetes kubernetes和docker區別 DCI(Data Center Interconnect) SD/WAN TF 端、邊、云三級算力網絡 算力網絡從傳統云網融合的角度出發,結合 邊緣計算、網絡云化以及智能控制的優勢,通…

Qt開發 | Qt創建線程 | Qt并發-QtConcurrent

文章目錄 一、Qt創建線程的三種方法二、Qt并發:QtConcurrent介紹三、QtConcurrent run參數說明四、獲取QtConcurrent的返回值五、C其他線程技術介紹 一、Qt創建線程的三種方法 以下是Qt創建線程的三種方法: 方法一:派生于QThread 派生于QThre…

理解算法復雜度:空間復雜度詳解

引言 在計算機科學中,算法復雜度是衡量算法效率的重要指標。時間復雜度和空間復雜度是算法復雜度的兩個主要方面。在這篇博客中,我們將深入探討空間復雜度,了解其定義、常見類型以及如何進行分析。空間復雜度是衡量算法在執行過程中所需內存…

ceph mgr [errno 39] RBD image has snapshots (error deleting image from trash)

ceph mgr 報錯 debug 2024-07-08T09:25:56.512+0000 7f9c63bd2700 0 [rbd_support INFO root] execute_task: task={"sequence": 3, "id": "260b9fee-d567-4301-b7eb-b1fe1b037413", "message": "Removing image replicapool/8…

昇思25天學習打卡營第19天|Diffusion擴散模型

學AI還能贏獎品?每天30分鐘,25天打通AI任督二脈 (qq.com) Diffusion擴散模型 本文基于Hugging Face:The Annotated Diffusion Model一文翻譯遷移而來,同時參考了由淺入深了解Diffusion Model一文。 本教程在Jupyter Notebook上成…

python庫 - missingno

missingno 是一個用于可視化和分析數據集中缺失值的 Python 庫。它提供了一系列簡單而強大的工具,幫助用戶直觀地理解數據中的缺失模式,從而更好地進行數據清洗和預處理。missingno 庫特別適用于數據分析和數據科學項目,尤其是在處理缺失數據…

昇思MindSpore學習筆記5-02生成式--RNN實現情感分類

摘要: 記錄MindSpore AI框架使用RNN網絡對自然語言進行情感分類的過程、步驟和方法。 包括環境準備、下載數據集、數據集加載和預處理、構建模型、模型訓練、模型測試等。 一、概念 情感分類。 RNN網絡模型 實現效果: 輸入: This film is terrible 正…