運維神器-分分鐘定位500錯誤!

OneAPM1發表於2015-05-12


做過運維的小夥伴都知道,當使用者瀏覽器上出現白屏、應用端API得到500錯誤、取到資料為空是非常崩潰的一件事情。500錯誤是伺服器端非常常見的一個錯誤,有可能是開發時導致的語法錯誤,也有可能是檔案引用導致的錯誤。當使用者反饋了 500 錯誤之後,而我們運維童鞋們面對一個叢集的後端伺服器,如果沒有方便的工具管理和同步,下手查詢問題,是一個即耗時又費力的痛苦過程。 
在最開始的時候,每次遇到這種情況,我們運維同學們就分別登入幾臺Web伺服器,去查詢可能記錄錯誤日誌的地方,找出錯誤的真兇,以讓開發童鞋們來改進。 
如下圖這個錯誤,就是由於在引用微信JS-SDK開發時,由於每個頁面都要做JS-SDK許可權授權,但是在其中一個頁面忘記了匯入微信的JS-SDK 包,導致了大量的 500錯誤。這種找錯誤的過程,最開始幾臺機器還勉強,幾分鐘能找到,到了後來變成了幾十臺,已經變成了一項誰也不想幹的工作了。

 
圖一、從日誌中尋找出現 500 錯誤的真兇 
後來公司的負載均衡伺服器Haproxy 
做了會話保持,我們就只好聯絡使用者,讓部分懂點技術的使用者,幫我們用Chrome 這類開發者工具,抓一下包,看看Cookie,從Cookie 的SERVERID 欄位就能知道,這個使用者的訪問,可能來自自於哪臺機器,這樣定位起來,方便了很多,但是時間也往往要10分鐘以上,因為還要跟使用者電話,大部分使用者並不懂得如何操作。如下圖二,從正常請求,可以得到此時訪問的 SERVERID,就可以知道出錯的頁面和日誌,也會在這臺機器上。 
 
圖2,透過SERVERID確定伺服器 
那有沒有什麼更快的辦法呢?有倒時有,比如自己開發一套系統,從各臺伺服器收集日誌,在有一個集中的地方,能檢視。但是我們運維童鞋開發能力還不太能跟得上,公司的開發童鞋老闆也恨不得拉來 7x16小時開發產品。

那到底還有木有什麼更好的辦法啊?

在圈子裡有人推薦OneAPM!其實最開始我是拒絕的,因為一般來講,裝這種在生產環境上,比較麻煩,並且可能會影響效能,還都需要埋程式碼。真到有一天,微博上又有人在討論OneAPM,我有點心動了。

 
於是乎,對於懂點開發、喜歡鼓搗新玩意的非典型運維工程師,三下五除二從OneAPM註冊了賬號,下載了安裝包,安裝到了我們的測試伺服器上。好傢伙,我還啥也沒有幹,把程式剛剛跑起來,在OneAPM 的管理控制檯上就看到了資料,真是福音啊,不要埋程式碼,真的不要埋程式碼!!!

DUANG — 簡直就是有特技!經過幾天的實驗,並向領導申請在生產環境上安裝,領導看到了是優才網伍老師推薦,正好是認識的熟人,所以特意微信溝通了一下,知道是靠譜的。就讓我讓裝到生產環境上去了。 
在實際的使用過程中,OneAPM 確實也幫了我們的大忙。使用了幾個月了,覺得真的是減輕了我們運維童鞋工作,同時也非常快速地定位問題,開發童鞋們也很感激。下面就舉一個真實環境中的栗子。

下面就是我從線上摘出來的典型的例子。線上出了問題,一分鐘後,在OneAPM 的管理後臺就看到了錯誤訊息。如圖三 

還以上邊的WxJSSDK 沒有找到為例,線上出問題時,使用瀏覽器抓包,得到的是如下結果,因為線上是關閉了日誌輸出的,只看到白白的一片,抓包則是 500 錯誤。

 
現在不用一臺臺上去檢測了,一分鐘後,OneAPM 後臺就收到了錯誤資訊報告。點選去看如下:

錯誤資訊報告表明,這是一個非常嚴重的PHP錯誤,就是在做微信開發時,要引用微信官方的SDK,開發童鞋給漏掉了,導致出現了找不到類 ’WxJSSDK’ 這樣的錯誤,Nginx 接到這樣的錯誤,會向客戶端返回 500。 
我直接把OneAPM錯誤資訊報告發給開發童鞋,開發童鞋心領神會,再也不會跟我糾纏說誰誰的問題了! 
開發童鞋還告訴了我修復的辦法:引入檔案就好了,特意找到了這段程式碼參考下圖。

有了OneAPM就是這麼爽,我也不用再用終端爬到每臺機器上去確認,更不用擔心隨著公司的業務發展,加到多少臺Web和API伺服器。

我需要擁有的,就是一個OneAPM 的管理後臺!

每次公司內部的技術分享,我都會從OneAPM拉出一些案例,也會提供給開發主管一些素材,總結程式設計師可能常犯的錯誤,為此,受到了老闆的獎勵!至於啥獎勵,大家懂的。平時參加一些業內的技術交流,也會向他們推薦OneAPM,已經成為了OneAPM的忠粉,他們團隊裡做支援的孟智童鞋還和我成為了好朋友!

OneAPM 的服務是很有特色的,可能這種服務還在早期,國內好像還沒有類似的應用,所以在後臺和功能上,也有一些不足之處,趁這個機會也吐個槽,希望能受到開發團隊的關注 ,並改進。 
第一、 由於我經常用,所以OneAPM賬號長期處於登入狀態,但是每次敲入OneAPM.com 都進到了首頁,搞技術的都懂啊,你們的產品經理莫非是臨時工?

第二、最需要改進的,就是看錯誤日誌的皮膚,搜尋、錯誤分級都還沒有做好。幸好我用熟悉了,否則新使用者會很暈的,欲知詳情,請看下圖。

第三、 如果做了錯誤分級,我最想要的就是報警了,就像DNSPod ,每一次域名出故障,連不上,都簡訊、微信、郵件就來了,聽說你們拿了7000萬啊,在出嚴重錯誤的時候,能不能給我來個簡訊啊,我就不用每天掛著這個後臺了,有木有!等到這些有了,即時將來有可能收費,我也會積極向領導爭取滴!


本文作者系釋出 ,想閱讀更多好的,請訪問OneAPM官方技術部落格


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/30238867/viewspace-1651546/,如需轉載,請註明出處,否則將追究法律責任。

相關文章