作者 | 艾明浩、 矯宏鶴
責編 | Carol
封圖 | CSDN 下載自視覺中國
當前市面直播平台百家爭鳴,直播監控系統是判斷一個直播平台是否完善的必要條件。文章簡要介紹了筆者搭建的一套基於SRS的直播平台,並從設計思路、實現方法與實現過程等方面重點介紹了針對此直播平台建設的監控系統,對相關直播平台監控系統的建設具有一定的參考價值。
直播平台與其監控系統簡介
國內直播行業自2016年「井噴」式發展以來,在各行各業遍地開花,秀場、娛樂、遊戲、教育、電商等行業應用尤為突出。筆者與時俱進,準備研究一下企業級視頻直播技術應用,目前已經搭建了一套直播平台。在技術選型上,出於性能、文檔完善性等方面考慮,我們選擇了開源直播框架SRS作為直播伺服器。SRS是由國人Winlin大神在Github上開源的一款流媒體伺服器軟體,定位於運營級網際網路直播伺服器集群,目前已經更新至V4版本,V3版是其穩定版本。
我們在SRS已實現的基本RTMP等協議推拉流的基礎上,開發了用戶系統、直播房間管理、防盜鏈功能、彈幕系統、點贊系統、禮物系統等功能,並開發了Android、iOS、PC、Web直播客戶端,實現了一個大致完善的視頻直播平台。
隨著功能的增多,在開發調試及測試的過程中,我們發現,必須擁有一套針對直播平台的監控管理平台,以增加平台的健壯性、可用性與易用性。該監控管理平台用來對SRS集群進行統一配置管理,對伺服器資源、網絡流量、多媒體流、房間信息等進行統一監控,以方便後台人員對整個平台進行把控;同時,擁有一系列預警機制以應對大流量、網絡中斷、伺服器斷電等突發事件。
監控數據的獲取
要進行平台的監控,需考慮需要監控哪些指標,能夠從平台獲得什麼數據,採用什麼方式從平台獲取數據等問題。
針對基於SRS開發的直播服務平台,我們採集獲取監控數據的方式主要有3種:基於SRS提供的HTTP Api獲取、從資料庫及Redis獲取、程序中埋點輸出獲取。
1. 基於SRS提供的HTTP Api獲取監控數據。
SRS提供了一套HTTP Api,供外部程序獲取數據及管理伺服器,支持跨域訪問。以下是SRS官方提出的HTTP Api設計原則:
通過查閱SRS官方文檔及源碼,SRS HTTP Api可獲取的數據如下表:
調用SRS提供的HTTP Api,需要在SRS伺服器配置中增加http_api相關配置,下圖是一個參考配置:
首先,將enable設置為on,表示開啟http api;listen設置為1985,表示其監聽埠,假定SRS伺服器地址為127.0.0.1,則可以通過http://127.0.0.1:1985/api/v1訪問其http接口;raw_api相關配置表示開啟伺服器配置及重載等寫入型接口。
完成配置並重新加載服務後,即可訪問SRS伺服器的http api。以summaries api為例,在瀏覽器中輸入http://[srs ip]:1985/api/v1/summaries,返回結果形式如下:
可以看出,返回的結果是標準json形式,需要進行json解析並篩選出所需欄位進行展示。
2. 從服務端資料庫及Redis中獲取監控數據。
除了SRS伺服器資源相關數據之外,直播間信息、用戶信息、直播統計信息、主播及觀眾等業務相關數據存儲在資料庫及緩存中。監控系統採用SpringBoot框架開發,導入相關驅動後,映射數據對象即可直接訪問數據源獲取所需數據。
3. 程序中埋點輸出監控所需數據。
一些中間過程數據可以體現程序處理狀態或者系統走勢,這類數據既不能在SRS的HTTP接口中獲取,也不會在資料庫或緩存中存儲,此類數據的獲取需要在程序中埋點輸出。所謂埋點就是在程序生成該數據處添加監控語句,將數據以指定方式輸出,如輸出到內存、文件、監控緩存或資料庫。如果是帶時間序列的數據,則會增加時間戳,展示時可展示成歷史曲線,用以預測系統走勢。
監控指標及數據展示
有了數據獲取的途徑,接下來需要考慮具體展示哪些監控指標及如何將指標展示的問題。
1. 監控指標
監控指標大致可分為三類:集群性能數據、多媒體流數據、業務統計數據。通過集群性能數據,用戶可直觀了解直播集群當前CPU使用率、內存大小、網絡流量、負載等情況,實現系統層面的指標監控。通過多媒體流數據,用戶可獲取集群中每台機器的推拉流信息及當前直播的每路推流端的具體信息,實現媒體層面的指標監控。通過業務統計數據,用戶可了解當前直播房間數、房間觀眾數等業務數據,實現業務層面的指標監控。
2. 監控數據展示
通過調用接口、查詢資料庫及埋點等方式獲取的監控數據,經過服務端解析處理後,展示至前端監控平台。以多媒體流數據為例,用戶通過管理端頁面選擇瀏覽當前推流數據信息,前端頁面將請求傳至後台,後台調用流信息查詢接口向SRS請求流信息數據,SRS收到數據請求後將對應伺服器上的流信息以json格式返回,監控平台對json格式報文進行解析,並以約定格式提供給前端以供展示,效果如下:
也可通過定時模塊將指定間隔採集的數據記錄到資料庫中(時間間隔可配置)。當前端發起歷史數據查看時,監控平台依據請求從資料庫中獲取指定時間段內的監控數據,經過處理返回給前端,前端採用echart等插件完成從數據到圖形的映射,生成折線圖等形式的圖表,大幅度提升可視化應用的性能。
平台參數配置
參數配置功能提供服務配置重新加載、伺服器全局和Vhost配置等功能。配置重載簡化了系統重新加載配置的流程,配合伺服器參數配置功能,實現參數實時修改,實時生效。
參數配置功能通過管理端將參數值由前端傳至服務端,通過調用系統更新數據接口方式改變所選系統參數。該功能主要基於SRS提供的HTTP RAW API。首先開啟raw_api相關設置,允許通過api進行配置修改(若不開啟會返回錯誤碼1061)。以配置重載為例,通過直播監控平台前端選擇需要重載配置的機器ip,並將請求發至後台,後台收到請求後調用reload接口,SRS接收請求並進行配置修改,若修改成功,則返回成功(code為0)。直播監控平台將SRS的返回處理後發送至前端,前端對返回碼進行判斷,更新執行結果信息,效果如下:
參數配置功能和數據展示功能相輔相成,用戶可通過數據展示了解當前系統運行情況,並以此為據,通過參數配置功能調節系統運行參數,調整後再觀察相應指標的數據展示,實現動態調整配置,確保直播系統平穩運行。
總結
文章介紹了一個基於SRS構建的直播平台的監控系統的搭建思路與實現方法,重點從監控數據的獲取方法、監控指標需求、數據展示方法與過程、平台參數配置過程等方面介紹監控系統實現過程,為如火如荼的直播平台提供了監控領域的參考。
艾明浩,網際網路金融研發工程師,就職於中國農業銀行研發中心,從事即時通訊、音視頻等領域研發工作;
矯宏鶴,網際網路金融研發工程師,就職於中國農業銀行研發中心,從事即時通訊、音視頻等領域研發工作。