長青資訊 — 每日13億條日誌系統的奮鬥史

結構化日誌

原先的系統使用 Go 內建套件 fmt 或是 log 輸出日誌,如果要印出較大的結構,需要自行組合格式化的字串。2018 導入 zap 套件,它是由 Uber 開發人員。特色是輸出結構化 JSON 的日誌,並且支援各種資料類型的場 (field)。以 Kibana 收錄日誌,支援解析日誌,就可以輕易過濾指定的場,顯示關注的日誌。

大海撈針,精準定位

某個對外閘道每日產生 13 億條,有如汪洋大海。每個動作都會如實紀錄,以便日後可以追蹤。客戶需要協助的時候,提供輸入輸出參數和時間,FAE 同事於 Kibana 用時間去逼近,這種日誌量級做起來很累人,效率很低。
開發人員研究如何降低此痛苦,研究了 Twitter ID,轉換成 Base62 編碼,名為追蹤碼(tracecode)。使用 zap 輸出,Kibana 蒐集。此後 FAE 只要向客戶索取追蹤碼,即可快速在 Kibana 重現狀況。

錯誤處理

Web 服務常見的層級有資料、邏輯、入口,有些訊息無法從內層如實轉發到最外層,勢必需要內外分離。以往的寫法是收到錯誤就輸出並且流程返回,日誌只會看到發生地方的錯誤,無法知道脈絡。感謝開放原始碼社群的奉獻,讓開發人員可以使用 pkg/errors,將呼叫堆(callstack)和錯誤物件包裝起來,逐層往上返回,在頂層收集統一處理。

由於使用 web 框架 echo 提供中間件機制,所以建立一個全新的套件,蒐集每個返回的錯誤,輸出日誌。echo 內建的中間件裡有個請求識別,原理是收到請求生成一個識別,放在標頭,處理器可以隨時取得運用。開發人員將此機制發揮,請求和響應皆使用同一個追蹤碼,輸出日誌即可以產生一對日誌,方便比對尋找。

i18n

由於公司客戶眾多,分佈在世界各地,系統需要提供各種語言。微服務架構的落實,內部訊息也需要翻譯給外部閘道,提供較精確的訊息翻譯。錯誤處理的完善,提供開發人員可以實現內外訊息分離,內部訊息可以詳細輸出,外部訊息則使用翻譯樣板,達到翻譯統一。外部閘道可以放心將收到的訊息輸出給請求端。

長青資訊

發揮所「長」 匠「青」獨具

「擁抱變化,勇於接受挑戰,面對競爭能全力以赴。」是長青資訊的企
業座右銘,2016 年由一群資深遊戲開發者所組成的菁英團隊,至今已自創超過 100 款線上遊戲,長青掌握著超群的核心技術,使其成為遊戲界最受人注目的潛力股。

到新創公司上班,最怕遇到公司福利不完善的問題,長青卻是大方對待自家人,辦公室備有取之不盡的零食飲料、下午茶與不定期聚餐,且這都還只是基本款,公司會提供免費早餐、員工餐及鮮榨蔬果汁,讓夥伴不僅省荷包,還補足了精神。此外亦不定期舉辦活動,包含社團、包場電影欣賞、家庭日活動及年度補助員工旅遊與健康檢查等,讓人備感長青大家庭的溫暖。

長青人享受冒險、創新、驚喜、學習與成長,但重要的是,公司願意將夥伴視如已出,提供舞台讓夥伴發揮所長,帶領其在遊戲圈內刻劃出不容置疑的專業,一同前進!

https://cchn.co/zh-tw

The official blog of GopherCon Taiwan