運維神器-分分鐘定位500錯誤!
做過運維的小夥伴都知道,當使用者瀏覽器上出現白屏、應用端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/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 分分鐘搞定 DevOps的七種“神器”dev
- 職業四象限,分分鐘定位你的方向
- 資料庫異常難定位?GaussDB(DWS)運維神器TopSQL來解決資料庫運維SQL
- vsftpd 錯誤:530 and 500 錯誤解決方法FTP
- 分分鐘掌握快速排序排序
- backtrace() 段錯誤定位
- ECS運維神器之阿里云云助手運維阿里
- oracle EBS啟動無錯誤,訪問網頁500錯誤Oracle網頁
- MongoDB日常運維-06副本集搭建錯誤彙總MongoDB運維
- 分分鐘搭建Oracle環境Oracle
- 經常出現 HTTP Status 500 -錯誤HTTP
- vsftp出現500 OOPS錯誤FTPOOP
- 記錄一次根據錯誤資訊無法定位錯誤的錯誤
- 分分鐘讓你理解HTTPSHTTP
- 如何讓 Vim 成為運維們的神器運維
- 前端開發--如何快速定位錯誤前端
- 線上壓縮程式碼-定位錯誤
- PHP HTTP 500 - 內部伺服器錯誤PHPHTTP伺服器
- Laravel 安裝後報 500 和 404 錯誤Laravel
- 伺服器內部錯誤500的原因伺服器
- IIS瀏覽器422、500等錯誤提示:自定義錯誤模組不能識別此錯誤瀏覽器
- Python基礎:分分鐘入門Python
- 掌握運維必備技能--問題故障定位運維
- Android NDK開發Crash錯誤定位Android
- springboot自定義 404 500錯誤頁面Spring Boot
- 機器學習降維之主成分分析機器學習
- 【運維心得】關於500W電源的選擇運維
- 讓你分分鐘學會 javascript 閉包JavaScript
- 如何排查Web伺服器HTTP ERROR 500的錯誤?Web伺服器HTTPError
- 從Swift語言看ORM的定位錯誤SwiftORM
- _findnext()除錯中斷,發生訪問錯誤,錯誤定位到ntdll.dll除錯
- 分分鐘教你Python Web開發框架DjangoPythonWeb框架Django
- SAP錯誤訊息除錯之七種武器:讓所有的錯誤訊息都能被定位除錯
- 什麼是http500內部伺服器錯誤?HTTP伺服器
- 500 501 502 503 504 505 伺服器錯誤伺服器
- ecshop安裝後開啟管理頁面時報500錯誤
- IIS配置PHP環境HTTP500錯誤處理方法PHPHTTP
- 解決IIS5 HTTP500內部錯誤 (轉)HTTP