使用docker搭建ELK分散式日誌同步方案

老猿新码發表於2024-07-05

ELK作為業界最常用日誌同步方案,我們今天嘗試一下使用docker快速搭建一套ELK方案。ELK使用國內加速源拉取的映象比較舊,有條件的朋友可以拉取官網的源。elasticsearch作為日誌儲存庫(資料庫),kibana的作用透過elasticsearch的API介面調取其中資料作視覺化分析,logstash的作用就是將程式生成的日誌同步到elasticsearch。

搭建Elasticsearch

docker run 
-d 
--name elasticsearch 
-p 9200:9200 
-p 9300:9300 
-e "discovery.type=single-node" 
-e "xpack.security.enabled=false" 
elasticsearch:8.14.1

其中discovery.type必填,不然啟動失敗,簡單選擇單節點規模,如果在內網建議填寫xpack.security.enabled為false,因為預設值是true,預設elasticsearch需要授權訪問,內網網路這一步可以省掉。

搭建kibana

docker run 
-d 
--name kibana 
--link elasticsearch 
-p 5601:5601 
kibana:7.17.22

透過docker的link引數,與剛剛搭建的elasticsearch容器關聯起來,預設資料就會關聯起來,elasticsearch透過API進行資料訪問,如果剛才搭建elasticsearch容器xpack.security.enabled沒有填寫false,此時則需要配置授權。

搭建Web站點

docker run 
-d 
--name web 
-p 5000:80 
-v /Logs:/app/Logs 
-v /etc/localtime:/etc/localtime 
-e TimeZone=Asia/Shanghai 
webapplication1:latest

拉取網站映象啟動容器,切記同步一下主機的時間和時區,容器預設是國際標準時間和時區,會有8個小時的差值。-v /etc/localtime:/etc/localtime的作用是同步主機時間,-e TimeZone=Asia/Shanghai的作用是同步主機時區。

-v /Logs:/app/Logs作用是掛載點,將容器的日誌資料夾掛載到主機檔案上面,這一步很重要,logstash同步日誌需要掛載這個主機的日誌資料夾。

搭建Logstash

logstash需要先配置引數,才可以啟動映象。

input {
  file {
    path => "/Logs/*.txt"
    start_position => "beginning"
  }
}
 
filter {
}
 
output {
  elasticsearch {
    hosts => ["http://192.168.3.105:9200"]
    index => "logstash-%{+YYYY.MM.dd}"
  }
}

input是輸入源,選擇檔案,地址應該是與程式容器日誌掛載點相同。
output是輸出源,選擇elasticsearch,填寫剛剛啟動的elasticsearch容器,如果搭建elasticsearch容器xpack.security.enabled沒有填寫false,此時則需要配置授權。

docker run 
-d 
--name logstash 
-v /Logs:/Logs 
-v /root/logstash.conf:/usr/share/logstash/pipeline/logstash.conf 
logstash:7.17.22

將主機的日誌掛載點傳進容器,將logstash.conf配置檔案掛載進去。

四個容器啟動之後,ELK日誌收集方案就基本搭建完畢,程式生產的日誌透過掛載同步到主機,再同步進logstash的容器,由logstash定時讀取將資料透過elasticsearch的API寫入庫,再透過kibana的視覺化介面進行分析。

訪問kibana視覺化介面可以就進行日誌實時同步分析,根據我的容器埠和IP地來看,我的kibana站點地址是:http://192.168.3.105:5601

更多系列文章

構建高效能,可伸縮,高可用,安全,自動化,可溯源,整體式應用構架體系

相關文章