ngx_rtmp_stat_module 是 Nginx RTMP 模块中的统计模块,提供了实时 RTMP 流量统计功能,允许 Nginx RTMP 服务器输出与流、带宽、客户端等相关的统计信息。这些统计信息通常以 XML 格式输出,供外部监控和管理系统使用。此模块允许通过 HTTP 请求查看 RTMP 服务器的各种统计信息。
1. 模块配置
1.1 ngx_rtmp_stat_loc_conf_t
这个结构体用于存储 RTMP 统计模块的配置。它包含以下字段:
-
stat
:位掩码,用于表示要启用的统计类别(如全局统计、实时流统计、客户端统计等)。 -
stylesheet
:指定用于格式化输出的 XSL 样式表(可选)。
1.2 ngx_rtmp_stat_masks
该数组定义了与 ngx_rtmp_stat
指令相关的标志:
-
NGX_RTMP_STAT_ALL
:表示启用所有统计。 -
NGX_RTMP_STAT_GLOBAL
:启用全局统计(如带宽、字节数等)。 -
NGX_RTMP_STAT_LIVE
:启用实时流统计。 -
NGX_RTMP_STAT_CLIENTS
:启用客户端统计。 -
NGX_RTMP_STAT_PLAY
:启用播放流统计。
1.3 ngx_rtmp_stat_commands
该数组定义了模块的配置指令:
-
rtmp_stat
:用于启用 RTMP 统计功能并设置统计类别。 -
rtmp_stat_stylesheet
:用于设置 XSL 样式表的路径,以便对 XML 输出结果进行格式化。
2. 初始化和配置函数
2.1 ngx_rtmp_stat_init_process
在 Nginx 启动时调用此函数。它会在 HTTP 处理之前处理已注册的事件,确保 RTMP 统计功能在进程初始化时正确配置。
2.2 ngx_rtmp_stat_postconfiguration
在 Nginx 完成配置之后调用此函数。它主要用于记录服务器的启动时间 (start_time
),以便在统计中使用。
2.3 ngx_rtmp_stat_create_loc_conf
和 ngx_rtmp_stat_merge_loc_conf
这两个函数用于创建和合并 Nginx 配置:
-
ngx_rtmp_stat_create_loc_conf
:用于创建默认的统计配置。 -
ngx_rtmp_stat_merge_loc_conf
:合并父配置和子配置,确保从全局、服务器到位置的配置继承。
3. RTMP 统计输出
3.1 ngx_rtmp_stat_escape
此函数用于处理和转义 HTML 中不允许的字符。它会遍历输入数据,并将不符合 ASCII 范围的字符替换为空格。这样做是为了确保生成的 XML 输出可以安全地嵌入到 HTML 页面中,避免 XSS 攻击等安全问题。
3.2 ngx_rtmp_stat_output
该函数用于将统计数据输出到 HTTP 响应中。它会将数据格式化并输出为 XML 格式。根据是否需要转义 HTML 字符,函数会调用 ngx_rtmp_stat_escape
进行处理,并将处理后的数据写入到 Nginx 的输出链(ngx_chain_t
)中。
3.3 ngx_rtmp_stat_bw
用于输出带宽统计数据。它会根据传入的标志(NGX_RTMP_STAT_BW
、NGX_RTMP_STAT_BYTES
)决定输出的带宽信息或字节数。常用于显示每秒的流量或累计的传输字节。
3.4 ngx_rtmp_stat_client
此函数用于输出客户端的统计信息。它会显示每个连接的详细信息,包括客户端 ID、IP 地址、连接时间、Flash 版本、页面 URL、SWF URL 等。
3.5 ngx_rtmp_stat_live
该函数用于输出实时流的统计信息。它遍历每个流,并输出流的带宽、客户端数量等信息。对于每个流,还会列出连接到该流的客户端的信息。
3.6 ngx_rtmp_stat_play
输出播放流的统计信息。此函数遍历所有的播放流并输出每个流的相关信息,包括流的带宽、客户端数量、时间戳等。
3.7 ngx_rtmp_stat_application
该函数用于输出 RTMP 应用的统计信息。它会列出与应用相关的所有实时流和播放流的统计。
3.8 ngx_rtmp_stat_server
输出 RTMP 服务器的统计信息。它会遍历所有的应用,输出每个应用的统计信息。
4. RTMP 统计请求处理
4.1 ngx_rtmp_stat_handler
该函数处理 HTTP 请求,返回 RTMP 统计信息。它根据配置的统计选项输出不同的内容(如全局统计、流统计、客户端统计等)。如果请求的统计项没有启用,则返回 NGX_DECLINED
,否则输出格式化后的 XML 数据。
该函数还负责设置响应的 HTTP 头(如 Content-Type
为 text/xml
,Content-Length
为统计数据的长度)。它会调用相应的统计输出函数,如 ngx_rtmp_stat_server
、ngx_rtmp_stat_application
等。
5. 总结
Nginx RTMP 统计模块的主要功能是提供 RTMP 流的实时统计信息,帮助管理员监控流量、客户端状态、播放流等数据。通过 HTTP 请求,可以获取全局统计、实时流统计、客户端统计等信息,格式化为 XML 输出。
-
配置指令:如何通过
rtmp_stat
指令启用统计功能,并选择需要的统计项(如全局、直播、客户端、播放等)。 -
统计输出:如何通过函数生成统计数据并输出为 XML 格式,供外部监控系统使用。
-
带宽和客户端统计:如何收集并显示带宽使用情况、连接的客户端信息、实时流的带宽和客户端数量等。
理解这些内容后,初学者可以有效地配置和扩展 RTMP 统计功能,并根据实际需要获取不同维度的实时流量和客户端数据。