监控指标投递到kafka

最近更新时间: 2026-03-13 09:03:00

一、功能描述

支持把云监控数据转发到指定kafka,支持:

  • 全量数据转发。比如转发cvm所有的指标数据。
  • 支持部分转发。比如只转发某台cvm或者某个appid下所有cvm的指标数据,也支持转发指定实例指定指标的数据。
    以上这些通过转发规则进行配置。

    注意:

    需要确保环境中有部署tcloud-barad-dispense应用。

二、转发配置

当前转发规则需通过黑屏操作,即在数据库中插入转发规则,步骤为:
1、连接转发数据库:数据库名为dispense,对应的service_id为dbsql-barad-dispense,在master节点上执行以下命令:

dbsql_info barad-dispense         // 注意是barad-dispense,不是dbsql-barad-dispense

说明:

connect cmd即为dispense库的连接命令。

2、配置转发规则。

-- 新建一条规则
insert into t_rule (RuleName, Status) values ('转发规则名', 1);
// 说明:
// RuleName: 规则名称
// Status: 规则是否启用,1 启用 0 不启用

-- 配置需要需要转发的指标
insert into t_metric (RuleId, Metric, Namespace, Measurement, Periods) values (10, 'cpu_usage', 'qce/cvm', 'cvm_device', '60');
// 说明:
// RuleId:上面t_rule新建一条规则后的id字段
// Metric:指标名
// Namespace:指标所在的Namespace
// Measurement:云监控的视图,如需获取视图参考附录1
// Periods: 指标的时间粒度,支持配置"60,300"这种指定多个时间粒度,也支持配置"*"支持全部粒度
// 如需知道指标所在的Namespace和Measurement及支持的时间粒度,可参考附录

-- 配置过滤条件(非必须,如果只转发某个实例数据,则配置。该表总共有10个,通过对ruleId % 10可知道${n}在哪个表)
insert into t_condition_${n} (RuleId, Filters) values (10, '[{"Key":"vm_uuid","Values":["c7fc0b4c-0059-4318-bb0c-dc4a31a071da"],"Expression":"="},{"Key":"__appid__","Values":["251005942", "1"],"Expression":"in"}]');
// 说明:
// RuleId:上面t_rule新建一条规则后的id字段
// Filters:转发过滤规则,是个json数组,数组之间是and的关系

-- 配置转发目标kafka
insert into t_target (RuleId, Target, ProtoType) values (10, '{"brokers":"11.150.215.105:9092","topic":"Nowrite","user":"","password":""}', 1);
// 说明:
// RuleId:上面t_rule新建一条规则后的id字段
// Target:目标kafka地址
//ProtoType:转发至kafka的消息类型。转发至kafka的消息类型。1表示json,2表示protobuf

三、 消息协议

转发至kafka消息协议如下:

// json
{
    "Namespace": "qce/cvm",
    "MetricName": "cpu_usage",
    "Statistic": "MAX",
    "Period": 60,
    "Dimensions": [{
        "Name": "appid",
        "Value": "1"
    }, {
        "Name": "projectid",
        "Value": "0"
    }, {
        "Name": "vm_uuid",
        "Value": "4f7639f1-f156-41b4-9072-f7e27af97d3b"
    }],
    "Timestamp": 1737107700000,
    "Value": 22.916666666666668
}

四、转发表结构说明

表名含义说明
t_rule转发规则表包含规则id、规则名、配置用户等规则元数据
`Id: 38230`
`RuleName: 1118-二期-cvm-cpu // 转发规则名`
`AppId: 1300260700 // 配置规则的用户appid,可为空`
`SubUin: 0 // 配置规则的用户uin,可为空`
`Status: 1 // 规则是否启用,1 启用 0 不启用`
`CreateTime: 2024-11-20 11:14:23`
`UpdateTime: 2024-11-20 11:14:23`
`IsAllMetric: 0 // 可为空`
t_metric转发指标表转发关联的指标信息。
<strong>注意:</strong>
如果是内网,`ExtNamespace`和`ExtMetric`为空。

` Id: 3732457`
` RuleId: 38230`
` ExtMetric: CpuUtil // 对外指标名,可为空`
`ExtNamespace: QCE/TI_MODEL // 对外namespace,可为空`
` Measurement: model_svc // 视图名`
` Periods: * // *表示所有粒度,如果只想转发60和300粒度则配置60,300`
` Metric: cpu_util // 对内指标名`
` Namespace: qce/ti_model // 对内namespace`
` ENMeaning: cpu_util // 指标英文名,可为空`
` CName: `
` Unit: % // 指标单位,可为空`
` CreateTime: 2024-12-12 18:30:00`
` UpdateTime: 2024-12-12 18:30:00`
t_condition_${n}转发条件表
  • 共有10个表(0~9),通过对ruleId % 10可以知道转发条件在哪个表上
  • 当前表为空时,表示在内网下配置无条件转发
  • Filters的Expression只支持`=`或`in`。`=`的情况下Values只会有一个值,`in`的情况下Values可能是多个

`Id: 12`
`RuleId: 38230`
`Filters: [{"Key":"vm_uuid","Values":["c7fc0b4c-0059-4318-bb0c-dc4a31a071da"],"Expression":"="},{"Key":"__appid__","Values":["251005942", "1"],"Expression":"in"}]`
`CreateTime: 2024-11-19 17:49:19`
`UpdateTime: 2024-11-19 17:49:19`
t_target转发目标表
  • TargetType仅支持`Kafka`
  • ProtoType支持以下两种:
  • 1:`json`
  • 2:`protobuf`

` Id: 34539`
` RuleId: 38230`
`TargetType: Kafka`
` Target: {"brokers":"11.150.215.105:9092","topic":"Nowrite","user":"","password":""}`
` ProtoType: 1`
`CreateTime: 2024-11-19 16:48:31`
`UpdateTime: 2024-11-19 16:48:31`

五、附录:查看指标、Namespace、Measurement、Period

  1. 在master节点上执行kubectl get ingress -A | grep isd.barad
  2. 通过浏览器访问该域名