Skip to content

Commit 1c6951f

Browse files
authored
Merge branch 'master' into master
2 parents 8b7e05f + 6cb72bb commit 1c6951f

File tree

8 files changed

+414
-83
lines changed

8 files changed

+414
-83
lines changed

README.md

Lines changed: 8 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -14,8 +14,8 @@
1414
--------|---------|----------
1515
MongoDB |QCE/CMONGO|[指标详情](https://cloud.tencent.com/document/product/248/45104)
1616
CDB|QCE/CDB|[指标详情](https://cloud.tencent.com/document/product/248/45147)
17-
Redis标准版|QCE/REDIS|[指标详情](https://cloud.tencent.com/document/product/248/45111)
18-
Redis集群版|QCE/REDIS_CLUSTER|[指标详情](https://cloud.tencent.com/document/product/248/45111)
17+
Redis标准版|QCE/REDIS(即将下线,不推荐)|[指标详情](https://cloud.tencent.com/document/product/248/45111)
18+
Redis集群版|QCE/REDIS_CLUSTER(即将下线,不推荐)|[指标详情](https://cloud.tencent.com/document/product/248/45111)
1919
Redis内存版监控指标|QCE/REDIS_MEM|[指标详情](https://cloud.tencent.com/document/product/248/49729)
2020
CVM|QCE/CVM|[指标详情](https://cloud.tencent.com/document/product/248/6843)
2121
COS|QCE/COS|[指标详情](https://cloud.tencent.com/document/product/248/45140)
@@ -29,8 +29,8 @@ NAT|QCE/NAT_GATEWAY|[指标详情](https://cloud.tencent.com/document/product/24
2929
SqlServer|QCE/SQLSERVER|[指标详情](https://cloud.tencent.com/document/product/248/45146)
3030
MariaDB|QCE/MARIADB|[指标详情](https://cloud.tencent.com/document/product/248/54397)
3131
Elasticsearch|QCE/CES|[指标详情](https://cloud.tencent.com/document/product/248/45129)
32-
CMQ 队列服务|QCE/CMQ|[指标详情](https://cloud.tencent.com/document/product/248/45114)
33-
CMQ 主题订阅|QCE/CMQTOPIC|[指标详情](https://cloud.tencent.com/document/product/248/45113)
32+
CMQ 队列服务|QCE/CMQ(即将下线,不推荐)|[指标详情](https://cloud.tencent.com/document/product/248/45114)
33+
CMQ 主题订阅|QCE/CMQTOPIC(即将下线,不推荐)|[指标详情](https://cloud.tencent.com/document/product/248/45113)
3434
PostgreSQL|QCE/POSTGRES|[指标详情](https://cloud.tencent.com/document/product/248/45105)
3535
CKafka 实例|QCE/CKAFKA|[指标详情](https://cloud.tencent.com/document/product/248/45121)
3636
Memcached |QCE/MEMCACHED|指标详情说明文档(待上线)
@@ -44,6 +44,7 @@ CYNOSDB_MYSQL|QCE/CYNOSDB_MYSQL|[指标详情](https://cloud.tencent.com/documen
4444
云联网|QCE/VBC|[指标详情](https://cloud.tencent.com/document/product/248/75629)
4545
数据传输 |QCE/DTS|指标详情说明文档(待上线)
4646
专线网关 |QCE/DCG|指标详情说明文档(待上线)
47+
全球应用加速|QCE/QAAP|[指标详情](https://cloud.tencent.com/document/product/248/45062)
4748

4849
`后续会有更多的产品支持`
4950

@@ -89,29 +90,26 @@ products:
8990
```yaml
9091
credential:
9192
access_key: <YOUR_ACCESS_KEY> // 必须, 云API的SecretId
92-
secret_key: <YOUR_ACCESS_SECRET> // 必须, 云API的SecretKey
93+
secret_key: <YOUR_ACCESS_SECRET> // 必须, 云API的SecretKey
9394
region: <REGION> // 必须, 实例所在区域信息
9495

9596
rate_limit: 15 // 腾讯云监控拉取指标数据限制, 官方默认限制最大20qps
9697

9798

9899
// 整个产品纬度配置, 每个产品一个item
99100
products:
100-
- namespace: QCE/CMONGO // 必须, 产品命名空间; QCE前缀可自定义,CMONGO产品名不区分大小写, 可用别名
101+
- namespace: QCE/CMONGO // 必须, 产品命名空间
101102
all_metrics: true // 常用, 推荐开启, 导出支持的所有指标
102103
all_instances: true // 常用, 推荐开启, 导出该region下的所有实例
103104
extra_labels: [InstanceName,Zone] // 可选, 将实例的字段作为指标的lables导出
104105
only_include_metrics: [Inserts] // 可选, 只导出这些指标, 配置时all_metrics失效
105106
exclude_metrics: [Reads] // 可选, 不导出这些指标
106-
instance_filters: // 可选, 在all_instances开启情况下, 根据每个实例的字段进行过滤
107-
- ProjectId: 1
108-
Status: 1
109107
only_include_instances: [cmgo-xxxxxxxx] // 可选, 只导出这些实例id, 配置时all_instances失效
110108
exclude_instances: [cmgo-xxxxxxxx] // 可选, 不导出这些实例id
111109
custom_query_dimensions: // 可选, 不常用, 自定义指标查询条件, 配置时all_instances,only_include_instances,exclude_instances失效, 用于不支持按实例纬度查询的指标
112110
- target: cmgo-xxxxxxxx
113111
statistics_types: [avg] // 可选, 拉取N个数据点, 再进行max、min、avg、last计算, 默认last取最新值
114-
period_seconds: 60 // 可选, 指标统计周期, 默认自动获取指标支持的最小统计周期
112+
period_seconds: 60 // 可选, 指标统计周期
115113
range_seconds: 300 // 可选, 选取时间范围, 开始时间=now-range_seconds, 结束时间=now
116114
delay_seconds: 60 // 可选, 时间偏移量, 结束时间=now-delay_seconds
117115
metric_name_type: 1 // 可选,导出指标的名字格式化类型, 1=大写转小写加下划线, 2=转小写; 默认2
@@ -125,9 +123,6 @@ metrics:
125123
tc_metric_rename: Inserts // 导出指标的显示名
126124
tc_metric_name_type: 1 // 可选,导出指标的名字格式化类型, 1=大写转小写加下划线, 2=转小写; 默认1
127125
tc_labels: [InstanceName] // 可选, 将实例的字段作为指标的lables导出
128-
tc_filters: // 可选, 根据每个实例的字段进行过滤, 否则默认导出region下所有实例
129-
- ProjectId: 1
130-
Status: 1
131126
tc_myself_dimensions: // 可选, 同custom_query_dimensions
132127
tc_statistics: [Avg] // 可选, 同statistics_types
133128
period_seconds: 60 // 可选, 同period_seconds

pkg/collector/handler_qaap.go

Lines changed: 149 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ import (
88
"github.com/tencentyun/tencentcloud-exporter/pkg/instance"
99
"github.com/tencentyun/tencentcloud-exporter/pkg/metric"
1010
"github.com/tencentyun/tencentcloud-exporter/pkg/util"
11+
"strings"
1112
"time"
1213
)
1314

@@ -16,14 +17,32 @@ const (
1617
QaapInstanceidKey = "channelId"
1718
)
1819

20+
var (
21+
QaapDetail2GroupidMetricNames = []string{
22+
"GroupInFlow", "GroupOutFlow", "GroupInbandwidth", "GroupOutbandwidth",
23+
}
24+
QaapIpDetailMetricNames = []string{
25+
"IpConnum", "IpInbandwidth", "IpInpacket", "IpLatency", "IpOutbandwidth", "IpOutpacket", "IpPacketLoss",
26+
}
27+
QaapListenerStatMetricNames = []string{
28+
"ListenerConnum", "ListenerOutbandwidth", "ListenerInpacket", "ListenerOutpacket", "ListenerInbandwidth",
29+
}
30+
QaapListenerRsMetricNames = []string{
31+
"ListenerRsStatus",
32+
}
33+
QaapRuleRsMetricNames = []string{
34+
"RuleRsStatus",
35+
}
36+
)
37+
1938
func init() {
2039
registerHandler(QaapNamespace, defaultHandlerEnabled, NewQaapHandler)
2140
}
2241

2342
type QaapHandler struct {
2443
baseProductHandler
25-
tcpListenersRepo instance.QaapTcInstanceTCPListenersRepository
26-
udpListenersRepo instance.QaapTcInstanceUDPListenersRepository
44+
commonQaapInstanceInfoRepo instance.CommonQaapTcInstanceRepository
45+
qaapInstanceInfoRepo instance.QaapTcInstanceInfoRepository
2746
}
2847

2948
func (h *QaapHandler) IsMetricMetaVaild(meta *metric.TcmMeta) bool {
@@ -137,17 +156,23 @@ func (h *QaapHandler) getSeriesByMetricType(m *metric.TcmMetric, ins instance.Tc
137156
for _, v := range m.Meta.SupportDimensions {
138157
dimensions = append(dimensions, v)
139158
}
140-
141-
if util.IsStrInList(dimensions, "listenerId") {
142-
return h.getListenerIdSeries(m, ins)
159+
if util.IsStrInList(QaapDetail2GroupidMetricNames, m.Meta.MetricName) {
160+
return h.getQaapDetail2GroupidSeries(m, ins)
161+
} else if util.IsStrInList(QaapIpDetailMetricNames, m.Meta.MetricName) {
162+
return h.getQaapIpDetailSeries(m, ins)
163+
} else if util.IsStrInList(QaapListenerStatMetricNames, m.Meta.MetricName) {
164+
return h.getQaapListenerStatSeries(m, ins)
165+
} else if util.IsStrInList(QaapListenerRsMetricNames, m.Meta.MetricName) {
166+
return h.getQaapListenerRsSeries(m, ins)
167+
} else if util.IsStrInList(QaapRuleRsMetricNames, m.Meta.MetricName) {
168+
return h.getRuleRsSeries(m, ins)
143169
} else {
144170
return h.getInstanceSeries(m, ins)
145171
}
146172
}
147173

148174
func (h *QaapHandler) getInstanceSeries(m *metric.TcmMetric, ins instance.TcInstance) ([]*metric.TcmSeries, error) {
149175
var series []*metric.TcmSeries
150-
151176
ql := map[string]string{
152177
h.monitorQueryKey: ins.GetMonitorQueryKey(),
153178
}
@@ -160,9 +185,10 @@ func (h *QaapHandler) getInstanceSeries(m *metric.TcmMetric, ins instance.TcInst
160185
return series, nil
161186
}
162187

163-
func (h *QaapHandler) getListenerIdSeries(m *metric.TcmMetric, ins instance.TcInstance) ([]*metric.TcmSeries, error) {
188+
func (h *QaapHandler) getQaapListenerRsSeries(m *metric.TcmMetric, ins instance.TcInstance) ([]*metric.TcmSeries, error) {
164189
var series []*metric.TcmSeries
165-
tcpListenersInfos, err := h.tcpListenersRepo.GetTCPListenersInfo(ins.GetInstanceId())
190+
191+
tcpListenersInfos, err := h.qaapInstanceInfoRepo.GetTCPListenersInfo(ins.GetInstanceId())
166192
if err != nil {
167193
return nil, err
168194
}
@@ -182,7 +208,7 @@ func (h *QaapHandler) getListenerIdSeries(m *metric.TcmMetric, ins instance.TcIn
182208
series = append(series, s)
183209
}
184210
}
185-
udpListenersInfos, err := h.udpListenersRepo.GetUDPListenersInfo(ins.GetInstanceId())
211+
udpListenersInfos, err := h.qaapInstanceInfoRepo.GetUDPListenersInfo(ins.GetInstanceId())
186212
if err != nil {
187213
return nil, err
188214
}
@@ -205,28 +231,135 @@ func (h *QaapHandler) getListenerIdSeries(m *metric.TcmMetric, ins instance.TcIn
205231
return series, nil
206232
}
207233

234+
func (h *QaapHandler) getQaapDetail2GroupidSeries(m *metric.TcmMetric, ins instance.TcInstance) ([]*metric.TcmSeries, error) {
235+
var series []*metric.TcmSeries
236+
proxyGroupLists, err := h.qaapInstanceInfoRepo.GetProxyGroupList(ins.GetInstanceId())
237+
if err != nil {
238+
return nil, err
239+
}
240+
for _, proxyGroupList := range proxyGroupLists.Response.ProxyGroupList {
241+
ql := map[string]string{
242+
"GroupId": *proxyGroupList.GroupId,
243+
}
244+
s, err := metric.NewTcmSeries(m, ql, ins)
245+
if err != nil {
246+
return nil, err
247+
}
248+
series = append(series, s)
249+
}
250+
return series, nil
251+
}
252+
253+
func (h *QaapHandler) getQaapIpDetailSeries(m *metric.TcmMetric, ins instance.TcInstance) ([]*metric.TcmSeries, error) {
254+
var series []*metric.TcmSeries
255+
noneBgpIpLists, err := h.commonQaapInstanceInfoRepo.GetCommonQaapNoneBgpIpList(ins.GetInstanceId())
256+
if err != nil {
257+
return nil, err
258+
}
259+
for _, instanceSet := range noneBgpIpLists.Response.InstanceSet {
260+
ql := map[string]string{
261+
"ip": instanceSet.IP,
262+
"proxyid": instanceSet.ProxyId,
263+
"groupid": instanceSet.GroupId,
264+
"isp": strings.ToLower(instanceSet.Isp),
265+
}
266+
s, err := metric.NewTcmSeries(m, ql, ins)
267+
if err != nil {
268+
return nil, err
269+
}
270+
series = append(series, s)
271+
}
272+
return series, nil
273+
}
274+
275+
func (h *QaapHandler) getQaapListenerStatSeries(m *metric.TcmMetric, ins instance.TcInstance) ([]*metric.TcmSeries, error) {
276+
var series []*metric.TcmSeries
277+
ProxyInstances, err := h.commonQaapInstanceInfoRepo.GetCommonQaapProxyInstances(ins.GetInstanceId())
278+
if err != nil {
279+
return nil, err
280+
}
281+
for _, proxySet := range ProxyInstances.Response.ProxySet {
282+
for _, l4Listener := range proxySet.L4ListenerSet {
283+
ql := map[string]string{
284+
"instanceid": proxySet.ProxyId,
285+
"listenerid": l4Listener.ListenerId,
286+
"protocol": l4Listener.Protocol,
287+
}
288+
s, err := metric.NewTcmSeries(m, ql, ins)
289+
if err != nil {
290+
return nil, err
291+
}
292+
series = append(series, s)
293+
}
294+
for _, l7Listener := range proxySet.L7ListenerSet {
295+
ql := map[string]string{
296+
"instanceid": proxySet.ProxyId,
297+
"listenerid": l7Listener.ListenerId,
298+
"protocol": l7Listener.ForwardProtocol,
299+
}
300+
s, err := metric.NewTcmSeries(m, ql, ins)
301+
if err != nil {
302+
return nil, err
303+
}
304+
series = append(series, s)
305+
}
306+
307+
}
308+
return series, nil
309+
}
310+
func (h *QaapHandler) getRuleRsSeries(m *metric.TcmMetric, ins instance.TcInstance) ([]*metric.TcmSeries, error) {
311+
var series []*metric.TcmSeries
312+
ProxyInstances, err := h.commonQaapInstanceInfoRepo.GetCommonQaapProxyInstances(ins.GetInstanceId())
313+
if err != nil {
314+
return nil, err
315+
}
316+
for _, proxySet := range ProxyInstances.Response.ProxySet {
317+
for _, l7Listener := range proxySet.L7ListenerSet {
318+
for _, rule := range l7Listener.RuleSet {
319+
for _, rs := range rule.RsSet {
320+
ql := map[string]string{
321+
"instanceid": proxySet.ProxyId,
322+
"listenerid": l7Listener.ListenerId,
323+
"ruleid": rule.RuleId,
324+
"rs_ip": rs.RsInfo,
325+
}
326+
s, err := metric.NewTcmSeries(m, ql, ins)
327+
if err != nil {
328+
return nil, err
329+
}
330+
series = append(series, s)
331+
}
332+
333+
}
334+
335+
}
336+
337+
}
338+
return series, nil
339+
}
340+
208341
func NewQaapHandler(cred common.CredentialIface, c *TcProductCollector, logger log.Logger) (handler ProductHandler, err error) {
209-
tcpListenersRepo, err := instance.NewQaapTcInstanceTCPListenersRepository(cred, c.Conf, logger)
342+
qaapInstanceInfo, err := instance.NewQaapTcInstanceInfoRepository(cred, c.Conf, logger)
210343
if err != nil {
211344
return nil, err
212345
}
213-
relodInterval := time.Duration(c.ProductConf.RelodIntervalMinutes * int64(time.Minute))
214-
tcpListenersRepoCache := instance.NewTcGaapInstanceeTCPListenersCache(tcpListenersRepo, relodInterval, logger)
346+
reloadInterval := time.Duration(c.ProductConf.RelodIntervalMinutes * int64(time.Minute))
347+
qaapInstanceInfoCache := instance.NewTcGaapInstanceeInfosCache(qaapInstanceInfo, reloadInterval, logger)
215348

216-
udpListenersRepo, err := instance.NewQaapTcInstanceUDPListenersRepository(cred, c.Conf, logger)
349+
commonQaapInstanceInfoRepo, err := instance.NewCommonQaapTcInstanceRepository(cred, c.Conf, logger)
217350
if err != nil {
218351
return nil, err
219352
}
220-
udpListenersRepoCache := instance.NewTcGaapInstanceeUDPListenersCache(udpListenersRepo, relodInterval, logger)
353+
commonQaapInstanceInfoCache := instance.NewTcCommonGaapInstanceeInfosCache(commonQaapInstanceInfoRepo, reloadInterval, logger)
221354

222355
handler = &QaapHandler{
223356
baseProductHandler: baseProductHandler{
224357
monitorQueryKey: QaapInstanceidKey,
225358
collector: c,
226359
logger: logger,
227360
},
228-
tcpListenersRepo: tcpListenersRepoCache,
229-
udpListenersRepo: udpListenersRepoCache,
361+
commonQaapInstanceInfoRepo: commonQaapInstanceInfoCache,
362+
qaapInstanceInfoRepo: qaapInstanceInfoCache,
230363
}
231364
return
232365

pkg/config/config.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -147,6 +147,7 @@ type TencentConfig struct {
147147
MetricQueryBatchSize int `yaml:"metric_query_batch_size"`
148148
Filename string `yaml:"filename"`
149149
CacheInterval int64 `yaml:"cache_interval"` // 单位 s
150+
IsInternational bool `yaml:"is_international"` // true 表示是国际站
150151
}
151152

152153
func NewConfig() *TencentConfig {

0 commit comments

Comments
 (0)