干货 | 基于SRS直播平台的监控系统之实现思路与过程

干货 | 基于SRS直播平台的监控系统之实现思路与过程
2020年06月06日 16:03 AI科技大本营

当前市面直播平台百家争鸣,直播监控系统是判断一个直播平台是否完善的必要条件。文章简要介绍了笔者搭建的一套基于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设计原则:

只提供json数据格式接口,要求请求和响应的数据全都是json。

不提供html数据,譬如运行SRS后,浏览器打开HTTP接口或HTTP服务地址,看到的是json,不是html。

发生错误时,支持HTTP错误码,或者json中的code错误码。

通过查阅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构建的直播平台的监控系统的搭建思路与实现方法,重点从监控数据的获取方法、监控指标需求、数据展示方法与过程、平台参数配置过程等方面介绍监控系统实现过程,为如火如荼的直播平台提供了监控领域的参考。

艾明浩,互联网金融研发工程师,就职于中国农业银行研发中心,从事即时通讯、音视频等领域研发工作;

矫宏鹤,互联网金融研发工程师,就职于中国农业银行研发中心,从事即时通讯、音视频等领域研发工作。

财经自媒体联盟更多自媒体作者

新浪首页 语音播报 相关新闻 返回顶部