通過優銳課的java學習分享中,在本教程中,我們將瞭解如何使用這些工具來收集日誌並通過Elasticsearch + Logstash + Kibana(又名ELK)對其進行管理。
開發網絡應用程序時,我喜歡參考十二要素應用程序建議。 他們處理應用程序日誌的方法在第十一條“命令”中:
它不應嘗試寫入或管理日誌文件。 而是,每個正在運行的進程將其未緩衝的事件流寫入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 領取啦