Zabbix Server 4.0.2 Python 3.6.8 Centos 7.8 from aliyunsdkcore import client from aliyunsdkrds.request.v20140815 import DescribeResourceUsageRequest, DescribeDBInstancePerformanceRequest from aliyunsdkrds.request.v20140815.DescribeDBInstanceAttributeRequest import DescribeDBInstanceAttributeRequest import json, sys, datetime ##资源属性 '''RDS的资源属性,cpu(DBInstanceCPU),内存(DBInstanceMemory), 数据库类型(Engine),版本(EngineVersion), 实例状态(DBInstanceStatus) 最大IOPS数(MaxIOPS) 最大连接数(MaxConnections) 数据库存储空间(DBInstanceStorage)创建时间等 ''' def GetResourceAttribute(DBInstancedId, Jk_key): ###查询rds的资源属性信息 RequestAttribute = DescribeDBInstanceAttributeRequest() ##设置返回数据格式,默认为XML RequestAttribute.set_accept_format('json') ##指定要查询的那一个RDS 实例 RequestAttribute.set_DBInstanceId(DBInstancedId) ResourceAttributeInfo = clt.do_action_with_exception(RequestAttribute) # print(ResourceAttributeInfo) Info = (json.loads(ResourceAttributeInfo))['Items']['DBInstanceAttribute'][0][Jk_key] print(Info) ##RDS的资源使用情况 ''' #日志占用空间 LogSize #数据库已使用的磁盘空间 DiskUsed #数据占用空间 DataSize #数据库备份大小 BackupSize ''' def GetResourceUsage(DBInstanceId, Jk_Key): # 查询rds的资源属使用 ResourceUsage = DescribeResourceUsageRequest.DescribeResourceUsageRequest() ResourceUsage.set_accept_format('json') # 指定要查询的那一个RDS 实例 ResourceUsage.set_DBInstanceId(DBInstanceId) ResourceUsageInfo = clt.do_action_with_exception(ResourceUsage) # print(ResourceUsageInfo) Info = (json.loads(ResourceUsageInfo))[Jk_Key] print(Info) ##查询RDS 实例 的性能信息 def GetPerformance(DBInstanceId,Jk_Key,IndexNum,StartTime,EndTime): Performance = DescribeDBInstancePerformanceRequest.DescribeDBInstancePerformanceRequest() Performance.set_accept_format('json') Performance.set_DBInstanceId(DBInstanceId) Performance.set_Key(Jk_Key) Performance.set_StartTime(StartTime) Performance.set_EndTime(EndTime) PerformanceInfo = clt.do_action_with_exception(Performance) #print(PerformanceInfo) Info = (json.loads(PerformanceInfo)) Value = Info['PerformanceKeys']['PerformanceKey'][0]['Values']['PerformanceValue'][-1]['Value'] print(str(Value).split('&')[IndexNum]) if __name__ == '__main__': Type = sys.argv[1] DBInstanceId = sys.argv[2] Jk_Key = sys.argv[3] AccessKey_ID = sys.argv[4] AccessKey_Secret = sys.argv[5] RegionId = 'cn-shanghai' # 阿里云返回的数据为UTC时间,因此要转换为东八区时间。其他时区同理。 UTC_End = datetime.datetime.today() - datetime.timedelta(hours=8) UTC_Start = UTC_End - datetime.timedelta(minutes=1) StartTime = datetime.datetime.strftime(UTC_Start, '%Y-%m-%dT%H:%MZ') EndTime = datetime.datetime.strftime(UTC_End, '%Y-%m-%dT%H:%MZ') clt = client.AcsClient(AccessKey_ID, AccessKey_Secret, RegionId) if (Type == 'Disk'): GetResourceUsage(DBInstanceId, Jk_Key) elif (Type == 'Attribute'): GetResourceAttribute(DBInstanceId,Jk_Key) elif (Type == 'Performance'): #SQL Server 引擎监控 # 平均每秒事务数 if (Jk_Key == 'SQLServer_Transactions'): GetPerformance(DBInstanceId, Jk_Key, 0,StartTime, EndTime) #平均每秒SQL语句执行次数 if (Jk_Key == 'SQLServer_QPS'): GetPerformance(DBInstanceId, Jk_Key, 0, StartTime, EndTime) ##缓存命中率 if (Jk_Key == 'SQLServer_BufferHit'): GetPerformance(DBInstanceId, Jk_Key, 0, StartTime, EndTime) ##每秒检查点写入Page数 if (Jk_Key == 'SQLServer_CheckPoint'): GetPerformance(DBInstanceId, Jk_Key, 0, StartTime, EndTime) #每秒登录次数 if (Jk_Key == 'SQLServer_Logins'): GetPerformance(DBInstanceId, Jk_Key, 0, StartTime, EndTime) #平均每秒全表扫描次数 if (Jk_Key == 'SQLServer_FullScans'): GetPerformance(DBInstanceId, Jk_Key, 0, StartTime, EndTime) ##每秒SQL编译 if (Jk_Key == 'SQLServer_SQLCompilations'): GetPerformance(DBInstanceId, Jk_Key, 0, StartTime, EndTime) ##每秒锁超时次数 if (Jk_Key == 'SQLServer_LockTimeout'): GetPerformance(DBInstanceId, Jk_Key, 0, StartTime, EndTime) #每秒死锁次数 if (Jk_Key == 'SQLServer_Deadlock'): GetPerformance(DBInstanceId, Jk_Key, 0, StartTime, EndTime) ##每秒锁等待次数 if (Jk_Key == 'SQLServer_LockWaits'): GetPerformance(DBInstanceId, Jk_Key, 0, StartTime, EndTime) ##SQL Server 资源监控 #MSSQL实例占用CPU使用率(占操作系统总数%) if (Jk_Key == 'SQLServer_InstanceCPUUsage'): GetPerformance(DBInstanceId, Jk_Key, 0, StartTime, EndTime) #MSSQL实例的IOPS(每秒IO请求次数) IOPS(单位:次/秒) if (Jk_Key == 'SQLServer_IOPS'): GetPerformance(DBInstanceId, Jk_Key, 0, StartTime, EndTime) #当前总连接数 if (Jk_Key == 'SQLServer_Sessions'): GetPerformance(DBInstanceId, Jk_Key, 0, StartTime, EndTime) #SQLServer实例平均每秒钟的输入流量。单位为KB if (Jk_Key == 'SQLServer_NetworkTraffic_IN'): GetPerformance(DBInstanceId, 'SQLServer_NetworkTraffic', 0, StartTime, EndTime) #SQLServer实例平均每秒钟的输出流量。单位为KB if (Jk_Key == 'SQLServer_NetworkTraffic_OUT'): GetPerformance(DBInstanceId, 'SQLServer_NetworkTraffic', 1, StartTime, EndTime) #########******######## 上传到脚本到zabbix服务器,或者zabbix proxy(如果你的服务器中间有代理的话) 创建监控rds sqlserver 的配置文件 cd /etc/zabbix/zabbix_agentd.d vi ali_rds_sqlserver.conf重启 zabbix-server 或者 zabbix-proxy systemctl restart zabbix-proxy 在要监控的阿里云RDS SQLServer 实例下面,添加白名单(zabbix server 或者zabbix proxy的IP)