DnStream - 可视化运维实践

举报
菜花 发表于 2021/11/24 15:32:06 2021/11/24
【摘要】 GaussDB数据库数据节点(以下简称dn)之间会因不同的查询计划、sql、线程等等出现频繁的数据交互,在dn上就会承载大量以自身为基准、对端节点为目的d数据流(以下简称stream),当业务量比较集中时或者业务负载较大时,某组dn或多组dn上的数据流就可能会阻塞。用户或运维人员在定位处理该问题时,需要从上亿条数据中获取需要的信息,时效性以及便利性体验不佳。

1      背景

1.1      业务痛点

        GaussDB数据库数据节点(以下简称dn)之间会因不同的查询计划、sql、线程等等出现频繁的数据交互,在dn上就会承载大量以自身为基准、对端节点为目的d数据流(以下简称stream),当业务量比较集中时或者业务负载较大时,某组dn或多组dn上的数据流就可能会阻塞。用户或运维人员在定位处理该问题时,需要从上亿条数据中获取需要的信息,时效性以及便利性体验不佳。

1.2      解决方案

        在运维平台新增功能将dn之间的stream相关进行记录入库并展示top流量,方便运维人员实时查看规避解决问题、合理实施资源调配。

2      DnStream数据流监控

2.1      方案设计

        从整体DMS服务上来看,属于指标新增,需要从用户数据库中去拿到节点名称、对端节点名称、查询id以及查询计划等数据,dms-agent采集数据上报dms-collection入库dms数据库,dms-monitoringdms数据库中查询数据进行聚合,最终在service-cm监控页面进行数据展示,达到溯源的目的,数据流情况如下图所示


1.png

图1 数据流向图



2.2      方案细则

        整体方案属于指标新增,增加stream监控以及溯源

        dms-agent

        采集用户数据库指标数据进行聚合上报dms-collection,部分指标数据如下所示:


2.png

图2 指标数据


        dms-collection

        接收dms-agent上报的数据写入dms数据库。

        dms-monitoring

        根据前台参数查询dms数据库,接收service-cm请求返回相应数据。

        console

        屏蔽掉dms监控设置和存储设置项。

        service-cm:

        调用dms-monitoring接口进行数据获取并展示。

2.3      数据库设计以及数据处理

        数据库设计

DROP TABLE IF EXISTS dms_mtc_dn_stream CASCADE;

CREATE TABLE dms_mtc_dn_stream

(

    ctime               bigint not null,     -- 采集时间

    virtual_cluster_id  int not null,        -- 集群虚拟id

    host_id              int4 not null,       -- 主机id

    node_name            varchar(128),        -- 节点名称

    remote_name          varchar(128),        -- 连接对端节点名称

    query_id             bigint,-- 通信流对应debug_query_id编号

    stream              int4,               -- 数据流个数

    primary key(ctime, virtual_cluster_id, host_id, node_name, remote_name, query_id)

);

GRANT SELECT,INSERT,UPDATE,DELETE ON dms_mtc_dn_stream TO omm;

        数据处理

INSERT INTO dms_mtc_dn_stream (ctime, virtual_cluster_id, host_id, node_name, remote_name, query_id, stream) VALUES (#{stream.ctime}, #{stream.virtualClusterId}, #{stream.hostId}, #{stream.nodeName}, #{stream.remoteName}, #{stream.queryId}, #{stream.stream});

        数据聚合查询

SELECT ctime, node_name, remote_name, query_id, stream FROM dms_mtc_dn_stream where virtual_cluster_id = (select virtual_cluster_id from dms_meta_cluster where cluster_id = #{clusterId}) and ctime <= #{ctime} and ctime > #{ctime - 30000} order by stream desc;
SELECT ctime, node_name, remote_name, stream FROM dms_mtc_dn_stream where virtual_cluster_id = (select virtual_cluster_id from dms_meta_cluster where cluster_id = #{clusterId}) and query_id = 0 and ctime <= #{ctime} and ctime > #{ctime - 30000} order by stream desc;

3      页面数据展示

3.1      数据展示

        页面主要展示时间、己端以及对端dn名称、数据流个数等信息,也可以显示以query_id分组的数据流的个数,如下图所示

3.png

图3 数据流监控页面展示


        想了解GuassDB(DWS)更多信息,欢迎微信搜索“GaussDB DWS”关注微信公众号,和您分享最新最全的PB级数仓黑科技,后台还可获取众多学习资料~

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。