云生態(tài)下的開源應(yīng)用程序監(jiān)控工具
Linux容器已經(jīng)被業(yè)界廣泛用于開發(fā)甚至生產(chǎn)系統(tǒng)。Docker和Kubernetes已經(jīng)被開發(fā)運(yùn)營(yíng)人員廣泛了解和熟悉。但是容器云架構(gòu)下系統(tǒng)監(jiān)控確實(shí)一個(gè)常常被忽略的問題。盡管容器部署主要涉及在每個(gè)容器內(nèi)運(yùn)行單個(gè)應(yīng)用程序或服務(wù),但是隨著部署規(guī)模的擴(kuò)大,對(duì)環(huán)境狀態(tài)和運(yùn)行狀況的可見性變得越來越重要,而不僅僅是在操作系統(tǒng)或應(yīng)用程序級(jí)別,而且在容器級(jí)別也是如此。
云生態(tài)監(jiān)控和日志處理領(lǐng)域分為實(shí)時(shí)數(shù)據(jù)庫,度量標(biāo)準(zhǔn)收集器,可視化工具,輪詢器,記錄器等。過去幾年中,開源產(chǎn)品和商業(yè)監(jiān)控應(yīng)用程序不斷涌現(xiàn),本文我介紹幾個(gè)最受歡迎的開源云應(yīng)用監(jiān)控工具。
Prometheus

Prometheus(普羅米修斯)是領(lǐng)先的開源云監(jiān)視解決方案,除其他事項(xiàng)外,其數(shù)據(jù)以時(shí)間序列數(shù)據(jù)庫存儲(chǔ),天然適合監(jiān)控?cái)?shù)據(jù)庫存儲(chǔ)。普羅米修斯是CNCF(Cloud Native Computing Foundation,原生云計(jì)算基金會(huì))支持的九大項(xiàng)目之一,也是CNCF中,除了也是Kubernetes后第二大托管項(xiàng)目。普羅米修斯獲得了包括谷歌,紅帽,IBM等公司在內(nèi)的眾多云供應(yīng)商的支持,是云應(yīng)用首選監(jiān)控程序。
普羅米修斯最初源于音樂托管網(wǎng)站SoundCloud,接著成為了Docker生態(tài)系統(tǒng)的重要組成部分。CoreOS團(tuán)隊(duì)還積極地使用Prometheus來改善Kubernetes的性能。
普羅米修斯已發(fā)展成為高級(jí)系統(tǒng)監(jiān)控和告警工具箱,能夠監(jiān)視各種資源,包括容器,Hadoop集群,各語言運(yùn)行時(shí)以及Python、Golang、JVM之類的應(yīng)用程序堆棧。

簡(jiǎn)而言之,普羅米修斯是一個(gè)開源監(jiān)控系統(tǒng),時(shí)間序列數(shù)據(jù)庫以及用于實(shí)現(xiàn)代碼的框架。但是,普羅米修斯不能生成度量標(biāo)準(zhǔn),需要要以HTTP可以解析的語言將度量標(biāo)準(zhǔn)提供給它。關(guān)于普羅米修斯參看蟲蟲之前文章,有詳細(xì)介紹。
Graphite

Graphite是一種流行的開源工具,用于構(gòu)建基于Web的儀表板以進(jìn)行監(jiān)視和分析。Graphite最初是由Orbitz的Chris Davis于2006年用python創(chuàng)建的一個(gè)輔助項(xiàng)目。用于監(jiān)控和繪制計(jì)算機(jī)系統(tǒng)的性能,最終形成了一個(gè)基本監(jiān)控系統(tǒng),并于2008年以Apache 2.0 license的授權(quán)開源發(fā)布。目前已經(jīng)獲得了GitHub,Salesforce和Reddit等眾多大公司提供和支持。
Graphite由三部分組成:
- Carbon 時(shí)間序列數(shù)據(jù)的守護(hù)程序,用于接收數(shù)據(jù);
- Whisper(類似于RRDtool)數(shù)據(jù)庫和存儲(chǔ);
- Graphite-web的Web應(yīng)用程序,可按需呈現(xiàn)圖形。

Graphite在企業(yè)中仍然很流行,原因是由于其自動(dòng)化程度很高,其中所有新數(shù)據(jù)點(diǎn)都能在數(shù)據(jù)庫中自動(dòng)創(chuàng)建。

Graphite本質(zhì)上是三個(gè)相互耦合的獨(dú)立工具,也可以單獨(dú)使用并與其他工具集成。
Riemann

上面我們說了Graphite所有組件都耦合可以單獨(dú)使用。Riemann就是用于替代Graphite中Carbon守護(hù)程序的。盡管Carbon會(huì)監(jiān)聽指標(biāo)并將其寫入whisper存儲(chǔ)數(shù)據(jù)庫,但由于Carbon是基于Python開發(fā)的,容易在性能上遇到瓶頸,這時(shí)候我們可以用Riemann代替它。Riemann使用 Clojure 語言實(shí)現(xiàn)以 "事件流(event streams)方式處理數(shù)據(jù)和匯總。但是,Riemann不是度量收集器。
Riemann的工作方式是從事件流(例如指標(biāo),日志,事件,主機(jī)和服務(wù))收集數(shù)據(jù),然后根據(jù)需要存儲(chǔ),圖形或警報(bào)。基于事件流的一棧環(huán)境下一旦事件流停止流動(dòng),就能馬上發(fā)現(xiàn)系統(tǒng)故障或網(wǎng)絡(luò)斷開。Riemann還能收集和處理各種形式的事件,事先監(jiān)控。
Riemann具有超快速度和性能。其官方網(wǎng)站宣傳的,Riemann可以在商用 x86 硬件條件下,Riemann 每秒就可以處理數(shù)百萬次事件,延遲時(shí)間卻只有亞毫秒,5 毫秒可以完成 99 次。
在云環(huán)境條件下,Riemann也可以容器化方式運(yùn)行和組合:
- Riemann 服務(wù)器進(jìn)程,由 Clojure 語言編寫,是主流處理引擎;
- Riemann-health 程序,實(shí)現(xiàn)Riemann 集群的健康/使用指標(biāo)報(bào)告;
- Riemann-dash 程序,一個(gè)小型 Sinatra 應(yīng)用,為 Riemann 提供網(wǎng)頁控制臺(tái)界面。
- 作為云部件,Riemann也可將事件供應(yīng)給Prometheus系統(tǒng)。
Riemann在Clojure開發(fā)人員中特別受歡迎,因?yàn)榕渲梦募?shí)際上是一些可執(zhí)行的Clojure代碼,可以高度定制和構(gòu)建。
Grafana

Grafana是用Golang 開發(fā)的開源的度量分析與可視化套件,主要用于大規(guī)模指標(biāo)數(shù)據(jù)的可視化展現(xiàn)方式,是網(wǎng)絡(luò)架構(gòu)和應(yīng)用分析中最流行的時(shí)序數(shù)據(jù)展示工具。可以支持對(duì)Zabbix,Graphite,ElasticSearch,OpenTSDB,Prometheus和InfluxDB數(shù)據(jù)匯總、指標(biāo)儀表板和圖形編輯器。

Grafana可以讓用戶輕松創(chuàng)建和編輯儀表板。Grafana非常適合分布式數(shù)據(jù)存儲(chǔ)環(huán)境下的數(shù)據(jù)匯總、查詢和可視化,也能對(duì)接指標(biāo)閾值設(shè)置和告警。特別適用于實(shí)現(xiàn)高質(zhì)量的交互式可視化和圖形。
Weave Scope
Weave Scope是容器生態(tài)中,可以自動(dòng)進(jìn)行容器APP映射,直觀地理解、監(jiān)視和控制基于容器化微服務(wù)的應(yīng)用程序。Weave Scope涵蓋監(jiān)視,可視化,管理和故障排除。我們可以用Weave Scope可以在容器級(jí)別上監(jiān)視和控制堆棧,并確切地了解容器在做什么以及原因,零配置并自動(dòng)檢測(cè)所有進(jìn)程,容器和主機(jī),該工具可以檢查速度框,對(duì)于任何開發(fā)人員來說都是節(jié)省時(shí)間的工具。
Weave Scope可以監(jiān)控kubernetes集群中的一系列資源的狀態(tài)、資源使用情況、應(yīng)用拓?fù)洹cale、還可以直接通過瀏覽器進(jìn)入容器內(nèi)部調(diào)試等。

隨著越來越多的工具針對(duì)更特定的工作流程進(jìn)行開發(fā),沒有一種工具在堆棧中占據(jù)永久的位置,并且可以隨時(shí)替換其中的任何一種以獲得更好,更高效或更具自定義性的東西。但是就目前而言,這些開源監(jiān)視工具在每個(gè)DevOps團(tuán)隊(duì)的監(jiān)視工具中占據(jù)著至關(guān)重要的位置。
ELK Stack
Elasticsearch是ELK棧的一部分,全棧套件還有有Kibana,Beats和Logstash。盡管ELK棧被設(shè)計(jì)為集成解決方案,其中Elasticsearch通常用作支持工具。Elasticsearch是基于Luncene的java全文搜索引擎,也是最常用最強(qiáng)大的分布式可收縮日志存儲(chǔ)和檢索集群。Elasticsearch提供了RESTful廣泛而且精巧的API供訪問,該API可以支持近實(shí)時(shí)性的搜索用以支持?jǐn)?shù)據(jù)發(fā)現(xiàn)。它幾乎與所有內(nèi)容兼容,并與其他工具一起廣泛用于查詢數(shù)據(jù)庫。

Kibana是一個(gè)基于Elasticsearch的分析和可視化平臺(tái),可直觀地瀏覽Elasticsearch集群中的數(shù)據(jù)。由于Kibana只是ELK棧中的可視化部分,因此也可以被替換為Grafana,Graphite或其他可視化工具。

Logstash是類似于Riemann的另一種流處理系統(tǒng),可以從日志,指標(biāo),Web應(yīng)用程序,數(shù)據(jù)存儲(chǔ)和各種AWS服務(wù)中提取流數(shù)據(jù)。Logstash還具有一個(gè)輸出插件,可以通過該插件將特定事件發(fā)送到Riemann,例如可警報(bào)的事件或需要Riemann采取措施的事件。

ELK棧已經(jīng)被廣泛地應(yīng)用于運(yùn)維實(shí)時(shí)日志處理架構(gòu)中,通常用于日志系統(tǒng)的存儲(chǔ)、處理和分析匯總。但是由于其實(shí)時(shí)性質(zhì),在云生態(tài)中,可以用于云集群的監(jiān)控和故障排查分析。






















