與磚馴服JavaScript例外
2022年1月25日 在工程的博客
這篇文章是我們的博客係列的一部分我們的前端工作。你可以看到前一個“簡化數據+人工智能,一行一次打印稿。”和“在磚建造下一代可視化工具”。
在磚,我們將非常認真地對待我們的客戶體驗質量。因此,我們跟蹤許多產品可靠性指標。一個度量我們關注的是會話的百分比,沒有看到JavaScript (JS)異常。我們的目標是讓這個快樂的99.9%以上,但從曆史上看,這些問題已經手動跟蹤,因為很多原因並不足以牽製錯誤。
在過去,我們使用哨兵聚合和分類各種異常,包括JS。哨兵都吸入的錯誤,在前端、聚集sourcemaps中解碼壓縮堆棧跟蹤。
使用磚跟蹤JS例外
同時考慮如何更好地自動跟蹤和異常,因此,減少問題被運出,我們看著擴展哨兵。不幸的是,我們發現所需的努力是高。當我們看著哨兵是解決我們的用例,我們意識到磚的產品可以很大程度上完成同樣的任務,簡單路徑的可擴展性。
首先,磚是超過一個數據平台;Beplay体育安卓版本它本質上是一個通用的計算和應用基礎設施之上您的數據。這允許您創建一個ETL攝入各種各樣的信息和應用編程轉換,從內部網絡產品。
ETL一旦建立,您可以使用結果來構建動態指示板,連接到第三方api或其他。磚甚至有gui來編排管道的任務和處理任何失敗時報警。
記住這一點,我們的挑戰是建立一個內部,維護管道JS異常,自動創建的目標門票每當我們發現問題暫存或生產。
從磚的哨兵
聚合成δ
構建我們的ETL的第一步是找到我們的真理。這是我們usage_logs表,其中包含各種不同的日誌和度量客戶與產品的交互。每一個JS例外是存儲在縮小的堆棧跟蹤。
我們開始通過構建一個磚的筆記本usage_logs過程。這個表是巨大和難以優化,所以查詢異常可以三十分鍾或更多。我們聚合數據我們希望到一個獨立的三角洲表,這使我們能夠查詢和切片數據(大約一年的例外)秒。
數據濃縮:堆棧跟蹤解碼
至關重要的是,我們需要找到一種方法來解碼的縮小的堆棧跟蹤usage_logs ETL的一部分。這將讓我們知道文件和行造成一個給定的問題,並采取進一步措施基於知識豐富異常。
第一步是存儲在一個AWS S3 bucket sourcemaps我們構建的一部分。S3 bucket山磚有助於使您能夠到您的工作空間的文件係統,這使得那些sourcemaps易得的代碼。
一旦我們有了sourcemaps在S3中,我們有能力來解碼磚上的堆棧跟蹤。這樣做是完全在磚的筆記本,有能力通過pip安裝Python庫。我們安裝了sourcemap包處理解碼,然後建立一個小Python腳本異常堆棧來評估給定和獲取相關sourcemaps從文件係統。
一旦我們有,我們把腳本包在一個UDF,這樣我們可以直接從SQL查詢運行它在我們的筆記本!這給了我們能夠解碼堆棧跟蹤和返回的文件錯誤引起的,源代碼的行和上下文,和解碼棧本身,所有這些都被保存在單獨的列。
代碼所有權
一旦我們解碼了堆棧跟蹤,我們有很高的信心,文件負責每個錯誤,可以用它來確定哪些團隊擁有這個問題。為此,我們使用Github的存儲庫API來爬,找到最近的主文件和地圖擁有團隊JIRA組件。
我們建立了這個UDF和添加到另一個聚合器,所以當一個異常進來,這是pre-triaged到正確的團隊!
磚SQL的儀表盤
獲得可見性發生了什麼產品,我們使用磚的SQL為高層構建儀表盤指標。這幫助我們想象的趨勢和精密的問題發生在當前版本。
我們還建立了儀表板分析特定問題,顯示錯誤的頻率,變化的誤差等等。實際上,取代了哨兵的UI,我們可以增加它提供任何數據是我們公司最相關。
票務
一旦我們有了ETL建造和填充,我們看這一事件頻率登台和生產相對於磚用戶的數量在這些環境中。我們決定,自動提高JIRA票隨時一個例外發生在登台,在生產的時候,我們在十個不同的會話設置閾值。
這立即引發了幾十票。絕大多數都以某種方式或另一個已知的但都足夠低的影響,團隊沒有解決它們。總的來說,然而,許多小門票大大回歸我們的經驗。在這個時候,我們計算,20%的會話看到至少一個錯誤!
我們將和豐富的數據,我們的工程師能夠有效地直接跳入一個解決而不是涉水通過不同的服務和日誌來獲得他們需要的信息的行為。結果,我們很快燒毀了我們的大部分問題,回來我們99.9%以上錯誤的目標。
任務編製有工作的
當執行我們的管道,我們有一個筆記本處理ETL,另一個比較三角洲表JIRA的狀態和打開任何必要的問題。運行這些需要一些編排,但幸運的是,磚的工作使它容易處理這個問題。
通過工作,我們可以依次登台和生產的筆記本電腦運行。這是很容易建立在web GUI來處理路由失敗對我們團隊的警報的收件箱。
最終的想法
總的來說,我們的產品一直在建築磚是非常強大的,給我們的能力構建定製的跟蹤和分析任何我們正在努力。我們使用這樣的流程監控前端性能,跟蹤反應組件的使用、管理儀表板進行代碼遷移等等。
這樣的項目給我們一個機會將我們的產品作為一個客戶,感受他們的痛苦和歡樂,給其他團隊的反饋他們需要磚更好。
如果在這樣的一個平台聽起來很有趣Beplay体育安卓版本,我們招聘!有一個令人難以置信的各種前端所做的工作和計劃,我們可以使用你的幫助。來和加入我們!