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
更多系列文章
構建高效能,可伸縮,高可用,安全,自動化,可溯源,整體式應用構架體系