Xp2p Granfana 使用记录

Xp2p数据存储

取xp2p的接口数据,每分钟入库clickhouse。

数据接口

参照xp2p接口文档

存储代码位置
10.55.32.71  /home/quxp/py/get_p2p_data.py clickhouse_min.py checkfile.py
  • get_p2p_data.py 获取p2p接口数据
  • clickhouse_min.py 调用get_p2p_data.py 存储数据到clickhouse
  • checkfile.py 检查日志找到存储失败的重新存储

crontab定时任务每分钟执行clickhouse_min.py 没小时执行checkfile.py

clickhouse相关配置

数据表结构
CREATE TABLE if not exists p2pdata
(
AppId String,
CdnBytes UInt32,
OnlinePeople UInt32,
P2pBytes UInt64,
Request UInt32,
RequestSuccess UInt32,
StreamName String,
StuckPeople UInt32,
StuckTimes UInt32,
Time DateTime,
Type String
)ENGINE = ReplacingMergeTree() PARTITION BY toYYYYMM(Time) ORDER BY((AppId, StreamName, Type, Time)) TTL Time + INTERVAL 12 MONTH;

个别字段含义:

  • AppId 平台
  • StreamName 房间
  • Type 视频类型,只有live和vod
clickhouse服务参数
host='10.97.99.29', port='9000', database='default', user="root", password="testclickhouse"

Granfana 相关配置

测试下载安装本地服务,官网直接下载。运行server,端口3000.初始用户和密码都是admin

image-20230801222633915

添加数据源

image-20230801222808902

第一次检索不到数据库需安装数据插件,下拉到底 查找更多插件然后安装。

image-20230801222943851

添加数据库保存

image-20230801223204679

创建dashboard

在主页创建dashboards,根据sql查询关联的数据库进行展示。

image-20230801223538752

示例:查询带宽的sql语句。

SELECT toStartOfMinute(Time) AS Minute, sum(CdnBytes)*8/60/1000000 AS TotalCdnBytes, sum(P2pBytes)*8/60/1000000 AS TotalP2pBytes
FROM default."p2pdata"
WHERE Type='live'
GROUP BY Minute
ORDER BY Minute ASC

sava保存后在dashboards可以看到展示的效果。

image-20230801224008506

添加过滤条件

image-20230801224446902

可以通过 配置dashboards过滤条件适配在所有的展板上。

点击右上方齿轮打开设置。如下;

image-20230801224723673

筛选Type

比如想筛选Type类型可以在此添加,我们只有两种类型live和vod对应直播和点播。

image-20230801225017295

添加平台条件

image-20230801225403630

平台ID都是固定的对应如下,直接复制使用;

Flash直播点播 : 5ad05b2f319cf08211fb80ec,H5HLS点播 : 5c8a0fa57a9b23480f6ea0ed,移动端 : 614db33749b232ad01fb4cdd,Windows : 61139344062556e21befdcb9,H5HLS直播 : 5fa933e724f48fed55245e05,有线电视 : 63a4053f691533001555851f
添加房间

房间是根据频道和域名绑定的内容比较多使用查询的方式取出想查看的房间名;

image-20230801225716713

查询直播类型的房间,尽量不要全部查询点播房间很多不过滤掉很卡。

SELECT DISTINCT StreamName FROM default."p2pdata"  WHERE Type = 'live'
根据筛选条件写查询语句

image-20230801230130641

SELECT Time, SUM(OnlinePeople) AS OnlinePeopleTotal
FROM default."p2pdata"
WHERE Time >= now() - INTERVAL 3 DAY AND Type IN (${type}) AND AppId IN (${AppId})
GROUP BY Time;

根据类型和平台筛选使用${type} ${AppId}替换。

查询语句:

去重查询,使用最后一次出现的数据 final

select
order_number --订单号
,id --产品ID
,cnt--产品数量
,price--产品当时价格
from a final
where no='1234567'

查询结果中只保留唯一行

SELECT DISTINCT a FROM t1 ORDER BY b ASC
# 得到以下结果
┌─a─┐
│ 2 │
│ 1 │
│ 3 │
└───┘