[TIL][Golang] Debugging Go in prod using eBPF 心得

Refer article “Debugging Go in prod using eBPF” by Zain Asgar : https://blog.pixielabs.ai/blog/ebpf-function-tracing/post/ 前言: 在 Golang 上面來 debugging 其實有許多方式,不論是最常使用的 logging 或是透過 delve 甚至是 GDB 。 都算是常見方式來 debugging Go 。 但是最近看到這篇文章,覺得裡面提到的 eBPF (extended Berkeley Packet Filter) 算是蠻有趣,在這裡稍微做個簡單的整理。 Golang 上除錯的方式 (Debugging in Go) 一般來說要在 Go application 中來 debugging ,有以下的方式: Add log: 就如同大家熟悉的,使用 fmt.Println() 或是 log.Println() 。 Using debugger (delve or GDB) 不論是透過 vscode 內建的 delve ,或是透過 GDB 來做 debugging 。 透過 debugger 來除錯,其實是相當消耗系統資源,並且經常會中斷整體應用程式的運行。 Tracing 這裡指的是透過外部的 tracing tool ,不論事 USDT 還是 strace 都算是一種方式。 什麼是 eBPF eBPF (extended Berkeley Packet Filter) 根據官方網站 (https://ebpf.io/) ,是一個技術可以讓 application 跑在 sandbox 上面,並且可以透過 Syscall hook 方式來查看相關的資料而不需要修改任何的 kernel source code 。 應用範圍有: Secuerity: 透過 eBPF 可以做為一個與系統呼叫 (Syscall) 與硬體設備的中間層。 Tracking and Profiling:由於 Linux 系統都有提供 eBPF 的接口,可以透過這個直接 tracking 與 Profiling 你的應用。 (with very low latency) 。 這也是這篇文章提到的主要技巧。 為何使用這個? 既然提到 Debugging Go App 的所有工具,必須要跟其他方式做個比較。可以看到 eBPF 具有以下特性: Performance Impact 非常的低(disruption 也很低),類似於 Tracing tool 。但是跟 GDE 與 Delve 一樣可以追蹤到 Application Code。 但是無法作分散式系統的測量,因為一次 eBPF 只能針對你需要 hook...
繼續閱讀

[研討會心得] 2020/09/23 Golang#54 @LINE

前言 大家好,我是 LINE Taiwan 的 Tech Evangelist - Evan Lin。這次很開心受到 Golang 社群的邀請,參加了 “Golang Taipei Gathering #54” 的聚會活動,並且分享 Golang 開發的一些技巧與個人開發的心得。在此也跟各位分享本次參與的心得,並且也希望透過社群分享的力量能夠讓 Golang 更受到人了解。 社群 Chatbots Meetup: https://www.meetup.com/golang-taipei-meetup 本次活動網頁: 活動網址 Golang in LINE MUSIC TW - Wei@LINE Music 介紹 LINE Music 中主要使用到的 Golang 套件與相關的經驗分享。 errors x stack x info - Hsueh-Tsung Kuo @Rayark 投影片: https://hackmd.io/@fieliapm/Bk48ziTj8#/ 首先講者先介紹了 Go Error 系統的一些常被人詬病的問題: error 包含的資訊過少 不容易瞭解錯誤,拆包(摘解 error)與包裝 Go 1.13 的 error 可以參考一下這篇 Working with Errors in Go 1.13 ,可以透過 Warp 跟 UnWarp 來包裝與拆解 Errors 。 有沒有辦法 Inspect ? 透過 error.Is() 來判斷是不是同一個,或是透過 error.As()判斷是不是同一種類別 (type assertion)。 Go Error system sucks, 可以參考 Rust 的 error handling 與 Trait std::error::Error https://github.com/pkg/errors 不錯用,但是無法解析底層的 errors (因為跟底層的 standard error 不相容)。參考文章 Can new Go errors wrapper replace pkg/errors? 參考鏈結 Working with Errors in Go 1.13 Rust 的 error handling Rust std::error Can new Go errors wrapper replace pkg/errors? 活動小結 立即加入「LINE開發者官方社群」官方帳號,就能收到第一手Meetup活動,或與開發者計畫有關的最新消息的推播通知。▼ 「LINE開發者官方社群」官方帳號ID:@line_tw_dev 關於「LINE開發社群計畫」 LINE今年年初在台灣啟動「LINE開發社群計畫」,將長期投入人力與資源在台灣舉辦對內對外、線上線下的開發者社群聚會、徵才日、開發者大會等,已經舉辦30場以上的活動。歡迎讀者們能夠持續回來察看最新的狀況。詳情請看: 2019 年LINE 開發社群計畫活動時程表 LINE Taiwan Developer Relations 2019 回顧與 2019 開發社群計畫報告 2020...
繼續閱讀

[研討會心得] 2020/09/22 BECKS.io #7 聚會心得

大家好,我是 LINE Tech Evangelisgt – Evan Lin。LINE 一直以來不遺餘力地提升資訊安全,除了以 DevSecOps 的概念為基礎,將資安 DNA 注入 LINE 產品與服務,更積極促進整體資安生態圈的成長。 而 Beer is beautiful, hacks is amazing, BECKS is gold. BECKS是Beer與Hacks兩個字所組成。 透過一系列的 BECKS.IO – Security Meetup 資安社群活動,為韓國、日本、台灣等地的優秀資安人才提供當面交流、建立良好連結的機會! 本次 BECKS.IO 小聚選於台北的 Avenue 舉辦,邀請台灣的講者們,在輕鬆開放的氛圍中,暢談不同企業與個人的資安思維及實務經驗,並展望相關技術的未來發展。 KKTIX 活動網頁: 活動網址 Detect and track Apple devices for fun and profit - Ta-Lun Yen / TXOne Networks (Trend Micro) Threat Researcher 來得太晚,只聽到後半段。主要講解關於 Apple裝置的一些溝通與互動方式。不論是討論的 BLE 還是 Hotspot 的溝通方式。也有提到 Airdrop 的部分。 內容大多是溝通方式,可能有的資安疑慮。 現場也展示了透過軟體來掃出所有在場藍牙裝置的 uuid 與 MAC address。 From NLP to Neural Network based Malware Detection - aaaddress1 / Chroot member 原始論文: https://github.com/Lancern/asm2vec 講者網站: https://30cm.tw 惡意程式 (malware) 的 syntax pattern (from assembly call) uExitCode -> intterup 如何防禦 Malware 把程式切塊,找尋可疑區塊。 是否可以借助「語義學」模型來找出 malware 判斷方式 缺點: 指令與指令間的關係 (for loop 回傳 pattern) 大量改版,變種的 malware 。 根據舊的 malware 新增索引包,很容易被判斷跳脫 語義學(semantics)介紹 根據一個詞的前後文來判斷文字本身的意思 e.g. I drink beer, I drink wine. I guzzle beer, I guzzle wine. 透過共生矩陣表 (tokenFeq) 來找出前後文出現頻率,有出現 +1 。 透過詞頻率畫出的折線圖,可以找出類似的詞。 (e.g. drink and guzzle) cosine similarity 為何不直接用 semantics 分析方式? 如果有新的詞出現,造成 tokenFeq...
繼續閱讀

[研討會心得] 「How ML Powers LINE Services」機器學習如何的讓 LINE 的服務能更貼近使用者

前提 大家好,我是 LINE Taiwan DevRel 團隊的 Evan Lin。很開心在這裡跟各位分享本年度的第三場開發者小聚。 這也是疫情後第一次在新竹舉辦的線下聚會的活動。 也是 LINE 台灣工程團隊第一次來到交通大學舉辦線下的活動。 本篇分享的就是該活動中由 LINE 台灣資料工程團隊的 Shawn Tsai ,跟大家分享機器學習如何的讓 LINE 的服務能更貼近使用者。 KKTIX 活動網頁: 活動網址 活動全文網址: TBD 投影片 影片 LINE 台灣資料工程團隊的組成 首先 Shawn 先跟大家分享 LINE 台灣資料工程團隊的組成,主要由以下三個角色所構成: 資料工程師 (Data Engineer) 身為資料工程師需要有一手強大的工程技能,不論是資料的截取,抓取與前處理 (Pre-processing) 。甚至是資料探索的部分,到最後機器學習模型的部屬都缺少不了資料工程師的協助。 資料科學家 (Data Scientist) 資料科學家的工作就是要協助資料工程師來擷取資料,並且一同討論如何前處理之後。將機器學習模型學期出來。 資料分析師 (Data Analyst) 資料分析師的重點在資料的探索,尋找出真正能解決問題的數值。並且針對完成的模型來做相關的測試與修正。 資料工程團隊與專案的合作方式 資料工程團隊主要由以上三個角色所組成,所有的資料工程團隊會因為不同的產品需求有不同的任務小組。 有些產品還在資料討論與擷取的階段,有些產品可能已經進入機器學習模型的調教。 針對不同產品線,每一個成員在日常的工作都可以參與許多有趣的產品與專案,更能學習新穎的機器學習模型方法來套入每一個日常工作之中。 資料工程團隊面臨的挑戰 由於 LINE 使用者超過兩千一百萬, LINE TODAY 上面一年產出一百萬篇文章, LINE 購物上每個月有五百萬筆商品查詢。這麼多的資料就是資料工程團隊要面臨的問題。 而機器學習本身可以是簡單的,也可能是相當複雜的。接下來就會根據產品的不同稍微解釋所使用到的機器學習技術。 LINE 客服小幫手 「糟糕…換手機要怎麼移動帳號? 」 「怎麼購買貼圖送給親友?」 這些問題都是使用者每天都會想要了解的操作問題,但是要如何能及時的找尋到解答呢? 這時候就可以透過「客服小幫手」機器學習的能力來幫你快速回覆。 手機點此加入LINE 客服小幫手帳號或搜尋 @linehelptw加入好友。 更多使用方面的介紹可以參考 「LINE 客服小幫手」智能客服全新升級~對談中解決用LINE大小事。 由於同樣的問題可能會有各種詢問方式,比如說: 為什麼有時候賴都不會通知? 訊息都跑不出來是怎樣? LINE 都不會叫也不會震動? 這三種完全不同的問法,可能導向的都是當初 iOS 11 更新造成的問題。這些如果要透過人力來回覆相當的費時,就需要使用自然語言理解 (NLU: Natural Language Understanding) ,並且是用到 LSTM 來了解文字在前後文中的相關性,並且透過 CNN 來獲取文字與其他文字的特徵。 這是第一個版本的解法,但是效果不算是令人滿意。 後來透過了使用 seq2seq , CBoW , DSSM與 BERT達成的 Esemble 的解決方案,這樣的方式大幅度的得到比較好的效果。 LINE 訊息查證小幫手 「LINE 訊息查證」平台在去年七月份正式上線,不僅有官方網站,更串聯 LINE 官方帳號,用戶只需把在聊天室中收到的訊息「轉傳」至「LINE 訊息查證」官方帳號。如過去已有查核報導在資料庫中,查證小幫手會自動判斷其真偽,系統將即時提供查證結果;如訊息尚未查核,將提報給專業查核單位,待釐清後再盡快回傳正確資訊給予用戶,提供最即時的訊息辨別服務,協助用戶辨識可疑訊息真偽,降低假訊息再次散播的機會。 每天收到的訊息量高達四萬則,但是人工辨識每天只能夠 300 則,所以這時候需要機器學習大量的協助。 透過了 Near-Duplication 與 Classification 兩種方式來尋找與分類訊息。現在訊息查證的效率也進步了十倍以上,並且成功的釐清了 46% 使用者所發送的可疑訊息。 不想要變成假訊息的傳播者嗎? 一起加入 「LINE 訊息查證」官方帳號。 透過機器學習專案的學習 許多學生朋友都會好奇,真正在 LINE 來從事資料工程團隊的工作倒底每一天的時間都在做什麼? 講者也很大方的跟大家分享了,身為資料工程團隊每一天大部分的時間真的都是花在訓練機器學習模型嗎? 這張圖可以讓各位了解,大部分的時間都是花在機器設定( Configuration) ,資料擷取 (Data Collection) ,並且相當多時間在資料的驗證 (Data Verification) 甚至是模型建立後的建置能夠不斷的更新最近的機器模型的基礎建設 (Serving Infratructure) 也會花費相當多的時間。 真正拿來做模型訓練往往是整個專案中少少的一個部分而已。 也可以知道資料科學家主要的時間與專業在於如何找出與辨識「關鍵的資訊」。 相關文章: 「LINE 客服小幫手」智能客服全新升級~對談中解決用LINE大小事
繼續閱讀

[研討會心得] 2020/09/18 LINE Developer Meetup 13 (一)

前提 大家好,我是 LINE Taiwan DevRel 團隊的 Evan Lin。很開心在這裡跟各位分享本年度的第三場開發者小聚。 這也是疫情後第一次在新竹舉辦的線下聚會的活動。 也是 LINE 台灣工程團隊第一次來到交通大學舉辦線下的活動。 KKTIX 活動網頁: 活動網址 本次 LINE Developer Meetup 開發者小聚,首先有 LINE 台灣技術長 Marco Chen 帶來的 LINE 技術新星實習計畫的相關介紹,並且有 LINE 資料工程團隊的負責人 Shawn Tsai 帶來關於 ”How ML Powers LINE Services” 。 文章列表 第一篇 : [研討會心得] 2020/09/18 LINE Developer Meetup 13 (一) 第二篇 : [研討會心得] 2020/09/18 LINE Developer Meetup 13 (二) 第三篇 : [研討會心得] 2020/09/18 LINE Developer Meetup 13 (三) LINE TECH FRESH (LINE 技術新星人才計劃) 學生實習計畫宣傳 / CTO Marco Chen 首先上場的就是 LINE 台灣的 CTO - Marco Chen ,身為 LINE 工程團隊的大家長 Marco 為所有同學來解釋關於 TECH-FRESH 當初成立的緣由。以下有一些擷取自當天內容: 請問各位在職的來賓,你們當年在學校想著從事你現在的職務的人,請舉手。 請問各位在校的同學,你很確定你將來的工作内容是什麽的人,請舉手。 你們知道在 LINE 或像 LINE 這樣的網際網路應用服務的公司,開發一個大流量的系統,要有多少種專業角色的人參與? 使用多少種技術? 各位知道有那些角色? 那些職務? TECHFRESH 是 LINE Taiwan 的在校生技術實習計劃,有兩個主要的目的: - 幫助準備要進入職場的同學,真正的去了解,在一家網際網路應用服務的公司中,會有那些軟體開發的工作。進而可以讓同學們,找出自己職涯中最合適自己的工作内容,發揮自己的專長。不論最後是不是在 LINE 發展,我們也幫助這個國家培養出好的人才,能發揮最大能力貢獻給這國家。 - 在過程中培養出熟悉我們開發技術與流程的人材,進而到最後願意留在 LINE 發展。原本 LINE 的暑期工讀計劃,三個月的時間,對於資訊科系學生想要能真的了解統開發生命週期中所有角色與工作内容,實在太有限了。 因此我們向總部提出一年的實習計劃,一週來三天,工作內容則是由 TPM 帶領,執行一些一次性的專案開發,或者加入專案團隊支援專案團隊的開發工作。 透過這一段談話,同學們可以清楚了解到 LINE TECHFRESH 成立的主要原因與由來。透過長達一年的實習,同學們才有機會真正的學習跨國產品的開發合作,軟體工程開發的經驗。 希望同學們趕快來報名! 申請網址。 相關資料: LINE TECH FRESH – 技術新星人才計劃 LINE TECH FRESH – 技術新星人才計劃,實習經驗大公開 How ML Powers LINE Services / LINE Data Team - Shawn Tsai 關於更詳細得內容,歡迎參考文章。 http://www.evanlin.com/LDM13-Data/ 關於「LINE開發社群計畫」...
繼續閱讀

[NETFLIX] Cobra Kai 眼鏡蛇道館 (只要認真努力的話,在某些人故事中,也是會成為壞人)

改變一生的賽事結束數十年後,強尼和丹尼爾在《小子難纏》系列電影的續作中再次激烈交鋒。 (圖片與介紹來自: NETFLIX 眼鏡蛇道館介紹頁面) 就算是再好的人,只要有在好好努力,在某人的故事裡也會變成壞人。 【貓之寺的知恩姊】 劇情簡介: 小子難纏 是一部發生在 35 年前 (1984) 的電影(我也是很小的時候看重播的 XD) ,裡面身為學校裡面剛搬過來的主角 Daniel ,被學校裡面的風雲人物 Johnny 所欺負, 而 Johnny 就是在眼鏡蛇道館裡面學空手道。 結果 Daniel 認識了日本的空手道師父宮城先生,開始一連串的鍛鍊(洗車,擦玻璃,整理花圃)。一開始 Daniel 還相當生氣,為什麼這些會跟空手道有關係。結果在宮田先生的指導下,這些訓練逐漸發生效果,最後 Daniel 擊敗了當時學校的惡霸 Johnny 也抱得美人歸。 (當年 1984 Karate Kid 的預告片) 35 年後… 當年金髮碧眼意氣風發的校園風雲人物 Johny 因為在空手道總決賽輸給 Daniel 之後,人生過得相當的悲慘。他自怨自艾,並且也有了一個失敗的婚姻,有了一個失去聯絡的兒子,整天跟酒渾渾噩噩的過日子。 有一天在超商遇到一個可憐的外來移民高中生 Miguel 被小混混欺負,於是使用了以前空手道的功夫教訓了小混混們,並且受到 Miguel 的影響,開始重新開設眼鏡蛇空手道館,想要讓這些被欺負的宅男們保護自己。 相反的 Daniel 在打敗 Johnny 人生過得相當順遂,開設了汽車行賣車子。並且用空手道作為廣告宣傳獲得相當不錯的業績。 跟高中女友分手後,娶了美女老婆也有可愛的高中女兒 Samantha 跟一個兒子。 劇情就在這裡展開了。 令人驚喜的劇情部分 劇情部分就不幫各位暴雷,就先提幾個我覺得劇情裡面很有趣,也是設計巧思的部分分享一下。 好壞並不是絕對 如同敘述的,本部影集的主角是以前的惡霸 Johnny ,而不是 Daniel 。 並且故事中的他也相當的可憐。 就他的說法, Daniel 來了以後,搶了他的女友,並且在決賽打敗他,讓他在學校變得被人嘲笑。整個人生也變得相當的悲慘。 而 Daniel 雖然是電影版的壞人,但是從小受到眼鏡蛇道館欺負的他。看到 Johnny 又開設道館後就反應過度,千方百計阻礙 Johnny 並且透過各種手法打擊他。 ( 484 很像壞人?) 這部影集中, Johnny 想要改邪歸正。逐漸從自我放棄人生中走出來。而 Daniel 過分想要保護家人而顯得有些不擇手段。 於是也讓人想到: 「就算是再好的人,只要有在好好努力,在某人的故事裡也會變成壞人。」 這句台詞。 某些相同的巧合 經過劇情發展, Daniel 跟 Johnny 各自有了新的徒弟,並且在最後比賽碰頭。 並且兩個徒弟都愛上同一個可愛女孩(也就是 Daniel 的女兒 Samantha ) 。 許多影集的劇情也有「致敬」電影版的許多相對應之處,除了感受到設計巧思外,也讓人回顧了時空? 全民女友 - Elisabeth Shue 這時候又發現原來 35 年前的重要角色,兩位男主角爭奪的女主角也是當時的全民女友 Elisabeth Shue 。不僅僅有演小子難纏擔任女主角,也是回到未來系列的女主角。當然最近比較讓我了解的就是他也有演 CSI 。 令人懷念的 宮城師傅 (Pat Morita) Pat Morita 也就是在系列電影中的神祕日本宮城師傅,在電影中也講出了許多至理名言。 「輸給對手,沒有關係。輸給恐懼,不可以。」 本來很好奇宮城師傅怎麼了,裡面也有一集專門紀念他,他本人(演員)也於 2005 年過世了。 結語 滿滿的回憶之作,但是裡面有許多故事鋪成算是精心地打造。讓原來的壞人 Johnny 變成了主角,並且深入敘述他內心的轉變。 裡面也不斷的從 Johnny 的角度來看事情的過程。 許多欺負人在他心中可能只是一個小是,但是被當初的主角 Daniel 打敗,搶走女友卻一直無法忘懷。 真的也是呼應到了~ 「就算是再好的人,只要有在好好努力,在某人的故事裡也會變成壞人。」。 相關鏈結: https://www.netflix.com/tw/title/81002370 https://en.wikipedia.org/wiki/Cobra_Kai https://en.wikipedia.org/wiki/The_Karate_Kid https://en.wikipedia.org/wiki/Pat_Morita https://www.youtube.com/watch?v=xlnm0NtPoVs
繼續閱讀