实现Java监视的12个步骤程序存在缺陷
Java監(jiān)視的當(dāng)前狀態(tài)最大的問題是什么?
生產(chǎn)中的錯(cuò)誤很像喝醉的短信。 您只有在事情已經(jīng)發(fā)生之后才意識到出了點(diǎn)問題。 發(fā)短信日志通常比應(yīng)用程序錯(cuò)誤日志更有趣,但是……兩者都同樣難以修復(fù)。
在本文中,我們將執(zhí)行一個(gè)12步的監(jiān)視漏洞修復(fù)程序。 由Takipi用戶的經(jīng)驗(yàn)支持的思想實(shí)驗(yàn),解決了您可能會(huì)遇到的一些最常見問題–以及您可以如何處理。
來吧。
步驟#1:承認(rèn)我們有問題
實(shí)際上,這只是更高級別的應(yīng)用程序可靠性問題。 為了能夠快速了解??應(yīng)用程序何時(shí)出現(xiàn)問題,并能夠快速訪問所需的所有信息以進(jìn)行修復(fù)。
當(dāng)我們更進(jìn)一步時(shí),可靠性問題由監(jiān)視和日志記錄的當(dāng)前狀態(tài)下的許多其他癥狀組成。 這些是大多數(shù)人試圖掩埋或完全避免的棘手問題。 但是在這篇文章中,我們將它們放在了焦點(diǎn)。
底線:不可避免地要對生產(chǎn)中出現(xiàn)的新錯(cuò)誤進(jìn)行故障排除和處理。
步驟2:關(guān)閉監(jiān)控信息過載
一個(gè)好的做法是收集有關(guān)應(yīng)用程序的所有信息,但這僅在度量標(biāo)準(zhǔn)有意義時(shí)才有用。 如果日志記錄和度量標(biāo)準(zhǔn)遙測的可操作性只是事后的想法,則會(huì)產(chǎn)生更多的噪聲。 即使它們產(chǎn)生漂亮的儀表板。
其中很大一部分是將異常和記錄的錯(cuò)誤濫用為應(yīng)用程序控制流的一部分,從而以“正常”異常的悖論堵塞了日志。 您可以在我們這里發(fā)布的最新電子書中了解有關(guān)此內(nèi)容的更多信息。
隨著監(jiān)視和數(shù)據(jù)保留成本的降低,問題開始轉(zhuǎn)移到收集可行的數(shù)據(jù)并使之有意義。
底線:盡管逐漸變得更容易記錄和報(bào)告所有內(nèi)容,但錯(cuò)誤根源發(fā)現(xiàn)仍然大部分是手動(dòng)的,大海撈針越來越大,很難找到針頭。
步驟#3:避免繁瑣的日志分析
假設(shè)我們有一些錯(cuò)誤,一個(gè)特定的事務(wù)有時(shí)會(huì)失敗。 現(xiàn)在,我們必須在日志文件中找到有關(guān)它的所有相關(guān)信息。 是時(shí)候翻閱日志的方式了,或者使用諸如Splunk,ELK或其他日志 管理工具之類的可以使搜索更快的工具來處理不同的查詢。
為了使此過程更容易,使用Takipi的開發(fā)人員可以將每個(gè)記錄的錯(cuò)誤,警告和異常的上下文擴(kuò)展到導(dǎo)致它的源,狀態(tài)和變量狀態(tài)。 每條日志行都有一個(gè)鏈接附加到該鏈接,從而可以在Takipi中進(jìn)行事件分析:
底線:手動(dòng)篩選日志是一個(gè)繁瑣的過程,可以避免。
步驟4:認(rèn)識到生產(chǎn)日志級別不夠詳細(xì)
原木水平是一把雙刃劍。 您登錄生產(chǎn)的級別越多,您擁有的上下文就越多。 但是,額外的日志記錄會(huì)產(chǎn)生開銷,最好在生產(chǎn)中避免。 有時(shí),您需要的其他數(shù)據(jù)將出現(xiàn)在“ DEBUG”或“ INFO”消息中,但是生產(chǎn)應(yīng)用程序通常僅寫入“ WARN”級消息或更高級別。
我們在Takipi中解決此問題的方法是使用最近發(fā)布的新功能,該功能使您能夠查看線程中導(dǎo)致錯(cuò)誤的最后250條日志語句。 即使它們沒有在生產(chǎn)中寫入日志文件。
等一下 無日志記錄,無額外開銷。 由于日志語句是直接在內(nèi)存中捕獲的,而不依賴于日志文件,因此我們能夠在生產(chǎn)中進(jìn)行詳盡的描述,而不會(huì)影響日志大小或增加開銷。 您可以在這里閱讀有關(guān)它的更多信息,或者自己嘗試 。
底線:從今天開始,您不僅限于WARN或更高級別的生產(chǎn)日志記錄。
步驟#5:下一個(gè)說“無法復(fù)制”的人買了一輪飲料
推遲錯(cuò)誤修復(fù)的最常見借口是“無法復(fù)制”。 缺少導(dǎo)致它的狀態(tài)的錯(cuò)誤。 不好的事情發(fā)生了,通常您首先會(huì)從實(shí)際用戶那里聽到它,并且無法重新創(chuàng)建它或在日志/收集的指標(biāo)中找到證據(jù)。
從根本上講,“無法復(fù)制”的隱藏含義是正確的。 如果您習(xí)慣于第一次聽到用戶的錯(cuò)誤消息,則內(nèi)部跟蹤錯(cuò)誤的方式可能有問題。 通過適當(dāng)?shù)谋O(jiān)視,可以在實(shí)際用戶報(bào)告錯(cuò)誤之前識別并解決錯(cuò)誤。
底線:停止復(fù)制“無法復(fù)制”。
步驟#6:打破日志語句重新部署周期
一種常見的臭名昭著且不幸的“無法復(fù)制”的解決方法是在生產(chǎn)中添加其他日志記錄語句,并希望該錯(cuò)誤再次發(fā)生。
在生產(chǎn)中。
搞亂真實(shí)用戶。
那就是生產(chǎn)調(diào)試悖論。 發(fā)生錯(cuò)誤時(shí),您沒有足夠的數(shù)據(jù)來解決它(但您確實(shí)有很多雜音),添加了日志記錄語句,進(jìn)行了構(gòu)建,測試(首先錯(cuò)過了該錯(cuò)誤的同一測試),部署到生產(chǎn)環(huán)境,希望為使它再次發(fā)生,希望新數(shù)據(jù)足夠或…重復(fù)。
底線:成功的監(jiān)視策略的最終目標(biāo)是防止此周期的發(fā)生。
步驟#7:APM +跟蹤器+指標(biāo)+日志=可見性受限
讓我們提高一個(gè)等級。 我們已經(jīng)介紹了日志和儀表板報(bào)告指標(biāo),現(xiàn)在是時(shí)候添加錯(cuò)誤跟蹤工具 和 APM了。
事實(shí)是,即使監(jiān)視堆棧包括所有4類的解決方案,您進(jìn)入應(yīng)用程序錯(cuò)誤的可見性也受到限制。 您將看到事務(wù)的堆棧跟蹤,或者最多看到特定的預(yù)定義硬編碼變量。 傳統(tǒng)的監(jiān)視堆棧在出現(xiàn)錯(cuò)誤時(shí)無法查看應(yīng)用程序的完整狀態(tài)。
底線:在當(dāng)今的通用監(jiān)視堆棧中,有一個(gè)關(guān)鍵的缺失組件。 生產(chǎn)調(diào)試具有可變級別的可見性。
步驟#8:為分布式錯(cuò)誤監(jiān)控做準(zhǔn)備
監(jiān)視不會(huì)在單個(gè)服務(wù)器級別上停止,尤其是在微服務(wù)體系結(jié)構(gòu)中,在一臺服務(wù)器上形成的錯(cuò)誤可能在其他地方引起麻煩。
盡管微服務(wù)提倡“關(guān)注點(diǎn)分離”原則,但它們還在服務(wù)器級別上引入了許多新問題。 在上一篇文章中,我們討論了這些問題,并提供了可能的解決方案策略。
底線:任何監(jiān)視解決方案都應(yīng)考慮分布式錯(cuò)誤,并能夠?qū)碜远鄠€(gè)源的數(shù)據(jù)進(jìn)行故障排除。
步驟#9:找到解決方法,以解決較長的故障排除周期
無論是警告問題還是僅是優(yōu)先事項(xiàng),對于大多數(shù)應(yīng)用程序,在引入第一個(gè)錯(cuò)誤之后,故障排除周期都需要數(shù)天,數(shù)周甚至數(shù)月的時(shí)間。 報(bào)告該錯(cuò)誤的人可能無法訪問或更糟,由于數(shù)據(jù)保留策略,相關(guān)數(shù)據(jù)可能長期未保存/滾動(dòng)。
在這種情況下,即使在錯(cuò)誤時(shí)刻凍結(jié)應(yīng)用程序狀態(tài)快照的能力(即使它來自多個(gè)服務(wù)/源)也至關(guān)重要,否則,重要數(shù)據(jù)可能會(huì)丟失。
底線:應(yīng)避免較長的故障排除周期。
步驟#10:確認(rèn)開發(fā)人員與運(yùn)營者的困境
跟上發(fā)布周期的問題,我們所有人都在同一條船上,但是,開發(fā)人員希望更快地發(fā)布功能,而運(yùn)營則希望保持生產(chǎn)環(huán)境的穩(wěn)定。
短的功能周期和長的故障排除周期根本不會(huì)在一起。 兩者之間應(yīng)該保持平衡。 監(jiān)視是一項(xiàng)團(tuán)隊(duì)運(yùn)動(dòng),并且工具必須知道如何相互交談。 例如,在Takipi,您可以獲得有關(guān)Slack,Pagerduty或Hipchat的警報(bào),并直接打開JIRA憑單,其中包含所有可用的錯(cuò)誤分析數(shù)據(jù)。
底線:協(xié)作工作流加快了問題解決的速度。
步驟#11:有希望
現(xiàn)代開發(fā)人員工具正在采取重大措施來改善當(dāng)前的監(jiān)視狀態(tài)。 無論是在日志,應(yīng)用程序性能管理領(lǐng)域還是在進(jìn)行中的新類別。
底線:密切注意工具生態(tài)系統(tǒng)的發(fā)展以及其他公司的最佳實(shí)踐。
步驟#12:宣傳
監(jiān)視是軟件開發(fā)不可分割的一部分,讓我們繼續(xù)進(jìn)行討論吧!
我們希望您對當(dāng)前監(jiān)視狀態(tài)的一些主要問題感到滿意/概述。 監(jiān)控還有其他問題讓您徹夜難眠嗎?
請隨時(shí)在下面的評論部分中分享它們。
翻譯自: https://www.javacodegeeks.com/2016/08/12-step-program-realizing-java-monitoring-flawed.html
總結(jié)
以上是生活随笔為你收集整理的实现Java监视的12个步骤程序存在缺陷的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 消息称特斯拉设计师不喜欢 Cybertr
- 下一篇: javaone_JavaOne 2012