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

作者 | 中国农业银行艾明浩矫宏鹤

责编 | 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设计原则:

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

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

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


推荐阅读
你点的每个“在看”,我都认真当成了AI
展开阅读全文

Git 实用技巧

11-24
这几年越来越多的开发团队使用了Git,掌握Git的使用已经越来越重要,已经是一个开发者必备的一项技能;但很多人在刚开始学习Git的时候会遇到很多疑问,比如之前使用过SVN的开发者想不通Git提交代码为什么需要先commit然后再去push,而不是一条命令一次性搞定; 更多的开发者对Git已经入门,不过在遇到一些代码冲突、需要恢复Git代码时候就不知所措,这个时候哪些对 Git掌握得比较好的少数人,就像团队中的神一样,在队友遇到 Git 相关的问题的时候用各种流利的操作来帮助队友于水火。 我去年刚加入新团队,发现一些同事对Git的常规操作没太大问题,但对Git的理解还是比较生疏,比如说分支和分支之间的关联关系、合并代码时候的冲突解决、提交代码前未拉取新代码导致冲突问题的处理等,我在协助处理这些问题的时候也记录各种问题的解决办法,希望整理后通过教程帮助到更多对Git操作进阶的开发者。 本期教程学习方法分为“掌握基础——稳步进阶——熟悉协作”三个层次。从掌握基础的 Git的推送和拉取开始,以案例进行演示,分析每一个步骤的操作方式和原理,从理解Git 工具的操作到学会代码存储结构、演示不同场景下Git遇到问题的不同处理方案。循序渐进让同学们掌握Git工具在团队协作中的整体协作流程。 在教程中会通过大量案例进行分析,案例会模拟在工作中遇到的问题,从最基础的代码提交和拉取、代码冲突解决、代码仓库的数据维护、Git服务端搭建等。为了让同学们容易理解,对Git简单易懂,文章中详细记录了详细的操作步骤,提供大量演示截图和解析。在教程的最后部分,会从提升团队整体效率的角度对Git工具进行讲解,包括规范操作、Gitlab的搭建、钩子事件的应用等。 为了让同学们可以利用碎片化时间来灵活学习,在教程文章中大程度降低了上下文的依赖,让大家可以在工作之余进行学习与实战,并同时掌握里面涉及的Git不常见操作的相关知识,理解Git工具在工作遇到的问题解决思路和方法,相信一定会对大家的前端技能进阶大有帮助。
©️2020 CSDN 皮肤主题: 大白 设计师: CSDN官方博客 返回首页
实付0元
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值