
阿裡QA導讀:如何保證業務運作穩定?如何及時監控告警出業務運作出現的問題?對于追求精益求精的品質同學來說,端到端的把控,才讓業務更信心滿滿的快速奔跑,請看來自阿裡企業智能事業部同學的方案,是如何用技術賦能業務。
一、背景
關于穩定性建設工作的重要性和價值點毋需多言,然而怎麼落地,各業務團隊皆有各自打法。去年集團安全生産小組确定安全生産核心打法,制定五大戰役和兩專項重保,體系化地做穩定性這件事情。其中 1-5-10故障快恢,位于五大戰役之首,該政策從集團 -》部門 -》 業務線逐漸推廣。當時我在負責IOT電子架簽系統測試,線上架簽已達百萬量級以上,也亟需打造一套更加靈敏完善的穩定性建設方案。我們項目組承接部門安全生産目标,經過讨論确定優先解決1-5的問題,確定線上故障能在最短時間發現,最快速定位。由于運維團隊主要負責産品在門店的使用情況,對産品技術實作不甚了解,且之前我已經負責建設了一部分業務實時品質保障能力,研發提出由我來繼續完善穩定性建設工作。
穩定性建設是一項系統工程。包括監控,告警,降級,預案,演練,壓測,灰階,變更管控,機制建設等。其中監控是整個方案最重要的一環,事前及時預警發現故障,事後提供資料排查問題。安全生産重點工作郵件中指出線上監控可細分為四個部分,分别是系統監控,鍊路監控,業務監控,SLA監控。目前集團監控工具也很多,如xflush,sunfire,alimonitor,A3,鷹眼,arms等等,能解決一部分系統監控,鍊路監控甚至業務監控的問題,但若要做更靈敏和更貼合業務的監控解決方案,則無法很好滿足要求。是以研發經過一番調研,最終選擇了SLS日志服務作為切入點,當時交給我的時候,我并未參與監控方案技術選型,也完全不知道接下來會做成什麼樣。随着本項工作的開展,直至完成,摸索出了一些經驗。這篇文章就是在該過程中,對于用SLS日志服務能力,做業務監控最後一公裡建設的方案實踐總結。
二、目标
繼第一篇《基于資料的洞察分析保障電子架簽穩定性》文章介紹的方案之後,我們通過建設監控能力,采用資料挖掘中統計和聚類方法,能快速發現線上問題,可是不具備縮小問題排查範圍并快速定位問題産生原因的能力。我們需要接收并處理應用伺服器,IOT套件,AP基站,端側裝置等,在這條鍊路上每個節點的日志,分别分析。對于各類IOT裝置,不同的端,面向客戶不同,使用場景不同,品質模型不同,唯一相同的是技術層面,研發統一将日志采集并存儲于SLS中,通過這些豐富的資料源,可以實作不同監控名額的配置,進而達到實時檢視運作狀态,實時報警的目标。
這一系列裝置相關日志陸續接入SLS。最初解決的是電子架簽的監控,此後陸續完成了其他IOT類裝置的監控,如手環,溫濕度傳感器,工位探測器等。回頭來看,我把解決問題思路總結為兩部分,一是定義監控告警模型名額,二是技術實作。關于第一點,主要是綜合和研發,PD共同協商,來确定系統監控名額。關于第二點,主要是通過檢視SLS幫助文檔摸索實踐,或尋求SLS同學的技術支援。
三、解法
3.1 資料提取
3.1.1 json.json格式解析
溫濕度傳感器原始日志參數message,是一個json.json格式資料,解決方案如下:
a. 通過json_extract 解析message字段,根據參數key查詢數值;
b. 通過cast将結果轉成字元串類型;
c. 查詢結果通過having語句進行裝置類型過濾;
查詢代碼:
https://help.aliyun.com/document_detail/63454.html?spm=5176.11065259.1996646101.searchclickresult.943d6e26ZifWxQ查詢結果:
3.1.2 json.array.json格式解析
基站原始日志資料有個參數jsonData,是json格式,包含多個station清單,每個清單元素,又是一個json串,解決方案如下:
a. 通過json_extract 先解析jsonData字段,取出其内層的station字段,傳回json類型;
b. 通過cast 将station轉換成 array(json) 類型;
c. 通過unnest 把array(json) 展開成多行,以t來命名新生成的臨時表,每個json值寫入每一行中,行的名稱為d,使用d來引用展開後的列;
d. 通過 json_extract_scalar 解析d的指定列,傳回字元串類型;
https://help.aliyun.com/document_detail/84586.html?spm=5176.11065259.1996646101.searchclickresult.694c66354vYp9g方法解析:
有些日志資料結構比較複雜,包含json,array,或者互相構成的嵌套關系,需要層層解開,取出對應的key和value,并可能用到cast類型轉換,使其提取出符合我們期望的格式資料;
3.2 資料加工
3.2.1 建立oss外聯表補充字段
溫濕度傳感器原始日志裡,缺少機房字段,業務方期望結合機房資訊發送告警。sls支援通過oss建立維表,來實作日志字段的富化,解決方案如下:
a. 建立oss的csv檔案;
b. 在目标日志庫裡,通過create table xxx SQL語句建立虛拟外部表,和oss檔案進行映射;
c. 驗證成功定義外部表後,通過join文法完成日志庫和oss外表的聯合查詢;
d. 若要增加溫濕度傳感器,隻需要更新csv檔案即可,sls的監控告警資訊可自動同步;
建立語句代碼:
https://help.aliyun.com/document_detail/87026.html?spm=5176.11065259.1996646101.searchclickresult.f95384eaEsMELP關聯查詢代碼:
https://help.aliyun.com/document_detail/70478.html?spm=5176.11065259.1996646101.searchclickresult.40824f0axcQk7p有一些缺失的字段,可以用oss檔案當作一張靜态的維表,來關聯查詢,這種方法非常适用于一些場景,待監測的對象是固定的一批資料。比如一批溫濕度傳感器,一批工位探測器,一批測試的電子架簽,一個門店的AP基站,這個方法在以下這些場景中都發揮過巨大作用:20周年的全場年會手環監控,20周年的分區域年會手環監控,雙11光明頂AP基站監控,雙11媒體指揮中心AP基站監控。像雙11AP基站監控,是當天早上運維提供各區域的AP mac位址名單,是以當天分别建立oss外聯表和分别建立告警,晚上即刻投入使用,即使封網也不受影響,相當靈活高效。
3.2.2 oss外聯表字段亂碼解法
有的時候,我們會遇到這類問題,建立的oss外聯表,通過sls的sql語句查詢,篩選出來結果為null,無論怎麼調整都不行,此時可能是源csv檔案的格式出現問題,可以用下面的格式化代碼,格式化源csv檔案,然後用格式化後的檔案替換oss檔案即可。
格式化代碼:
echo 'id,a,b,c,d,e' > new.csvgrep -v 'id' xxx.csv >> new.csv
3.2.3 oss和sls跨域解法
用外聯表的時候,遇到一個比較麻煩的問題是,sls日志在彈内生産環境,而現在oss已是集團對外服務的中間件,部署在雲上,和彈内環境屬于不同叢集,網絡不通。此時,需要通過指令行方式建立oss檔案。
通過這種方式,我們可以在sls上使用oss的外聯表;
3.2.4 多個日志庫關聯查詢解法
有時候,開發會把日志打在不同日志庫裡,是以我們需要關聯不同日志庫進行查詢。有個很簡單的方法,就是sls的sql語句裡,用 select * from logstore_name 代替 select * from log;
在一個項目中,多個logstore可以直接查詢,這種方法非常适合跨環境或者跨應用之間的日志串聯。比如研發把同一應用日志分日常,預發,線上環境列印在不同日志庫裡,或者一條業務鍊路,需要跨越多個應用,根據關鍵字串聯。
3.2.5 引入odps資料源解法
有時候,我們缺失的資料,是動态生成的,而非一份靜态維表資料,這種情況下,我們可以把資料從odps裡取出來,設定一個定時任務,比如:每天早上6:00把資料投遞到SLS上。
ODPS投遞給SLS的代碼:
https://help.aliyun.com/document_detail/153354.html?spm=5176.11065259.1996646101.searchclickresult.3f6240e8CjMKHy投遞結果:
該方法可以解決sls日志缺失的問題,但是有一個注意事項,投遞的日志作為logstoreB,要和sls原始日志logstoreA進行join關聯的時候,查詢的時候需要用時間段對齊函數date_turunc對齊時間,把查詢時間做個特殊處理,以保證能查詢到早上6:00投遞進去的logstoreA日志。
時間對齊函數代碼:
https://help.aliyun.com/document_detail/63451.html?spm=5176.11065259.1996646101.searchclickresult.1946246ce9jWajSLS雙流JOIN查詢的加工代碼:
https://help.aliyun.com/document_detail/70478.html?spm=5176.11065259.1996646101.searchclickresult.5ff333469JjXqi3.2.6 日志庫動态生成法
有時候,我們由于日志數量太大,導緻無效資訊過多,需要精簡,日志庫在彈内生産環境,不支援資料加工功能,解決方案如下:
a. 建立一個空logstore;
b. 根據查詢結果待轉存的字段定義日志庫的索引字段,确定字段類型;
c. 通過 insert 文法,篩選指定字段投遞到新日志庫,字段類型同上;
d. 把查詢結果儲存成告警,完成定時投遞到新日志庫中;
篩選字段代碼:
https://help.aliyun.com/document_detail/158012.html?spm=5176.11065259.1996646101.searchclickresult.35684853Fdcpq9該方法可以讓我們更專注地關注特定日志。INSERT INTO SELECT 語句的作用是從一個表複制資料,然後把資料插入到一個已存在的表中。理論來說,這個方法可以把日志持續投遞下去,從A->B->C->D 。。。
3.3 資料展示
3.3.1 儀表盤下鑽
有時候,我們對于監控名額資料,需要進一步分析其内容,比如對于同一類型的錯誤碼,希望分析每一條錯誤日志,解決方案如下:
a. 基于變量,配置查詢日志下鑽功能;
下鑽效果:
https://help.aliyun.com/document_detail/88844.html?spm=5176.11065259.1996646101.searchclickresult.29147287ZIIcEg3.3.2 變量替換
有時候,我們需要根據指定過濾條件,篩選各項監控名額。比如我們想根據指定門店檢視架簽狀況。解決方案如下:
a. 基于變量,配置變量替換,進而可以使監控名額根據我們輸入參數的要求而重新查詢出結果。
技術方案連結:
https://help.aliyun.com/document_detail/93647.html?spm=5176.11065259.1996646101.searchclickresult.1c5b35e0JxmKr9變量替換效果:
3.3.3 儀表盤訂閱
有時候我們希望每天定時檢視監控報表,而不需要登陸到SLS裡面去。通過儀表盤訂閱的方式,可以直接把儀表盤定時推送到釘釘群裡,供想了解的人檢視相關監控名額。解決方案如下;
配置方式:
結果展示:
該方法可以友善每天定時盯屏的同學,并及時把資訊同步給相關同學,或者沒有SLS日志賬号權限的同學。
3.3.4 控制台内嵌分享
有時候,我們需要提供日志給沒有配置設定賬号權限的同學查詢。如工位探測器資訊秒級變化,業務方希望檢視實時日志,并讓外包同學邊檢視日志并核對辦公區的有無人實際狀況。解決方案如下:
a. 向日志管理者申請,建立STS子賬号,并進行授權;
b. 根據擷取到的AK/SK/roleArn參數,調用SDK代碼,生成儀表盤通路連結;
生成連結代碼:
https://help.aliyun.com/document_detail/74971.html?spm=ata.13261165.0.0.427b8534208sNq該方法生成的連結,隻允許一人通路,且最長1小時失效;是以可以做成服務方式來提供查詢能力,過期之後可觸發一次調用,重新生成一個通路連結。
3.4 告警關聯
通過以上方式,處理完後的SLS日志,都可以配置成告警模式,發送釘釘機器人告警,或者郵件,或者電話,通知到相關人員,使測試能快速感覺問題。
SLS 本身針對告警做了統計,可以對曆史告警進行分析。
3.5 解決方案成果展示
3.5.1 鍊路監控
如何利用SLS做到端到端監控?一、背景二、目标三、解法四、總結五、展望
3.5.2 業務監控
如何利用SLS做到端到端監控?一、背景二、目标三、解法四、總結五、展望
3.5.3 鍊路和業務監控彙聚
3.5.4 提升測試效率
3.5.5 全局儀表盤配置
20周年年會手環監控大屏
四、總結
本文是對過去一年中保障的各類IOT裝置,監控告警能力建設技術方案的一篇總結。核心思想是利用SLS日志服務能力,串聯起各項日志,做基于業務次元名額的監控告警。通過确定品質模型,基本可做到1分鐘發現問題,滿足監控目标。取得的業務成果概括如下:
- 支撐了6款IOT裝置的監控告警。
- 在對AP基站建設的時候,我們通過不斷調整SQL語句,調試監控告警名額,進而完成了對最佳告警方式的驗證,使告警更加準确,更加貼合業務,為後續工程化告警時間奠定了基礎。
- 保障了19年雙11 光明頂,媒體指揮中心的AP基站運作。
- 保障了AP基站終端離線的監控告警。
- 保障了電子架簽全年線上穩定運作。
- 在做工位探測器測試時,引入了控制台内嵌分享技術,提升了測試效率500%;
- 搭建的測試服務,提供為螞蟻行政業務方使用,便于業務方快速驗證IOT裝置的使用效果;
五、展望
關于告警降噪的場景,目前沒有找到合适的解決方案,這是個很有意思的場景,且是剛需場景,期待接下來進一步完善該方向的探索實踐工作。
寫在最後
在做業務測試和安全生産的各項工作中,不論是測試還是研發,我們依賴很多日志資料。一則可以請求研發配合進行日志埋點,二則也可以掌握一些日志加工處理的技巧,利用技術能力去處理日志,以便于在無法改變原始日志的情況,如埋點條件不具備,或遇到封網時間,或研發無開發時間投入等情況下,達到測試或監控告警的目标。最終通過提升一些日志采集,加工,處理,可視化能力,能加強對于業務的品質保障能力。文章中的各個小節内容,自成一段,可獨立閱讀。若内容對于你的工作有些許參考作用,便倍感欣慰了,歡迎交流指正。