elk+filebeat+kafka完整架構

elk簡單架構部署

kafka部署

終極版elk架構簡述

filebeat + kafka + ogstash + es + kibana

1.kafka特點
特點 (基於zookeeper)

  • 高吞吐量:kafka每秒可以處理幾十萬條消息。
  • 可擴展性:kafka集羣支持熱擴展- 持久性
  • 可靠性:消息被持久化到本地磁盤,並且支持數據備份防止數據丟失
  • 容錯性:允許集羣中節點失敗(若副本數量爲n,則允許n-1個節點失敗
  • 高併發:支持數千個客戶端同時讀寫

zookeeper :
ZooKeeper是一個分佈式協調服務,它的主要作用是爲分佈式系統提供一致性服務,提供的功能包括:配置維護、分佈式同步等

2. kfaka部署

  • 運行依賴jdk
tar zxvf /usr/local/package/jdk-8u121-linux-x64.tar.gz -C /usr/local/
echo '
JAVA_HOME=/usr/local/jdk1.8.0_121
PATH=$JAVA_HOME/bin:$PATH
export JAVA_HOME PATH
' >>/etc/profile
source /etc/profile
  • 安裝並配置zookeeeper
tar xzvf kafka_2.11-2.1.0.tgz -C /usr/local/
將原配置文件中打開的內容註釋掉
sed -i 's/^[^#]/#&/' /usr/local/kafka_2.11-2.1.0/config/zookeeper.properties
使用vim在配置文件中添加以下內容 
vim /usr/local/kafka_2.11-2.1.0/config/zookeeper.properties 

dataDir=/opt/data/zookeeper/data 
dataLogDir=/opt/data/zookeeper/logs
clientPort=2181 
tickTime=2000 
initLimit=20 
syncLimit=10 
server.1=192.168.246.231:2888:3888             //kafka集羣IP:Port
server.2=192.168.246.234:2888:3888
server.3=192.168.246.235:2888:3888

創建在配置文件中設置的相應目錄

 mkdir -p /opt/data/zookeeper/{data,logs}
設置myid號,kafka集羣中zookeeper的第一臺設置1,第二臺就設置爲2。以此類推

echo 1 > /opt/data/zookeeper/data/myid
在zookeeper.properties中添加的配置文件含義:

* dataDir ZK數據存放目錄。
* dataLogDir  ZK日誌存放目錄。
* clientPort  客戶端連接ZK服務的端口。
* tickTime        ZK服務器之間或客戶端與服務器之間維持心跳的時間間隔。
* initLimit       允許follower連接並同步到Leader的初始化連接時間,當初始化連接時間超過該值,則表示連接失敗。
* syncLimit   Leader與Follower之間發送消息時如果follower在設置時間內不能與leader通信,那麼此follower將會被丟棄。
* server.1=172.16.244.31:2888:3888    2888是follower與leader交換信息的端口,3888是當leader掛了時用來執行選舉時服務器相互通信的端口
  • 配置Kafka
註釋掉原配置文件中打開的內容

sed -i 's/^[^#]/#&/' /usr/local/kafka_2.11-2.1.0/config/server.properties
在kafka配置文件中添加如下內容

vim /usr/local/kafka_2.11-2.1.0/config/server.properties  #在最後添加
broker.id=1         #kafka集羣中的第一臺就設置id爲1.第二臺爲2,以此類推
listeners=PLAINTEXT://192.168.246.231:9092 #監聽的本機地址和端口號9092
num.network.threads=3
num.io.threads=8
socket.send.buffer.bytes=102400
socket.receive.buffer.bytes=102400
socket.request.max.bytes=104857600
log.dirs=/opt/data/kafka/logs
num.partitions=6
num.recovery.threads.per.data.dir=1
offsets.topic.replication.factor=2
transaction.state.log.replication.factor=1
transaction.state.log.min.isr=1
log.retention.hours=168
log.segment.bytes=536870912
log.retention.check.interval.ms=300000
zookeeper.connect=192.168.246.231:2181,192.168.246.234:2181,192.168.246.235:2181 #zookeeper連接地址和端口2181
zookeeper.connection.timeout.ms=6000
group.initial.rebalance.delay.ms=0

創建配置文件中的相關目錄

mkdir -p /opt/data/kafka/logs
**kafka配置文件相關含義:**

#每個server需要單獨配置broker id,如果不配置系統會自動配置。
broker.id  

#監聽地址,格式PLAINTEXT://IP:端口。
listeners  

#處理網絡請求的線程數量,也就是接收消息的線程數。
num.network.threads	

#消息從內存中寫入磁盤是時候使用的線程數量。
num.io.threads	

#發送套接字的緩衝區大小
socket.send.buffer.bytes 

#當消息的尺寸不足時,server阻塞的時間,如果超時,
#消息將立即發送給consumer
socket.receive.buffer.bytes	

服務器將接受的請求的最大大小(防止OOM)
socket.request.max.bytes  

日誌文件目錄。
log.dirs    

#topic在當前broker上的分片個數
num.partitions

#用來設置恢復和清理data下數據的線程數量
num.recovery.threads.per.data.dir 


offsets.topic.replication.factor

#超時將被刪除
log.retention.hours

#日誌文件中每個segment的大小,默認爲1G
log.segment.bytes

#上面的參數設置了每一個segment文件的大小是1G,那麼
#就需要有一個東西去定期檢查segment文件有沒有達到1G,
#多長時間去檢查一次,就需要設置一個週期性檢查文件大小
#的時間(單位是毫秒)
log.retention.check.interval.ms 

#ZK主機地址,如果zookeeper是集羣則以逗號隔開
zookeeper.connect  

#連接到Zookeeper的超時時間。
zookeeper.connection.timeout.ms
  • 啓動並驗證zookeeper集羣

啓動

cd /usr/local/kafka_2.11-2.1.0/

nohup bin/zookeeper-server-start.sh config/zookeeper.properties &

驗證

查看端口
netstat -lntp | grep 2181

驗證端口能否聯通
telnet 127.0.0.1 2181

啓動並驗證kfaka集羣

啓動

cd /usr/local/kafka_2.11-2.1.0/

nohup bin/kafka-server-start.sh config/server.properties &

驗證

在其中一臺kafka節點創建一個topic爲testtopic

bin/kafka-topics.sh --create --zookeeper localhost:2181 --replication-factor 1 --partitions 1 --topic testtopic
去其他節點查看有沒有名爲testtopic的topic

bin/kafka-topics.sh --zookeeper 192.168.246.231:2181 --list

kafka和zookeeper沒有問題之後去logstash配置相關的輸入輸出文件

cd /usr/local/logstash-6.5.4/etc/conf.d/

vim wxm.conf
input {
kafka {               #指定kafka服務
    type => "nginx_log"
    codec => "json"        #通用選項,用於輸入數據的編解碼器
    topics => "nginx"        #這裏定義的topic
    decorate_events => true  #此屬性會將當前topic、group、partition等信息也帶到message中
    bootstrap_servers => "192.168.246.234:9092, 192.168.246.231:9092, 192.168.246.235:9092"  #kafka集羣IP和端口號9092
  }
}
output{ #輸出插件,將事件發送到特定目標
elasticsearch { #輸出到es
hosts => ["192.168.246.234:9200"] #指定es服務的ip加端口
index => ["%{type}-%{+YYYY.MM.dd}"] #引用input中的type名稱,定義輸出的格式
}
}

啓動logstash

注意:如果logstash正在運行,則需要殺掉重啓logstash

cd /usr/local/logstash-6.5.4/

nohup bin/logstash -f etc/conf.d/  --config.reload.automatic &

filebeat部署

filebeat簡單介紹:

隸屬於Beats,輕量級數據收集引擎。基於原先 Logstash-fowarder 的源碼改造出來。換句話說:Filebeat就是新版的 Logstash-fowarder,也會是 ELK Stack 在 Agent 的第一選擇,目前Beats包含四種工具:

  • Packetbeat(蒐集網絡流量數據).
  • Metricbeat(蒐集系統、進程和文件系統級別的 CPU 和內存使用情況等數據。)
  • Filebeat(蒐集文件數據)
  • Winlogbeat(蒐集 Windows 日誌數據)

下載安裝

下載

wget https://artifacts.elastic.co/downloads/beats/filebeat/filebeat-6.5.4-linux-x86_64.tar.gz

解壓

tar xzvf filebeat-6.5.4-linux-x86_64.tar.gz -C /usr/local/

修改配置

mv filebeat.yml filebeat.yml.bak #可以先將原配置文件做個備份,以防萬一

vim filebeat.yml # 再創建一個新的配置文件並添加以下內容,這裏以收集本機的nginx日誌爲例

#以下內容爲需要添加的內容:
filebeat.prospectors:
- input_type: log        #指定輸入的類型
  paths:
    -  /var/log/nginx/*.log      #日誌的路徑
  json.keys_under_root: true
  json.add_error_key: true
  json.message_key: log

output.kafka:
  hosts: ["192.168.246.234:9092","192.168.246.231:9092","192.168.246.235:9092"]   #kafka服務器集羣
  topic: 'nginx'        #輸出到kafka中的topic

Filebeat 6.0 之後一些配置參數變動比較大,具體還需要去官方查看使用手冊

啓動

nohup ./filebeat -e -c filebeat.yml &

tail -f nohup.out #監控輸出文件

驗證
驗證kafka是否生成logstash定義的topic

cd /usr/local/kafka_2.11-2.1.0/

bin/kafka-topics.sh --zookeeper 192.168.246.231:2181 --list #注意這裏的ip是需要驗證的kafka主機ip加zookeeper端口號2181.

驗證成功無誤之後就可以去kibana上添加索引。索引號爲在logstash收集日誌的配置文件中定義的類型名

完整架構展示:
elk+filebeat+kafka架構
注:整理收集不易,轉載請註明出處,歡迎批評指正,謝謝!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章