Linux容器已經被業界廣泛用於開發甚至生產系統。Docker和Kubernetes已經被開發運營人員廣泛了解和熟悉。但是容器雲架構下系統監控確實一個常常被忽略的問題。儘管容器部署主要涉及在每個容器內運行單個應用程式或服務,但是隨著部署規模的擴大,對環境狀態和運行狀況的可見性變得越來越重要,而不僅僅是在作業系統或應用程式級別,而且在容器級別也是如此。雲生態監控和日誌處理領域分為實時資料庫,度量標準收集器,可視化工具,輪詢器,記錄器等。過去幾年中,開源產品和商業監控應用程式不斷湧現,本文我介紹幾個最受歡迎的開源雲應用監控工具。
Prometheus
Prometheus(普羅米修斯)是領先的開源雲監視解決方案,除其他事項外,其數據以時間序列資料庫存儲,天然適合監控資料庫存儲。普羅米修斯是CNCF(Cloud Native Computing Foundation,原生雲計算基金會)支持的九大項目之一,也是CNCF中,除了也是Kubernetes後第二大託管項目。普羅米修斯獲得了包括谷歌,紅帽,IBM等公司在內的眾多雲供應商的支持,是雲應用首選監控程序。
普羅米修斯最初源於音樂託管網站SoundCloud,接著成為了Docker生態系統的重要組成部分。CoreOS團隊還積極地使用Prometheus來改善Kubernetes的性能。
普羅米修斯已發展成為高級系統監控和告警工具箱,能夠監視各種資源,包括容器,Hadoop集群,各語言運行時以及Python、Golang、JVM之類的應用程式堆棧。
簡而言之,普羅米修斯是一個開源監控系統,時間序列資料庫以及用於實現代碼的框架。但是,普羅米修斯不能生成度量標準,需要要以HTTP可以解析的語言將度量標準提供給它。關於普羅米修斯參看蟲蟲之前文章,有詳細介紹。
Graphite
Graphite是一種流行的開源工具,用於構建基於Web的儀錶板以進行監視和分析。Graphite最初是由Orbitz的Chris Davis於2006年用python創建的一個輔助項目。用於監控和繪製計算機系統的性能,最終形成了一個基本監控系統,並於2008年以Apache 2.0 license的授權開源發布。目前已經獲得了GitHub,Salesforce和Reddit等眾多大公司提供和支持。
Graphite由三部分組成:
Carbon 時間序列數據的守護程序,用於接收數據;
Whisper(類似於RRDtool)資料庫和存儲;
Graphite-web的Web應用程式,可按需呈現圖形。
Graphite在企業中仍然很流行,原因是由於其自動化程度很高,其中所有新數據點都能在資料庫中自動創建。
Graphite本質上是三個相互耦合的獨立工具,也可以單獨使用並與其他工具集成。
Riemann
上面我們說了Graphite所有組件都耦合可以單獨使用。Riemann就是用於替代Graphite中Carbon守護程序的。儘管Carbon會監聽指標並將其寫入whisper存儲資料庫,但由於Carbon是基於Python開發的,容易在性能上遇到瓶頸,這時候我們可以用Riemann代替它。Riemann使用 Clojure 語言實現以 "事件流(event streams)方式處理數據和匯總。但是,Riemann不是度量收集器。
Riemann的工作方式是從事件流(例如指標,日誌,事件,主機和服務)收集數據,然後根據需要存儲,圖形或警報。基於事件流的一棧環境下一旦事件流停止流動,就能馬上發現系統故障或網絡斷開。Riemann還能收集和處理各種形式的事件,事先監控。
Riemann具有超快速度和性能。其官方網站宣傳的,Riemann可以在商用 x86 硬體條件下,Riemann 每秒就可以處理數百萬次事件,延遲時間卻只有亞毫秒,5 毫秒可以完成 99 次。
在雲環境條件下,Riemann也可以容器化方式運行和組合:
Riemann 伺服器進程,由 Clojure 語言編寫,是主流處理引擎;
Riemann-health 程序,實現Riemann 集群的健康/使用指標報告;
Riemann-dash 程序,一個小型 Sinatra 應用,為 Riemann 提供網頁控制臺界面。
作為雲部件,Riemann也可將事件供應給Prometheus系統。
Riemann在Clojure開發人員中特別受歡迎,因為配置文件實際上是一些可執行的Clojure代碼,可以高度定製和構建。
Grafana
Grafana是用Golang 開發的開源的度量分析與可視化套件,主要用於大規模指標數據的可視化展現方式,是網絡架構和應用分析中最流行的時序數據展示工具。可以支持對Zabbix,Graphite,ElasticSearch,OpenTSDB,Prometheus和InfluxDB數據匯總、指標儀錶板和圖形編輯器。
Grafana可以讓用戶輕鬆創建和編輯儀錶板。Grafana非常適合分布式數據存儲環境下的數據匯總、查詢和可視化,也能對接指標閾值設置和告警。特別適用於實現高質量的交互式可視化和圖形。
Weave Scope
Weave Scope是容器生態中,可以自動進行容器APP映射,直觀地理解、監視和控制基於容器化微服務的應用程式。Weave Scope涵蓋監視,可視化,管理和故障排除。我們可以用Weave Scope可以在容器級別上監視和控制堆棧,並確切地了解容器在做什麼以及原因,零配置並自動檢測所有進程,容器和主機,該工具可以檢查速度框,對於任何開發人員來說都是節省時間的工具。
Weave Scope可以監控kubernetes集群中的一系列資源的狀態、資源使用情況、應用拓撲、scale、還可以直接通過瀏覽器進入容器內部調試等
隨著越來越多的工具針對更特定的工作流程進行開發,沒有一種工具在堆棧中佔據永久的位置,並且可以隨時替換其中的任何一種以獲得更好,更高效或更具自定義性的東西。但是就目前而言,這些開源監視工具在每個DevOps團隊的監視工具中佔據著至關重要的位置。
ELK Stack
Elasticsearch是ELK棧的一部分,全棧套件還有有Kibana,Beats和Logstash。儘管ELK棧被設計為集成解決方案,其中Elasticsearch通常用作支持工具。Elasticsearch是基於Luncene的java全文搜尋引擎,也是最常用最強大的分布式可收縮日誌存儲和檢索集群。Elasticsearch提供了RESTful廣泛而且精巧的API供訪問,該API可以支持近實時性的搜索用以支持數據發現。它幾乎與所有內容兼容,並與其他工具一起廣泛用於查詢資料庫。
Kibana是一個基於Elasticsearch的分析和可視化平臺,可直觀地瀏覽Elasticsearch集群中的數據。由於Kibana只是ELK棧中的可視化部分,因此也可以被替換為Grafana,Graphite或其他可視化工具。
Logstash是類似於Riemann的另一種流處理系統,可以從日誌,指標,Web應用程式,數據存儲和各種AWS服務中提取流數據。Logstash還具有一個輸出插件,可以通過該插件將特定事件發送到Riemann,例如可警報的事件或需要Riemann採取措施的事件。
ELK棧已經被廣泛地應用於運維實時日誌處理架構中,通常用於日誌系統的存儲、處理和分析匯總。但是由於其實時性質,在雲生態中,可以用於雲集群的監控和故障排查分析。