diff --git a/README.md b/README.md index 2a4b171..c2f80de 100644 --- a/README.md +++ b/README.md @@ -115,7 +115,7 @@ products: range_seconds: 300 // 可选, 选取时间范围, 开始时间=now-range_seconds, 结束时间=now delay_seconds: 60 // 可选, 时间偏移量, 结束时间=now-delay_seconds metric_name_type: 1 // 可选,导出指标的名字格式化类型, 1=大写转小写加下划线, 2=转小写; 默认2 - relod_interval_minutes: 60 // 可选, 在all_instances=true时, 周期reload实例列表, 建议频率不要太频繁 + reload_interval_minutes: 60 // 可选, 在all_instances=true时, 周期reload实例列表, 建议频率不要太频繁 // 单个指标纬度配置, 每个指标一个item diff --git a/go.mod b/go.mod index 37f27c0..60cdb1e 100644 --- a/go.mod +++ b/go.mod @@ -12,10 +12,11 @@ require ( github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cbs v1.0.334 github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cdb v1.0.413 github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cdn v1.0.437 + github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cfs v1.0.634 // indirect github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/ckafka v1.0.334 github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/clb v1.0.334 github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cmq v1.0.334 - github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.0.576 + github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.0.634 github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cvm v1.0.334 github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cynosdb v1.0.413 github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/dc v1.0.334 diff --git a/go.sum b/go.sum index 3a0e0bc..61516ed 100644 --- a/go.sum +++ b/go.sum @@ -220,6 +220,8 @@ github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cdb v1.0.413 h1:6cQPfHc github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cdb v1.0.413/go.mod h1:TEuicyMWitW1zPkLbknGYg+VBGNE5N7GckvCF+hurWo= github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cdn v1.0.437 h1:siozcBuF+BM1j2+nTAUMap7rUNJrBgFvxS8pM8TqY/M= github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cdn v1.0.437/go.mod h1:NSx2qKvoTWBKc1hBp5oUNwbbR3tzdBuTqfnAmb71KBo= +github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cfs v1.0.634 h1:r8qQAHGEQU16qBvAPD/Ws7iHCj74WiTsn3bCa2WbZUg= +github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cfs v1.0.634/go.mod h1:fkxeKfvsWh1A+wyS2zULxvGmVqltbqJwPHnS8aJcsjM= github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/ckafka v1.0.334 h1:LOXFeP3NHL/0PFFXA2GhYH/i7rDbcBwhcJJvqRdFO/w= github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/ckafka v1.0.334/go.mod h1:toYhD7pJDpz6XY3cf/zhUXtKDRt1CbLkgmOidQ2j8kA= github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/clb v1.0.334 h1:NeYNgw78v+qhxWbROjHaazaeEWigt6xTvg7CUS1dt6g= @@ -241,6 +243,8 @@ github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.0.534 h1:ZsJC github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.0.534/go.mod h1:7sCQWVkxcsR38nffDW057DRGk8mUjK1Ing/EFOK8s8Y= github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.0.576 h1:6L4MeAnCk1NkuKoSfJvNPxqOrXq/HG9FqV3jl6i5t+w= github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.0.576/go.mod h1:7sCQWVkxcsR38nffDW057DRGk8mUjK1Ing/EFOK8s8Y= +github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.0.634 h1:xSW5zhVEl+Lp7gJ9Bah1XUAzpGdLB1JrcFmJ+r16RJw= +github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.0.634/go.mod h1:7sCQWVkxcsR38nffDW057DRGk8mUjK1Ing/EFOK8s8Y= github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cvm v1.0.334 h1:ulfSODMy8rpKa8MfnTIPbe5HyOArnlB4RJ1qmpj09to= github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cvm v1.0.334/go.mod h1:AqyM/ZZMD7q5mHBqNY9YImbSpEpoEe7E/vrTbUWX+po= github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cynosdb v1.0.413 h1:MomwSkFrSLB16s51Yu1h4JO+p3Pzc1yesIj+oNwAVM0= diff --git a/pkg/client/client.go b/pkg/client/client.go index 1d07cd8..4f60ccb 100644 --- a/pkg/client/client.go +++ b/pkg/client/client.go @@ -11,6 +11,7 @@ import ( cbs "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cbs/v20170312" cdb "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cdb/v20170320" cdn "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cdn/v20180606" + cfs "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cfs/v20190719" kafka "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/ckafka/v20190819" clb "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/clb/v20180317" cmq "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cmq/v20190304" @@ -353,3 +354,13 @@ func NewWafClient(cred common.CredentialIface, conf *config.TencentConfig) (*waf } return waf.NewClient(cred, conf.Credential.Region, cpf) } + +func NewCfsClient(cred common.CredentialIface, conf *config.TencentConfig) (*cfs.Client, error) { + cpf := profile.NewClientProfile() + if conf.Credential.IsInternal == true { + cpf.HttpProfile.Endpoint = "cfs.internal.tencentcloudapi.com" + } else { + cpf.HttpProfile.Endpoint = "cfs.tencentcloudapi.com" + } + return cfs.NewClient(cred, conf.Credential.Region, cpf) +} diff --git a/pkg/collector/collector.go b/pkg/collector/collector.go index c02a217..6344146 100644 --- a/pkg/collector/collector.go +++ b/pkg/collector/collector.go @@ -116,13 +116,13 @@ func NewTcMonitorCollector(cred common.CredentialIface, conf *config.TencentConf level.Info(logger).Log("msg", "Create product collecter ok", "Namespace", namespace) if pconf.IsReloadEnable() { - relodInterval := time.Duration(pconf.RelodIntervalMinutes * int64(time.Minute)) - reloader := NewTcProductCollectorReloader(context.TODO(), collector, relodInterval, logger) + reloadInterval := time.Duration(pconf.ReloadIntervalMinutes * int64(time.Minute)) + reloader := NewTcProductCollectorReloader(context.TODO(), collector, reloadInterval, logger) reloaders[namespace] = reloader go reloader.Run() level.Info(logger).Log( "msg", fmt.Sprintf("reload %s instances every %d minutes", - namespace, pconf.RelodIntervalMinutes), + namespace, pconf.ReloadIntervalMinutes), ) } } diff --git a/pkg/collector/handler.go b/pkg/collector/handler.go index 0063e52..d1539ea 100644 --- a/pkg/collector/handler.go +++ b/pkg/collector/handler.go @@ -20,11 +20,11 @@ type ProductHandler interface { // 获取云监控指标namespace GetNamespace() string // 对指标元数据做检验, true=可用, false=跳过 - IsMetricMetaVaild(meta *metric.TcmMeta) bool + IsMetricMetaValid(meta *metric.TcmMeta) bool // 修改指标元数据 ModifyMetricMeta(meta *metric.TcmMeta) error // 对指标做校验, true=可用, false=跳过 - IsMetricVaild(m *metric.TcmMetric) bool + IsMetricValid(m *metric.TcmMetric) bool // 修改指标 ModifyMetric(m *metric.TcmMetric) error // 获取该指标下符合条件的所有实例, 并生成所有的series @@ -42,7 +42,7 @@ type baseProductHandler struct { logger log.Logger } -func (h *baseProductHandler) IsMetricMetaVaild(meta *metric.TcmMeta) bool { +func (h *baseProductHandler) IsMetricMetaValid(meta *metric.TcmMeta) bool { return true } @@ -50,7 +50,7 @@ func (h *baseProductHandler) ModifyMetricMeta(meta *metric.TcmMeta) error { return nil } -func (h *baseProductHandler) IsMetricVaild(m *metric.TcmMetric) bool { +func (h *baseProductHandler) IsMetricValid(m *metric.TcmMetric) bool { p, err := m.Meta.GetPeriod(m.Conf.StatPeriodSeconds) if err != nil { return false @@ -95,7 +95,7 @@ func (h *baseProductHandler) GetSeriesByOnly(m *metric.TcmMetric) ([]*metric.Tcm s, err := metric.NewTcmSeries(m, ql, ins) if err != nil { level.Error(h.logger).Log("msg", "Create metric series fail", - "metric", m.Meta.MetricName, "instacne", insId) + "metric", m.Meta.MetricName, "instance", insId) continue } slist = append(slist, s) @@ -119,7 +119,7 @@ func (h *baseProductHandler) GetSeriesByAll(m *metric.TcmMetric) ([]*metric.TcmS s, err := metric.NewTcmSeries(m, ql, ins) if err != nil { level.Error(h.logger).Log("msg", "Create metric series fail", - "metric", m.Meta.MetricName, "instacne", ins.GetInstanceId()) + "metric", m.Meta.MetricName, "instance", ins.GetInstanceId()) continue } slist = append(slist, s) @@ -146,7 +146,7 @@ func (h *baseProductHandler) GetSeriesByCustom(m *metric.TcmMetric) ([]*metric.T s, err := metric.NewTcmSeries(m, ql, ins) if err != nil { level.Error(h.logger).Log("msg", "Create metric series fail", - "err", err, "metric", m.Meta.MetricName, "instacne", ins.GetInstanceId()) + "err", err, "metric", m.Meta.MetricName, "instance", ins.GetInstanceId()) continue } slist = append(slist, s) diff --git a/pkg/collector/handler_cbs.go b/pkg/collector/handler_cbs.go index 716a134..b80904d 100644 --- a/pkg/collector/handler_cbs.go +++ b/pkg/collector/handler_cbs.go @@ -24,7 +24,7 @@ type cbsHandler struct { instanceInfosRepo instance.CbsTcInstanceInfosRepository } -func (h *cbsHandler) IsMetricMetaVaild(meta *metric.TcmMeta) bool { +func (h *cbsHandler) IsMetricMetaValid(meta *metric.TcmMeta) bool { return true } @@ -32,7 +32,7 @@ func (h *cbsHandler) GetNamespace() string { return CbsNamespace } -func (h *cbsHandler) IsMetricVaild(m *metric.TcmMetric) bool { +func (h *cbsHandler) IsMetricValid(m *metric.TcmMetric) bool { // 暂时过滤nvme盘类指标 var dimensions []string for _, v := range m.Meta.SupportDimensions { @@ -76,7 +76,7 @@ func (h *cbsHandler) GetSeriesByOnly(m *metric.TcmMetric) ([]*metric.TcmSeries, sl, err := h.getSeriesByMetricType(m, nil, cvmIds) if err != nil { level.Error(h.logger).Log("msg", "Create metric series fail", - "metric", m.Meta.MetricName, "instacne", cvmIds) + "metric", m.Meta.MetricName, "instance", cvmIds) continue } slist = append(slist, sl...) @@ -92,7 +92,7 @@ func (h *cbsHandler) GetSeriesByOnly(m *metric.TcmMetric) ([]*metric.TcmSeries, sl, err := h.getSeriesByMetricType(m, ins, nil) if err != nil { level.Error(h.logger).Log("msg", "Create metric series fail", - "metric", m.Meta.MetricName, "instacne", ins.GetInstanceId()) + "metric", m.Meta.MetricName, "instance", ins.GetInstanceId()) continue } slist = append(slist, sl...) @@ -112,7 +112,7 @@ func (h *cbsHandler) GetSeriesByAll(m *metric.TcmMetric) ([]*metric.TcmSeries, e sl, err := h.getSeriesByMetricType(m, nil, nil) if err != nil { level.Error(h.logger).Log("msg", "Create metric series fail", - "metric", m.Meta.MetricName, "instacne") + "metric", m.Meta.MetricName, "instance") } slist = append(slist, sl...) } else { @@ -128,7 +128,7 @@ func (h *cbsHandler) GetSeriesByAll(m *metric.TcmMetric) ([]*metric.TcmSeries, e sl, err := h.getSeriesByMetricType(m, ins, nil) if err != nil { level.Error(h.logger).Log("msg", "Create metric series fail", - "metric", m.Meta.MetricName, "instacne", ins.GetInstanceId()) + "metric", m.Meta.MetricName, "instance", ins.GetInstanceId()) continue } slist = append(slist, sl...) @@ -157,7 +157,7 @@ func (h *cbsHandler) GetSeriesByCustom(m *metric.TcmMetric) ([]*metric.TcmSeries sl, err := h.getSeriesByMetricType(m, ins, nil) if err != nil { level.Error(h.logger).Log("msg", "Create metric series fail", - "metric", m.Meta.MetricName, "instacne", ins.GetInstanceId()) + "metric", m.Meta.MetricName, "instance", ins.GetInstanceId()) continue } slist = append(slist, sl...) diff --git a/pkg/collector/handler_cdb.go b/pkg/collector/handler_cdb.go index e6d2ebd..c4bbb0f 100644 --- a/pkg/collector/handler_cdb.go +++ b/pkg/collector/handler_cdb.go @@ -28,7 +28,7 @@ type cdbHandler struct { baseProductHandler } -func (h *cdbHandler) IsMetricMetaVaild(meta *metric.TcmMeta) bool { +func (h *cdbHandler) IsMetricMetaValid(meta *metric.TcmMeta) bool { return true } @@ -36,7 +36,7 @@ func (h *cdbHandler) GetNamespace() string { return CdbNamespace } -func (h *cdbHandler) IsMetricVaild(m *metric.TcmMetric) bool { +func (h *cdbHandler) IsMetricValid(m *metric.TcmMetric) bool { _, ok := excludeMetricName[m.Meta.MetricName] if ok { return false diff --git a/pkg/collector/handler_cdn.go b/pkg/collector/handler_cdn.go index 5df1c7a..2537ed6 100644 --- a/pkg/collector/handler_cdn.go +++ b/pkg/collector/handler_cdn.go @@ -23,7 +23,7 @@ type cdnHandler struct { baseProductHandler } -func (h *cdnHandler) IsMetricMetaVaild(meta *metric.TcmMeta) bool { +func (h *cdnHandler) IsMetricMetaValid(meta *metric.TcmMeta) bool { return true } @@ -31,7 +31,7 @@ func (h *cdnHandler) GetNamespace() string { return CdnNamespace } -func (h *cdnHandler) IsMetricVaild(m *metric.TcmMetric) bool { +func (h *cdnHandler) IsMetricValid(m *metric.TcmMetric) bool { _, ok := excludeMetricName[m.Meta.MetricName] if ok { return false @@ -82,7 +82,7 @@ func (h *cdnHandler) GetSeriesByOnly(m *metric.TcmMetric) ([]*metric.TcmSeries, s, err := metric.NewTcmSeries(m, ql, ins) if err != nil { level.Error(h.logger).Log("msg", "Create metric series fail", - "metric", m.Meta.MetricName, "instacne", insId) + "metric", m.Meta.MetricName, "instance", insId) continue } slist = append(slist, s) @@ -113,7 +113,7 @@ func (h *cdnHandler) GetSeriesByAll(m *metric.TcmMetric) ([]*metric.TcmSeries, e s, err := metric.NewTcmSeries(m, ql, ins) if err != nil { level.Error(h.logger).Log("msg", "Create metric series fail", - "metric", m.Meta.MetricName, "instacne", ins.GetInstanceId()) + "metric", m.Meta.MetricName, "instance", ins.GetInstanceId()) continue } slist = append(slist, s) diff --git a/pkg/collector/handler_cfs.go b/pkg/collector/handler_cfs.go new file mode 100644 index 0000000..e2957bf --- /dev/null +++ b/pkg/collector/handler_cfs.go @@ -0,0 +1,185 @@ +package collector + +import ( + "fmt" + "github.com/go-kit/log" + "github.com/go-kit/log/level" + "github.com/tencentyun/tencentcloud-exporter/pkg/common" + "github.com/tencentyun/tencentcloud-exporter/pkg/instance" + "github.com/tencentyun/tencentcloud-exporter/pkg/metric" + "github.com/tencentyun/tencentcloud-exporter/pkg/util" + "strconv" + "time" +) + +const ( + CfsNamespace = "QCE/CFS" + CfsInstanceIdKey = "FileSystemId" +) + +func init() { + registerHandler(CfsNamespace, defaultHandlerEnabled, NewCfsHandler) +} + +type CfsHandler struct { + baseProductHandler + cfsSnapshotsRepo instance.CfsSnapshotsRepository +} + +func (h *CfsHandler) IsMetricMetaValid(meta *metric.TcmMeta) bool { + return true +} + +func (h *CfsHandler) GetNamespace() string { + return CfsNamespace +} + +func (h *CfsHandler) IsMetricValid(m *metric.TcmMetric) bool { + return true +} + +func (h *CfsHandler) GetSeries(m *metric.TcmMetric) (slist []*metric.TcmSeries, err error) { + if m.Conf.IsIncludeOnlyInstance() { + return h.GetSeriesByOnly(m) + } + + if m.Conf.IsIncludeAllInstance() { + return h.GetSeriesByAll(m) + } + + if m.Conf.IsCustomQueryDimensions() { + return h.GetSeriesByCustom(m) + } + + return nil, fmt.Errorf("must config all_instances or only_include_instances or custom_query_dimensions") +} +func (h *CfsHandler) GetSeriesByOnly(m *metric.TcmMetric) ([]*metric.TcmSeries, error) { + var slist []*metric.TcmSeries + for _, insId := range m.Conf.OnlyIncludeInstances { + ins, err := h.collector.InstanceRepo.Get(insId) + if err != nil { + level.Error(h.logger).Log("msg", "Instance not found", "id", insId) + continue + } + sl, err := h.getSeriesByMetricType(m, ins) + if err != nil { + level.Error(h.logger).Log("msg", "Create metric series fail", + "metric", m.Meta.MetricName, "instance", ins.GetInstanceId()) + continue + } + slist = append(slist, sl...) + } + return slist, nil +} + +func (h *CfsHandler) GetSeriesByAll(m *metric.TcmMetric) ([]*metric.TcmSeries, error) { + var slist []*metric.TcmSeries + insList, err := h.collector.InstanceRepo.ListByFilters(m.Conf.InstanceFilters) + if err != nil { + return nil, err + } + for _, ins := range insList { + if len(m.Conf.ExcludeInstances) != 0 && util.IsStrInList(m.Conf.ExcludeInstances, ins.GetInstanceId()) { + continue + } + sl, err := h.getSeriesByMetricType(m, ins) + if err != nil { + level.Error(h.logger).Log("msg", "Create metric series fail", + "metric", m.Meta.MetricName, "instance", ins.GetInstanceId()) + continue + } + slist = append(slist, sl...) + } + return slist, nil +} + +func (h *CfsHandler) GetSeriesByCustom(m *metric.TcmMetric) ([]*metric.TcmSeries, error) { + var slist []*metric.TcmSeries + for _, ql := range m.Conf.CustomQueryDimensions { + v, ok := ql[h.monitorQueryKey] + if !ok { + level.Error(h.logger).Log( + "msg", fmt.Sprintf("not found %s in queryDimensions", h.monitorQueryKey), + "ql", fmt.Sprintf("%v", ql)) + continue + } + ins, err := h.collector.InstanceRepo.Get(v) + if err != nil { + level.Error(h.logger).Log("msg", "Instance not found", "err", err, "id", v) + continue + } + + sl, err := h.getSeriesByMetricType(m, ins) + if err != nil { + level.Error(h.logger).Log("msg", "Create metric series fail", + "metric", m.Meta.MetricName, "instance", ins.GetInstanceId()) + continue + } + slist = append(slist, sl...) + } + return slist, nil +} + +func (h *CfsHandler) getSeriesByMetricType(m *metric.TcmMetric, ins instance.TcInstance) ([]*metric.TcmSeries, error) { + var dimensions []string + for _, v := range m.Meta.SupportDimensions { + dimensions = append(dimensions, v) + } + + if util.IsStrInList(dimensions, "appid") { + return h.getCfsSnapshotsSeries(m, ins) + } else { + return h.getInstanceSeries(m, ins) + } +} + +func (h *CfsHandler) getInstanceSeries(m *metric.TcmMetric, ins instance.TcInstance) ([]*metric.TcmSeries, error) { + var series []*metric.TcmSeries + ql := map[string]string{ + h.monitorQueryKey: ins.GetMonitorQueryKey(), + } + s, err := metric.NewTcmSeries(m, ql, ins) + if err != nil { + return nil, err + } + series = append(series, s) + + return series, nil +} +func (h *CfsHandler) getCfsSnapshotsSeries(m *metric.TcmMetric, ins instance.TcInstance) ([]*metric.TcmSeries, error) { + var series []*metric.TcmSeries + cfsSnapshots, err := h.cfsSnapshotsRepo.GetCfsSnapshotsInfo("") + if err != nil { + return nil, err + } + for _, cfsSnapshot := range cfsSnapshots.Response.Snapshots { + ql := map[string]string{ + "appid": strconv.FormatUint(*cfsSnapshot.AppId, 10), + } + s, err := metric.NewTcmSeries(m, ql, ins) + if err != nil { + return nil, err + } + series = append(series, s) + } + return series, nil +} + +func NewCfsHandler(cred common.CredentialIface, c *TcProductCollector, logger log.Logger) (handler ProductHandler, err error) { + cfsSnapshotsRepo, err := instance.NewCfsSnapshotsRepositoryRepository(cred, c.Conf, logger) + if err != nil { + return nil, err + } + reloadInterval := time.Duration(c.ProductConf.ReloadIntervalMinutes * int64(time.Minute)) + cfsSnapshotsRepoCache := instance.NewCfsSnapshotsRepositoryRepositoryCache(cfsSnapshotsRepo, reloadInterval, logger) + handler = &CfsHandler{ + baseProductHandler: baseProductHandler{ + monitorQueryKey: CfsInstanceIdKey, + collector: c, + logger: logger, + }, + cfsSnapshotsRepo: cfsSnapshotsRepoCache, + } + return + +} diff --git a/pkg/collector/handler_clb.go b/pkg/collector/handler_clb.go index 349e765..b688ae8 100644 --- a/pkg/collector/handler_clb.go +++ b/pkg/collector/handler_clb.go @@ -20,7 +20,7 @@ type clbHandler struct { baseProductHandler } -func (h *clbHandler) IsMetricMetaVaild(meta *metric.TcmMeta) bool { +func (h *clbHandler) IsMetricMetaValid(meta *metric.TcmMeta) bool { if !util.IsStrInList(meta.SupportDimensions, ClbInstanceidKey) { meta.SupportDimensions = append(meta.SupportDimensions, ClbInstanceidKey) } @@ -32,7 +32,7 @@ func (h *clbHandler) GetNamespace() string { return ClbNamespace } -func (h *clbHandler) IsMetricVaild(m *metric.TcmMetric) bool { +func (h *clbHandler) IsMetricValid(m *metric.TcmMetric) bool { return true } diff --git a/pkg/collector/handler_clb7.go b/pkg/collector/handler_clb7.go index 48768c3..471761a 100644 --- a/pkg/collector/handler_clb7.go +++ b/pkg/collector/handler_clb7.go @@ -42,7 +42,7 @@ type clb7Handler struct { baseProductHandler } -func (h *clb7Handler) IsMetricMetaVaild(meta *metric.TcmMeta) bool { +func (h *clb7Handler) IsMetricMetaValid(meta *metric.TcmMeta) bool { if !util.IsStrInList(meta.SupportDimensions, Clb7InstanceidKey) { meta.SupportDimensions = append(meta.SupportDimensions, Clb7InstanceidKey) } @@ -54,7 +54,7 @@ func (h *clb7Handler) GetNamespace() string { return Clb7Namespace } -func (h *clb7Handler) IsMetricVaild(m *metric.TcmMetric) bool { +func (h *clb7Handler) IsMetricValid(m *metric.TcmMetric) bool { if util.IsStrInList(Clb7ExcludeMetrics, strings.ToLower(m.Meta.MetricName)) { return false } diff --git a/pkg/collector/handler_clb_private.go b/pkg/collector/handler_clb_private.go index a6627c9..153acde 100644 --- a/pkg/collector/handler_clb_private.go +++ b/pkg/collector/handler_clb_private.go @@ -35,7 +35,7 @@ type ClbPrivateHandler struct { baseProductHandler } -func (h *ClbPrivateHandler) IsMetricMetaVaild(meta *metric.TcmMeta) bool { +func (h *ClbPrivateHandler) IsMetricMetaValid(meta *metric.TcmMeta) bool { return true } @@ -43,7 +43,7 @@ func (h *ClbPrivateHandler) GetNamespace() string { return ClbPrivateNamespace } -func (h *ClbPrivateHandler) IsMetricVaild(m *metric.TcmMetric) bool { +func (h *ClbPrivateHandler) IsMetricValid(m *metric.TcmMetric) bool { if util.IsStrInList(ClbPrivateExcludeMetrics, m.Meta.MetricName) { return false } @@ -94,7 +94,7 @@ func (h *ClbPrivateHandler) GetSeriesByOnly(m *metric.TcmMetric) ([]*metric.TcmS sl, err := h.getSeriesByMetricType(m, ins) if err != nil { level.Error(h.logger).Log("msg", "Create metric series fail", - "metric", m.Meta.MetricName, "instacne", ins.GetInstanceId()) + "metric", m.Meta.MetricName, "instance", ins.GetInstanceId()) continue } slist = append(slist, sl...) @@ -115,7 +115,7 @@ func (h *ClbPrivateHandler) GetSeriesByAll(m *metric.TcmMetric) ([]*metric.TcmSe sl, err := h.getSeriesByMetricType(m, ins) if err != nil { level.Error(h.logger).Log("msg", "Create metric series fail", - "metric", m.Meta.MetricName, "instacne", ins.GetInstanceId(), "error", err) + "metric", m.Meta.MetricName, "instance", ins.GetInstanceId(), "error", err) continue } slist = append(slist, sl...) diff --git a/pkg/collector/handler_cmq.go b/pkg/collector/handler_cmq.go index fc97ea4..1910c96 100644 --- a/pkg/collector/handler_cmq.go +++ b/pkg/collector/handler_cmq.go @@ -63,7 +63,7 @@ func (h *cmqHandler) GetSeriesByOnly(m *metric.TcmMetric) ([]*metric.TcmSeries, s, err := metric.NewTcmSeries(m, ql, ins) if err != nil { level.Error(h.logger).Log("msg", "Create metric series fail", - "metric", m.Meta.MetricName, "instacne", insId) + "metric", m.Meta.MetricName, "instance", insId) continue } slist = append(slist, s) @@ -93,7 +93,7 @@ func (h *cmqHandler) GetSeriesByAll(m *metric.TcmMetric) ([]*metric.TcmSeries, e s, err := metric.NewTcmSeries(m, ql, ins) if err != nil { level.Error(h.logger).Log("msg", "Create metric series fail", - "metric", m.Meta.MetricName, "instacne", ins.GetInstanceId()) + "metric", m.Meta.MetricName, "instance", ins.GetInstanceId()) continue } slist = append(slist, s) diff --git a/pkg/collector/handler_cos.go b/pkg/collector/handler_cos.go index df5d107..a04afa8 100644 --- a/pkg/collector/handler_cos.go +++ b/pkg/collector/handler_cos.go @@ -26,7 +26,7 @@ type cosHandler struct { baseProductHandler } -func (h *cosHandler) IsMetricMetaVaild(meta *metric.TcmMeta) bool { +func (h *cosHandler) IsMetricMetaValid(meta *metric.TcmMeta) bool { return true } @@ -34,7 +34,7 @@ func (h *cosHandler) GetNamespace() string { return CosNamespace } -func (h *cosHandler) IsMetricVaild(m *metric.TcmMetric) bool { +func (h *cosHandler) IsMetricValid(m *metric.TcmMetric) bool { // cos大部分指标不支持300以下的统计纬度 if m.Conf.StatPeriodSeconds < 300 { m.Conf.StatPeriodSeconds = 300 @@ -78,7 +78,7 @@ func (h *cosHandler) GetSeriesByAll(m *metric.TcmMetric) ([]*metric.TcmSeries, e s, err := metric.NewTcmSeries(m, ql, ins) if err != nil { level.Error(h.logger).Log("msg", "Create metric series fail", - "metric", m.Meta.MetricName, "instacne", ins.GetInstanceId()) + "metric", m.Meta.MetricName, "instance", ins.GetInstanceId()) continue } slist = append(slist, s) diff --git a/pkg/collector/handler_cvm.go b/pkg/collector/handler_cvm.go index de17bab..e0b23e7 100644 --- a/pkg/collector/handler_cvm.go +++ b/pkg/collector/handler_cvm.go @@ -26,7 +26,7 @@ type cvmHandler struct { baseProductHandler } -func (h *cvmHandler) IsMetricMetaVaild(meta *metric.TcmMeta) bool { +func (h *cvmHandler) IsMetricMetaValid(meta *metric.TcmMeta) bool { if !util.IsStrInList(meta.SupportDimensions, CvmInstanceidKey) { meta.SupportDimensions = append(meta.SupportDimensions, CvmInstanceidKey) } @@ -38,7 +38,7 @@ func (h *cvmHandler) GetNamespace() string { return CvmNamespace } -func (h *cvmHandler) IsMetricVaild(m *metric.TcmMetric) bool { +func (h *cvmHandler) IsMetricValid(m *metric.TcmMetric) bool { if util.IsStrInList(CvmInvalidMetricNames, strings.ToLower(m.Meta.MetricName)) { return false } diff --git a/pkg/collector/handler_cynosdb.go b/pkg/collector/handler_cynosdb.go index 110cc0b..9b03049 100644 --- a/pkg/collector/handler_cynosdb.go +++ b/pkg/collector/handler_cynosdb.go @@ -24,7 +24,7 @@ type CynosdbHandler struct { baseProductHandler } -func (h *CynosdbHandler) IsMetricMetaVaild(meta *metric.TcmMeta) bool { +func (h *CynosdbHandler) IsMetricMetaValid(meta *metric.TcmMeta) bool { return true } @@ -32,7 +32,7 @@ func (h *CynosdbHandler) GetNamespace() string { return CynosdbNamespace } -func (h *CynosdbHandler) IsMetricVaild(m *metric.TcmMetric) bool { +func (h *CynosdbHandler) IsMetricValid(m *metric.TcmMetric) bool { _, ok := excludeMetricName[m.Meta.MetricName] if ok { return false @@ -74,7 +74,7 @@ func (h *CynosdbHandler) GetSeriesByOnly(m *metric.TcmMetric) ([]*metric.TcmSeri sl, err := h.getSeriesByMetricType(m, ins) if err != nil { level.Error(h.logger).Log("msg", "Create metric series fail", - "metric", m.Meta.MetricName, "instacne", ins.GetInstanceId()) + "metric", m.Meta.MetricName, "instance", ins.GetInstanceId()) continue } slist = append(slist, sl...) @@ -95,7 +95,7 @@ func (h *CynosdbHandler) GetSeriesByAll(m *metric.TcmMetric) ([]*metric.TcmSerie sl, err := h.getSeriesByMetricType(m, ins) if err != nil { level.Error(h.logger).Log("msg", "Create metric series fail", - "metric", m.Meta.MetricName, "instacne", ins.GetInstanceId()) + "metric", m.Meta.MetricName, "instance", ins.GetInstanceId()) continue } slist = append(slist, sl...) @@ -122,7 +122,7 @@ func (h *CynosdbHandler) GetSeriesByCustom(m *metric.TcmMetric) ([]*metric.TcmSe sl, err := h.getSeriesByMetricType(m, ins) if err != nil { level.Error(h.logger).Log("msg", "Create metric series fail", - "metric", m.Meta.MetricName, "instacne", ins.GetInstanceId()) + "metric", m.Meta.MetricName, "instance", ins.GetInstanceId()) continue } slist = append(slist, sl...) diff --git a/pkg/collector/handler_dc.go b/pkg/collector/handler_dc.go index 79c4c7b..37fc8b0 100644 --- a/pkg/collector/handler_dc.go +++ b/pkg/collector/handler_dc.go @@ -19,7 +19,7 @@ type dcHandler struct { baseProductHandler } -func (h *dcHandler) IsMetricMetaVaild(meta *metric.TcmMeta) bool { +func (h *dcHandler) IsMetricMetaValid(meta *metric.TcmMeta) bool { return true } @@ -27,7 +27,7 @@ func (h *dcHandler) GetNamespace() string { return DcNamespace } -func (h *dcHandler) IsMetricVaild(m *metric.TcmMetric) bool { +func (h *dcHandler) IsMetricValid(m *metric.TcmMetric) bool { return true } diff --git a/pkg/collector/handler_dcdb.go b/pkg/collector/handler_dcdb.go index fa8993b..25e6113 100644 --- a/pkg/collector/handler_dcdb.go +++ b/pkg/collector/handler_dcdb.go @@ -23,7 +23,7 @@ func (h *dcdbHandler) GetNamespace() string { return DcdbNamespace } -func (h *dcdbHandler) IsMetricVaild(m *metric.TcmMetric) bool { +func (h *dcdbHandler) IsMetricValid(m *metric.TcmMetric) bool { // ignore node/shard metric, bug for cloud monitor if filter dim if len(m.Meta.SupportDimensions) != 1 { return false diff --git a/pkg/collector/handler_dcg.go b/pkg/collector/handler_dcg.go index 426bfd9..c5b2adf 100644 --- a/pkg/collector/handler_dcg.go +++ b/pkg/collector/handler_dcg.go @@ -19,7 +19,7 @@ type DcgHandler struct { baseProductHandler } -func (h *DcgHandler) IsMetricMetaVaild(meta *metric.TcmMeta) bool { +func (h *DcgHandler) IsMetricMetaValid(meta *metric.TcmMeta) bool { return true } @@ -27,7 +27,7 @@ func (h *DcgHandler) GetNamespace() string { return DcgNamespace } -func (h *DcgHandler) IsMetricVaild(m *metric.TcmMetric) bool { +func (h *DcgHandler) IsMetricValid(m *metric.TcmMetric) bool { _, ok := excludeMetricName[m.Meta.MetricName] if ok { return false diff --git a/pkg/collector/handler_dcx.go b/pkg/collector/handler_dcx.go index 47dd775..b1ae1e7 100644 --- a/pkg/collector/handler_dcx.go +++ b/pkg/collector/handler_dcx.go @@ -26,7 +26,7 @@ type dcxHandler struct { baseProductHandler } -func (h *dcxHandler) IsMetricMetaVaild(meta *metric.TcmMeta) bool { +func (h *dcxHandler) IsMetricMetaValid(meta *metric.TcmMeta) bool { if util.IsStrInList(DcxInvalidMetricNames, strings.ToLower(meta.MetricName)) { return false } @@ -37,7 +37,7 @@ func (h *dcxHandler) GetNamespace() string { return DcxNamespace } -func (h *dcxHandler) IsMetricVaild(m *metric.TcmMetric) bool { +func (h *dcxHandler) IsMetricValid(m *metric.TcmMetric) bool { return true } diff --git a/pkg/collector/handler_dts.go b/pkg/collector/handler_dts.go index 7066124..5233d3a 100644 --- a/pkg/collector/handler_dts.go +++ b/pkg/collector/handler_dts.go @@ -26,7 +26,7 @@ type dtsHandler struct { migrateInfosRepo instance.DtsTcInstanceMigrateInfosRepository } -func (h *dtsHandler) IsMetricMetaVaild(meta *metric.TcmMeta) bool { +func (h *dtsHandler) IsMetricMetaValid(meta *metric.TcmMeta) bool { return true } @@ -34,7 +34,7 @@ func (h *dtsHandler) GetNamespace() string { return DTSNamespace } -func (h *dtsHandler) IsMetricVaild(m *metric.TcmMetric) bool { +func (h *dtsHandler) IsMetricValid(m *metric.TcmMetric) bool { _, ok := excludeMetricName[m.Meta.MetricName] if ok { return false @@ -76,7 +76,7 @@ func (h *dtsHandler) GetSeriesByOnly(m *metric.TcmMetric) ([]*metric.TcmSeries, sl, err := h.getSeriesByMetricType(m, ins) if err != nil { level.Error(h.logger).Log("msg", "Create metric series fail", - "metric", m.Meta.MetricName, "instacne", ins.GetInstanceId()) + "metric", m.Meta.MetricName, "instance", ins.GetInstanceId()) continue } slist = append(slist, sl...) @@ -97,7 +97,7 @@ func (h *dtsHandler) GetSeriesByAll(m *metric.TcmMetric) ([]*metric.TcmSeries, e sl, err := h.getSeriesByMetricType(m, ins) if err != nil { level.Error(h.logger).Log("msg", "Create metric series fail", - "metric", m.Meta.MetricName, "instacne", ins.GetInstanceId()) + "metric", m.Meta.MetricName, "instance", ins.GetInstanceId()) continue } slist = append(slist, sl...) @@ -124,7 +124,7 @@ func (h *dtsHandler) GetSeriesByCustom(m *metric.TcmMetric) ([]*metric.TcmSeries sl, err := h.getSeriesByMetricType(m, ins) if err != nil { level.Error(h.logger).Log("msg", "Create metric series fail", - "metric", m.Meta.MetricName, "instacne", ins.GetInstanceId()) + "metric", m.Meta.MetricName, "instance", ins.GetInstanceId()) continue } slist = append(slist, sl...) @@ -171,7 +171,7 @@ func (h *dtsHandler) getReplicationSeries(m *metric.TcmMetric, ins instance.TcIn } for _, replication := range replications.Response.JobList { ql := map[string]string{ - "replicationjobid": *replication.JobId, + "replicationjobid": *replication.JobId, "replicationjob_name": *replication.JobName, } s, err := metric.NewTcmSeries(m, ql, ins) @@ -208,7 +208,7 @@ func NewDTSHandler(cred common.CredentialIface, c *TcProductCollector, logger lo if err != nil { return nil, err } - reloadInterval := time.Duration(c.ProductConf.RelodIntervalMinutes * int64(time.Minute)) + reloadInterval := time.Duration(c.ProductConf.ReloadIntervalMinutes * int64(time.Minute)) migrateInfosRepoCahe := instance.NewTcDtsInstanceMigrateInfosCache(migrateInfosRepo, reloadInterval, logger) replicationRepo, err := instance.NewDtsTcInstanceReplicationsRepository(cred, c.Conf, logger) diff --git a/pkg/collector/handler_eip.go b/pkg/collector/handler_eip.go index 445e702..7ab20c0 100644 --- a/pkg/collector/handler_eip.go +++ b/pkg/collector/handler_eip.go @@ -22,7 +22,7 @@ type eipHandler struct { func (h *eipHandler) GetNamespace() string { return EIPNamespace } -func (h *eipHandler) IsMetricVaild(m *metric.TcmMetric) bool { +func (h *eipHandler) IsMetricValid(m *metric.TcmMetric) bool { // ignore node/shard metric, bug for cloud monitor if filter dim if len(m.Meta.SupportDimensions) != 1 { return false diff --git a/pkg/collector/handler_kafka.go b/pkg/collector/handler_kafka.go index 639d6f0..19b573e 100644 --- a/pkg/collector/handler_kafka.go +++ b/pkg/collector/handler_kafka.go @@ -22,7 +22,7 @@ type kafkaHandler struct { func (h *kafkaHandler) GetNamespace() string { return MariaDBNamespace } -func (h *kafkaHandler) IsMetricVaild(m *metric.TcmMetric) bool { +func (h *kafkaHandler) IsMetricValid(m *metric.TcmMetric) bool { if len(m.Meta.SupportDimensions) != 1 { return false } diff --git a/pkg/collector/handler_lighthouse.go b/pkg/collector/handler_lighthouse.go index 1877b78..0fcc17f 100644 --- a/pkg/collector/handler_lighthouse.go +++ b/pkg/collector/handler_lighthouse.go @@ -22,7 +22,7 @@ type lighthouseHandler struct { baseProductHandler } -func (h *lighthouseHandler) IsMetricMetaVaild(meta *metric.TcmMeta) bool { +func (h *lighthouseHandler) IsMetricMetaValid(meta *metric.TcmMeta) bool { if !util.IsStrInList(meta.SupportDimensions, LighthouseInstanceIDKey) { meta.SupportDimensions = append(meta.SupportDimensions, LighthouseInstanceIDKey) } @@ -34,7 +34,7 @@ func (h *lighthouseHandler) GetNamespace() string { return LighthouseNamespace } -func (h *lighthouseHandler) IsMetricVaild(m *metric.TcmMetric) bool { +func (h *lighthouseHandler) IsMetricValid(m *metric.TcmMetric) bool { if util.IsStrInList(CvmInvalidMetricNames, strings.ToLower(m.Meta.MetricName)) { return false } diff --git a/pkg/collector/handler_mongo.go b/pkg/collector/handler_mongo.go index 67f7574..61c7f78 100644 --- a/pkg/collector/handler_mongo.go +++ b/pkg/collector/handler_mongo.go @@ -80,7 +80,7 @@ func (h *mongoHandler) GetSeriesByOnly(m *metric.TcmMetric) ([]*metric.TcmSeries sl, err := h.getSeriesByMetricType(m, ins) if err != nil { level.Error(h.logger).Log("msg", "Create metric series fail", - "metric", m.Meta.MetricName, "instacne", insId) + "metric", m.Meta.MetricName, "instance", insId) continue } slist = append(slist, sl...) @@ -101,7 +101,7 @@ func (h *mongoHandler) GetSeriesByAll(m *metric.TcmMetric) ([]*metric.TcmSeries, sl, err := h.getSeriesByMetricType(m, ins) if err != nil { level.Error(h.logger).Log("msg", "Create metric series fail", - "metric", m.Meta.MetricName, "instacne", ins.GetInstanceId()) + "metric", m.Meta.MetricName, "instance", ins.GetInstanceId()) continue } slist = append(slist, sl...) @@ -137,7 +137,7 @@ func (h *mongoHandler) getSeriesByMetricType(m *metric.TcmMetric, ins instance.T } s, err := metric.NewTcmSeries(m, ql, ins) if err != nil { - return nil, fmt.Errorf("create metric series fail, metric=%s, instacne=%s", + return nil, fmt.Errorf("create metric series fail, metric=%s, instance=%s", m.Meta.MetricName, ins.GetInstanceId()) } slist = append(slist, s) @@ -145,7 +145,7 @@ func (h *mongoHandler) getSeriesByMetricType(m *metric.TcmMetric, ins instance.T // 副本集纬度 meta, ok := ins.GetMeta().(*mongodb.InstanceDetail) if !ok { - return nil, fmt.Errorf("get instacne raw meta fail, metric=%s, instacne=%s", + return nil, fmt.Errorf("get instance raw meta fail, metric=%s, instance=%s", m.Meta.MetricName, ins.GetInstanceId()) } for _, rep := range meta.ReplicaSets { @@ -156,7 +156,7 @@ func (h *mongoHandler) getSeriesByMetricType(m *metric.TcmMetric, ins instance.T s, err := metric.NewTcmSeries(m, ql, ins) if err != nil { level.Error(h.logger).Log("msg", "Create metric series fail", - "metric", m.Meta.MetricName, "instacne", *rep.ReplicaSetId) + "metric", m.Meta.MetricName, "instance", *rep.ReplicaSetId) } else { slist = append(slist, s) } @@ -165,7 +165,7 @@ func (h *mongoHandler) getSeriesByMetricType(m *metric.TcmMetric, ins instance.T // 节点纬度 meta, ok := ins.GetMeta().(*mongodb.InstanceDetail) if !ok { - return nil, fmt.Errorf("get instacne raw meta fail, metric=%s, instacne=%s", + return nil, fmt.Errorf("get instance raw meta fail, metric=%s, instance=%s", m.Meta.MetricName, ins.GetInstanceId()) } for _, rep := range meta.ReplicaSets { @@ -177,7 +177,7 @@ func (h *mongoHandler) getSeriesByMetricType(m *metric.TcmMetric, ins instance.T s, err := metric.NewTcmSeries(m, ql, ins) if err != nil { level.Error(h.logger).Log("msg", "Create metric series fail", - "metric", m.Meta.MetricName, "instacne", nprimary) + "metric", m.Meta.MetricName, "instance", nprimary) } else { slist = append(slist, s) } @@ -191,7 +191,7 @@ func (h *mongoHandler) getSeriesByMetricType(m *metric.TcmMetric, ins instance.T s, err := metric.NewTcmSeries(m, ql, ins) if err != nil { level.Error(h.logger).Log("msg", "Create metric series fail", - "metric", m.Meta.MetricName, "instacne", nslave) + "metric", m.Meta.MetricName, "instance", nslave) } else { slist = append(slist, s) } diff --git a/pkg/collector/handler_nacos.go b/pkg/collector/handler_nacos.go index 3b9d476..c6a9c9e 100644 --- a/pkg/collector/handler_nacos.go +++ b/pkg/collector/handler_nacos.go @@ -27,7 +27,7 @@ type NacosHandler struct { interfaceRepo instance.NacosTcInstanceInterfaceRepository } -func (h *NacosHandler) IsMetricMetaVaild(meta *metric.TcmMeta) bool { +func (h *NacosHandler) IsMetricMetaValid(meta *metric.TcmMeta) bool { return true } @@ -35,7 +35,7 @@ func (h *NacosHandler) GetNamespace() string { return NacosNamespace } -func (h *NacosHandler) IsMetricVaild(m *metric.TcmMetric) bool { +func (h *NacosHandler) IsMetricValid(m *metric.TcmMetric) bool { _, ok := excludeMetricName[m.Meta.MetricName] if ok { return false @@ -76,7 +76,7 @@ func (h *NacosHandler) GetSeriesByOnly(m *metric.TcmMetric) ([]*metric.TcmSeries sl, err := h.getSeriesByMetricType(m, ins) if err != nil { level.Error(h.logger).Log("msg", "Create metric series fail", - "metric", m.Meta.MetricName, "instacne", ins.GetInstanceId()) + "metric", m.Meta.MetricName, "instance", ins.GetInstanceId()) continue } slist = append(slist, sl...) @@ -97,7 +97,7 @@ func (h *NacosHandler) GetSeriesByAll(m *metric.TcmMetric) ([]*metric.TcmSeries, sl, err := h.getSeriesByMetricType(m, ins) if err != nil { level.Error(h.logger).Log("msg", "Create metric series fail", - "metric", m.Meta.MetricName, "instacne", ins.GetInstanceId(), "error", err) + "metric", m.Meta.MetricName, "instance", ins.GetInstanceId(), "error", err) continue } slist = append(slist, sl...) @@ -124,7 +124,7 @@ func (h *NacosHandler) GetSeriesByCustom(m *metric.TcmMetric) ([]*metric.TcmSeri sl, err := h.getSeriesByMetricType(m, ins) if err != nil { level.Error(h.logger).Log("msg", "Create metric series fail", - "metric", m.Meta.MetricName, "instacne", ins.GetInstanceId()) + "metric", m.Meta.MetricName, "instance", ins.GetInstanceId()) continue } slist = append(slist, sl...) @@ -199,14 +199,14 @@ func NewNacosHandler(cred common.CredentialIface, c *TcProductCollector, logger if err != nil { return nil, err } - relodInterval := time.Duration(c.ProductConf.RelodIntervalMinutes * int64(time.Minute)) - podRepoCahe := instance.NewTcNacosInstancePodCache(podRepo, relodInterval, logger) + reloadInterval := time.Duration(c.ProductConf.ReloadIntervalMinutes * int64(time.Minute)) + podRepoCahe := instance.NewTcNacosInstancePodCache(podRepo, reloadInterval, logger) interfaceRepo, err := instance.NewNacosTcInstanceInterfaceRepository(cred, c.Conf, logger) if err != nil { return nil, err } - interfaceRepoCahe := instance.NewTcNacosInstanceInterfaceCache(interfaceRepo, relodInterval, logger) + interfaceRepoCahe := instance.NewTcNacosInstanceInterfaceCache(interfaceRepo, reloadInterval, logger) handler = &NacosHandler{ baseProductHandler: baseProductHandler{ monitorQueryKey: NacosInstanceidKey, diff --git a/pkg/collector/handler_nat.go b/pkg/collector/handler_nat.go index c531ec5..18aa17f 100644 --- a/pkg/collector/handler_nat.go +++ b/pkg/collector/handler_nat.go @@ -19,7 +19,7 @@ type natHandler struct { baseProductHandler } -func (h *natHandler) IsMetricMetaVaild(meta *metric.TcmMeta) bool { +func (h *natHandler) IsMetricMetaValid(meta *metric.TcmMeta) bool { return true } @@ -27,7 +27,7 @@ func (h *natHandler) GetNamespace() string { return NatNamespace } -func (h *natHandler) IsMetricVaild(m *metric.TcmMetric) bool { +func (h *natHandler) IsMetricValid(m *metric.TcmMetric) bool { return true } diff --git a/pkg/collector/handler_qaap.go b/pkg/collector/handler_qaap.go index 68e5c05..dd3796a 100644 --- a/pkg/collector/handler_qaap.go +++ b/pkg/collector/handler_qaap.go @@ -9,6 +9,7 @@ import ( "github.com/tencentyun/tencentcloud-exporter/pkg/metric" "github.com/tencentyun/tencentcloud-exporter/pkg/util" "strings" + "sync" "time" ) @@ -45,7 +46,7 @@ type QaapHandler struct { qaapInstanceInfoRepo instance.QaapTcInstanceInfoRepository } -func (h *QaapHandler) IsMetricMetaVaild(meta *metric.TcmMeta) bool { +func (h *QaapHandler) IsMetricMetaValid(meta *metric.TcmMeta) bool { return true } @@ -53,7 +54,7 @@ func (h *QaapHandler) GetNamespace() string { return QaapNamespace } -func (h *QaapHandler) IsMetricVaild(m *metric.TcmMetric) bool { +func (h *QaapHandler) IsMetricValid(m *metric.TcmMetric) bool { _, ok := excludeMetricName[m.Meta.MetricName] if ok { return false @@ -80,7 +81,6 @@ func (h *QaapHandler) GetSeries(m *metric.TcmMetric) ([]*metric.TcmSeries, error if m.Conf.IsCustomQueryDimensions() { return h.GetSeriesByCustom(m) } - return nil, fmt.Errorf("must config all_instances or only_include_instances or custom_query_dimensions") } @@ -95,7 +95,7 @@ func (h *QaapHandler) GetSeriesByOnly(m *metric.TcmMetric) ([]*metric.TcmSeries, sl, err := h.getSeriesByMetricType(m, ins) if err != nil { level.Error(h.logger).Log("msg", "Create metric series fail", - "metric", m.Meta.MetricName, "instacne", ins.GetInstanceId()) + "metric", m.Meta.MetricName, "instance", ins.GetInstanceId()) continue } slist = append(slist, sl...) @@ -116,7 +116,7 @@ func (h *QaapHandler) GetSeriesByAll(m *metric.TcmMetric) ([]*metric.TcmSeries, sl, err := h.getSeriesByMetricType(m, ins) if err != nil { level.Error(h.logger).Log("msg", "Create metric series fail", - "metric", m.Meta.MetricName, "instacne", ins.GetInstanceId()) + "metric", m.Meta.MetricName, "instance", ins.GetInstanceId()) continue } slist = append(slist, sl...) @@ -143,7 +143,7 @@ func (h *QaapHandler) GetSeriesByCustom(m *metric.TcmMetric) ([]*metric.TcmSerie sl, err := h.getSeriesByMetricType(m, ins) if err != nil { level.Error(h.logger).Log("msg", "Create metric series fail", - "metric", m.Meta.MetricName, "instacne", ins.GetInstanceId()) + "metric", m.Meta.MetricName, "instance", ins.GetInstanceId()) continue } slist = append(slist, sl...) @@ -172,6 +172,7 @@ func (h *QaapHandler) getSeriesByMetricType(m *metric.TcmMetric, ins instance.Tc } func (h *QaapHandler) getInstanceSeries(m *metric.TcmMetric, ins instance.TcInstance) ([]*metric.TcmSeries, error) { + var series []*metric.TcmSeries ql := map[string]string{ h.monitorQueryKey: ins.GetMonitorQueryKey(), @@ -187,7 +188,64 @@ func (h *QaapHandler) getInstanceSeries(m *metric.TcmMetric, ins instance.TcInst func (h *QaapHandler) getQaapListenerRsSeries(m *metric.TcmMetric, ins instance.TcInstance) ([]*metric.TcmSeries, error) { var series []*metric.TcmSeries - + var tcpSeries, udpSeries []*metric.TcmSeries + var wg sync.WaitGroup + wg.Add(2) + go func() { + defer wg.Done() + tcpSeries, _ = h.getTcpSeries(m, ins) + series = append(series, tcpSeries...) + }() + go func() { + defer wg.Done() + udpSeries, _ = h.getUdpSeries(m, ins) + series = append(series, udpSeries...) + }() + wg.Wait() + + // tcpListenersInfos, err := h.qaapInstanceInfoRepo.GetTCPListenersInfo(ins.GetInstanceId()) + // if err != nil { + // return nil, err + // } + // for _, tcpListenersInfo := range tcpListenersInfos.Response.ListenerSet { + // for _, realServerSet := range tcpListenersInfo.RealServerSet { + // ql := map[string]string{ + // h.monitorQueryKey: ins.GetMonitorQueryKey(), + // "listenerId": *tcpListenersInfo.ListenerId, + // "originServerInfo": *realServerSet.RealServerIP, + // "protocol": *tcpListenersInfo.Protocol, + // "listenerName": *tcpListenersInfo.ListenerName, + // } + // s, err := metric.NewTcmSeries(m, ql, ins) + // if err != nil { + // return nil, err + // } + // series = append(series, s) + // } + // } + // udpListenersInfos, err := h.qaapInstanceInfoRepo.GetUDPListenersInfo(ins.GetInstanceId()) + // if err != nil { + // return nil, err + // } + // for _, udpListenersInfo := range udpListenersInfos.Response.ListenerSet { + // for _, realServerSet := range udpListenersInfo.RealServerSet { + // ql := map[string]string{ + // h.monitorQueryKey: ins.GetMonitorQueryKey(), + // "listenerId": *udpListenersInfo.ListenerId, + // "originServerInfo": *realServerSet.RealServerIP, + // "protocol": *udpListenersInfo.Protocol, + // "listenerName": *udpListenersInfo.ListenerName, + // } + // s, err := metric.NewTcmSeries(m, ql, ins) + // if err != nil { + // return nil, err + // } + // series = append(series, s) + // } + // } + return series, nil +} +func (h *QaapHandler) getTcpSeries(m *metric.TcmMetric, ins instance.TcInstance) (series []*metric.TcmSeries, err error) { tcpListenersInfos, err := h.qaapInstanceInfoRepo.GetTCPListenersInfo(ins.GetInstanceId()) if err != nil { return nil, err @@ -208,6 +266,9 @@ func (h *QaapHandler) getQaapListenerRsSeries(m *metric.TcmMetric, ins instance. series = append(series, s) } } + return series, nil +} +func (h *QaapHandler) getUdpSeries(m *metric.TcmMetric, ins instance.TcInstance) (series []*metric.TcmSeries, err error) { udpListenersInfos, err := h.qaapInstanceInfoRepo.GetUDPListenersInfo(ins.GetInstanceId()) if err != nil { return nil, err @@ -343,14 +404,14 @@ func NewQaapHandler(cred common.CredentialIface, c *TcProductCollector, logger l if err != nil { return nil, err } - reloadInterval := time.Duration(c.ProductConf.RelodIntervalMinutes * int64(time.Minute)) - qaapInstanceInfoCache := instance.NewTcGaapInstanceeInfosCache(qaapInstanceInfo, reloadInterval, logger) + reloadInterval := time.Duration(c.ProductConf.ReloadIntervalMinutes * int64(time.Minute)) + qaapInstanceInfoCache := instance.NewTcGaapInstanceInfosCache(qaapInstanceInfo, reloadInterval, logger) commonQaapInstanceInfoRepo, err := instance.NewCommonQaapTcInstanceRepository(cred, c.Conf, logger) if err != nil { return nil, err } - commonQaapInstanceInfoCache := instance.NewTcCommonGaapInstanceeInfosCache(commonQaapInstanceInfoRepo, reloadInterval, logger) + commonQaapInstanceInfoCache := instance.NewTcCommonGaapInstanceInfosCache(commonQaapInstanceInfoRepo, reloadInterval, logger) handler = &QaapHandler{ baseProductHandler: baseProductHandler{ diff --git a/pkg/collector/handler_redis.go b/pkg/collector/handler_redis.go index 91c5d3c..3fd499c 100644 --- a/pkg/collector/handler_redis.go +++ b/pkg/collector/handler_redis.go @@ -37,7 +37,7 @@ type redisHandler struct { baseProductHandler } -func (h *redisHandler) IsMetricMetaVaild(meta *metric.TcmMeta) bool { +func (h *redisHandler) IsMetricMetaValid(meta *metric.TcmMeta) bool { return true } @@ -45,7 +45,7 @@ func (h *redisHandler) GetNamespace() string { return RedisNamespace } -func (h *redisHandler) IsMetricVaild(m *metric.TcmMetric) bool { +func (h *redisHandler) IsMetricValid(m *metric.TcmMetric) bool { if strings.ToLower(m.Conf.CustomProductName) == "cluster_redis" { if util.IsStrInList(RedisClusterMetricNames, strings.ToLower(m.Meta.MetricName)) { return true diff --git a/pkg/collector/handler_redis_mem.go b/pkg/collector/handler_redis_mem.go index b583ffc..60fbb2b 100644 --- a/pkg/collector/handler_redis_mem.go +++ b/pkg/collector/handler_redis_mem.go @@ -19,24 +19,26 @@ const ( ) var ( -//RedisMemInstanceMetricNames = []string{ -// "cpuutil", "cpumaxutil", "memused", "memutil", "memmaxutil", "keys", "expired", "evicted", "connections", -// "connectionsutil", "inflow", "inbandwidthutil", "inflowlimit", "outflow", "outbandwidthutil", -// "outflowlimit", "latencyavg", "latencymax", "latencyread", "latencywrite", "latencyother", -// "commands", "cmdread", "cmdwrite", "cmdother", "cmdbigvalue", "cmdkeycount", "cmdmget", "cmdslow", -// "cmdhits", "cmdmiss", "cmderr", "cmdhitsratio", -//} -//RedisMemProxyMetricNames = []string{ -// "cpuutilproxy", "commandsproxy", "cmdkeycountproxy", "cmdmgetproxy", "cmderrproxy", "cmdbigvalueproxy", -// "connectionsproxy", "connectionsutilproxy", "inflowproxy", "inbandwidthutilproxy", -// "inflowlimitproxy", "outflowproxy", "outbandwidthutilproxy", "outflowlimitproxy", -// "latencyavgproxy", "latencymaxproxy", "latencyreadproxy", "latencywriteproxy", "latencyotherproxy", -//} -//RedisMemNodeMetricNames = []string{ -// "cpuutilnode", "connectionsnode", "connectionsutilnode", "memusednode", "memutilnode", -// "keysnode", "expirednode", "evictednode", "repldelaynode", "commandsnode", "cmdreadnode", -// "cmdwritenode", "cmdothernode", "cmdslownode", "cmdhitsnode", "cmdmissnode", "cmdhitsrationode", -//} +// RedisMemInstanceMetricNames = []string{ +// "cpuutil", "cpumaxutil", "memused", "memutil", "memmaxutil", "keys", "expired", "evicted", "connections", +// "connectionsutil", "inflow", "inbandwidthutil", "inflowlimit", "outflow", "outbandwidthutil", +// "outflowlimit", "latencyavg", "latencymax", "latencyread", "latencywrite", "latencyother", +// "commands", "cmdread", "cmdwrite", "cmdother", "cmdbigvalue", "cmdkeycount", "cmdmget", "cmdslow", +// "cmdhits", "cmdmiss", "cmderr", "cmdhitsratio", +// } +// +// RedisMemProxyMetricNames = []string{ +// "cpuutilproxy", "commandsproxy", "cmdkeycountproxy", "cmdmgetproxy", "cmderrproxy", "cmdbigvalueproxy", +// "connectionsproxy", "connectionsutilproxy", "inflowproxy", "inbandwidthutilproxy", +// "inflowlimitproxy", "outflowproxy", "outbandwidthutilproxy", "outflowlimitproxy", +// "latencyavgproxy", "latencymaxproxy", "latencyreadproxy", "latencywriteproxy", "latencyotherproxy", +// } +// +// RedisMemNodeMetricNames = []string{ +// "cpuutilnode", "connectionsnode", "connectionsutilnode", "memusednode", "memutilnode", +// "keysnode", "expirednode", "evictednode", "repldelaynode", "commandsnode", "cmdreadnode", +// "cmdwritenode", "cmdothernode", "cmdslownode", "cmdhitsnode", "cmdmissnode", "cmdhitsrationode", +// } ) func init() { @@ -81,7 +83,7 @@ func (h *redisMemHandler) GetSeriesByOnly(m *metric.TcmMetric) ([]*metric.TcmSer sl, err := h.getSeriesByMetricType(m, ins) if err != nil { level.Error(h.logger).Log("msg", "Create metric series fail", - "metric", m.Meta.MetricName, "instacne", ins.GetInstanceId()) + "metric", m.Meta.MetricName, "instance", ins.GetInstanceId()) continue } slist = append(slist, sl...) @@ -102,7 +104,7 @@ func (h *redisMemHandler) GetSeriesByAll(m *metric.TcmMetric) ([]*metric.TcmSeri sl, err := h.getSeriesByMetricType(m, ins) if err != nil { level.Error(h.logger).Log("msg", "Create metric series fail", - "metric", m.Meta.MetricName, "instacne", ins.GetInstanceId()) + "metric", m.Meta.MetricName, "instance", ins.GetInstanceId()) continue } slist = append(slist, sl...) @@ -129,7 +131,7 @@ func (h *redisMemHandler) GetSeriesByCustom(m *metric.TcmMetric) ([]*metric.TcmS sl, err := h.getSeriesByMetricType(m, ins) if err != nil { level.Error(h.logger).Log("msg", "Create metric series fail", - "metric", m.Meta.MetricName, "instacne", ins.GetInstanceId()) + "metric", m.Meta.MetricName, "instance", ins.GetInstanceId()) continue } slist = append(slist, sl...) @@ -213,8 +215,8 @@ func NewRedisMemHandler(cred common.CredentialIface, c *TcProductCollector, logg if err != nil { return nil, err } - relodInterval := time.Duration(c.ProductConf.RelodIntervalMinutes * int64(time.Minute)) - nodeRepoCahe := instance.NewTcRedisInstanceNodeCache(nodeRepo, relodInterval, logger) + reloadInterval := time.Duration(c.ProductConf.ReloadIntervalMinutes * int64(time.Minute)) + nodeRepoCahe := instance.NewTcRedisInstanceNodeCache(nodeRepo, reloadInterval, logger) handler := &redisMemHandler{ baseProductHandler: baseProductHandler{ diff --git a/pkg/collector/handler_sqlserver.go b/pkg/collector/handler_sqlserver.go index 4a536fa..721e9ce 100644 --- a/pkg/collector/handler_sqlserver.go +++ b/pkg/collector/handler_sqlserver.go @@ -20,7 +20,7 @@ type sqlServerHandler struct { baseProductHandler } -func (h *sqlServerHandler) IsMetricMetaVaild(meta *metric.TcmMeta) bool { +func (h *sqlServerHandler) IsMetricMetaValid(meta *metric.TcmMeta) bool { return true } @@ -28,7 +28,7 @@ func (h *sqlServerHandler) GetNamespace() string { return SqlServerNamespace } -func (h *sqlServerHandler) IsMetricVaild(m *metric.TcmMetric) bool { +func (h *sqlServerHandler) IsMetricValid(m *metric.TcmMetric) bool { return true } diff --git a/pkg/collector/handler_tdmq.go b/pkg/collector/handler_tdmq.go index 95262e6..3084999 100644 --- a/pkg/collector/handler_tdmq.go +++ b/pkg/collector/handler_tdmq.go @@ -41,7 +41,7 @@ type tdmqHandler struct { topicRepo instance.TdmqTcInstanceRocketMQTopicsRepository } -func (h *tdmqHandler) IsMetricMetaVaild(meta *metric.TcmMeta) bool { +func (h *tdmqHandler) IsMetricMetaValid(meta *metric.TcmMeta) bool { return true } @@ -49,7 +49,7 @@ func (h *tdmqHandler) GetNamespace() string { return TdmqNamespace } -func (h *tdmqHandler) IsMetricVaild(m *metric.TcmMetric) bool { +func (h *tdmqHandler) IsMetricValid(m *metric.TcmMetric) bool { // 暂时只支持 TDMQ RocketMQ 版指标 if !util.IsStrInList(RocketMQOnlyIncludeMetrics, strings.ToLower(m.Meta.MetricName)) { return false @@ -95,7 +95,7 @@ func (h *tdmqHandler) GetSeriesByOnly(m *metric.TcmMetric) ([]*metric.TcmSeries, sl, err := h.getSeriesByMetricType(m, ins) if err != nil { level.Error(h.logger).Log("msg", "Create metric series fail", - "metric", m.Meta.MetricName, "instacne", ins.GetInstanceId()) + "metric", m.Meta.MetricName, "instance", ins.GetInstanceId()) continue } slist = append(slist, sl...) @@ -116,7 +116,7 @@ func (h *tdmqHandler) GetSeriesByAll(m *metric.TcmMetric) ([]*metric.TcmSeries, sl, err := h.getSeriesByMetricType(m, ins) if err != nil { level.Error(h.logger).Log("msg", "Create metric series fail", - "metric", m.Meta.MetricName, "instacne", ins.GetInstanceId()) + "metric", m.Meta.MetricName, "instance", ins.GetInstanceId()) continue } slist = append(slist, sl...) @@ -143,7 +143,7 @@ func (h *tdmqHandler) GetSeriesByCustom(m *metric.TcmMetric) ([]*metric.TcmSerie sl, err := h.getSeriesByMetricType(m, ins) if err != nil { level.Error(h.logger).Log("msg", "Create metric series fail", - "metric", m.Meta.MetricName, "instacne", ins.GetInstanceId()) + "metric", m.Meta.MetricName, "instance", ins.GetInstanceId()) continue } slist = append(slist, sl...) @@ -210,14 +210,14 @@ func NewTdmqHandler(cred common.CredentialIface, c *TcProductCollector, logger l if err != nil { return nil, err } - relodInterval := time.Duration(c.ProductConf.RelodIntervalMinutes * int64(time.Minute)) - namespaceRepoCahe := instance.NewTcTdmqInstanceNamespaceCache(namespaceRepo, relodInterval, logger) + reloadInterval := time.Duration(c.ProductConf.ReloadIntervalMinutes * int64(time.Minute)) + namespaceRepoCahe := instance.NewTcTdmqInstanceNamespaceCache(namespaceRepo, reloadInterval, logger) topicRepo, err := instance.NewTdmqTcInstanceRocketMQTopicsRepository(cred, c.Conf, logger) if err != nil { return nil, err } - topicRepoCahe := instance.NewTcTdmqInstanceTopicsCache(topicRepo, relodInterval, logger) + topicRepoCahe := instance.NewTcTdmqInstanceTopicsCache(topicRepo, reloadInterval, logger) handler = &tdmqHandler{ baseProductHandler: baseProductHandler{ diff --git a/pkg/collector/handler_vbc.go b/pkg/collector/handler_vbc.go index 277f813..1d76c17 100644 --- a/pkg/collector/handler_vbc.go +++ b/pkg/collector/handler_vbc.go @@ -36,7 +36,7 @@ type VbcHandler struct { dRegionRepo instance.VbcTcInstanceDRegionRepository } -func (h *VbcHandler) IsMetricMetaVaild(meta *metric.TcmMeta) bool { +func (h *VbcHandler) IsMetricMetaValid(meta *metric.TcmMeta) bool { return true } @@ -44,7 +44,7 @@ func (h *VbcHandler) GetNamespace() string { return VbcNamespace } -func (h *VbcHandler) IsMetricVaild(m *metric.TcmMetric) bool { +func (h *VbcHandler) IsMetricValid(m *metric.TcmMetric) bool { _, ok := excludeMetricName[m.Meta.MetricName] if ok { @@ -87,7 +87,7 @@ func (h *VbcHandler) GetSeriesByOnly(m *metric.TcmMetric) ([]*metric.TcmSeries, sl, err := h.getSeriesByMetricType(m, ins) if err != nil { level.Error(h.logger).Log("msg", "Create metric series fail", - "metric", m.Meta.MetricName, "instacne", ins.GetInstanceId()) + "metric", m.Meta.MetricName, "instance", ins.GetInstanceId()) continue } slist = append(slist, sl...) @@ -108,7 +108,7 @@ func (h *VbcHandler) GetSeriesByAll(m *metric.TcmMetric) ([]*metric.TcmSeries, e sl, err := h.getSeriesByMetricType(m, ins) if err != nil { level.Error(h.logger).Log("msg", "Create metric series fail", - "metric", m.Meta.MetricName, "instacne", ins.GetInstanceId()) + "metric", m.Meta.MetricName, "instance", ins.GetInstanceId()) continue } slist = append(slist, sl...) @@ -193,8 +193,8 @@ func NewVbcHandler(cred common.CredentialIface, c *TcProductCollector, logger lo if err != nil { return nil, err } - relodInterval := time.Duration(c.ProductConf.RelodIntervalMinutes * int64(time.Minute)) - dRegionRepoCahe := instance.NewVbcTcInstanceDRegionRepositoryCache(dRegionRepo, relodInterval, logger) + reloadInterval := time.Duration(c.ProductConf.ReloadIntervalMinutes * int64(time.Minute)) + dRegionRepoCahe := instance.NewVbcTcInstanceDRegionRepositoryCache(dRegionRepo, reloadInterval, logger) handler = &VbcHandler{ baseProductHandler: baseProductHandler{ diff --git a/pkg/collector/handler_vpngw.go b/pkg/collector/handler_vpngw.go index 504d7b7..2d838c9 100644 --- a/pkg/collector/handler_vpngw.go +++ b/pkg/collector/handler_vpngw.go @@ -19,7 +19,7 @@ type VpngwHandler struct { baseProductHandler } -func (h *VpngwHandler) IsMetricMetaVaild(meta *metric.TcmMeta) bool { +func (h *VpngwHandler) IsMetricMetaValid(meta *metric.TcmMeta) bool { return true } @@ -27,7 +27,7 @@ func (h *VpngwHandler) GetNamespace() string { return VpngwNamespace } -func (h *VpngwHandler) IsMetricVaild(m *metric.TcmMetric) bool { +func (h *VpngwHandler) IsMetricValid(m *metric.TcmMetric) bool { _, ok := excludeMetricName[m.Meta.MetricName] if ok { return false diff --git a/pkg/collector/handler_vpnx.go b/pkg/collector/handler_vpnx.go index e156842..b8386ed 100644 --- a/pkg/collector/handler_vpnx.go +++ b/pkg/collector/handler_vpnx.go @@ -19,7 +19,7 @@ type VpnxHandler struct { baseProductHandler } -func (h *VpnxHandler) IsMetricMetaVaild(meta *metric.TcmMeta) bool { +func (h *VpnxHandler) IsMetricMetaValid(meta *metric.TcmMeta) bool { return true } @@ -27,7 +27,7 @@ func (h *VpnxHandler) GetNamespace() string { return VpnxNamespace } -func (h *VpnxHandler) IsMetricVaild(m *metric.TcmMetric) bool { +func (h *VpnxHandler) IsMetricValid(m *metric.TcmMetric) bool { _, ok := excludeMetricName[m.Meta.MetricName] if ok { return false diff --git a/pkg/collector/handler_waf.go b/pkg/collector/handler_waf.go index fa52135..70b719f 100644 --- a/pkg/collector/handler_waf.go +++ b/pkg/collector/handler_waf.go @@ -25,7 +25,7 @@ type WafHandler struct { baseProductHandler } -func (h *WafHandler) IsMetricMetaVaild(meta *metric.TcmMeta) bool { +func (h *WafHandler) IsMetricMetaValid(meta *metric.TcmMeta) bool { return true } @@ -33,7 +33,7 @@ func (h *WafHandler) GetNamespace() string { return WafNamespace } -func (h *WafHandler) IsMetricVaild(m *metric.TcmMetric) bool { +func (h *WafHandler) IsMetricValid(m *metric.TcmMetric) bool { _, ok := excludeMetricName[m.Meta.MetricName] if ok { return false @@ -74,7 +74,7 @@ func (h *WafHandler) GetSeriesByOnly(m *metric.TcmMetric) ([]*metric.TcmSeries, sl, err := h.getSeriesByMetricType(m, ins) if err != nil { level.Error(h.logger).Log("msg", "Create metric series fail", - "metric", m.Meta.MetricName, "instacne", ins.GetInstanceId()) + "metric", m.Meta.MetricName, "instance", ins.GetInstanceId()) continue } slist = append(slist, sl...) @@ -95,7 +95,7 @@ func (h *WafHandler) GetSeriesByAll(m *metric.TcmMetric) ([]*metric.TcmSeries, e sl, err := h.getSeriesByMetricType(m, ins) if err != nil { level.Error(h.logger).Log("msg", "Create metric series fail", - "metric", m.Meta.MetricName, "instacne", ins.GetInstanceId(), "error", err) + "metric", m.Meta.MetricName, "instance", ins.GetInstanceId(), "error", err) continue } slist = append(slist, sl...) @@ -122,7 +122,7 @@ func (h *WafHandler) GetSeriesByCustom(m *metric.TcmMetric) ([]*metric.TcmSeries sl, err := h.getSeriesByMetricType(m, ins) if err != nil { level.Error(h.logger).Log("msg", "Create metric series fail", - "metric", m.Meta.MetricName, "instacne", ins.GetInstanceId()) + "metric", m.Meta.MetricName, "instance", ins.GetInstanceId()) continue } slist = append(slist, sl...) diff --git a/pkg/collector/handler_zookeeper.go b/pkg/collector/handler_zookeeper.go index e4fcca1..b0b41d9 100644 --- a/pkg/collector/handler_zookeeper.go +++ b/pkg/collector/handler_zookeeper.go @@ -28,7 +28,7 @@ type ZookeeperHandler struct { interfaceRepo instance.ZookeeperTcInstanceInterfaceRepository } -func (h *ZookeeperHandler) IsMetricMetaVaild(meta *metric.TcmMeta) bool { +func (h *ZookeeperHandler) IsMetricMetaValid(meta *metric.TcmMeta) bool { return true } @@ -36,7 +36,7 @@ func (h *ZookeeperHandler) GetNamespace() string { return ZookeeperNamespace } -func (h *ZookeeperHandler) IsMetricVaild(m *metric.TcmMetric) bool { +func (h *ZookeeperHandler) IsMetricValid(m *metric.TcmMetric) bool { _, ok := excludeMetricName[m.Meta.MetricName] if ok { return false @@ -77,7 +77,7 @@ func (h *ZookeeperHandler) GetSeriesByOnly(m *metric.TcmMetric) ([]*metric.TcmSe sl, err := h.getSeriesByMetricType(m, ins) if err != nil { level.Error(h.logger).Log("msg", "Create metric series fail", - "metric", m.Meta.MetricName, "instacne", ins.GetInstanceId()) + "metric", m.Meta.MetricName, "instance", ins.GetInstanceId()) continue } slist = append(slist, sl...) @@ -98,7 +98,7 @@ func (h *ZookeeperHandler) GetSeriesByAll(m *metric.TcmMetric) ([]*metric.TcmSer sl, err := h.getSeriesByMetricType(m, ins) if err != nil { level.Error(h.logger).Log("msg", "Create metric series fail", - "metric", m.Meta.MetricName, "instacne", ins.GetInstanceId()) + "metric", m.Meta.MetricName, "instance", ins.GetInstanceId()) continue } slist = append(slist, sl...) @@ -125,7 +125,7 @@ func (h *ZookeeperHandler) GetSeriesByCustom(m *metric.TcmMetric) ([]*metric.Tcm sl, err := h.getSeriesByMetricType(m, ins) if err != nil { level.Error(h.logger).Log("msg", "Create metric series fail", - "metric", m.Meta.MetricName, "instacne", ins.GetInstanceId()) + "metric", m.Meta.MetricName, "instance", ins.GetInstanceId()) continue } slist = append(slist, sl...) @@ -200,14 +200,14 @@ func NewZookeeperHandler(cred common.CredentialIface, c *TcProductCollector, log if err != nil { return nil, err } - relodInterval := time.Duration(c.ProductConf.RelodIntervalMinutes * int64(time.Minute)) - podRepoCahe := instance.NewTcZookeeperInstancePodCache(podRepo, relodInterval, logger) + reloadInterval := time.Duration(c.ProductConf.ReloadIntervalMinutes * int64(time.Minute)) + podRepoCahe := instance.NewTcZookeeperInstancePodCache(podRepo, reloadInterval, logger) interfaceRepo, err := instance.NewZookeeperTcInstanceInterfaceRepository(cred, c.Conf, logger) if err != nil { return nil, err } - interfaceRepoCahe := instance.NewTcZookeeperInstanceInterfaceCache(interfaceRepo, relodInterval, logger) + interfaceRepoCahe := instance.NewTcZookeeperInstanceInterfaceCache(interfaceRepo, reloadInterval, logger) handler = &ZookeeperHandler{ baseProductHandler: baseProductHandler{ diff --git a/pkg/collector/product.go b/pkg/collector/product.go index d0e06c0..983ce3e 100644 --- a/pkg/collector/product.go +++ b/pkg/collector/product.go @@ -3,14 +3,13 @@ package collector import ( "context" "fmt" + "github.com/tencentyun/tencentcloud-exporter/pkg/constant" "strings" "sync" "time" "github.com/tencentyun/tencentcloud-exporter/pkg/common" - "github.com/tencentyun/tencentcloud-exporter/pkg/constant" - "github.com/go-kit/log" "github.com/go-kit/log/level" "github.com/prometheus/client_golang/prometheus" @@ -32,7 +31,7 @@ type TcProductCollector struct { ProductConf *config.TencentProduct handler ProductHandler logger log.Logger - lock sync.Mutex + lock sync.RWMutex } // 指标纬度配置 @@ -81,29 +80,63 @@ func (c *TcProductCollector) LoadMetricsByProductConf() error { if err != nil { return err } - for _, mname := range metricNames { - nm, err := c.createMetricWithProductConf(mname, pconf) - if err != nil { - level.Warn(c.logger).Log("msg", "Create metric fail", "err", err, "Namespace", c.Namespace, "name", mname) - continue - } - if nm == nil { - // maybe some metric not support - continue + if c.Namespace == "QCE/QAAP" { + wg := &sync.WaitGroup{} + for _, mname := range metricNames { + wg.Add(1) + go func(mname string, group *sync.WaitGroup) { + start := time.Now() + nm, err := c.createMetricWithProductConf(mname, pconf) + if err != nil { + level.Warn(c.logger).Log("msg", "Create metric fail", "err", err, "Namespace", c.Namespace, "name", mname) + // continue + } + if nm == nil { + // maybe some metric not support + // continue + } + c.lock.Lock() + c.MetricMap[nm.Meta.MetricName] = nm + c.lock.Unlock() + // 获取该指标下的所有实例纬度查询或自定义纬度查询 + series, err := c.handler.GetSeries(nm) + if err != nil { + level.Error(c.logger).Log("msg", "create metric series err", "err", err, "Namespace", c.Namespace, "name", mname) + } + level.Info(c.logger).Log("msg", "found instances", "count", len(series), "Namespace", c.Namespace, "name", mname, "cost", time.Since(start).Milliseconds()) + err = nm.LoadSeries(series) + if err != nil { + level.Error(c.logger).Log("msg", "load metric series err", "err", err, "Namespace", c.Namespace, "name", mname) + } + group.Done() + }(mname, wg) } - c.MetricMap[nm.Meta.MetricName] = nm + wg.Wait() + } else { + for _, mname := range metricNames { + nm, err := c.createMetricWithProductConf(mname, pconf) + if err != nil { + level.Warn(c.logger).Log("msg", "Create metric fail", "err", err, "Namespace", c.Namespace, "name", mname) + continue + } + if nm == nil { + // maybe some metric not support + continue + } + c.MetricMap[nm.Meta.MetricName] = nm - // 获取该指标下的所有实例纬度查询或自定义纬度查询 - series, err := c.handler.GetSeries(nm) - if err != nil { - level.Error(c.logger).Log("msg", "create metric series err", "err", err, "Namespace", c.Namespace, "name", mname) - continue - } - level.Info(c.logger).Log("msg", "found instances", "count", len(series), "Namespace", c.Namespace, "name", mname) - err = nm.LoadSeries(series) - if err != nil { - level.Error(c.logger).Log("msg", "load metric series err", "err", err, "Namespace", c.Namespace, "name", mname) - continue + // 获取该指标下的所有实例纬度查询或自定义纬度查询 + series, err := c.handler.GetSeries(nm) + if err != nil { + level.Error(c.logger).Log("msg", "create metric series err", "err", err, "Namespace", c.Namespace, "name", mname) + continue + } + level.Info(c.logger).Log("msg", "found instances", "count", len(series), "Namespace", c.Namespace, "name", mname, "cost") + err = nm.LoadSeries(series) + if err != nil { + level.Error(c.logger).Log("msg", "load metric series err", "err", err, "Namespace", c.Namespace, "name", mname) + continue + } } } return nil @@ -151,15 +184,16 @@ func (c *TcProductCollector) createMetricWithProductConf(mname string, pconf con return nil, err } // 指标元数据处理, false=跳过 - if !c.handler.IsMetricMetaVaild(meta) { + if !c.handler.IsMetricMetaValid(meta) { return nil, fmt.Errorf("metric not support") } err = c.handler.ModifyMetricMeta(meta) if err != nil { return nil, err } - + c.lock.RLock() m, exists := c.MetricMap[mname] + c.lock.RUnlock() if !exists { // 创建TcmMetric模型 conf, err := metric.NewTcmMetricConfigWithProductYaml(pconf, meta) @@ -171,7 +205,7 @@ func (c *TcProductCollector) createMetricWithProductConf(mname string, pconf con return nil, err } // 指标过滤 - if !c.handler.IsMetricVaild(nm) { + if !c.handler.IsMetricValid(nm) { // ignore invalid metric return nil, nil } @@ -181,7 +215,6 @@ func (c *TcProductCollector) createMetricWithProductConf(mname string, pconf con } return nm, nil } - return m, nil } @@ -191,7 +224,7 @@ func (c *TcProductCollector) createMetricWithMetricConf(mconf config.TencentMetr return nil, err } // 指标元数据处理, false=跳过 - if !c.handler.IsMetricMetaVaild(meta) { + if !c.handler.IsMetricMetaValid(meta) { return nil, fmt.Errorf("metric not support") } err = c.handler.ModifyMetricMeta(meta) @@ -210,7 +243,7 @@ func (c *TcProductCollector) createMetricWithMetricConf(mconf config.TencentMetr return nil, err } // 指标过滤 - if !c.handler.IsMetricVaild(nm) { + if !c.handler.IsMetricValid(nm) { return nil, fmt.Errorf("metric not support") } err = c.handler.ModifyMetric(nm) @@ -266,19 +299,19 @@ func (c *TcProductCollector) Collect(ch chan<- prometheus.Metric) (err error) { } type TcProductCollectorReloader struct { - collector *TcProductCollector - relodInterval time.Duration - ctx context.Context - cancel context.CancelFunc - logger log.Logger + collector *TcProductCollector + reloadInterval time.Duration + ctx context.Context + cancel context.CancelFunc + logger log.Logger } func (r *TcProductCollectorReloader) Run() { - ticker := time.NewTicker(r.relodInterval) + ticker := time.NewTicker(r.reloadInterval) defer ticker.Stop() // sleep when first start - time.Sleep(r.relodInterval) + time.Sleep(r.reloadInterval) for { level.Info(r.logger).Log("msg", "start reload product metadata", "Namespace", r.collector.Namespace) @@ -319,8 +352,9 @@ func NewTcProductCollector(namespace string, metricRepo metric.TcmMetricReposito if err != nil { return nil, err } + // var instanceRepo instance.TcInstanceRepository // 使用instance缓存 - reloadInterval := time.Duration(pconf.RelodIntervalMinutes * int64(time.Minute)) + reloadInterval := time.Duration(pconf.ReloadIntervalMinutes * int64(time.Minute)) instanceRepoCache = instance.NewTcInstanceCache(instanceRepo, reloadInterval, logger) } @@ -355,14 +389,14 @@ func NewTcProductCollector(namespace string, metricRepo metric.TcmMetricReposito } func NewTcProductCollectorReloader(ctx context.Context, collector *TcProductCollector, - relodInterval time.Duration, logger log.Logger) *TcProductCollectorReloader { + reloadInterval time.Duration, logger log.Logger) *TcProductCollectorReloader { childCtx, cancel := context.WithCancel(ctx) reloader := &TcProductCollectorReloader{ - collector: collector, - relodInterval: relodInterval, - ctx: childCtx, - cancel: cancel, - logger: logger, + collector: collector, + reloadInterval: reloadInterval, + ctx: childCtx, + cancel: cancel, + logger: logger, } return reloader } diff --git a/pkg/config/config.go b/pkg/config/config.go index e415227..15a0906 100644 --- a/pkg/config/config.go +++ b/pkg/config/config.go @@ -12,11 +12,11 @@ import ( ) const ( - DefaultPeriodSeconds = 60 - DefaultDelaySeconds = 300 - DefaultRelodIntervalMinutes = 60 - DefaultRateLimit = 15 - DefaultQueryMetricBatchSize = 50 + DefaultPeriodSeconds = 60 + DefaultDelaySeconds = 300 + DefaultReloadIntervalMinutes = 60 + DefaultRateLimit = 15 + DefaultQueryMetricBatchSize = 50 EnvAccessKey = "TENCENTCLOUD_SECRET_ID" EnvSecretKey = "TENCENTCLOUD_SECRET_KEY" @@ -69,6 +69,7 @@ var ( "qaap": "QCE/QAAP", // for qaap "lb_private": "QCE/LB_PRIVATE", "waf": "QCE/WAF", + "cfs": "QCE/CFS", } SupportStatisticsTypes = map[string]bool{ @@ -121,7 +122,7 @@ type TencentProduct struct { RangeSeconds int64 `yaml:"range_seconds"` DelaySeconds int64 `yaml:"delay_seconds"` MetricNameType int32 `yaml:"metric_name_type"` // 1=大写转下划线, 2=全小写 - RelodIntervalMinutes int64 `yaml:"relod_interval_minutes"` + ReloadIntervalMinutes int64 `yaml:"reload_interval_minutes"` } type metadataResponse struct { @@ -146,7 +147,7 @@ type TencentConfig struct { RateLimit float64 `yaml:"rate_limit"` MetricQueryBatchSize int `yaml:"metric_query_batch_size"` Filename string `yaml:"filename"` - CacheInterval int64 `yaml:"cache_interval"` // 单位 s + CacheInterval int64 `yaml:"cache_interval"` // 单位 s IsInternational bool `yaml:"is_international"` // true 表示是国际站 } @@ -257,8 +258,8 @@ func (c *TencentConfig) fillDefault() { } for index, product := range c.Products { - if product.RelodIntervalMinutes <= 0 { - c.Products[index].RelodIntervalMinutes = DefaultRelodIntervalMinutes + if product.ReloadIntervalMinutes <= 0 { + c.Products[index].ReloadIntervalMinutes = DefaultReloadIntervalMinutes } } } diff --git a/pkg/instance/cache.go b/pkg/instance/cache.go index 0e5f772..f257f4f 100644 --- a/pkg/instance/cache.go +++ b/pkg/instance/cache.go @@ -8,6 +8,7 @@ import ( "github.com/go-kit/log" "github.com/go-kit/log/level" + cfs "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cfs/v20190719" dtsNew "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/dts/v20211206" gaap "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/gaap/v20180529" sdk "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/redis/v20180412" @@ -45,25 +46,25 @@ func (c *TcInstanceCache) Get(id string) (TcInstance, error) { } func (c *TcInstanceCache) ListByIds(ids []string) (insList []TcInstance, err error) { - err = c.checkNeedreload() + err = c.checkNeedReload() if err != nil { return nil, err } - var notexists []string + var notExists []string for _, id := range ids { ins, ok := c.cache[id] if ok { insList = append(insList, ins) } else { - notexists = append(notexists, id) + notExists = append(notExists, id) } } return } func (c *TcInstanceCache) ListByFilters(filters map[string]string) (insList []TcInstance, err error) { - err = c.checkNeedreload() + err = c.checkNeedReload() if err != nil { return } @@ -84,7 +85,7 @@ func (c *TcInstanceCache) ListByFilters(filters map[string]string) (insList []Tc return } -func (c *TcInstanceCache) checkNeedreload() error { +func (c *TcInstanceCache) checkNeedReload() error { c.mu.Lock() defer c.mu.Unlock() @@ -487,7 +488,7 @@ func NewTcDtsInstanceReplicationsInfosCache(repo DtsTcInstanceReplicationsReposi } // vbc -type TcVbcInstanceeDRegionCache struct { +type TcVbcInstanceDRegionCache struct { Raw VbcTcInstanceDRegionRepository cache map[string]*vbc.DescribeCcnRegionBandwidthLimitsResponse lastReloadTime map[string]time.Time @@ -497,7 +498,7 @@ type TcVbcInstanceeDRegionCache struct { logger log.Logger } -func (c *TcVbcInstanceeDRegionCache) GetVbcDRegionInfo(instanceId string) (*vbc.DescribeCcnRegionBandwidthLimitsResponse, error) { +func (c *TcVbcInstanceDRegionCache) GetVbcDRegionInfo(instanceId string) (*vbc.DescribeCcnRegionBandwidthLimitsResponse, error) { lrtime, exists := c.lastReloadTime[instanceId] if exists && time.Now().Sub(lrtime) < c.reloadInterval { namespace, ok := c.cache[instanceId] @@ -517,7 +518,7 @@ func (c *TcVbcInstanceeDRegionCache) GetVbcDRegionInfo(instanceId string) (*vbc. } func NewVbcTcInstanceDRegionRepositoryCache(repo VbcTcInstanceDRegionRepository, reloadInterval time.Duration, logger log.Logger) VbcTcInstanceDRegionRepository { - cache := &TcVbcInstanceeDRegionCache{ + cache := &TcVbcInstanceDRegionCache{ Raw: repo, cache: map[string]*vbc.DescribeCcnRegionBandwidthLimitsResponse{}, lastReloadTime: map[string]time.Time{}, @@ -528,7 +529,7 @@ func NewVbcTcInstanceDRegionRepositoryCache(repo VbcTcInstanceDRegionRepository, } // gaap -type TcGaapInstanceeInfosCache struct { +type TcGaapInstanceInfosCache struct { Raw QaapTcInstanceInfoRepository tcpCache map[string]*gaap.DescribeTCPListenersResponse udpCache map[string]*gaap.DescribeUDPListenersResponse @@ -540,7 +541,7 @@ type TcGaapInstanceeInfosCache struct { logger log.Logger } -func (c *TcGaapInstanceeInfosCache) GetTCPListenersInfo(instanceId string) (*gaap.DescribeTCPListenersResponse, error) { +func (c *TcGaapInstanceInfosCache) GetTCPListenersInfo(instanceId string) (*gaap.DescribeTCPListenersResponse, error) { lrtime, exists := c.lastReloadTime[instanceId] if exists && time.Now().Sub(lrtime) < c.reloadInterval { namespace, ok := c.tcpCache[instanceId] @@ -553,12 +554,14 @@ func (c *TcGaapInstanceeInfosCache) GetTCPListenersInfo(instanceId string) (*gaa if err != nil { return nil, err } + c.mu.Lock() c.tcpCache[instanceId] = tcpListeners c.lastReloadTime[instanceId] = time.Now() + c.mu.Unlock() level.Debug(c.logger).Log("msg", "Get gaap Namespaces info from api", "instanceId", instanceId) return tcpListeners, nil } -func (c *TcGaapInstanceeInfosCache) GetUDPListenersInfo(instanceId string) (*gaap.DescribeUDPListenersResponse, error) { +func (c *TcGaapInstanceInfosCache) GetUDPListenersInfo(instanceId string) (*gaap.DescribeUDPListenersResponse, error) { lrtime, exists := c.lastReloadTime[instanceId] if exists && time.Now().Sub(lrtime) < c.reloadInterval { namespace, ok := c.udpCache[instanceId] @@ -571,12 +574,14 @@ func (c *TcGaapInstanceeInfosCache) GetUDPListenersInfo(instanceId string) (*gaa if err != nil { return nil, err } + c.mu.Lock() c.udpCache[instanceId] = udpListeners c.lastReloadTime[instanceId] = time.Now() + c.mu.Unlock() level.Debug(c.logger).Log("msg", "Get gaap Namespaces info from api", "instanceId", instanceId) return udpListeners, nil } -func (c *TcGaapInstanceeInfosCache) GetProxyGroupList(instanceId string) (*gaap.DescribeProxyGroupListResponse, error) { +func (c *TcGaapInstanceInfosCache) GetProxyGroupList(instanceId string) (*gaap.DescribeProxyGroupListResponse, error) { lrtime, exists := c.lastReloadTime[instanceId] if exists && time.Now().Sub(lrtime) < c.reloadInterval { namespace, ok := c.groupCache[instanceId] @@ -589,14 +594,16 @@ func (c *TcGaapInstanceeInfosCache) GetProxyGroupList(instanceId string) (*gaap. if err != nil { return nil, err } + c.mu.Lock() c.groupCache[instanceId] = proxyGroupList c.lastReloadTime[instanceId] = time.Now() + c.mu.Unlock() level.Debug(c.logger).Log("msg", "Get gaap Namespaces info from api", "instanceId", instanceId) return proxyGroupList, nil } -func NewTcGaapInstanceeInfosCache(repo QaapTcInstanceInfoRepository, reloadInterval time.Duration, logger log.Logger) QaapTcInstanceInfoRepository { - cache := &TcGaapInstanceeInfosCache{ +func NewTcGaapInstanceInfosCache(repo QaapTcInstanceInfoRepository, reloadInterval time.Duration, logger log.Logger) QaapTcInstanceInfoRepository { + cache := &TcGaapInstanceInfosCache{ Raw: repo, tcpCache: map[string]*gaap.DescribeTCPListenersResponse{}, udpCache: map[string]*gaap.DescribeUDPListenersResponse{}, @@ -608,7 +615,7 @@ func NewTcGaapInstanceeInfosCache(repo QaapTcInstanceInfoRepository, reloadInter return cache } -type TcCommonGaapInstanceeInfosCache struct { +type TcCommonGaapInstanceInfosCache struct { Raw CommonQaapTcInstanceRepository proxyInstancesCache map[string]ProxyInstancesRsp noneBgpIpListCache map[string]NoneBgpIpListRsp @@ -619,7 +626,7 @@ type TcCommonGaapInstanceeInfosCache struct { logger log.Logger } -func (c *TcCommonGaapInstanceeInfosCache) GetCommonQaapProxyInstances(instanceId string) (ProxyInstancesRsp, error) { +func (c *TcCommonGaapInstanceInfosCache) GetCommonQaapProxyInstances(instanceId string) (ProxyInstancesRsp, error) { lrtime, exists := c.lastReloadTime[instanceId] if exists && time.Now().Sub(lrtime) < c.reloadInterval { namespace, ok := c.proxyInstancesCache[instanceId] @@ -632,12 +639,14 @@ func (c *TcCommonGaapInstanceeInfosCache) GetCommonQaapProxyInstances(instanceId if err != nil { return ProxyInstancesRsp{}, err } + c.mu.Lock() c.proxyInstancesCache[instanceId] = proxyGroupList c.lastReloadTime[instanceId] = time.Now() + c.mu.Unlock() level.Debug(c.logger).Log("msg", "Get gaap Namespaces info from api", "instanceId", instanceId) return proxyGroupList, nil } -func (c *TcCommonGaapInstanceeInfosCache) GetCommonQaapNoneBgpIpList(instanceId string) (NoneBgpIpListRsp, error) { +func (c *TcCommonGaapInstanceInfosCache) GetCommonQaapNoneBgpIpList(instanceId string) (NoneBgpIpListRsp, error) { lrtime, exists := c.lastReloadTime[instanceId] if exists && time.Now().Sub(lrtime) < c.reloadInterval { namespace, ok := c.noneBgpIpListCache[instanceId] @@ -650,14 +659,16 @@ func (c *TcCommonGaapInstanceeInfosCache) GetCommonQaapNoneBgpIpList(instanceId if err != nil { return NoneBgpIpListRsp{}, err } + c.mu.Lock() c.noneBgpIpListCache[instanceId] = proxyGroupList c.lastReloadTime[instanceId] = time.Now() + c.mu.Unlock() level.Debug(c.logger).Log("msg", "Get gaap Namespaces info from api", "instanceId", instanceId) return proxyGroupList, nil } -func NewTcCommonGaapInstanceeInfosCache(repo CommonQaapTcInstanceRepository, reloadInterval time.Duration, logger log.Logger) CommonQaapTcInstanceRepository { - cache := &TcCommonGaapInstanceeInfosCache{ +func NewTcCommonGaapInstanceInfosCache(repo CommonQaapTcInstanceRepository, reloadInterval time.Duration, logger log.Logger) CommonQaapTcInstanceRepository { + cache := &TcCommonGaapInstanceInfosCache{ Raw: repo, proxyInstancesCache: map[string]ProxyInstancesRsp{}, noneBgpIpListCache: map[string]NoneBgpIpListRsp{}, @@ -667,3 +678,44 @@ func NewTcCommonGaapInstanceeInfosCache(repo CommonQaapTcInstanceRepository, rel } return cache } + +// cfs +type TcCfsInstanceSnapshotsCache struct { + Raw CfsSnapshotsRepository + cache map[string]*cfs.DescribeCfsSnapshotsResponse + lastReloadTime map[string]time.Time + reloadInterval time.Duration + mu sync.Mutex + + logger log.Logger +} + +func (c *TcCfsInstanceSnapshotsCache) GetCfsSnapshotsInfo(instanceId string) (*cfs.DescribeCfsSnapshotsResponse, error) { + lrtime, exists := c.lastReloadTime[instanceId] + if exists && time.Now().Sub(lrtime) < c.reloadInterval { + cfsSnapshotsInfoCache, ok := c.cache[instanceId] + if ok { + return cfsSnapshotsInfoCache, nil + } + } + + cfsSnapshotsInfo, err := c.Raw.GetCfsSnapshotsInfo(instanceId) + if err != nil { + return nil, err + } + c.cache[instanceId] = cfsSnapshotsInfo + c.lastReloadTime[instanceId] = time.Now() + level.Debug(c.logger).Log("msg", "Get vbc Namespaces info from api", "instanceId", instanceId) + return cfsSnapshotsInfo, nil +} + +func NewCfsSnapshotsRepositoryRepositoryCache(repo CfsSnapshotsRepository, reloadInterval time.Duration, logger log.Logger) CfsSnapshotsRepository { + cache := &TcCfsInstanceSnapshotsCache{ + Raw: repo, + cache: map[string]*cfs.DescribeCfsSnapshotsResponse{}, + lastReloadTime: map[string]time.Time{}, + reloadInterval: reloadInterval, + logger: logger, + } + return cache +} diff --git a/pkg/instance/instance_cfs.go b/pkg/instance/instance_cfs.go new file mode 100644 index 0000000..30ac0f5 --- /dev/null +++ b/pkg/instance/instance_cfs.go @@ -0,0 +1,34 @@ +package instance + +import ( + "fmt" + "reflect" + + sdk "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cfs/v20190719" +) + +type CfsTcInstance struct { + baseTcInstance + meta *sdk.FileSystemInfo +} + +func (ins *CfsTcInstance) GetMeta() interface{} { + return ins.meta +} + +func NewCfsTcInstance(instanceId string, meta *sdk.FileSystemInfo) (ins *CfsTcInstance, err error) { + if instanceId == "" { + return nil, fmt.Errorf("instanceId is empty ") + } + if meta == nil { + return nil, fmt.Errorf("meta is empty ") + } + ins = &CfsTcInstance{ + baseTcInstance: baseTcInstance{ + instanceId: instanceId, + value: reflect.ValueOf(*meta), + }, + meta: meta, + } + return +} diff --git a/pkg/instance/repository_cfs.go b/pkg/instance/repository_cfs.go new file mode 100644 index 0000000..501f856 --- /dev/null +++ b/pkg/instance/repository_cfs.go @@ -0,0 +1,114 @@ +package instance + +import ( + "fmt" + "github.com/tencentyun/tencentcloud-exporter/pkg/common" + + "github.com/go-kit/log" + "github.com/go-kit/log/level" + sdk "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cfs/v20190719" + "github.com/tencentyun/tencentcloud-exporter/pkg/client" + "github.com/tencentyun/tencentcloud-exporter/pkg/config" +) + +func init() { + registerRepository("QCE/CFS", NewCfsTcInstanceRepository) +} + +type CfsTcInstanceRepository struct { + credential common.CredentialIface + client *sdk.Client + logger log.Logger +} + +func (repo *CfsTcInstanceRepository) GetInstanceKey() string { + return "FileSystemId" +} + +func (repo *CfsTcInstanceRepository) Get(id string) (instance TcInstance, err error) { + req := sdk.NewDescribeCfsFileSystemsRequest() + req.FileSystemId = &id + resp, err := repo.client.DescribeCfsFileSystems(req) + if err != nil { + return + } + if len(resp.Response.FileSystems) != 1 { + return nil, fmt.Errorf("Response instanceDetails size != 1, id=%s ", id) + } + meta := resp.Response.FileSystems[0] + instance, err = NewCfsTcInstance(id, meta) + if err != nil { + return + } + return +} + +func (repo *CfsTcInstanceRepository) ListByIds(id []string) (instances []TcInstance, err error) { + return +} + +func (repo *CfsTcInstanceRepository) ListByFilters(filters map[string]string) (instances []TcInstance, err error) { + req := sdk.NewDescribeCfsFileSystemsRequest() + + // getMoreInstances: + resp, err := repo.client.DescribeCfsFileSystems(req) + if err != nil { + return + } + for _, meta := range resp.Response.FileSystems { + ins, e := NewCfsTcInstance(*meta.FileSystemId, meta) + if e != nil { + level.Error(repo.logger).Log("msg", "Create Cfs instance fail", "id", *meta.FileSystemId) + continue + } + instances = append(instances, ins) + } + // goto getMoreInstances + + return +} + +func NewCfsTcInstanceRepository(cred common.CredentialIface, c *config.TencentConfig, logger log.Logger) (repo TcInstanceRepository, err error) { + cli, err := client.NewCfsClient(cred, c) + if err != nil { + return + } + repo = &CfsTcInstanceRepository{ + credential: cred, + client: cli, + logger: logger, + } + return +} + +// Replications +type CfsSnapshotsRepository interface { + GetCfsSnapshotsInfo(instanceId string) (*sdk.DescribeCfsSnapshotsResponse, error) +} + +type CfsSnapshotsRepositoryImpl struct { + client *sdk.Client + logger log.Logger +} + +func (repo *CfsSnapshotsRepositoryImpl) GetCfsSnapshotsInfo(instanceId string) (*sdk.DescribeCfsSnapshotsResponse, error) { + req := sdk.NewDescribeCfsSnapshotsRequest() + var offset uint64 = 0 + var limit uint64 = 100 + req.Limit = &limit + req.Offset = &offset + req.FileSystemId = &instanceId + return repo.client.DescribeCfsSnapshots(req) +} + +func NewCfsSnapshotsRepositoryRepository(cred common.CredentialIface, c *config.TencentConfig, logger log.Logger) (CfsSnapshotsRepository, error) { + cli, err := client.NewCfsClient(cred, c) + if err != nil { + return nil, err + } + repo := &CfsSnapshotsRepositoryImpl{ + client: cli, + logger: logger, + } + return repo, nil +} diff --git a/pkg/instance/repository_eip.go b/pkg/instance/repository_eip.go index 33448db..d1e8d16 100644 --- a/pkg/instance/repository_eip.go +++ b/pkg/instance/repository_eip.go @@ -33,10 +33,25 @@ func (repo *EIPTcInstanceRepository) Get(id string) (instance TcInstance, err er if err != nil { return } - if len(resp.Response.AddressSet) != 1 { + + var meta *sdk.Address + if len(resp.Response.AddressSet) == 0 { + reqV6 := sdk.NewDescribeIp6AddressesRequest() + reqV6.Ip6AddressIds = []*string{&id} + respV6, err := repo.client.DescribeIp6Addresses(reqV6) + if err != nil { + return nil, err + } + if len(respV6.Response.AddressSet) == 1 { + meta = respV6.Response.AddressSet[0] + } else { + return nil, fmt.Errorf("Response instanceDetails size != 1, id=%s ", id) + } + } else if len(resp.Response.AddressSet) == 1 { + meta = resp.Response.AddressSet[0] + } else { return nil, fmt.Errorf("Response instanceDetails size != 1, id=%s ", id) } - meta := resp.Response.AddressSet[0] instance, err = NewEIPTcInstance(*meta.AddressIp, meta) if err != nil { return @@ -79,6 +94,32 @@ getMoreInstances: goto getMoreInstances } + reqV6 := sdk.NewDescribeIp6AddressesRequest() + offset, limit, total = 0, 100, -1 + reqV6.Offset = &offset + reqV6.Limit = &limit +getMoreV6Instances: + respV6, err := repo.client.DescribeIp6Addresses(reqV6) + if err != nil { + return + } + if total == -1 { + total = *respV6.Response.TotalCount + } + for _, meta := range respV6.Response.AddressSet { + ins, e := NewEIPTcInstance(*meta.AddressIp, meta) + if e != nil { + level.Error(repo.logger).Log("msg", "Create cdb instance fail", "id", *meta.InstanceId) + continue + } + instances = append(instances, ins) + } + offset += limit + if offset < total { + req.Offset = &offset + goto getMoreV6Instances + } + return } diff --git a/qcloud_exporter b/qcloud_exporter index c9d7979..358882b 100755 Binary files a/qcloud_exporter and b/qcloud_exporter differ