增加阿里云、腾讯云的RDS资源同步

pull/42/head
StarsL.cn 2022-11-03 02:05:04 +08:00
parent d7070d875e
commit 484332b147
6 changed files with 138 additions and 15 deletions

View File

@ -15,10 +15,12 @@ huaweicloudsdkecs==3.1.5
huaweicloudsdkeps==3.1.5 huaweicloudsdkeps==3.1.5
huaweicloudsdkbss==3.1.5 huaweicloudsdkbss==3.1.5
huaweicloudsdkrds==3.1.5 huaweicloudsdkrds==3.1.5
alibabacloud_resourcemanager20200331==2.1.0 alibabacloud_resourcemanager20200331==2.1.1
alibabacloud_ecs20140526==2.1.0 alibabacloud_ecs20140526==2.1.1
alibabacloud_rds20140815==2.1.1
alibabacloud_bssopenapi20171214==2.0.5 alibabacloud_bssopenapi20171214==2.0.5
tencentcloud-sdk-python-common==3.0.607 tencentcloud-sdk-python-common==3.0.763
tencentcloud-sdk-python-cvm==3.0.607 tencentcloud-sdk-python-cvm==3.0.763
tencentcloud-sdk-python-dcdb==3.0.607 tencentcloud-sdk-python-cdb==3.0.763
tencentcloud-sdk-python-billing==3.0.607 tencentcloud-sdk-python-dcdb==3.0.763
tencentcloud-sdk-python-billing==3.0.763

View File

@ -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_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_resourcemanager20200331 import models as resource_manager_20200331_models
from alibabacloud_ecs20140526.client import Client as Ecs20140526Client from alibabacloud_ecs20140526.client import Client as Ecs20140526Client
from alibabacloud_ecs20140526 import models as ecs_20140526_models 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.client import Client as BssOpenApi20171214Client
from alibabacloud_bssopenapi20171214 import models as bss_open_api_20171214_models from alibabacloud_bssopenapi20171214 import models as bss_open_api_20171214_models
from alibabacloud_tea_util import models as util_models from alibabacloud_rds20140815.client import Client as Rds20140815Client
from alibabacloud_tea_util.client import Client as UtilClient from alibabacloud_rds20140815 import models as rds_20140815_models
import sys,datetime,hashlib import sys,datetime,hashlib
from units import consul_kv,consul_svc from units import consul_kv,consul_svc
from units.cloud import sync_ecs from units.cloud import sync_ecs
from units.cloud import sync_rds
from units.cloud import notify from units.cloud import notify
def exp(account,collect_days,notify_days,notify_amount): def exp(account,collect_days,notify_days,notify_amount):
@ -168,3 +172,64 @@ def ecs(account,region):
except Exception as e: except Exception as e:
data = {'count':'','update':f'失败','status':50000,'msg':str(e)} data = {'count':'','update':f'失败','status':50000,'msg':str(e)}
consul_kv.put_kv(f'ConsulManager/record/jobs/alicloud/{account}/ecs/{region}', data) 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)

View File

@ -9,7 +9,9 @@ import sys,datetime,hashlib
#import consul_kv,sync_ecs #import consul_kv,sync_ecs
from units import consul_kv from units import consul_kv
from units.cloud import sync_ecs from units.cloud import sync_ecs
from units.cloud import sync_rds
from units.cloud import notify from units.cloud import notify
def exp(account,collect_days,notify_days,notify_amount): def exp(account,collect_days,notify_days,notify_amount):
from tencentcloud.billing.v20180709 import billing_client, models from tencentcloud.billing.v20180709 import billing_client, models
ak,sk = consul_kv.get_aksk('tencent_cloud',account) ak,sk = consul_kv.get_aksk('tencent_cloud',account)
@ -161,3 +163,54 @@ def ecs(account,region):
except Exception as e: except Exception as e:
data = {'count':'','update':f'失败','status':50000,'msg':str(e)} data = {'count':'','update':f'失败','status':50000,'msg':str(e)}
consul_kv.put_kv(f'ConsulManager/record/jobs/tencent_cloud/{account}/ecs/{region}', data) 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)

View File

@ -46,7 +46,7 @@ Object.keys(filters).forEach(key => {
}) })
Vue.config.productionTip = false Vue.config.productionTip = false
Vue.prototype.VER = 'v0.9.1' Vue.prototype.VER = 'v0.9.2'
new Vue({ new Vue({
el: '#app', el: '#app',

View File

@ -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-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-badge>
<el-timeline> <el-timeline>
<el-timeline-item timestamp="2022/10/31" placement="top"> <el-timeline-item timestamp="2022/11/03" placement="top">
<el-card> <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="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>增加了MySQL的Grafana监控看板</p>
<p>增加了从Consul同步RDS到Prometheus的配置生成界面可生成Prometheus的配置</p> <p>增加了从Consul同步RDS到Prometheus的配置生成界面可生成Prometheus的配置</p>
<p>增加了RDS的Prometheus告警规则信息生成页面</p> <p>增加了RDS的Prometheus告警规则信息生成页面</p>

View File

@ -5,7 +5,8 @@
<el-col :span="12" :offset="6"> <el-col :span="12" :offset="6">
<el-card shadow="always" style="text-align: center"> <el-card shadow="always" style="text-align: center">
Grafana 看板详情 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-card>
</el-col> </el-col>
</el-row> </el-row>