實用技能 使用Docker部署ELK

通過優銳課的java學習分享中,在本教程中,我們將瞭解如何使用這些工具來收集日誌並通過Elasticsearch + Logstash + Kibana(又名ELK)對其進行管理。

java面試必備之JVM+GC教程

開發網絡應用程序時,我喜歡參考十二要素應用程序建議。 他們處理應用程序日誌的方法在第十一條“命令”中:
它不應嘗試寫入或管理日誌文件。 而是,每個正在運行的進程將其未緩衝的事件流寫入stdout。

似乎Docker的人們也閱讀了此宣言,從而爲我們提供了出色的工具來管理容器中應用程序生成的日誌。 在本教程中,我們將瞭解如何使用這些工具來收集日誌並通過Elasticsearch + Logstash + Kibana(又名ELK)對其進行管理。

你將學到什麼

在這篇文章中,我將介紹:

ELK的簡要說明。
如何在Exoscale帳戶上創建所需的計算機:一臺用於承載ELK堆棧,另一臺用於承載演示Web應用程序。
如何使用Docker compose啓動ELK。
如何使用Docker日誌記錄驅動程序將Web應用程序日誌路由到ELK。

先決條件
Mac用戶:您將需要最新的Docker工具箱。
Linux用戶:您將需要Docker引擎,機器和組成。

在這兩個系統上,您都需要安裝Exoscale的CS工具,您可以使用Python生態系統的pip來獲取它:

pip install cs

我們將使用docker-machine在Exoscale上創建所需的實例,然後使用CS修改安全組以允許連接到我們新安裝的ELK堆棧。

cs和docker-machine都依賴於Exoscale API,因此他們將需要訪問您的API憑據。
使用以下命令導出您外殼程序中的憑據:

export EXOSCALE_ACCOUNT_EMAIL=<your exoscale account email>
export CLOUDSTACK_ENDPOINT=https://api.exoscale.ch/compute
export CLOUDSTACK_KEY="<your exoscale API Key>"
export CLOUDSTACK_SECRET_KEY="<your exoscale Secret Key>"

最後,您需要一些我在git repo中提供的文件。 在本地克隆它:

git clone https://github.com/MBuffenoir/elk.git
cd elk

首先,什麼是ELK?

ELK是由Elastic.co維護的開源工具的集合,該工具結合了以下內容:
Elasticsearch:我們將用於存儲日誌的索引器和搜索引擎。
Logstash:收集並解析日誌,然後將其存儲在Elasticsearch索引中的工具。
Kibana:一種工具,可查詢Elasticsearch REST API以獲取我們的數據,並有助於創建有洞察力的可視化效果。

創建實例

讓我們使用docker-machine在Exoscale上創建一個將託管ELK的Ubuntu實例:

docker-machine create --driver exoscale \
    --exoscale-api-key $CLOUDSTACK_KEY \
    --exoscale-api-secret-key $CLOUDSTACK_SECRET_KEY \
    --exoscale-instance-profile small \
    --exoscale-disk-size 10 \
    --exoscale-security-group elk \
    elk
    

這將花費一些時間來運行,並且將爲您提供類似於以下結果:

Running pre-create checks...
Creating machine...
(elk) Querying exoscale for the requested parameters...
(elk) Security group elk does not exist, create it
[...]
Setting Docker configuration on the remote daemon...
Checking connection to Docker...
Docker is up and running!

對於本演示,我主要使用默認參數,但是當然,您可以根據需要自定義此參數。 查看驅動程序文檔以瞭解更多信息。 您還可以稍後擴展實例(通過Web界面手動或使用CS和Exoscale API手動擴展)。

此時,您應該能夠使用以下命令連接到遠程Docker守護程序:
eval $(docker-machine env elk)

讓我們確保一切正常:

docker version
docker info

現在,讓我們創建第二臺計算機,在該計算機上運行演示應用程序:

docker-machine create --driver exoscale \
    --exoscale-api-key $CLOUDSTACK_KEY \
    --exoscale-api-secret-key $CLOUDSTACK_SECRET_KEY \
    --exoscale-instance-profile tiny \
    --exoscale-disk-size 10 \
    --exoscale-security-group demo \
    demo

docker-machine已經打開了所有必需的端口,供您連接到新的遠程Docker守護程序。 您可以在新創建的麋鹿安全組中查看這些端口。

現在,您需要打開訪問正在運行的應用程序並使它們相互通信所需的端口。
讓我們使用cs來做到這一點。 我們首先打開端口以連接到Kibana:

cs authorizeSecurityGroupIngress protocol=TCP startPort=5600 endPort=5600 securityGroupName=elk cidrList=0.0.0.0/0

現在,讓我們的應用程序將其日誌發送到Logstash:

cs authorizeSecurityGroupIngress protocol=UDP startPort=5000 endPort=5000 securityGroupName=elk 'usersecuritygrouplist[0].account'=$EXOSCALE_ACCOUNT_EMAIL 'usersecuritygrouplist[0].group'=demo

最後,我們將打開演示Web服務器的端口80:

cs authorizeSecurityGroupIngress protocol=TCP startPort=80 endPort=80 securityGroupName=demo cidrList=0.0.0.0/0

啓動ELK

現在我們的實例和安全組已準備就緒,可以啓動ELK了。
首先,您將需要上傳ELK所需的配置文件。 我們將這樣做:

docker-machine scp -r conf-files/ elk:

請注意,此處使用的證書是自簽名的。 如果願意,可以用以下方法替換或重新生成它:

sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout ./kibana-cert.key -out ./kibana-cert.crt

現在,您可以連接到遠程Docker守護程序,並使用以下命令啓動ELK:


eval $(docker-machine env elk)
docker-compose -f docker-compose-ubuntu.yml up -d

享受出色完成的工作的美妙之處:

docker-compose -f docker-compose-ubuntu.yml ps

哪個應該給您類似於此的輸出:
Name Command State Ports

elasticdata     /docker-entrypoint.sh chow ...   Exit 0
elasticsearch   /docker-entrypoint.sh elas ...   Up       9200/tcp, 9300/tcp
kibana          /docker-entrypoint.sh kibana     Up       5601/tcp
logstash        /docker-entrypoint.sh -f / ...   Up       0.0.0.0:5000->5000/udp
proxyelk        nginx -g daemon off;             Up       443/tcp, 0.0.0.0:5600->5600/tcp, 80/tcp

你可以在此處看到構成ELK堆棧的三個應用程序和用於保護它們的反向NGINX代理。
運行演示Web服務器並將其日誌發送到ELK

讓我們再次使用Docker運行一個簡單的NGINX Web服務器,該服務器將模擬典型的Web應用程序:

eval $(docker-machine env demo)
docker run -d --name nginx-with-syslog --log-driver=syslog --log-opt syslog-address=udp://$(docker-machine ip elk):5000 -p 80:80 nginx:alpine

使用以下命令確保您的Web服務器正常運行:

docker ps

使用您喜歡的Web瀏覽器或使用curl連接到它:

curl http://$(docker-machine ip demo)

使用Kibana查看日誌
現在是您一直在等待的時刻!
瀏覽到您的ELK安裝:https:// <elk實例ip>:5600
默認的用戶名和密碼爲admin / Kibana05。
由於這是您第一次連接到它,因此將需要幾秒鐘來進行設置。
準備就緒後,點擊綠色的創建按鈕,然後點擊發現標籤來創建第一個索引。 現在,您應該能夠看到您的NGINX演示Web服務器的日誌:

結論
在這裏,我們已經看到了使用ELK和Docker收集日誌的最低要求。
下一步可能是增強Logstash配置,以檢測日誌中的特殊字段,還可能刪減一些敏感信息,並且當然要在Kibana中創建漂亮的可視化文件。 我們可以再來看一次。
完美收集日誌!

喜歡這篇文章的可以點個贊,歡迎大家留言評論,記得關注我,每天持續更新技術乾貨、職場趣事、海量面試資料等等
如果你對java技術很感興趣也可以+ qq羣:907135806 交流學習,共同學習進步。
不要再用"沒有時間“來掩飾自己思想上的懶惰!趁年輕,使勁拼,給未來的自己一個交代

文章寫道這裏,歡迎完善交流。最後奉上近期整理出來的一套完整的java架構思維導圖,分享給大家對照知識點參考學習。有更多JVM、Mysql、Tomcat、Spring Boot、Spring Cloud、Zookeeper、Kafka、RabbitMQ、RockerMQ、Redis、ELK、Git等Java乾貨加vx:ddmsiqi 領取啦
在這裏插入圖片描述

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