增加阿里云、腾讯云的RDS资源同步
parent
d7070d875e
commit
484332b147
|
@ -15,10 +15,12 @@ huaweicloudsdkecs==3.1.5
|
|||
huaweicloudsdkeps==3.1.5
|
||||
huaweicloudsdkbss==3.1.5
|
||||
huaweicloudsdkrds==3.1.5
|
||||
alibabacloud_resourcemanager20200331==2.1.0
|
||||
alibabacloud_ecs20140526==2.1.0
|
||||
alibabacloud_resourcemanager20200331==2.1.1
|
||||
alibabacloud_ecs20140526==2.1.1
|
||||
alibabacloud_rds20140815==2.1.1
|
||||
alibabacloud_bssopenapi20171214==2.0.5
|
||||
tencentcloud-sdk-python-common==3.0.607
|
||||
tencentcloud-sdk-python-cvm==3.0.607
|
||||
tencentcloud-sdk-python-dcdb==3.0.607
|
||||
tencentcloud-sdk-python-billing==3.0.607
|
||||
tencentcloud-sdk-python-common==3.0.763
|
||||
tencentcloud-sdk-python-cvm==3.0.763
|
||||
tencentcloud-sdk-python-cdb==3.0.763
|
||||
tencentcloud-sdk-python-dcdb==3.0.763
|
||||
tencentcloud-sdk-python-billing==3.0.763
|
||||
|
|
|
@ -1,17 +1,21 @@
|
|||
from alibabacloud_resourcemanager20200331.client import Client as ResourceManager20200331Client
|
||||
from Tea.exceptions import TeaException
|
||||
from alibabacloud_tea_openapi import models as open_api_models
|
||||
from alibabacloud_tea_util import models as util_models
|
||||
from alibabacloud_tea_util.client import Client as UtilClient
|
||||
|
||||
from alibabacloud_resourcemanager20200331.client import Client as ResourceManager20200331Client
|
||||
from alibabacloud_resourcemanager20200331 import models as resource_manager_20200331_models
|
||||
from alibabacloud_ecs20140526.client import Client as Ecs20140526Client
|
||||
from alibabacloud_ecs20140526 import models as ecs_20140526_models
|
||||
from Tea.exceptions import TeaException
|
||||
from alibabacloud_bssopenapi20171214.client import Client as BssOpenApi20171214Client
|
||||
from alibabacloud_bssopenapi20171214 import models as bss_open_api_20171214_models
|
||||
from alibabacloud_tea_util import models as util_models
|
||||
from alibabacloud_tea_util.client import Client as UtilClient
|
||||
from alibabacloud_rds20140815.client import Client as Rds20140815Client
|
||||
from alibabacloud_rds20140815 import models as rds_20140815_models
|
||||
|
||||
import sys,datetime,hashlib
|
||||
from units import consul_kv,consul_svc
|
||||
from units.cloud import sync_ecs
|
||||
from units.cloud import sync_rds
|
||||
from units.cloud import notify
|
||||
|
||||
def exp(account,collect_days,notify_days,notify_amount):
|
||||
|
@ -168,3 +172,64 @@ def ecs(account,region):
|
|||
except Exception as e:
|
||||
data = {'count':'无','update':f'失败','status':50000,'msg':str(e)}
|
||||
consul_kv.put_kv(f'ConsulManager/record/jobs/alicloud/{account}/ecs/{region}', data)
|
||||
|
||||
def rds(account,region):
|
||||
ak,sk = consul_kv.get_aksk('alicloud',account)
|
||||
now = datetime.datetime.now().strftime('%m.%d/%H:%M')
|
||||
group_dict = consul_kv.get_value(f'ConsulManager/assets/alicloud/group/{account}')
|
||||
|
||||
config = open_api_models.Config(access_key_id=ak,access_key_secret=sk)
|
||||
config.endpoint = 'rds.aliyuncs.com'
|
||||
client = Rds20140815Client(config)
|
||||
|
||||
try:
|
||||
runtime = util_models.RuntimeOptions()
|
||||
describe_dbinstances_request = rds_20140815_models.DescribeDBInstancesRequest(
|
||||
max_results=100,
|
||||
region_id=region
|
||||
)
|
||||
rdsbaseinfo = client.describe_dbinstances_with_options(describe_dbinstances_request, runtime)
|
||||
rdsbase_list = rdsbaseinfo.body.to_map()['Items']["DBInstance"]
|
||||
|
||||
|
||||
describe_dbinstances_as_csv_request = rds_20140815_models.DescribeDBInstancesAsCsvRequest(region_id=region)
|
||||
rdsplusinfo = client.describe_dbinstances_as_csv_with_options(describe_dbinstances_as_csv_request, runtime)
|
||||
rdsplus_list = rdsplusinfo.body.to_map()['Items']["DBInstanceAttribute"]
|
||||
|
||||
rds_dict = {i['DBInstanceId']:{'name':i['DBInstanceDescription'],
|
||||
'domain':i['ConnectionString'],
|
||||
'ip':i['ConnectionString'],
|
||||
'port':3306,
|
||||
'region':region,
|
||||
'group':group_dict.get(i['ResourceGroupId'],'无'),
|
||||
'status':i['DBInstanceStatus'],
|
||||
'itype':i['DBInstanceType'],
|
||||
'ver':i['EngineVersion'],
|
||||
'exp': '-' if i['ExpireTime'] == None else i['ExpireTime'].split('T')[0]
|
||||
} for i in rdsbase_list}
|
||||
|
||||
rds_plus = {i['DBInstanceId']:{'cpu':f"{i['DBInstanceCPU']}核",
|
||||
'mem':f"{round(i['DBInstanceMemory']/1024)}GB",
|
||||
'disk':f"{i['DBInstanceStorage']}GB"
|
||||
} for i in rdsplus_list}
|
||||
for k,v in rds_plus.items():
|
||||
rds_dict[k].update(v)
|
||||
|
||||
count = len(rds_dict)
|
||||
off,on = sync_rds.w2consul('alicloud',account,region,rds_dict)
|
||||
data = {'count':count,'update':now,'status':20000,'on':on,'off':off,'msg':f'rds同步成功!总数:{count},开机:{on},关机:{off}'}
|
||||
consul_kv.put_kv(f'ConsulManager/record/jobs/alicloud/{account}/rds/{region}', data)
|
||||
print('【JOB】===>', 'alicloud_rds', account,region, data, flush=True)
|
||||
except TeaException as e:
|
||||
emsg = e.message.split('. ',1)[0]
|
||||
print("【code:】",e.code,"\n【message:】",emsg, flush=True)
|
||||
data = consul_kv.get_value(f'ConsulManager/record/jobs/alicloud/{account}/rds/{region}')
|
||||
if data == {}:
|
||||
data = {'count':'无','update':f'失败{e.code}','status':50000,'msg':emsg}
|
||||
else:
|
||||
data['update'] = f'失败{e.code}'
|
||||
data['msg'] = emsg
|
||||
consul_kv.put_kv(f'ConsulManager/record/jobs/alicloud/{account}/rds/{region}', data)
|
||||
except Exception as e:
|
||||
data = {'count':'无','update':f'失败','status':50000,'msg':str(e)}
|
||||
consul_kv.put_kv(f'ConsulManager/record/jobs/alicloud/{account}/rds/{region}', data)
|
||||
|
|
|
@ -9,7 +9,9 @@ import sys,datetime,hashlib
|
|||
#import consul_kv,sync_ecs
|
||||
from units import consul_kv
|
||||
from units.cloud import sync_ecs
|
||||
from units.cloud import sync_rds
|
||||
from units.cloud import notify
|
||||
|
||||
def exp(account,collect_days,notify_days,notify_amount):
|
||||
from tencentcloud.billing.v20180709 import billing_client, models
|
||||
ak,sk = consul_kv.get_aksk('tencent_cloud',account)
|
||||
|
@ -161,3 +163,54 @@ def ecs(account,region):
|
|||
except Exception as e:
|
||||
data = {'count':'无','update':f'失败','status':50000,'msg':str(e)}
|
||||
consul_kv.put_kv(f'ConsulManager/record/jobs/tencent_cloud/{account}/ecs/{region}', data)
|
||||
|
||||
def rds(account,region):
|
||||
from tencentcloud.cdb.v20170320 import cdb_client, models
|
||||
ak,sk = consul_kv.get_aksk('tencent_cloud',account)
|
||||
now = datetime.datetime.now().strftime('%m.%d/%H:%M')
|
||||
group_dict = consul_kv.get_value(f'ConsulManager/assets/tencent_cloud/group/{account}')
|
||||
try:
|
||||
cred = credential.Credential(ak, sk)
|
||||
httpProfile = HttpProfile()
|
||||
httpProfile.endpoint = "cdb.tencentcloudapi.com"
|
||||
|
||||
clientProfile = ClientProfile()
|
||||
clientProfile.httpProfile = httpProfile
|
||||
client = cdb_client.CdbClient(cred, region, clientProfile)
|
||||
req = models.DescribeDBInstancesRequest()
|
||||
params = {"Limit": 2000}
|
||||
req.from_json_string(json.dumps(params))
|
||||
resp = client.DescribeDBInstances(req)
|
||||
rds_list = resp.Items
|
||||
total = resp.TotalCount
|
||||
rds_dict = {i.InstanceId:{'name':i.InstanceName,
|
||||
'domain':i.Vip,
|
||||
'ip':i.Vip,
|
||||
'port':i.Vport,
|
||||
'region':region,
|
||||
'group':group_dict.get(str(i.ProjectId),'无'),
|
||||
'status': '运行中' if i.Status == 1 else '非运行中',
|
||||
'itype':{1:'主实例',2:'灾备实例',3:'只读实例'}[i.InstanceType],
|
||||
'ver':i.EngineVersion,
|
||||
'exp': '-' if i.DeadlineTime == "0000-00-00 00:00:00" else i.DeadlineTime.split(' ')[0],
|
||||
'cpu':f"{i.Cpu}核",
|
||||
'mem':f"{round(i.Memory/1024)}GB",
|
||||
'disk':f"{i.Volume}GB"
|
||||
} for i in rds_list}
|
||||
count = len(rds_dict)
|
||||
off,on = sync_rds.w2consul('tencent_cloud',account,region,rds_dict)
|
||||
data = {'count':count,'update':now,'status':20000,'on':on,'off':off,'msg':f'rds同步成功!总数:{count},开机:{on},关机:{off}'}
|
||||
consul_kv.put_kv(f'ConsulManager/record/jobs/tencent_cloud/{account}/rds/{region}', data)
|
||||
print('【JOB】===>', 'tencent_cloud_rds', account,region, data, flush=True)
|
||||
except TencentCloudSDKException as err:
|
||||
print(err, flush=True)
|
||||
data = consul_kv.get_value(f'ConsulManager/record/jobs/tencent_cloud/{account}/rds/{region}')
|
||||
if data == {}:
|
||||
data = {'count':'无','update':f'失败','status':50000,'msg':str(err)}
|
||||
else:
|
||||
data['update'] = f'失败'
|
||||
data['msg'] = str(err)
|
||||
consul_kv.put_kv(f'ConsulManager/record/jobs/tencent_cloud/{account}/rds/{region}', data)
|
||||
except Exception as e:
|
||||
data = {'count':'无','update':f'失败','status':50000,'msg':str(e)}
|
||||
consul_kv.put_kv(f'ConsulManager/record/jobs/tencent_cloud/{account}/rds/{region}', data)
|
||||
|
|
|
@ -46,7 +46,7 @@ Object.keys(filters).forEach(key => {
|
|||
})
|
||||
|
||||
Vue.config.productionTip = false
|
||||
Vue.prototype.VER = 'v0.9.1'
|
||||
Vue.prototype.VER = 'v0.9.2'
|
||||
|
||||
new Vue({
|
||||
el: '#app',
|
||||
|
|
|
@ -4,11 +4,13 @@
|
|||
<el-link :underline="false" type="primary" icon="el-icon-star-on" href="https://github.com/starsliao/ConsulManager" target="_blank" class="dashboard-text">StarsL.cn</el-link>
|
||||
</el-badge>
|
||||
<el-timeline>
|
||||
<el-timeline-item timestamp="2022/10/31" placement="top">
|
||||
<el-timeline-item timestamp="2022/11/03" placement="top">
|
||||
<el-card>
|
||||
<h4>v0.9.0</h4>
|
||||
<h4>v0.9.2</h4>
|
||||
<p><el-button type="warning" size="mini" icon="el-icon-star-off" circle />镜像存储更换到华为云,请查看仓库根目录下的<el-link href="https://github.com/starsliao/ConsulManager/blob/main/docker-compose.yml" target="_blank">docker-compose.yml</el-link>,更新您的镜像地址。</p>
|
||||
<p><el-button type="success" size="mini" icon="el-icon-star-off" circle />增加RDS云数据库监控接入:支持同步华为云的RDS信息到Consul并接入到Prometheus监控!</p>
|
||||
<p><el-button type="success" size="mini" icon="el-icon-star-off" circle />增加RDS云数据库监控接入:支持同步华为云、阿里云、腾讯云的RDS信息到Consul并接入到Prometheus监控!</p>
|
||||
<p>更新了阿里云、华为云、腾讯云的SDK。</p>
|
||||
<p>优化了菜单展示,资源分类更加直观。</p>
|
||||
<p>增加了MySQL的Grafana监控看板。</p>
|
||||
<p>增加了从Consul同步RDS到Prometheus的配置生成界面,可生成Prometheus的配置。</p>
|
||||
<p>增加了RDS的Prometheus告警规则信息生成页面。</p>
|
||||
|
|
|
@ -5,7 +5,8 @@
|
|||
<el-col :span="12" :offset="6">
|
||||
<el-card shadow="always" style="text-align: center">
|
||||
Grafana 看板详情:
|
||||
<el-link href="https://github.com/starsliao/ConsulManager/blob/main/docs/%E5%A6%82%E4%BD%95%E4%BC%98%E9%9B%85%E7%9A%84%E4%BD%BF%E7%94%A8%E4%B8%80%E4%B8%AAmysqld_exporter%E7%9B%91%E6%8E%A7%E6%89%80%E6%9C%89%E7%9A%84MySQL%E5%AE%9E%E4%BE%8B.md" target="_blank" type="primary">如何优雅的使用一个mysqld_exporter监控所有的MySQL实例</el-link><br><br>
|
||||
<el-link href="https://grafana.com/grafana/dashboards/17320" target="_blank" type="primary">https://grafana.com/grafana/dashboards/17320</el-link><br><br>
|
||||
Grafana 看板ID:<strong>17320</strong>
|
||||
</el-card>
|
||||
</el-col>
|
||||
</el-row>
|
||||
|
|
Loading…
Reference in New Issue