Java 開(kāi)發(fā)者最有用的監(jiān)控工具有哪些呢?
監(jiān)測(cè)是當(dāng)今生產(chǎn)環(huán)境中很重要的一個(gè)功能。錯(cuò)誤和性能問(wèn)題任何時(shí)間都會(huì)出現(xiàn) —— 不僅僅在業(yè)務(wù)時(shí)間內(nèi) —— 所以好的監(jiān)控工具需要 7 天 24 小時(shí)。目前有許多從不同角度解決這個(gè)問(wèn)題的工具,所以弄清楚去采用哪個(gè)不是那么簡(jiǎn)單。
今天,我?guī)?lái)了 7 個(gè)監(jiān)測(cè)工具以及它們的新一面,它們都是值得考慮作為像 New Relic 或 AppDynamics 的替代或補(bǔ)充。這些工具包括混合開(kāi)源和 SaaS 模式,它們每個(gè)人都有其在度量、可視化或跟蹤錯(cuò)誤方面的專長(zhǎng)或缺憾。
SaaS工具
1. Datadog
Datadog 是 SaaS 監(jiān)測(cè)工具,針對(duì) DevOps 團(tuán)隊(duì),從你的 app 或者其他各種工具獲取數(shù)據(jù)并提供數(shù)據(jù)可視化功能。它把從你基礎(chǔ)設(shè)備和軟件采集的數(shù)據(jù)統(tǒng)一處理并存儲(chǔ)。允許你創(chuàng)建儀表盤(pán)和搜索訪問(wèn)你提供的數(shù)據(jù)。他們目前提供數(shù)據(jù)的聚合和展示而不是提供數(shù)據(jù)分析。
Datadog 的一個(gè)優(yōu)點(diǎn)是了開(kāi)放所有 API,可以讓你很靈活的開(kāi)發(fā)自己的指標(biāo)或整合。
Datadog 儀表盤(pán)示例
缺點(diǎn): Datadog 尚未提供太多數(shù)據(jù)統(tǒng)計(jì)功能,做為一個(gè)監(jiān)控軟件,這些功能可能恰恰是你正在尋找的。他們還需要植入你的代碼,這會(huì)產(chǎn)生代碼依賴。
費(fèi)用:它有免費(fèi)版本和15美元/臺(tái)/月的標(biāo)準(zhǔn)版本,標(biāo)準(zhǔn)版費(fèi)用可上下浮動(dòng),浮動(dòng)的多少要看主機(jī)的數(shù)量。
java支持方面:官方文檔中說(shuō)明,Datadog API 支持 Python,Ruby 和 C#。不過(guò),由于它的 API 訪問(wèn)是開(kāi)放的,因此 Datalog 社團(tuán)編寫(xiě)了幾個(gè) Java 方面的庫(kù),其中包括對(duì) StatsD 和 Codahale 測(cè)量支持的庫(kù)。
其他:由于 Datadog 具有告警功能,而且可監(jiān)控性能,因此它可作為一個(gè)價(jià)格相對(duì)便宜的應(yīng)用程序性能監(jiān)控器(APM)。有許多集成方案可以讓你毫不費(fèi)力地把它集成到你的運(yùn)行環(huán)境 中。Datadog 是一個(gè)強(qiáng)大的采集并可視化測(cè)量結(jié)果的工具,而不是分析工具,因此如果你需要的是分析工具,那就要另尋它物了。
2. Ruxit
它由 Dynatrace 開(kāi)發(fā),Ruxit 是一個(gè)應(yīng)用性能監(jiān)控工具,它作用于 SaaS 模型。它通過(guò) SaaS 提供不同的 APM 體驗(yàn),并工作在高擴(kuò)展性環(huán)境中。它作為一個(gè)代理安裝,不需要你配置環(huán)境,它還提供了一個(gè)類似于 New Relic 的易于安裝的工具。他們監(jiān)控用戶的活動(dòng),應(yīng)用性能,服務(wù)器和網(wǎng)絡(luò)活動(dòng)。
Ruxit面板
缺點(diǎn): Ruxit 沒(méi)有在空間上提供很多深度功能給其他的 APM 工具。
消耗: Ruxit 監(jiān)控應(yīng)用會(huì)消耗 $0.15/主機(jī)/小時(shí),并且對(duì)真實(shí)的用戶監(jiān)控(Real User Monitoring)來(lái)說(shuō)每 1000 個(gè)訪問(wèn)者就花費(fèi) $0.15。
The Java Angle: Ruxit 可以工作在任何 Java 1.5 版本以上的 Java 服務(wù)器上。Java 是他們首選語(yǔ)言,因此能獲得更好的支持。
Takeaway: Ruxit 是一個(gè) SaaS APM 工具,并且它易于安裝也易于集成到你的環(huán)境中去。工具為你的環(huán)境提供一個(gè)良好的范圍廣度,并提供幾個(gè)不同區(qū)域的視圖。
3. Takipi
Takipi 告 知你生產(chǎn)環(huán)境下的代碼在什么時(shí)候、因什么原因而終止執(zhí)行。它對(duì)所有錯(cuò)誤進(jìn)行檢測(cè),同時(shí)會(huì)給出出現(xiàn)錯(cuò)誤時(shí)代碼的位置和變量的狀態(tài)。Takipi 是以 Java 代理的身份運(yùn)行的,與任何日志文件無(wú)關(guān),這樣就會(huì)減少小于 %3 的 CPU 和 IO 運(yùn)行花費(fèi)。安裝 Takipi 的時(shí)候,也不需要進(jìn)行代碼更改,不需要安裝二進(jìn)制依賴包或者進(jìn)行構(gòu)建配置的設(shè)置。就像集成 JIRA 和 Slack 那樣,Takipi 可以非常簡(jiǎn)單地插入到工作流程中。
Takipi 的錯(cuò)誤分析界面
缺點(diǎn):它是一個(gè)只可用在 JVM 層上的工具,因此 JVM 不支持的語(yǔ)言它也不支持。目前,它也沒(méi)有可以與其他告警工具集成在一起的 API。
費(fèi)用:免費(fèi)級(jí);專業(yè)級(jí),其費(fèi)用可上下浮動(dòng),69美元/服務(wù)器/月;企業(yè)級(jí)。級(jí)別的劃分是根據(jù)保存的數(shù)據(jù)量,分析的錯(cuò)誤數(shù)和部署選項(xiàng)而確定的。
Java支持方面:Takipi 是運(yùn)行在 JVM 層上的工具。任何不需要其它環(huán)境就可以運(yùn)行在 JVM 上的語(yǔ)言,它都支持。
其他:與其他停留在棧追蹤層級(jí)的工具不同,Takipi 深入到 JVM 層級(jí)上,可以按照你的要求向你展示實(shí)際運(yùn)行的代碼和變量的狀態(tài),以達(dá)到對(duì)每個(gè)錯(cuò)誤的解析。通過(guò) Takipi,你可以確定是否是新部署終止了正在運(yùn)行的代碼, 通過(guò)深入地分析應(yīng)用出現(xiàn)的所有錯(cuò)誤,聚焦出問(wèn)題的關(guān)鍵所在。
4. Rollbar
Rollbar 著眼于錯(cuò)誤追蹤與監(jiān)控。它使用堆棧追蹤來(lái)捕捉應(yīng)用中出現(xiàn)的錯(cuò)誤。這樣做的好處是可以支持更多的語(yǔ)言和環(huán)境。Rollbar 也提供手工方式深入異常、事件內(nèi)部,并提供報(bào)告的能力。除提供強(qiáng)大的異常捕獲能力外,還提供了一些警報(bào)和分析能力。
Rollbar 儀表板
劣勢(shì): Rollbar 僅能捕獲“程序未捕捉異常”。如果你打算捕獲程序捕捉異常或其他,只好手工來(lái)做。由于依賴頂層程序未捕捉異常處理器,它能忽略由框架產(chǎn)生的異常,避免線程死鎖。
成本: 免費(fèi)版本, $29/每月, $99/月 and $249/月,區(qū)別在與追蹤到的事件數(shù)量及數(shù)據(jù)保留長(zhǎng)度.
Java支持: Rollbar 沒(méi)有提供 Java 的官方支持庫(kù),但社區(qū)提供了一些實(shí)現(xiàn),可以講你的日志發(fā)給 Rollbar.
概述: Rollbar 是基于堆棧的錯(cuò)誤追蹤應(yīng)用,它能兼容大多數(shù)開(kāi)發(fā)語(yǔ)言。但負(fù)面影響是它僅能捕獲程序未捕捉異常及手動(dòng)發(fā)送的事件。
開(kāi)放源代碼(的監(jiān)控工具)
#p#
5. Sensu
Sensu 是一個(gè)面向應(yīng)用和系統(tǒng)服務(wù)的開(kāi)源監(jiān)控框架。它能收集和使用多種工具的度量值,并提供已定義事件報(bào)警。Sensu,使用 Ruby 實(shí)現(xiàn),采用“檢查和處理器”設(shè)定,周期性運(yùn)行檢查腳本,查找預(yù)定義條件,如果條件滿足,則向處理器報(bào)告。處理器用于發(fā)送通告或采取其他處置方法。
Sensu中的警報(bào)
劣勢(shì): 不像 Ruxit,Sensu 并沒(méi)有真正的實(shí)現(xiàn) APM 工具。它著重于服務(wù)器監(jiān)控。在安裝前端, Sensu 依賴 RabbitMQ 和 Redis,及其他依賴,這些依賴包可以在指定的軟件倉(cāng)庫(kù)中找到。還有一些對(duì)于可擴(kuò)展能力和維護(hù)復(fù)雜性的擔(dān)憂。當(dāng)然,你的需求可能不同。
成本: Sensu Core 核心版(其中的開(kāi)源項(xiàng)目)免費(fèi), 但也提供企業(yè)版本,企業(yè)版提供附加的集成、支持和特性。企業(yè)版費(fèi)用標(biāo)準(zhǔn): $2/每服務(wù)器/每月, 大規(guī)模部署享受折扣.
Java視角: Sensu 的檢查和處理器腳本能用任何開(kāi)發(fā)語(yǔ)言編寫(xiě), Sensu 社區(qū)提供了Java支持插件。
概述: Sensu 是云和服務(wù)器監(jiān)控的一個(gè)開(kāi)源替代框架實(shí)現(xiàn),在搞擴(kuò)展性和復(fù)雜性上還存在一些問(wèn)題,但它仍然不失為一個(gè)度量參數(shù)值收集和服務(wù)監(jiān)控的強(qiáng)力工具。
6. ELK stack
ELK Stack, 嚴(yán)格來(lái)講,不是一個(gè)新產(chǎn)品,但我們常常忽略掉它,不放到我們的討論列表中。 ELK stack 是一個(gè)流行的工具套件,功能涵蓋監(jiān)控、日志和數(shù)據(jù)可視化。它由 ElasticSearch, Logstash, and Kibana 三部分組成。其中,Elasticsearch 負(fù)責(zé)搜索和分析,Logstash 是日志聚積器,而 Kibana則提供華麗的可視化儀表盤(pán)。我們已經(jīng)在 Takipi中 使用 ELK Stack一段時(shí)間,使用 java 通過(guò)日志和Redis 提供輸入。這既適用于開(kāi)發(fā)者,同樣可用于 BI。今天, Elasticsearch 完美內(nèi)置了 Logstash, Kibana 也是靈活的獨(dú)立工具。它們集成和設(shè)置都很簡(jiǎn)單。你可以按照你的需要靈活搭配這三個(gè)工具使用。當(dāng)實(shí)施(推出)新的部署時(shí),儀表盤(pán)會(huì)遵照你設(shè)定的應(yīng)用健康參數(shù) 閥值指示器工作。這些指示器會(huì)實(shí)時(shí)更新,同樣允許你在上傳產(chǎn)品補(bǔ)丁代碼時(shí),暫時(shí)關(guān)閉監(jiān)控。
ELK Stack 視圖
劣勢(shì):ELK Stack 有著開(kāi)源工具所通用的缺點(diǎn)(即你需要自己承擔(dān)工具的安裝成本和部署問(wèn)題)。在大規(guī)模數(shù)據(jù)情況下,需要運(yùn)行 ELK Stack 的機(jī)器數(shù)量成倍增長(zhǎng),這就需要你自己來(lái)監(jiān)控和維護(hù)這些額外的機(jī)器。一種可行的方案是使用托管服務(wù),例如 Logz.io 來(lái)減輕這種監(jiān)控的壓力。
成本: 作為開(kāi)源工具,ELK Stack 沒(méi)有任何價(jià)格負(fù)擔(dān),但它也可以提供來(lái)自 Elastic 專業(yè)的服務(wù)支持。
Java視角: ELK Stack 轉(zhuǎn)為 Java 設(shè)計(jì)。事實(shí)上,ElasticSearch 和 Logstash 運(yùn)行在 Java 環(huán)境。Elastic 要求的 Java 版本最低為 Java7,且所有的 ElasticSearch 節(jié)點(diǎn)的 JVM 版本必須相同。
其他: ELK Stack,包括 ElasticSearch Logstash, 和 Kibana,是一整套提供搜索分析日志并帶有可視化功能的開(kāi)源工具。這一套工具整合地非常好,所以使用起來(lái)也很簡(jiǎn)單(雖然它并不是必須的)。
7. Graphite
Graphite 是應(yīng)用程序監(jiān)控度量值的可視化工具,包括三個(gè)組件 (Carbon, Whisper, 和Graphite-web),它的開(kāi)源特性使得它能被方便定制和改進(jìn). 如何構(gòu)建你自己的 Graphite 構(gòu)架,可以參看我們的文章 here。
Graphite 提供了強(qiáng)大的查詢?cè)L問(wèn)API和特性豐富的設(shè)置。它并不需要設(shè)置自身的度量,而是提供Graphite metric protocol ,被多種度量采集器選擇的事實(shí)協(xié)議格式。因此,輸入給它的數(shù)據(jù)完全不是問(wèn)題。使用 Graphite 能使你為你的應(yīng)用創(chuàng)建各種視圖。
默認(rèn)的Graphite儀表盤(pán)GUI
缺點(diǎn): Graphite 面臨開(kāi)源工具的共同困境(也就是,安裝的開(kāi)銷以及部署的問(wèn)題)。另外,Graphite 在大規(guī)模的情況下會(huì)遇到問(wèn)題,這些問(wèn)題是由 Carbon 和 Whisper 組件的設(shè)計(jì)決策而來(lái)。這是一個(gè)偏好問(wèn)題,但是人們對(duì)默認(rèn)的 GUI 也沒(méi)有太大的熱情。
開(kāi)銷: 下載 Graphite 是免費(fèi)的,但是你需要將硬件的因素以及運(yùn)維的開(kāi)銷考慮在內(nèi)。 相對(duì)于 Graphite 而言,也有許多替代品,如 Grafana 和 InfluxDB 也是免費(fèi)的。如果你想使用 Graphite,而不希望自己部署,也可以通過(guò)付費(fèi)的方式進(jìn)行托管。
Java視角: Graphite 是語(yǔ)言無(wú)關(guān)的,有許多工具可以從 Java 應(yīng)用程序收集指標(biāo),并將它們發(fā)送給 Graphite。
紀(jì)要: Graphite 是一個(gè)受歡迎的開(kāi)源軟件工具,它以可視化的方式展示從應(yīng)用程序收集的指標(biāo)。它有開(kāi)源軟件共同的缺點(diǎn),以及規(guī)模化的限制。不過(guò),如果你愿意付費(fèi)或者定制,這兩方面的缺點(diǎn)都可以通過(guò)許多不同的方式來(lái)克服。
結(jié)論
如今,監(jiān)控工具是生產(chǎn)環(huán)境的重要組成部分。測(cè)量結(jié)果的可視化、錯(cuò)誤追蹤、性能監(jiān)控和應(yīng)用分析是對(duì)應(yīng)用的運(yùn)行狀況進(jìn)行深入觀測(cè)的基本手段。認(rèn)識(shí)到這一需求非常容易,但要選擇哪一款監(jiān)控工具或者哪一組監(jiān)控工具卻異常困難。
上面我提到的7個(gè)工具:Datalog,Ruxit,Takipi,Rollbar,Sensu,ELK Stack 和 Graphite 都是值得考慮的。這些工具要么是最近才創(chuàng)建的,要么是這篇文章中未提到的一些大型監(jiān)控工具的替代工具。選擇部署哪款監(jiān)控工具要明確在哪兒才能搜索這些工 具。這兒所提到的工具就是一個(gè)很好的開(kāi)始。