CaaS環境下實踐經驗總結(一):ELK Stack部署

【編者按】「在審視任何一個新東西的時候,我都會先去嘗試發現它與production ready之間到底有多少距離」,這是杜航寫做本文的初衷。杜航首先考慮到的是log的處理,尤爲對於Docker這個短暫存在的運行環境,log的處理更爲重要。Volume雖然能夠解決這個問題,可是隨着容器數量的增多,工做量也會劇增。杜航決定在靈雀雲上搭建一個ELK stack(ELK是一套經常使用的開源日誌監控和分析系統,包括一個分佈式索引與搜索服務Elasticsearch,一個管理日誌和事件的工具logstash,和一個數據可視化服務Kibana)。git

 

做者杜航,Websense雲基礎架構組開發經理,專一於OpenStack和Docker。如下爲原文:github

 

第一次接觸CaaS這個概念,第一次接觸靈雀雲的時候,我並無像不少人同樣立刻推送一個應用以體驗Docker所帶來的快感。由於我從不懷疑docker的出現所解決環境依賴性問題,提升了產品部署速度。我也從不懷疑靈雀雲做爲一個CaaS共有云平臺對容易的管理,調度,運行的能力。這就是Docker以及CaaS平臺出現帶來的優點,一分鐘以前我還剛把代碼提交到github,一分鐘以後我提交的代碼已經在生產環境上線。多是由於我長期和一個十分嚴謹又追求完美的英國團隊,特別是英國運維團隊合做的背景,在審視任何一個新東西的時候我都會先去嘗試發現它與production ready之間到底有多少距離。因此當我準備把應用推送到靈雀雲以前,我首先考慮的是除了應用以外我還須要部署什麼樣的服務來達到生產環境的標準。docker

 

第一點考慮到的是log的處理。我想我不須要花太多篇幅解釋log的重要性,你們應該都有體會。Docker做爲一個短暫存在(ephemeral)的運行環境,數據的持久化是一個要解決的問題。CaaS平臺不會像IaaS那樣給你vm的登陸管理權限,因此你不能想把docker容器運行在物理主機或者虛擬主機上那樣經過將存儲卷映射到主機上或者連接一個數據容器(data-only container)來保存log數據。靈雀雲平臺提供了存儲卷的功能,能夠將log數據存放在一個穩定的雲存儲平臺(從連接看是AWS S3)並提供下載。當時當你管理上百個甚至上千個容器的時候,這種方式也會給你帶來很大的工做量。綜合以上緣由,我決定在靈雀雲上搭建一個ELK stack。(E – Elasticsearch, L – Logstash, K – Kibana)安全

 

我沒有使用網上現有的ELK image,緣由有三:架構

  1. 深度CentOS依賴者;運維

  2. 體驗一下靈雀雲提供的代碼倉庫集成的功能;elasticsearch

  3. 將容器鏡像存儲在靈雀雲鏡像倉庫能夠提升服務啓動速度tcp

 

代碼能夠在github找到https://github.com/darkheaven1983/elk分佈式

 

如下是如何在靈雀雲上部署ELK stack的具體步驟:工具

1. 關聯github代碼倉庫與靈雀雲構建系統,指明Dockerfile在github的路徑,並建立一個構建

1811bdf1f7374c908cf2eda3a43589ea

 

2. git push代碼到github觸發靈雀雲構建docker鏡像

a22b6ca5ff2501f7e46dd0158ee33be1

 

鏡像build成功以後會出如今我的鏡像參倉庫裏面

8bb24c1c82e55361485803f1f65d595f

 

3. 經過靈雀雲CLI提供的compose功能一鍵部署ELK stack。Alauda支持的compose在docker compose yaml文件的基礎之上作了一些針對本身平臺的改動。

77733b8875fe960b7ec26965aba91fcc

 

如下是elk-alauda.yml的內容

elasticsearch:
extends:
file: ./docker-compose.yml
service: elasticsearch
expose:
- "9200"
volumes:
- /var/lib/elasticsearch:10
kibana:
extends:
file: ./docker-compose.yml
service: kibana
ports:
- "5601/http"
links:
- elasticsearch:elasticsearch
logstash:
extends:
file: ./docker-compose.yml
service: logstash
ports:
- "5000"
links:
- elasticsearch:elasticsearch

 

extends:關聯docker compose yaml文件當中對此容器的配置。
expose:指定一個只有Alauda內部才能訪問的端口,我將elsaticsearch的9200端口聲明爲內部端口保證了數據的安全性,避免將9200端口暴露在公網上。
volumes:建立一個存儲卷,確保數據的持久化 – 能夠經過alauda CLI中backup功能按期保存存儲卷,而且從某一個指定的存儲卷恢復數據。
ports:指定一個公網可訪問的端口,此端口能夠爲load balance以後的http端口(80),也能夠是load balance以後的TCP端口(隨機)。
links:容器之間的鏈接 – 經過Alauda提供的服務發現功能連接多個容器是容器間能夠互相訪問。

 

至此,ELK stack在alauda平臺的搭建已經結束。因爲本實驗只是一個PoC的功能,因此logstash的輸入是tcp,歡迎你們加入更加複雜的logstash配置。

 

測試結果:

nc logstash-darkheaven.myalauda.cn 62316 < /var/log/yum.log

27712aacdb1f04ba909edb5c8ae1d957

相關文章
相關標籤/搜索