Skip to content

Commit fc7153f

Browse files
juexiaolin(林觉霄)juexiaolin
authored andcommitted
feat: add new product SqlServer metrics export
1 parent b409a10 commit fc7153f

File tree

7 files changed

+200
-1
lines changed

7 files changed

+200
-1
lines changed

readme.md renamed to README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ NAT|QCE/NAT_GATEWAY|[指标详情](https://cloud.tencent.com/document/product/24
2121
物理专线|QCE/DC|[指标详情](https://cloud.tencent.com/document/product/248/45102)
2222
专用通道|QCE/DCX|[指标详情](https://cloud.tencent.com/document/product/248/45101)
2323
云硬盘|QCE/CBS|[指标详情](https://cloud.tencent.com/document/product/248/45411)
24-
24+
SqlServer|QCE/SQLSERVER|[指标详情](https://cloud.tencent.com/document/product/248/45146)
2525
`后续会有更多的产品支持`
2626

2727
## 二、快速开始
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
credential:
2+
access_key: "access_key"
3+
secret_key: "secret_key"
4+
region: "region"
5+
6+
rate_limit: 15 #云监控拉数据接口最大限制, 20/秒, 1200/分钟, https://cloud.tencent.com/document/product/248/31014
7+
8+
products:
9+
- namespace: QCE/SQLSERVER #指标详情: https://cloud.tencent.com/document/product/248/45146
10+
all_metrics: true
11+
all_instances: true
12+
#only_include_metrics: []
13+
#only_include_instances: [mssql-xxxxxxxx]
14+
#extra_labels: [InstanceId,Name,Region,Vip]
15+
#statistics_types: [last]
16+
period_seconds: 300
17+
#metric_name_type: 2

pkg/client/client.go

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ import (
1111
mongodb "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/mongodb/v20190725"
1212
monitor "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/monitor/v20180724"
1313
redis "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/redis/v20180412"
14+
sqlserver "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/sqlserver/v20180328"
1415
vpc "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/vpc/v20170312"
1516

1617
"github.com/tencentyun/tencentcloud-exporter/pkg/config"
@@ -105,3 +106,13 @@ func NewCbsClient(conf *config.TencentConfig) (*cbs.Client, error) {
105106
cpf.HttpProfile.Endpoint = "cbs.tencentcloudapi.com"
106107
return cbs.NewClient(credential, conf.Credential.Region, cpf)
107108
}
109+
110+
func NewSqlServerClient(conf *config.TencentConfig) (*sqlserver.Client, error) {
111+
credential := common.NewCredential(
112+
conf.Credential.AccessKey,
113+
conf.Credential.SecretKey,
114+
)
115+
cpf := profile.NewClientProfile()
116+
cpf.HttpProfile.Endpoint = "sqlserver.tencentcloudapi.com"
117+
return sqlserver.NewClient(credential, conf.Credential.Region, cpf)
118+
}

pkg/collector/handler_sqlserver.go

Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
package collector
2+
3+
import (
4+
"github.com/go-kit/kit/log"
5+
6+
"github.com/tencentyun/tencentcloud-exporter/pkg/metric"
7+
)
8+
9+
const (
10+
SqlServerNamespace = "QCE/SQLSERVER"
11+
SqlServerInstanceidKey = "resourceId"
12+
)
13+
14+
func init() {
15+
registerHandler(SqlServerNamespace, defaultHandlerEnabled, NewSqlServerHandler)
16+
}
17+
18+
type sqlServerHandler struct {
19+
baseProductHandler
20+
}
21+
22+
func (h *sqlServerHandler) IsMetricMetaVaild(meta *metric.TcmMeta) bool {
23+
return true
24+
}
25+
26+
func (h *sqlServerHandler) GetNamespace() string {
27+
return SqlServerNamespace
28+
}
29+
30+
func (h *sqlServerHandler) IsMetricVaild(m *metric.TcmMetric) bool {
31+
return true
32+
}
33+
34+
func NewSqlServerHandler(c *TcProductCollector, logger log.Logger) (handler ProductHandler, err error) {
35+
handler = &sqlServerHandler{
36+
baseProductHandler{
37+
monitorQueryKey: SqlServerInstanceidKey,
38+
collector: c,
39+
logger: logger,
40+
},
41+
}
42+
return
43+
}

pkg/config/config.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,7 @@ var (
4545
"cos": "QCE/COS",
4646
"cdn": "QCE/CDN",
4747
"cbs": "QCE/BLOCK_STORAGE",
48+
"sqlserver": "QCE/SQLSERVER",
4849
}
4950

5051
SupportStatisticsTypes = map[string]bool{

pkg/instance/instance_sqlserver.go

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
package instance
2+
3+
import (
4+
"fmt"
5+
"reflect"
6+
7+
sdk "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/sqlserver/v20180328"
8+
)
9+
10+
type SqlServerTcInstance struct {
11+
baseTcInstance
12+
meta *sdk.DBInstance
13+
}
14+
15+
func (ins *SqlServerTcInstance) GetMeta() interface{} {
16+
return ins.meta
17+
}
18+
19+
func NewSqlServerTcInstance(instanceId string, meta *sdk.DBInstance) (ins *SqlServerTcInstance, err error) {
20+
if instanceId == "" {
21+
return nil, fmt.Errorf("instanceId is empty ")
22+
}
23+
if meta == nil {
24+
return nil, fmt.Errorf("meta is empty ")
25+
}
26+
ins = &SqlServerTcInstance{
27+
baseTcInstance: baseTcInstance{
28+
instanceId: instanceId,
29+
value: reflect.ValueOf(*meta),
30+
},
31+
meta: meta,
32+
}
33+
return
34+
}
Lines changed: 93 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,93 @@
1+
package instance
2+
3+
import (
4+
"fmt"
5+
6+
"github.com/go-kit/kit/log"
7+
"github.com/go-kit/kit/log/level"
8+
sdk "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/sqlserver/v20180328"
9+
10+
"github.com/tencentyun/tencentcloud-exporter/pkg/client"
11+
"github.com/tencentyun/tencentcloud-exporter/pkg/config"
12+
)
13+
14+
func init() {
15+
registerRepository("QCE/SQLSERVER", NewSqlServerTcInstanceRepository)
16+
}
17+
18+
type SqlServerTcInstanceRepository struct {
19+
client *sdk.Client
20+
logger log.Logger
21+
}
22+
23+
func (repo *SqlServerTcInstanceRepository) GetInstanceKey() string {
24+
return "InstanceId"
25+
}
26+
27+
func (repo *SqlServerTcInstanceRepository) Get(id string) (instance TcInstance, err error) {
28+
req := sdk.NewDescribeDBInstancesRequest()
29+
req.InstanceIdSet = []*string{&id}
30+
resp, err := repo.client.DescribeDBInstances(req)
31+
if err != nil {
32+
return
33+
}
34+
if len(resp.Response.DBInstances) != 1 {
35+
return nil, fmt.Errorf("Response instanceDetails size != 1, id=%s ", id)
36+
}
37+
meta := resp.Response.DBInstances[0]
38+
instance, err = NewSqlServerTcInstance(id, meta)
39+
if err != nil {
40+
return
41+
}
42+
return
43+
}
44+
45+
func (repo *SqlServerTcInstanceRepository) ListByIds(id []string) (instances []TcInstance, err error) {
46+
return
47+
}
48+
49+
func (repo *SqlServerTcInstanceRepository) ListByFilters(filters map[string]string) (instances []TcInstance, err error) {
50+
req := sdk.NewDescribeDBInstancesRequest()
51+
var offset int64 = 0
52+
var limit int64 = 100
53+
var total int64 = -1
54+
55+
req.Offset = &offset
56+
req.Limit = &limit
57+
58+
getMoreInstances:
59+
resp, err := repo.client.DescribeDBInstances(req)
60+
if err != nil {
61+
return
62+
}
63+
if total == -1 {
64+
total = *resp.Response.TotalCount
65+
}
66+
for _, meta := range resp.Response.DBInstances {
67+
ins, e := NewSqlServerTcInstance(*meta.InstanceId, meta)
68+
if e != nil {
69+
level.Error(repo.logger).Log("msg", "Create cdb instance fail", "id", *meta.InstanceId)
70+
continue
71+
}
72+
instances = append(instances, ins)
73+
}
74+
offset += limit
75+
if offset < total {
76+
req.Offset = &offset
77+
goto getMoreInstances
78+
}
79+
80+
return
81+
}
82+
83+
func NewSqlServerTcInstanceRepository(c *config.TencentConfig, logger log.Logger) (repo TcInstanceRepository, err error) {
84+
cli, err := client.NewSqlServerClient(c)
85+
if err != nil {
86+
return
87+
}
88+
repo = &SqlServerTcInstanceRepository{
89+
client: cli,
90+
logger: logger,
91+
}
92+
return
93+
}

0 commit comments

Comments
 (0)