C#接入阿里云ECSAPI实现系统服务器运维

1.前言

最近在做服务的运维,之前有说过如何对服务器上的程序进程进行管理,参考《C#对接supervisor XML-RPC API 实现进程控制》,今天说一下如何对接阿里云的ECS实现系统对服务器的控制,完善系统自运维的服务。

2.阿里云SDK的对接

2.1.添加SDK包

在NuGet的面板找到AlibabaCloud的程序库,进行安装

 2.2.实现一个SDK对接的封装类

public class AlibabaCloudSDK
    {
        /**
         * 使用AK&SK初始化账号Client
         * @param accessKeyId
         * @param accessKeySecret
         * @return Client
         * @throws Exception
         */
        public static AlibabaCloud.SDK.Cms20190101.Client CreateClient(string accessKeyId, string accessKeySecret,string url)
        {
            AlibabaCloud.OpenApiClient.Models.Config config = new AlibabaCloud.OpenApiClient.Models.Config
            {
                // 您的AccessKey ID
                AccessKeyId = accessKeyId,
                // 您的AccessKey Secret
                AccessKeySecret = accessKeySecret,
            };
            // 访问的域名
            config.Endpoint = url;
            return new AlibabaCloud.SDK.Cms20190101.Client(config);
        }

        /// <summary>
        /// 接口公共方法封装
        /// </summary>
        /// <param name="url"></param>
        /// <param name="metricName"></param>
        /// <param name="period"></param>
        /// <param name="startTime"></param>
        /// <param name="endTime"></param>
        /// <param name="dimensions"></param>
        /// <returns></returns>
        public static string describeMetricLast(string url,string metricName,string period,string startTime,string endTime,string dimensions)
        {
            AlibabaCloud.SDK.Cms20190101.Client client = CreateClient(AliyunContant.ACCESS_KEY_ID, AliyunContant.ACCESS_KEY_SECRET, url);
            AlibabaCloud.SDK.Cms20190101.Models.DescribeMetricListRequest describeMetricListRequest = new AlibabaCloud.SDK.Cms20190101.Models.DescribeMetricListRequest
            {
                Namespace = "acs_ecs_dashboard",
                MetricName = metricName,
                Period = period,
                StartTime = startTime,
                EndTime = endTime,
                Dimensions = dimensions
            };
            AlibabaCloud.SDK.Cms20190101.Models.DescribeMetricListResponse resp = client.DescribeMetricList(describeMetricListRequest);
            return AlibabaCloud.TeaUtil.Common.ToJSONString(resp);
        }

        /// <summary>
        /// 接口公共方法封装
        /// </summary>
        /// <param name="url"></param>
        /// <param name="metricName"></param>
        /// <param name="period"></param>
        /// <param name="dimensions"></param>
        /// <returns></returns>
        public static string describeMetricLast(string url, string metricName, int period, string dimensions)
        {
            DateTime startTime = DateTime.UtcNow;
            DateTime endTime = DateTime.UtcNow;
            if (period == 15)
            {
                startTime = endTime.AddMinutes(-15);
            }
            else {
                startTime = endTime.AddHours(-1.5);
            }
            AlibabaCloud.SDK.Cms20190101.Client client = CreateClient(AliyunContant.ACCESS_KEY_ID, AliyunContant.ACCESS_KEY_SECRET, url);
            AlibabaCloud.SDK.Cms20190101.Models.DescribeMetricLastRequest describeMetricLastRequest = new AlibabaCloud.SDK.Cms20190101.Models.DescribeMetricLastRequest
            {
                Namespace = "acs_ecs_dashboard",
                MetricName = metricName,
                Period = period.ToString(),
                StartTime = startTime.ToString("yyyy-MM-ddTHH:mm:ssZ"),
                EndTime = endTime.ToString("yyyy-MM-ddTHH:mm:ssZ"),
                Dimensions = dimensions
            };
            AlibabaCloud.SDK.Cms20190101.Models.DescribeMetricLastResponse resp = client.DescribeMetricLast(describeMetricLastRequest);
            return AlibabaCloud.TeaUtil.Common.ToJSONString(resp.Body);
        }

        /// <summary>
        /// 报警汇总方法
        /// </summary>
        /// <param name="url"></param>
        /// <param name="startTime"></param>
        /// <param name="endTime"></param>
        /// <returns></returns>
        public static string describeAlertLogCount(string url, long startTime, long endTime)
        {
            AlibabaCloud.SDK.Cms20190101.Client client = CreateClient(AliyunContant.ACCESS_KEY_ID, AliyunContant.ACCESS_KEY_SECRET, url);
            AlibabaCloud.SDK.Cms20190101.Models.DescribeAlertLogCountRequest describeAlertLogCountRequest = new AlibabaCloud.SDK.Cms20190101.Models.DescribeAlertLogCountRequest
            {
                Namespace = "acs_ecs_dashboard",
                GroupBy = "product,metricName",
                StartTime = startTime,
                EndTime = endTime,
                Product = "ECS"
            };
            AlibabaCloud.SDK.Cms20190101.Models.DescribeAlertLogCountResponse resp = client.DescribeAlertLogCount(describeAlertLogCountRequest);
            return AlibabaCloud.TeaUtil.Common.ToJSONString(resp);
        }

        /// <summary>
        /// 按照云服务和监控项统计报警历史
        /// </summary>
        /// <param name="url"></param>
        /// <param name="startTime"></param>
        /// <param name="endTime"></param>
        /// <returns></returns>
        public static string describeAlertLogList(string url, long startTime, long endTime)
        {
            AlibabaCloud.SDK.Cms20190101.Client client = CreateClient(AliyunContant.ACCESS_KEY_ID, AliyunContant.ACCESS_KEY_SECRET, url);
            AlibabaCloud.SDK.Cms20190101.Models.DescribeAlertLogListRequest describeAlertLogListRequest = new AlibabaCloud.SDK.Cms20190101.Models.DescribeAlertLogListRequest
            {
                Namespace = "acs_ecs_dashboard",
                StartTime = startTime,
                EndTime = endTime,
                Product = "ECS"
            };
            AlibabaCloud.SDK.Cms20190101.Models.DescribeAlertLogListResponse resp = client.DescribeAlertLogList(describeAlertLogListRequest);
            return AlibabaCloud.TeaUtil.Common.ToJSONString(resp);
        }


        /**
        * 使用AK&SK初始化账号Client
        * @param accessKeyId
        * @param accessKeySecret
        * @return Client
        * @throws Exception
        */
        public static AlibabaCloud.SDK.Ecs20140526.Client CreateECSClient(string accessKeyId, string accessKeySecret)
        {
            AlibabaCloud.OpenApiClient.Models.Config config = new AlibabaCloud.OpenApiClient.Models.Config
            {
                // 您的AccessKey ID
                AccessKeyId = accessKeyId,
                // 您的AccessKey Secret
                AccessKeySecret = accessKeySecret,
            };
            // 访问的域名
            config.Endpoint = "ecs.aliyuncs.com";
            return new AlibabaCloud.SDK.Ecs20140526.Client(config);
        }

        /// <summary>
        /// 查询ECS实例详情
        /// </summary>
        /// <param name="url"></param>
        /// <param name="regionId"></param>
        /// <param name="instanceIds"></param>
        /// <returns></returns>
        public static string describeInstances(string regionId,string instanceIds)
        {
            AlibabaCloud.SDK.Ecs20140526.Client client = CreateECSClient(AliyunContant.ACCESS_KEY_ID, AliyunContant.ACCESS_KEY_SECRET);
            AlibabaCloud.SDK.Ecs20140526.Models.DescribeInstancesRequest describeInstancesRequest = new AlibabaCloud.SDK.Ecs20140526.Models.DescribeInstancesRequest
            {
                RegionId = regionId,
                InstanceIds = instanceIds
            };
            AlibabaCloud.SDK.Ecs20140526.Models.DescribeInstancesResponse resp = client.DescribeInstances(describeInstancesRequest);
            return AlibabaCloud.TeaUtil.Common.ToJSONString(resp);
        }
    }

 可以根据需要将对ECS的操作方法封装成一个公共类

3.编写实现方法对接口提供操作实现类

public class CloudMonitor
    {
        /// <summary>
        /// 获取一个ECS的详细信息
        /// </summary>
        /// <param name="url">监控地址</param>
        /// <param name="regionId">区域ID</param>
        /// <param name="instanceIds">实例IDs</param>
        /// <returns></returns>
        public string getDescribeInstances(string regionId, string instanceIds)
        {
            List<string> instanceIdList = instanceIds.Split(',').ToList<string>();
            string jsonInstanceIds = JsonConvert.SerializeObject(instanceIdList);
            return AlibabaCloudSDK.describeInstances(regionId, jsonInstanceIds);
        }

        #region 基础监控项目
        /// <summary>
        /// 实例云盘读BPS(Byte/s)
        /// </summary>
        /// <param name="url"></param>
        /// <param name="instanceId"></param>
        /// <param name="nameSpace"></param>
        /// <param name="period">默认60,可取60的整数倍</param>
        /// <param name="startTime"></param>
        /// <param name="endTime"></param>
        /// <returns></returns>
        public string getDiskReadBPS(string url, string instanceId, int period, DateTime startTime, DateTime endTime)
        {
            Dictionary<string, string> dicDimensions = new Dictionary<string, string>();
            dicDimensions.Add("instanceId", instanceId);
            string dimensions = JsonConvert.SerializeObject(dicDimensions);
            return  AlibabaCloudSDK.describeMetricLast(url, "DiskReadBPS", period.ToString(),
                General.Instance.GetTimeStamp(startTime).ToString(), General.Instance.GetTimeStamp(endTime).ToString(), dimensions);
        }

        /// <summary>
        /// 实例云盘写BPS(Byte/s)
        /// </summary>
        /// <param name="url"></param>
        /// <param name="instanceId"></param>
        /// <param name="nameSpace"></param>
        /// <param name="period">默认60,可取60的整数倍</param>
        /// <param name="startTime"></param>
        /// <param name="endTime"></param>
        /// <returns></returns>
        public string getDiskWriteBPS(string url, string instanceId, int period, DateTime startTime, DateTime endTime)
        {
            Dictionary<string, string> dicDimensions = new Dictionary<string, string>();
            dicDimensions.Add("instanceId", instanceId);
            string dimensions = JsonConvert.SerializeObject(dicDimensions);
            return AlibabaCloudSDK.describeMetricLast(url, "DiskWriteBPS", period.ToString(),
                General.Instance.GetTimeStamp(startTime).ToString(), General.Instance.GetTimeStamp(endTime).ToString(), dimensions);
        }

        /// <summary>
        /// 实例云盘读IOPS(次/s)
        /// </summary>
        /// <param name="url"></param>
        /// <param name="instanceId"></param>
        /// <param name="nameSpace"></param>
        /// <param name="period">默认60,可取60的整数倍</param>
        /// <param name="startTime"></param>
        /// <param name="endTime"></param>
        /// <returns></returns>
        public string getDiskReadIOPS(string url, string instanceId, int period, DateTime startTime, DateTime endTime)
        {
            Dictionary<string, string> dicDimensions = new Dictionary<string, string>();
            dicDimensions.Add("instanceId", instanceId);
            string dimensions = JsonConvert.SerializeObject(dicDimensions);
            return AlibabaCloudSDK.describeMetricLast(url, "DiskReadIOPS", period.ToString(),
                General.Instance.GetTimeStamp(startTime).ToString(), General.Instance.GetTimeStamp(endTime).ToString(), dimensions);
        }

        /// <summary>
        /// 实例云盘写IOPS(次/s)
        /// </summary>
        /// <param name="url"></param>
        /// <param name="instanceId"></param>
        /// <param name="nameSpace"></param>
        /// <param name="period">默认60,可取60的整数倍</param>
        /// <param name="startTime"></param>
        /// <param name="endTime"></param>
        /// <returns></returns>
        public string getDiskWriteIOPS(string url, string instanceId, int period, DateTime startTime, DateTime endTime)
        {
            Dictionary<string, string> dicDimensions = new Dictionary<string, string>();
            dicDimensions.Add("instanceId", instanceId);
            string dimensions = JsonConvert.SerializeObject(dicDimensions);
            return AlibabaCloudSDK.describeMetricLast(url, "DiskWriteIOPS", period.ToString(),
                General.Instance.GetTimeStamp(startTime).ToString(), General.Instance.GetTimeStamp(endTime).ToString(), dimensions);
        }

        /// <summary>
        /// 经典网络-公网流入带宽
        /// </summary>
        /// <param name="url"></param>
        /// <param name="instanceId"></param>
        /// <param name="nameSpace"></param>
        /// <param name="period">默认60,可取60的整数倍</param>
        /// <param name="startTime"></param>
        /// <param name="endTime"></param>
        /// <returns></returns>
        public string getInternetInRate(string url, string instanceId, int period, DateTime startTime, DateTime endTime)
        {
            Dictionary<string, string> dicDimensions = new Dictionary<string, string>();
            dicDimensions.Add("instanceId", instanceId);
            string dimensions = JsonConvert.SerializeObject(dicDimensions);
            return AlibabaCloudSDK.describeMetricLast(url, "InternetInRate", period.ToString(),
                General.Instance.GetTimeStamp(startTime).ToString(), General.Instance.GetTimeStamp(endTime).ToString(), dimensions);
        }

        /// <summary>
        /// 经典网络-公网流出带宽
        /// </summary>
        /// <param name="url"></param>
        /// <param name="instanceId"></param>
        /// <param name="nameSpace"></param>
        /// <param name="period">默认60,可取60的整数倍</param>
        /// <param name="startTime"></param>
        /// <param name="endTime"></param>
        /// <returns></returns>
        public string getInternetOutRate(string url, string instanceId, int period, DateTime startTime, DateTime endTime)
        {
            Dictionary<string, string> dicDimensions = new Dictionary<string, string>();
            dicDimensions.Add("instanceId", instanceId);
            string dimensions = JsonConvert.SerializeObject(dicDimensions);
            return AlibabaCloudSDK.describeMetricLast(url, "InternetOutRate", period.ToString(),
                General.Instance.GetTimeStamp(startTime).ToString(), General.Instance.GetTimeStamp(endTime).ToString(), dimensions);
        }

        /// <summary>
        /// 经典网络-公网流出带宽使用率
        /// </summary>
        /// <param name="url"></param>
        /// <param name="instanceId"></param>
        /// <param name="nameSpace"></param>
        /// <param name="period">默认60,可取60的整数倍</param>
        /// <param name="startTime"></param>
        /// <param name="endTime"></param>
        /// <returns></returns>
        public string getInternetOutRatePercent(string url, string instanceId, int period, DateTime startTime, DateTime endTime)
        {
            Dictionary<string, string> dicDimensions = new Dictionary<string, string>();
            dicDimensions.Add("instanceId", instanceId);
            string dimensions = JsonConvert.SerializeObject(dicDimensions);
            return AlibabaCloudSDK.describeMetricLast(url, "InternetOutRate_Percent", period.ToString(),
                General.Instance.GetTimeStamp(startTime).ToString(), General.Instance.GetTimeStamp(endTime).ToString(), dimensions);
        }

        /// <summary>
        /// 内网流入流量
        /// </summary>
        /// <param name="url"></param>
        /// <param name="instanceId"></param>
        /// <param name="nameSpace"></param>
        /// <param name="period">默认60,可取60的整数倍</param>
        /// <param name="startTime"></param>
        /// <param name="endTime"></param>
        /// <returns></returns>
        public string getIntranetInRate(string url, string instanceId, int period, DateTime startTime, DateTime endTime)
        {
            Dictionary<string, string> dicDimensions = new Dictionary<string, string>();
            dicDimensions.Add("instanceId", instanceId);
            string dimensions = JsonConvert.SerializeObject(dicDimensions);
            return AlibabaCloudSDK.describeMetricLast(url, "IntranetInRate", period.ToString(),
                General.Instance.GetTimeStamp(startTime).ToString(), General.Instance.GetTimeStamp(endTime).ToString(), dimensions);
        }

        /// <summary>
        /// 内网流出流量
        /// </summary>
        /// <param name="url"></param>
        /// <param name="instanceId"></param>
        /// <param name="nameSpace"></param>
        /// <param name="period">默认60,可取60的整数倍</param>
        /// <param name="startTime"></param>
        /// <param name="endTime"></param>
        /// <returns></returns>
        public string getIntranetOutRate(string url, string instanceId, int period, DateTime startTime, DateTime endTime)
        {
            Dictionary<string, string> dicDimensions = new Dictionary<string, string>();
            dicDimensions.Add("instanceId", instanceId);
            string dimensions = JsonConvert.SerializeObject(dicDimensions);
            return AlibabaCloudSDK.describeMetricLast(url, "IntranetOutRate", period.ToString(),
                General.Instance.GetTimeStamp(startTime).ToString(), General.Instance.GetTimeStamp(endTime).ToString(), dimensions);
        }
        
        /// <summary>
        /// 专有网络-公网流入带宽
        /// </summary>
        /// <param name="url"></param>
        /// <param name="instanceId"></param>
        /// <param name="nameSpace"></param>
        /// <param name="period">默认60,可取60的整数倍</param>
        /// <param name="startTime"></param>
        /// <param name="endTime"></param>
        /// <returns></returns>
        public string getVPCPublicIPInternetInRate(string url, string instanceId, int period, DateTime startTime, DateTime endTime)
        {
            Dictionary<string, string> dicDimensions = new Dictionary<string, string>();
            dicDimensions.Add("instanceId", instanceId);
            string dimensions = JsonConvert.SerializeObject(dicDimensions);
            return AlibabaCloudSDK.describeMetricLast(url, "VPC_PublicIP_InternetInRate", period.ToString(),
                General.Instance.GetTimeStamp(startTime).ToString(), General.Instance.GetTimeStamp(endTime).ToString(), dimensions);
        }

        /// <summary>
        /// 专有网络-公网流出带宽
        /// </summary>
        /// <param name="url"></param>
        /// <param name="instanceId"></param>
        /// <param name="nameSpace"></param>
        /// <param name="period">默认60,可取60的整数倍</param>
        /// <param name="startTime"></param>
        /// <param name="endTime"></param>
        /// <returns></returns>
        public string getVPCPublicIPInternetOutRate(string url, string instanceId, int period, DateTime startTime, DateTime endTime)
        {
            Dictionary<string, string> dicDimensions = new Dictionary<string, string>();
            dicDimensions.Add("instanceId", instanceId);
            string dimensions = JsonConvert.SerializeObject(dicDimensions);
            return AlibabaCloudSDK.describeMetricLast(url, "VPC_PublicIP_InternetOutRate", period.ToString(),
                General.Instance.GetTimeStamp(startTime).ToString(), General.Instance.GetTimeStamp(endTime).ToString(), dimensions);
        }

        /// <summary>
        /// 专有网络-公网流出带宽使用率
        /// </summary>
        /// <param name="url"></param>
        /// <param name="instanceId"></param>
        /// <param name="nameSpace"></param>
        /// <param name="period">默认60,可取60的整数倍</param>
        /// <param name="startTime"></param>
        /// <param name="endTime"></param>
        /// <returns></returns>
        public string getVPCPublicIPInternetOutRatePercent(string url, string instanceId, int period, DateTime startTime, DateTime endTime)
        {
            Dictionary<string, string> dicDimensions = new Dictionary<string, string>();
            dicDimensions.Add("instanceId", instanceId);
            string dimensions = JsonConvert.SerializeObject(dicDimensions);
            return AlibabaCloudSDK.describeMetricLast(url, "VPC_PublicIP_InternetOutRate_Percent", period.ToString(),
                General.Instance.GetTimeStamp(startTime).ToString(), General.Instance.GetTimeStamp(endTime).ToString(), dimensions);
        }

        /// <summary>
        /// 获取当前的连接数量
        /// </summary>
        /// <param name="url"></param>
        /// <param name="instanceId"></param>
        /// <param name="nameSpace"></param>
        /// <param name="period">默认60,可取60的整数倍</param>
        /// <param name="startTime"></param>
        /// <param name="endTime"></param>
        /// <returns></returns>
        public string getConcurrentConnections(string url, string instanceId, int period, DateTime startTime, DateTime endTime)
        {
            Dictionary<string, string> dicDimensions = new Dictionary<string, string>();
            dicDimensions.Add("instanceId", instanceId);
            string dimensions = JsonConvert.SerializeObject(dicDimensions);
            return AlibabaCloudSDK.describeMetricLast(url, "concurrentConnections", period.ToString(),
                General.Instance.GetTimeStamp(startTime).ToString(), General.Instance.GetTimeStamp(endTime).ToString(), dimensions);
        }

        /// <summary>
        /// 入方向前后端丢包率
        /// </summary>
        /// <param name="url"></param>
        /// <param name="instanceId"></param>
        /// <param name="period"></param>
        /// <param name="startTime"></param>
        /// <param name="endTime"></param>
        /// <returns></returns>
        public string getPacketInDropRates(string url, string instanceId, int period, DateTime startTime, DateTime endTime)
        {
            Dictionary<string, string> dicDimensions = new Dictionary<string, string>();
            dicDimensions.Add("instanceId", instanceId);
            string dimensions = JsonConvert.SerializeObject(dicDimensions);
            return AlibabaCloudSDK.describeMetricLast(url, "packetInDropRates", period.ToString(),
                General.Instance.GetTimeStamp(startTime).ToString(), General.Instance.GetTimeStamp(endTime).ToString(), dimensions);
        }

        /// <summary>
        /// 出方向前后端丢包率
        /// </summary>
        /// <param name="url"></param>
        /// <param name="instanceId"></param>
        /// <param name="period"></param>
        /// <param name="startTime"></param>
        /// <param name="endTime"></param>
        /// <returns></returns>
        public string getPacketOutDropRates(string url, string instanceId, int period, DateTime startTime, DateTime endTime)
        {
            Dictionary<string, string> dicDimensions = new Dictionary<string, string>();
            dicDimensions.Add("instanceId", instanceId);
            string dimensions = JsonConvert.SerializeObject(dicDimensions);
            return AlibabaCloudSDK.describeMetricLast(url, "packetOutDropRates", period.ToString(),
                General.Instance.GetTimeStamp(startTime).ToString(), General.Instance.GetTimeStamp(endTime).ToString(), dimensions);
        }
        #endregion

        #region 操作系统级别监控项
        /// <summary>
        /// CPU使用率
        /// </summary>
        /// <param name="url">请求地址</param>
        /// <param name="instanceId">服务器实例id</param>
        /// <param name="nameSpace">空间命名</param>
        /// <param name="period">默认15,可取15的整数倍</param>
        /// <param name="startTime">开始时间</param>
        /// <param name="endTime">结束时间</param>
        /// <returns></returns>
        public string getCPUTotal(string url, string instanceId, int period, DateTime startTime, DateTime endTime)
        {
            Dictionary<string, string> dicDimensions = new Dictionary<string, string>();
            dicDimensions.Add("instanceId", instanceId);
            string dimensions = JsonConvert.SerializeObject(dicDimensions);
            return AlibabaCloudSDK.describeMetricLast(url, "cpu_total", period.ToString(),
                General.Instance.GetTimeStamp(startTime).ToString(), General.Instance.GetTimeStamp(endTime).ToString(), dimensions);
        }
        
        /// <summary>
        /// 内存使用率
        /// </summary>
        /// <param name="url">请求地址</param>
        /// <param name="instanceId">服务器实例id</param>
        /// <param name="nameSpace">空间命名</param>
        /// <param name="period">时间间隔。单位:秒。取值:60、300、900</param>
        /// <param name="startTime">开始时间</param>
        /// <param name="endTime">结束时间</param>
        /// <returns></returns>
        public string getMemoryUsedUtilization(string url, string instanceId, int period, DateTime startTime, DateTime endTime)
        {
            Dictionary<string, string> dicDimensions = new Dictionary<string, string>();
            dicDimensions.Add("instanceId", instanceId);
            string dimensions = JsonConvert.SerializeObject(dicDimensions);
            return AlibabaCloudSDK.describeMetricLast(url, "memory_usedutilization", period.ToString(),
                General.Instance.GetTimeStamp(startTime).ToString(), General.Instance.GetTimeStamp(endTime).ToString(), dimensions);
        }

        /// <summary>
        /// 内存已用量
        /// </summary>
        /// <param name="url"></param>
        /// <param name="instanceId"></param>
        /// <param name="period"></param>
        /// <param name="startTime"></param>
        /// <param name="endTime"></param>
        /// <returns></returns>
        public string getMemoryUsedSpace(string url, string instanceId, int period, DateTime startTime, DateTime endTime)
        {
            Dictionary<string, string> dicDimensions = new Dictionary<string, string>();
            dicDimensions.Add("instanceId", instanceId);
            string dimensions = JsonConvert.SerializeObject(dicDimensions);
            return AlibabaCloudSDK.describeMetricLast(url, "memory_usedspace", period.ToString(),
                General.Instance.GetTimeStamp(startTime).ToString(), General.Instance.GetTimeStamp(endTime).ToString(), dimensions);
        }

        /// <summary>
        /// 内存总量
        /// </summary>
        /// <param name="url"></param>
        /// <param name="instanceId"></param>
        /// <param name="period"></param>
        /// <param name="startTime"></param>
        /// <param name="endTime"></param>
        /// <returns></returns>
        public string getMemoryTotalSpace(string url, string instanceId, int period, DateTime startTime, DateTime endTime)
        {
            Dictionary<string, string> dicDimensions = new Dictionary<string, string>();
            dicDimensions.Add("instanceId", instanceId);
            string dimensions = JsonConvert.SerializeObject(dicDimensions);
            return AlibabaCloudSDK.describeMetricLast(url, "memory_totalspace", period.ToString(),
                General.Instance.GetTimeStamp(startTime).ToString(), General.Instance.GetTimeStamp(endTime).ToString(), dimensions);
        }
        
        /// <summary>
        /// 云盘使用率
        /// </summary>
        /// <param name="url"></param>
        /// <param name="instanceId"></param>
        /// <param name="nameSpace"></param>
        /// <param name="period"></param>
        /// <param name="startTime"></param>
        /// <param name="endTime"></param>
        /// <returns></returns>
        public string getDiskUsageUtilization(string url, string instanceId, int period, DateTime startTime, DateTime endTime)
        {
            Dictionary<string, string> dicDimensions = new Dictionary<string, string>();
            dicDimensions.Add("instanceId", instanceId);
            string dimensions = JsonConvert.SerializeObject(dicDimensions);
            return AlibabaCloudSDK.describeMetricLast(url, "diskusage_utilization", period.ToString(),
                General.Instance.GetTimeStamp(startTime).ToString(), General.Instance.GetTimeStamp(endTime).ToString(), dimensions);
        }

        /// <summary>
        /// 磁盘的已用存储空间
        /// </summary>
        /// <param name="url"></param>
        /// <param name="instanceId"></param>
        /// <param name="period"></param>
        /// <param name="startTime"></param>
        /// <param name="endTime"></param>
        /// <returns></returns>
        public string getDiskUsageUsed(string url, string instanceId, int period, DateTime startTime, DateTime endTime)
        {
            Dictionary<string, string> dicDimensions = new Dictionary<string, string>();
            dicDimensions.Add("instanceId", instanceId);
            string dimensions = JsonConvert.SerializeObject(dicDimensions);
            return AlibabaCloudSDK.describeMetricLast(url, "diskusage_used", period.ToString(),
                General.Instance.GetTimeStamp(startTime).ToString(), General.Instance.GetTimeStamp(endTime).ToString(), dimensions);
        }

        /// <summary>
        /// 磁盘的总存储空间
        /// </summary>
        /// <param name="url"></param>
        /// <param name="instanceId"></param>
        /// <param name="period"></param>
        /// <param name="startTime"></param>
        /// <param name="endTime"></param>
        /// <returns></returns>
        public string getDiskUsageTotal(string url, string instanceId, int period, DateTime startTime, DateTime endTime)
        {
            Dictionary<string, string> dicDimensions = new Dictionary<string, string>();
            dicDimensions.Add("instanceId", instanceId);
            string dimensions = JsonConvert.SerializeObject(dicDimensions);
            return AlibabaCloudSDK.describeMetricLast(url, "diskusage_total", period.ToString(),
                General.Instance.GetTimeStamp(startTime).ToString(), General.Instance.GetTimeStamp(endTime).ToString(), dimensions);
        }

        /// <summary>
        /// 过去1分钟的系统平均负载
        /// </summary>
        /// <param name="url"></param>
        /// <param name="instanceId"></param>
        /// <param name="nameSpace"></param>
        /// <param name="period"></param>
        /// <param name="startTime"></param>
        /// <param name="endTime"></param>
        /// <returns></returns>
        public string getload1m(string url, string instanceId, int period, DateTime startTime, DateTime endTime)
        {
            Dictionary<string, string> dicDimensions = new Dictionary<string, string>();
            dicDimensions.Add("instanceId", instanceId);
            string dimensions = JsonConvert.SerializeObject(dicDimensions);
            return AlibabaCloudSDK.describeMetricLast(url, "load_1m", period.ToString(),
                General.Instance.GetTimeStamp(startTime).ToString(), General.Instance.GetTimeStamp(endTime).ToString(), dimensions);
        }

        /// <summary>
        /// 过去5分钟的系统平均负载
        /// </summary>
        /// <param name="url"></param>
        /// <param name="instanceId"></param>
        /// <param name="nameSpace"></param>
        /// <param name="period"></param>
        /// <param name="startTime"></param>
        /// <param name="endTime"></param>
        /// <returns></returns>
        public string getload5m(string url, string instanceId, int period, DateTime startTime, DateTime endTime)
        {
            Dictionary<string, string> dicDimensions = new Dictionary<string, string>();
            dicDimensions.Add("instanceId", instanceId);
            string dimensions = JsonConvert.SerializeObject(dicDimensions);
            return AlibabaCloudSDK.describeMetricLast(url, "load_5m", period.ToString(),
                General.Instance.GetTimeStamp(startTime).ToString(), General.Instance.GetTimeStamp(endTime).ToString(), dimensions);
        }

        /// <summary>
        /// 过去15分钟的系统平均负载
        /// </summary>
        /// <param name="url"></param>
        /// <param name="instanceId"></param>
        /// <param name="nameSpace"></param>
        /// <param name="period"></param>
        /// <param name="startTime"></param>
        /// <param name="endTime"></param>
        /// <returns></returns>
        public string getload15m(string url, string instanceId, int period, DateTime startTime, DateTime endTime)
        {
            Dictionary<string, string> dicDimensions = new Dictionary<string, string>();
            dicDimensions.Add("instanceId", instanceId);
            string dimensions = JsonConvert.SerializeObject(dicDimensions);
            return AlibabaCloudSDK.describeMetricLast(url, "load_15m", period.ToString(),
                General.Instance.GetTimeStamp(startTime).ToString(), General.Instance.GetTimeStamp(endTime).ToString(), dimensions);
        }

        /// <summary>
        /// 进程数
        /// </summary>
        /// <param name="url"></param>
        /// <param name="instanceId"></param>
        /// <param name="nameSpace"></param>
        /// <param name="period"></param>
        /// <param name="startTime"></param>
        /// <param name="endTime"></param>
        /// <returns></returns>
        public string getProcessNumber(string url, string instanceId, int period, DateTime startTime, DateTime endTime)
        {
            Dictionary<string, string> dicDimensions = new Dictionary<string, string>();
            dicDimensions.Add("instanceId", instanceId);
            string dimensions = JsonConvert.SerializeObject(dicDimensions);
            return AlibabaCloudSDK.describeMetricLast(url, "process.number", period.ToString(),
                General.Instance.GetTimeStamp(startTime).ToString(), General.Instance.GetTimeStamp(endTime).ToString(), dimensions);
        }

        /// <summary>
        /// 各种状态下的TCP连接数包括
        /// LISTEN、SYN_SENT、ESTABLISHED、SYN_RECV、FIN_WAIT1、CLOSE_WAIT、FIN_WAIT2、LAST_ACK、TIME_WAIT、CLOSING和CLOSED
        /// </summary>
        /// <param name="url"></param>
        /// <param name="instanceId"></param>
        /// <param name="period"></param>
        /// <param name="startTime"></param>
        /// <param name="endTime"></param>
        /// <returns></returns>
        public string getNetTcpConnection(string url, string instanceId, int period, DateTime startTime, DateTime endTime)
        {
            Dictionary<string, string> dicDimensions = new Dictionary<string, string>();
            dicDimensions.Add("instanceId", instanceId);
            string dimensions = JsonConvert.SerializeObject(dicDimensions);
            return AlibabaCloudSDK.describeMetricLast(url, "net_tcpconnection", period.ToString(),
                General.Instance.GetTimeStamp(startTime).ToString(), General.Instance.GetTimeStamp(endTime).ToString(), dimensions);
        }

        /// <summary>
        /// 设备驱动器检测到的接收错误包的数量
        /// </summary>
        /// <param name="url"></param>
        /// <param name="instanceId"></param>
        /// <param name="period"></param>
        /// <param name="startTime"></param>
        /// <param name="endTime"></param>
        /// <returns></returns>
        public string getNetworkInErrorPackages(string url, string instanceId, int period, DateTime startTime, DateTime endTime)
        {
            Dictionary<string, string> dicDimensions = new Dictionary<string, string>();
            dicDimensions.Add("instanceId", instanceId);
            string dimensions = JsonConvert.SerializeObject(dicDimensions);
            return AlibabaCloudSDK.describeMetricLast(url, "networkin_errorpackages", period.ToString(),
                General.Instance.GetTimeStamp(startTime).ToString(), General.Instance.GetTimeStamp(endTime).ToString(), dimensions);
        }

        /// <summary>
        /// 设备驱动器检测到的发送错误包的数量
        /// </summary>
        /// <param name="url"></param>
        /// <param name="instanceId"></param>
        /// <param name="period"></param>
        /// <param name="startTime"></param>
        /// <param name="endTime"></param>
        /// <returns></returns>
        public string getNetWorkOutErrorPackages(string url, string instanceId, int period, DateTime startTime, DateTime endTime)
        {
            Dictionary<string, string> dicDimensions = new Dictionary<string, string>();
            dicDimensions.Add("instanceId", instanceId);
            string dimensions = JsonConvert.SerializeObject(dicDimensions);
            return AlibabaCloudSDK.describeMetricLast(url, "networkout_errorpackages", period.ToString(),
                General.Instance.GetTimeStamp(startTime).ToString(), General.Instance.GetTimeStamp(endTime).ToString(), dimensions);
        }

        /// <summary>
        /// inode使用率,Linux操作系统才有意义
        /// </summary>
        /// <param name="url"></param>
        /// <param name="instanceId"></param>
        /// <param name="period"></param>
        /// <param name="startTime"></param>
        /// <param name="endTime"></param>
        /// <returns></returns>
        public string getInodeutilization(string url, string instanceId, int period, DateTime startTime, DateTime endTime)
        {
            Dictionary<string, string> dicDimensions = new Dictionary<string, string>();
            dicDimensions.Add("instanceId", instanceId);
            string dimensions = JsonConvert.SerializeObject(dicDimensions);
            return AlibabaCloudSDK.describeMetricLast(url, "fs_inodeutilization", period.ToString(),
                General.Instance.GetTimeStamp(startTime).ToString(), General.Instance.GetTimeStamp(endTime).ToString(), dimensions);
        }
        #endregion

        /// <summary>
        /// 按照云服务和监控项统计报警历史
        /// </summary>
        /// <param name="url"></param>
        /// <param name="startTime"></param>
        /// <param name="endTime"></param>
        /// <returns></returns>
        public string getDescribeAlertLogCount(string url, DateTime startTime, DateTime endTime)
        {
            return AlibabaCloudSDK.describeAlertLogCount(url, General.Instance.GetTimeStamp(startTime), General.Instance.GetTimeStamp(endTime));
        }
        
        /// <summary>
        /// 按照云服务和监控项统计报警历史
        /// </summary>
        /// <param name="url"></param>
        /// <param name="startTime"></param>
        /// <param name="endTime"></param>
        /// <returns></returns>
        public string getDescribeAlertLogList(string url, DateTime startTime, DateTime endTime)
        {
            return AlibabaCloudSDK.describeAlertLogList(url, General.Instance.GetTimeStamp(startTime), General.Instance.GetTimeStamp(endTime));
        }
    }

最后编写WebApi,提供给前端或者APP使用

4.最终实现效果

猜你喜欢

转载自blog.csdn.net/qq_17486399/article/details/121050770