阿里云ECS健康诊断产品详解

本文涉及的产品
无影云电脑个人版,1个月黄金款+200核时
资源编排,不限时长
无影云电脑企业版,4核8GB 120小时 1个月
简介: 介绍阿里云ECS健康诊断产品详情和使用案例,包括各个产品概念、控制、OpenAPI、SDK等。

1. 功能描述

1.1. 简介

实例健康诊断功能是一种自助诊断方式,可以对实例的系统状态、网络状态、磁盘状态等进行全方位的诊断,帮助您了解实例健康情况,及时发现并解决常见的问题。

1.2. 基本概念

image.png

  • 诊断指标(DiagnosticMetric):实例或账号状态进行检查的单位,如CPU利用率。
  • 诊断结果条目(DiagnosticIssue):对诊断指标进行检查,发现的关联条目,条目按照严重等级分为Info、Warn、Critical。每个诊断指标可能关联多个诊断结果条目,如果没有关联诊断结果条目,说明对该诊断指标的检查没有发现问题,但并不意味着该诊断指标实际中不存在问题。
  • 诊断指标分类(DiagnosticCategory):一组诊断指标的集合,表示同一个场景、问题、组件等问题范围。
  • 诊断指标集合(DiagnosticMetricSet):一组诊断指标的集合,可以一次性对诊断指标里的所有指标进行诊断。

1.3. 诊断指标分类

实例健康诊断功能支持以下诊断,按照功能和模块,我们对所有的诊断指标进行了分类,当前的分类如下:

分类标识码

分类名称

说明

ECSService.ServiceHealth

计算服务健康诊断

对云服务器物理机资源和虚拟化层进行检查。

ECSService.InstanceNetwork

网络服务健康诊断

检查实例内部网络组件状态,以及外部网络环境异常等情况。

ECSService.InstanceStorage

存储服务健康诊断

检查实例磁盘的运行状态是否存在异常。

ECSService.InstanceConfigure

实例配置管理诊断

检查实例在启动过程中或运行中,是否被某个操作阻塞(block)导致实例无法启动或者运行异常。

ECSService.SecurityGroup

安全控制健康诊断

检查实例关联的所有安全组入方向常见端口的放行状态。

ECSService.AccountBalance

费用类诊断

检查实例本身和实例关联组件(例如公网IP流量、EIP流量)是否欠费。

ECSService.GuestOS

实例操作系统内相关配置诊断(Linux)

检查实例操作系统内的系统文件、关键进程、常用业务端口占用状态、防火墙状态等是否正常。

ECSService.GuestOS

实例操作系统内相关配置诊断(Windows)

检查实例操作系统内的常用业务端口占用状态、防火墙状态等是否正常。

ECSService.ActionTrace

用户行为回溯

对ECS实例状态类、实例费用类、安全组相关等操作行为审计、追溯。

1.4. 计算服务健康诊断

诊断指标ID(metricId)

诊断指标说明

诊断结果条目ID(issueId)

诊断指标条目说明

建议操作

Instance.ControllerError

检查该实例的后台管控系统是否正常工作。

Instance.ECSService.MngServiceException

后台管控系统未正常工作,可能会导致实例运行异常。

您可以尝试通过重启实例进行恢复。

Instance.CPUException

检查共享型实例底层是否存在CPU争抢。

Instance.ECSService.CPUBindFailure

存在CPU争抢,可能导致该实例无法获得CPU或出现其他异常。

您可以尝试通过重启实例进行恢复。

Instance.CPUSplitLock

实例遇到Intel CPU的Split Lock问题。

Instance.ECSService.CPUSplitLock

实例遇到Intel CPU的Split Lock问题。

请您检查ECS上应用程序是否存在导致该问题的异常代码并进行优化。

Instance.GuestOSCrash

实例的操作系统Crash。

Instance.ECSService.GuestOSCrashed

操作系统Crash。

请您检查ECS上应用程序是否存在导致该问题的异常代码并进行优化。

Instance.HostDownAlert

检查该实例所在的底层物理机是否有故障。

Instance.ECSService.HostDown

底层物理机存在故障,可能会影响实例的运行状态或性能。

您可以尝试通过重启实例进行恢复。

Instance.PerformanceAffected

检查实例是否存在因底层软硬件问题导致的性能受损。

Instance.ECSService.PerformanceAffected

实例存在性能受损,请您检查该实例的历史系统事件或者系统日志进行确认,具体操作,请参见查看历史系统事件查看实例的系统日志和屏幕截图

您可以尝试通过重启实例进行恢复。

Instance.PerfRestrict

检查突发性能实例的CPU积分余额是否足够支付维持高性能所需的积分。

Instance.ECSService.BurstPerformanceRestricted

余额积分不够,该突发性能实例在业务高峰时只能使用基准性能,而无法启动突发性能。

检查该实例是否满足您的业务需求,如果不满足,建议对实例进行配置升级。具体操作,请参见包年包月实例升配规格按量付费实例变配规格

Instance.ResourceNotEnough

检查该实例所需要的CPU、内存等物理资源是否充足。

Instance.ECSService.ResourceOutOfStock

在需要重新为实例分配资源时,例如从节省停机模式启动实例,如果因为库存不足使得物理资源不足,将导致实例无法启动。

您可以等待几分钟后重新尝试开机,或者在其他地域或可用区尝试重新创建实例。

Instance.SystemException

检查该实例的操作系统(Guest OS)内部是否存在内核Panic、OOM异常或内部宕机等故障。

Instance.ECSService.GuestOSException

操作系统内部异常,可能是由于实例配置不当或用户空间的程序配置不当导致。

您可以尝试通过重启实例进行恢复。

Instance.VirtException

检查该实例底层虚拟化层核心服务是否出现异常。

Instance.ECSService.VirtualizationException

出现此类异常可能会导致实例崩溃或出现异常暂停。

您可以尝试通过重启实例进行恢复。

Instance.RecentUtilHigh

检查历史负载是否超过80%。

Instance.UtilizationHigh.IntranetBandwidth

您选择的诊断时间范围内实例的内网带宽负载达到过上限的80%,内网带宽负载过高意味着您的实例正在进行大量的内网流量传输。

目前阿里云无法确定具体的进程信息,请您结合业务进一步分析,详细监控信息请登录云监控控制台查看。

Instance.UtilizationHigh.DiskIOPS

您选择的诊断时间范围内实例的IOPS负载达到过上限的80%,IOPS负载高意味着您的实例正在进行频繁的IO读写。

目前阿里云无法确定具体的进程信息,请您结合业务进一步分析,详细监控信息请登录云监控控制台查看。

Instance.UtilizationHigh.DiskBPS

您选择的诊断时间范围内实例的BPS负载达到过上限的80%,BPS负载过高意味着您的实例在进行大量的数据传输。

目前阿里云无法确定具体的进程信息,请您结合业务进一步分析,详细监控信息请登录云监控控制台查看。

Instance.UtilizationHigh.CPU

您选择的诊断时间范围内,实例的CPU负载达到过80%,CPU负载高意味着您的实例正在进行高频的计算任务。

详细监控信息请登录云监控控制台查看。

Instance.KMSInvalid

检查KMS密钥是否正常。

Instance.KMSInvalid.SecretInvalid

当前实例使用了密钥管理服务KMS(Key Management Service)提供的密钥服务对系统盘或数据盘进行了加密,但目前因密钥失效导致实例启动失败。

您可以登录密钥管理服务KMS控制台查看该实例云盘所使用的密钥的状态,如果出现欠费,请及时续费后再次尝试启动本实例。

如果实例当前已正常启动和运行,请忽略此提醒。

1.5. 网络服务健康诊断

诊断指标ID(metricId)

诊断指标说明

诊断结果条目ID(issueId)

诊断指标条目说明

建议操作

Instance.ArpPingError

通过向网卡发送ARP(地址解析协议)请求来验证实例基础网络配置是否正常。

Instance.ECSService.ARPPingIssue

实例网卡链路层出现异常。

如果请求失败,则很有可能是实例未正常启动或网络配置有问题,您可以尝试通过重启实例进行恢复。

Instance.DDoSStatus

检查该实例的IP地址是否受到了DDoS攻击。

Instance.Security.SufferDDoSAttacks

在条目附加信息中会返回如下样例数据:

{
 "Status": "DDoSDefense",
 "StartTime": "2022-07-07T02:25:20Z"
}
  • ${Status}表示发生的事件,分为DDoSDefense和DDoSHole,表示遭到了DDoS攻击进入防卫或者黑洞。
  • ${StartTime} 表示事件发生时间。

阿里云免费提供的DDoS原生防护服务可以帮您完成一定程度的攻击流量清洗,缓解DDoS攻击造成的不可用,但如果攻击流量已超出您实例的防护能力,仍会导致实例进入不可用状态,无法正常访问。更多DDoS攻击详情,请参见DDoS攻击介绍

您可以视情况购买其他DDoS防护产品抵御DDoS攻击,更多信息,请参见阿里云DDoS防护产品概述

阿里云DDoS预防最佳方案,请参见DDoS攻击缓解最佳实践

Instance.NetworkBoundLimit

检查该实例的内外网带宽总量。

Instance.Network.IOLimit

带宽总量已超过实例规格对应的网络基础带宽上限,导致网络性能成为业务瓶颈。

将实例升级至网络带宽能力更高的实例规格。具体操作,请参见修改实例规格

Instance.NetworkBurstLimit

检查该实例的突发网络带宽达到上限。

Instance.Network.BurstBoundLimit

突发网络带宽已超过实例规格对应的网络突发带宽上限,导致网络性能成为业务瓶颈。

将实例升级至网络带宽能力更高的实例规格。具体操作,请参见修改实例规格

Instance.NetworkLoadFailure

检查该实例的网卡是否能正常加载。

Instance.Network.ENILoadFailure

如果网卡无法正常加载,将影响实例的网络连通性,例如实例无法远程连接。

您可以尝试通过重启实例进行恢复。

Instance.NetworkSessionError

检查该实例的网卡是否能正常建立会话。

Instance.Network.SessionException

如果网卡无法建立会话或已建立的会话超过限制,将影响实例的网络连通性或网络吞吐,例如导致实例无法远程连接,或网速过慢。

您可以尝试通过重启实例进行恢复。

Instance.PacketDrop

检查该实例的网卡入方向或出方向是否存在丢包现象。

Instance.Network.PacketDrop

如果存在丢包,将影响实例的网络连通性或网络吞吐,例如导致实例无法远程连接,或网速过慢。

您可以尝试通过重启实例进行恢复。

Instance.NetworkConfigConsistency

检查实例网络指标是否正常。

Instance.NetworkConfig.Inconsistent

系统监测到该实例当前生效的网络配置与底层服务配置存在不一致,可能导致实例的网络性能受影响。

  • 如果实例当前已正常运行,请忽略此提醒。
  • 如果实例的丢包问题依然存在,请根据业务需要选择合适的时间尝试重启实例进行恢复。

Instance.NetworkLinkException

检查云系统内部链路是否存在丢包。

Instance.Network.LinkException

该实例在检测时间内遇到了底层网络链路丢包问题,可能导致实例性能受损,目前该问题已恢复。

  • 如果实例当前已正常运行,请忽略此提醒。
  • 如果实例的丢包问题依然存在,请根据业务需要选择合适的时间尝试重启实例进行恢复。

1.6. 存储服务健康诊断

诊断指标ID(metricId)

诊断指标说明

诊断结果条目ID(issueId)

诊断指标条目说明

建议操作

Instance.DiskLimit

检查该实例系统盘的读写IO是否存在延迟,以及读写的IOPS是否超过了该云盘的IOPS上限。

Instance.Disk.IOLimit

云盘读写IOPS超过上限,读写将被限制。查看云盘指标的操作,请参见查看云盘监控信息

为避免该情况再次发生,请您降低磁盘的读写频率或升级为更高性能的云盘类型。各类云盘的读写性能指标,请参见块存储性能

Instance.DiskLoadFailure

检查该实例在启动时云盘是否能正常挂载。

Instance.Disk.EBSLoadFailure

挂载失败,实例无法正常启动。

请停止实例后再次启动实例,或重新挂载云盘,进行恢复。挂载云盘的操作,请参见挂载数据盘

Instance.IOHang

检查该实例的系统盘是否存在IO hang的情况(即磁盘内的文件系统因读写IO延迟过高导致系统不稳定或宕机)。

Instance.Disk.IOHang

系统盘出现IO hang,云盘无法进行读写操作。

建议您查看云盘的性能指标,具体操作,请参见查看查看云盘监控信息。如果您使用的是Alibaba Cloud Linux 2操作系统,检测IO hang的操作,请参见检测文件系统和块层的IO hang

Instance.ResizeFsFailure

检查该实例的系统盘在扩容后,云盘上的文件系统是否也调整成功。

Instance.Disk.ResizeFailure

文件系统未成功调整,新扩容的磁盘无法使用。

请重新发起扩容操作。不同操作系统的扩容方法与限制,请参见扩容概述

Instance.DiskFull

检查历史时间段内磁盘空间使用率是否达到100%。

Instance.Disk.Full

该实例的磁盘于某一时间段内出现了磁盘空间使用率达到100%的情况,可能导致实例无法正常使用。

根据需要选择以下合适的方案进行操作,确保系统的正常运行。

1.7. 实例配置管理诊断

诊断指标ID(metricId)

诊断指标说明

诊断结果条目ID(issueId)

诊断指标条目说明

建议操作

Instance.BootFailure

检查该实例的boot操作是否能正常执行加载。

Instance.ECSService.BootIssue

实例无法正常启动。

您可以尝试通过重启实例进行恢复。

Instance.ImageLoadFailure

检查该实例在启动时所使用的镜像是否能正常加载。

Instance.ECSService.ImageIssue

镜像可能因为系统原因、镜像问题等加载失败。

您可以尝试通过重启实例进行恢复。

Instance.OperationFailure

检查您对该实例最近执行的管理操作,例如开机、关机、升配等是否执行成功。

Instance.ECSService.OperationError

存在操作执行失败的异常。

如果执行失败,您需要重新发起该操作。

Instance.BootScreenshot

操作系统因系统本身原因无法正常启动。

Instance.BootScreenshot.Exception

该实例因操作系统内配置异常、异常关机等问题导致操作系统无法正常启动。

您可以通过VNC登录启动异常的实例进行修复,更多信息,请参见实例启动异常常见错误与对应解决方案

1.8. 安全控制健康诊断

诊断指标ID(metricId)

诊断指标说明

诊断结果条目ID(issueId)

诊断指标条目说明

建议操作

Instance.SGIngress

检查实例网卡安全组规则入方向常用端口是否放开。

Instance.Network.SSHPortRuleDeny

事件信息示例如下,表示Linux入方向SSH端口(22)未放行。

{
    "Policy": "drop",
    "Port": "22",
    "Service": "SSH",
    "Effect": "INSTANCE-SG-SSH-DISABLED",
    "Protocol": "TCP",
    "Direction": "ingress"
}

如果您需要通过SSH访问该实例,请为该实例安全组配置入方向允许SSH访问的规则。具体操作,请参见添加安全组规则

Instance.SgRule.PingPortDeny

事件信息示例如下,表示实例不允许PING。

{
    "Policy": "drop",
    "Port": "-1",
    "Service": "PING",
    "Effect": "INSTANCE-SG-PING-DISABLED",
    "Protocol": "ICMP",
    "Direction": "ingress"
}

如果您需要通过PING该实例,请为该实例安全组配置入方向允许PING的规则。具体操作,请参见添加安全组规则

Instance.SgRule.WinRemotePortDeny

表示实例不允许远程桌面。

{
  "Policy": "drop",
  "Port": "3389",
  "Service": "WIN-REMOTE-DESKTOP",
  "Protocol": "TCP",
  "Direction": "ingress"
}

如果您需要通过远程桌面访问该实例,请为该实例安全组配置入方向允许远程桌面相关的规则。具体操作,请参见添加安全组规则

Instance.SecurityRisk

检查实例是否存在安全风险。

Instance.Security.Risk

该实例目前存在安全风险,可能导致实例无法正常使用。

更多安全风险,您可以登录云安全中心查看。

1.9. 费用类诊断

诊断指标ID(metricId)

诊断指标说明

诊断结果条目ID(issueId)

诊断指标条目说明

建议操作

Instance.ExpenseException

检查ECS实例的计费状态是否存在异常。

Account.Balance.ExpenseException

该实例部分组件目前的费用状态异常(包括包月到期或者账号欠费),导致实例无法远程登录或正常使用。

费用状态异常的组件如下,请根据业务需要,尽快对实例进行续费或者充值后,重新开机实例后再登录实例。

{$InstanceId}/{$Ip} 目前处于{status}状态。

示例如下:

{
 "InstanceId":"i-bp1amip45xxxxxxxx",
 "Status":"AccountNotEnough/AccountNotEnough/Expired/NotExpired"   
}

或者:

{
 "Ip":"123.x.x.x",
 "Status":"AccountEnough/AccountNotEnough/Expired/NotExpired"
}

返回结果属性说明如下:

  • AccountEnough: 不欠费。
  • AccountNotEnough: 欠费。
  • Expired: 包年包月到期。
  • NotExpired: 没有到期。

关于ECS计费说明、欠费和续费操作可参考计费概述

1.10. 实例操作系统内相关配置诊断(Linux)

诊断指标ID(metricId)

诊断指标说明

诊断结果条目ID(issueId)

诊断指标条目说明

建议操作

GuestOS.CPUUtil

检查CPU使用率是否过高。

GuestOS.CPU.HighUtilization

该实例总CPU的总使用率已超过80%。

CPU使用率排名前5的进程如下,请检查这些进程是否正常。

{
  "ProcessCPUUsageTop5": [
    {
      "Pid": "1234",
      "CommandName": "/usr/bin/cpu_load.py",
      "AverageCPU": 80
    }
  ]
}

返回结果属性说明如下:

  • ${ProcessCPUUsageTop5} :系统内CPU使用率Top5的进程列表。
  • ${Pid}:进程ID。
  • ${CommandName}:进程名称。
  • ${AverageCPU}:CPU平均使用率。

查询CPU资源使用情况的操作,请参见Linux系统CPU负载查询方法

GuestOS.CoreCPU.HighUtilization

该实例一个或多个CPU的使用率为已超过85%。

单个CPU使用率超过85%的信息如下,请检查如下进程是否正常。

{
  "CPUCoreUsage": [
    {
      "Processor": 1,
      "AverageCPU": 80
    }
  ]
}

返回结果属性说明如下:

  • ${CPUCoreUsage}:CPU使用率超过85%的核心列表。
  • ${Processor}:CPU核心编号
  • ${AverageCPU}:CPU核心使用率。

查询CPU资源使用情况的操作,请参见Linux系统CPU负载查询方法

GuestOS.MemUtil

检查实例内存使用率是否过高

GuestOS.Memory.HighUtilization

该实例当前内存的总使用率超过80%。

内存使用率排名前5的进程示例如下:

{
  "TotalPercent": 95,
  "TopUtilizationProcesses": [
    {
      "Pid": "1223",
      "CommandName": "/usr/bin/mem.py",
      "PhysicalMemoryPercent": 50
    }
  ]
}

返回结果属性说明如下:

  • ${TotalPercent}:内存整体使用率。
  • ${TopUtilizationProcesses}:使用内存Top5的进程列表。
  • ${Pid}:进程ID
  • ${CommandName}:进程名称。
  • ${PhysicalMemoryPercent}:当前进程内存使用率。

请根据需要关闭不需要的服务或进程,如果是您正常的业务导致,建议您对ECS配置进行升级。

查询CPU资源使用情况的操作,请参见Linux系统CPU负载查询方法

GuestOS.DiskUtil

检查实例系统盘使用率是否过高

GuestOS.SystemDisk.InsufficientSpace

该实例当前部分磁盘对应文件系统的使用率或inode使用率已经超过了80%,可能导致在这些分区上无法创建新的文件。

使用率过高的磁盘信息示例如下:

[
  {
    "FilesystemName": "ext4",
    "FilesystemType": "ext4",
    "MountPoint": "/root",
    "SpaceUsedPercent": 10,
    "InodeUsedPercent": 50
  }
]

返回结果属性说明如下:

  • ${FilesystemName}:文件系统名称。
  • ${FilesystemType}:文件系统类型。
  • ${SpaceUsedPercent}:磁盘使用率。
  • ${InodeUsedPercent}:Inode使用率。

请根据需要选择对磁盘进行扩容,具体操作,请参见在线扩容云盘(Linux&Windows)离线扩容云盘(Linux&Windows)

解决Inode容量满的方法可,请参见Linux实例磁盘空间满和Inode满的问题排查方法

GuestOS.SystemConfig

检查系统关键配置

GuestOS.AuditConfig.AutoShutdown

该实例Audit服务的配置文件中存在高风险的参数配置,当存放Audit服务审计日志的文件系统空间不足时会导致操作系统被自动关机,且重新启动后由于Audit服务会继续写入审计日志很可能导致操作系统不断被关机。

{
  "ActionValue": "halt",
  "ConfigPath": "/etc/audit/auditd.conf",
  "ActionKey": "space_left_action"
}
  • ${ConfigPath}:Audit服务对应的配置文件。
  • ${ActionKey} = ${ActionValue}:高风险的参数配置,该配置会导致文件系统空间不足时操作系统会不时被自动关机。

请根据业务需要修改Audit服务对应配置文件中配置项,具体操作,请参见如何修改auditd服务配置避免因磁盘空间不足导致实例自动关机

GuestOS.LimitsFile.UnreasonableConfig

该实例系统文件/etc/security/limits.conf中部分配置大于系统默认值,可能导致实例无法远程登录。

可能的异常配置属性如下:

[
  {
    "LimitDomain": "unused",
    "SysctlValue": 1048576,
    "LimitItem": "nofile",
    "LimitType": "hard",
    "LimitValue": 1048577
  }
]

返回结果属性说明如下:

  • ${LimitItem}:系统文件路径。
  • ${LimitDomain} :Domain。
  • ${LimitValue}:Value。
  • ${LimitType} :Type。
  • ${SysctlValue}:系统配置值(nr_open)。

调整limits.conf文件的配置,具体操作,请参见调整Linux实例中limits系统参数的方法

GuestOS.HugePageSize.UnreasonableConfig

该实例系统文件/etc/sysctl.conf配置的大页内存数量不当,可能导致实例无法远程登录。

{
  "SysctlNrhugepages": 10,
  "Hugepagesize": 100,
  "TotalMemory": 1024000
}
  • ${SysctlNrhugepages}:当前设置的大页内存数量(KB)。
  • ${Hugepagesize}:每页内存的大小(KB)。
  • ${TotalMemory}}:实例的总内存大小(KB)。

请根据需要调整大页内存数量。具体操作,请参见调整Linux实例大页内存的方法

GuestOS.SELinuxService.Enabled

该实例当前SELinux服务开启,可能导致SSH远程连接实例时无法登录。

请根据业务需要,选择临时或永久关闭SELinux服务解决SSH连接异常问题。具体操作,请参见Linux实例中由于SELinux服务开启导致SSH远程连接异常

GuestOS.NvmeIOTimeout.UnreasonableConfig

该实例系统文件中NVMe磁盘配置的IO读写超时配置的时间过小,可能导致NVMe磁盘在IO超时后变成只读挂载,进而导致后续写入操作失败。

{
 "File": "/proc/sys/nvme_core/io_timeout",
 "CurrentSetting": 100
}

返回结果属性说明如下:

  • ${File}:配置文件。
  • ${CurrentSetting}:IO超时值。

请根据需要将该配置调整为4294967295。具体操作,请参见Linux实例中NVMe磁盘IO超时配置不当导致磁盘不可用

GuestOS.SysctlUnknownNmiPanic.Enabled

该实例内核中不可屏蔽中断配置不当,会导致实例遇到不可屏蔽中断时会出现非预期的内核panic,并导致实例重启。

{
 "File": "/proc/sys/kernel/unknown_nmi_panic",
 "CurrentSetting": 100
}

返回结果属性说明如下:

  • ${File}:配置文件
  • ${CurrentSetting}:配置值

请根据需要将该配置调整为0。具体操作,请参见Linux实例中内核参数kernel.unknown_nmi_panic不当导致实例重启

GuestOS.NetworkInterfaceMultiQueue.Disabled

该实例某个或多个网卡未开启网卡多队列特性,可能对网络性能造成影响。

[
  {
    "InterfaceName": "eth1",
    "Status": "disable"
  }
]

返回结果属性说明如下:

  • ${InterfaceName}:网卡名称。
  • ${Status}:网卡多队列状态。

请根据需要将该配置调整为开启状态,开启网卡多队列的方法,请参见配置网卡多队列

GuestOS.SysctlIPv4TCPSACK.Disabled

该实例网络tcp_sack未开启,可能会影响实例的网络性能。

[
  {
    "File": "/proc/sys/net/ipv4/tcp_sack",
    "Value": 0
  }
]

返回结果属性说明如下:

  • ${File}:配置文件。
  • ${Value}:配置值。

请根据需要将该配置调整为1,开启tcp_sack的方法,请参见Linux实例开启TCP SACK的方法

GuestOS.SysctlIPv4TCPTWRecycle.Enabled

该实例NAT相关的内核参数配置存在异常,导致用户无法通过SSH连接实例,还会导致该实例上的HTTP服务访问出现异常。

[
  {
    "File": "/proc/sys/net/ipv4/tcp_tw_recycle",
    "Value": 1
  }
]

返回结果属性说明如下:

  • ${File}:配置文件路径。
  • ${Value}:当前的配置值。

请根据需要将该配置调整为0,修复NAT环境内核参数的方法,请参见Linux系统内核配置问题导致NAT环境访问实例出现异常

GuestOS.SysctlIPv4TCPTWReuse.Disabled

该实例的内核参数配置未开启TIME-WAIT sockets重用能力,即不允许将TIME-WAIT状态的socket用于新的TCP连接,可能会影响实例的单机网络发送请求性能。

{
  "CurrentSetting": 0
}

${CurrentSetting}:内核参数net.ipv4.tcp_tw_reuse当前的值。

请根据业务需要,将net.ipv4.tcp_tw_reuse对应值调整为1,即开启TIME_WAIT socket重用能力,提升实例的网络发送请求性能。具体操作,请参见Linux实例常用内核网络参数介绍与常见问题处理

GuestOS.SysctlNetfilterNfMaxConnections.Unreasonable

该实例过去一段时间的历史系统日志中存在错误日志,该问题是由于内核模块nf_conntrack (负责跟踪网络连接条目以配合NAT地址转换功能)所使用的哈希表空间已满所致,可能导致实例出现间歇性网络丢包。

{
  "Timeout": 432000,
  "KernelMessages": [
    {
      "source": "dmesg command",
      "message": "[14124341.747244] nf_conntrack: table full, dropping packet"
    },
    {
      "source": "/var/log/messages",
      "message": "Nov 15 23:51:16 iZm5efna3fievtdlq82p1mZ kernel: nf_conntrack: table full, dropping packet"
    }
  ],
  "ConnectionMax": 65536
}
  • ${Timeout}:net.netfilter.nf_conntrack_tcp_timeout_established的值。
  • ${ConnectionMax}:net.netfilter.nf_conntrack_max的值。
  • ${KernelMessages.source}:历史系统日志。
  • ${KernelMessages.message}:错误日志内容。

请根据业务需要和系统情况,调整实例内核配置文件中上面两个参数对应值的大小,避免该问题。具具体操作,请参见Linux实例常用内核网络参数介绍与常见问题处理

GuestOS.PidMax.TooSmall

该实例系统内当前已运行的进程数超过最大进程数(kernel.pid_max)的三分之二,可能导致系统后续无法创建新的进程。

{
  "PidMax": 900,
  "ProcessCount": 615
}
  • ${PidMax}:该参数对应的值kernel.pid_max。
  • ${ProcessCount}:目前系统中已有的进程数量。

请根据业务需要,调高kernel.pid_max对应的值。具体操作,请参见在Linux系统内启动某个服务时提示task: Cannot allocate memory该如何处理?

GuestOS.SysctlTcpMaxTwBuckets.Unreasonable

该实例过去一段时间的历史系统日志中存在错误日志,该问题是由于实例存在过多TIME_WAIT连接所致,可能导致实例上的连接被意外关闭或者实例无法响应新的连接,进而影响实例的访问或实例上业务的响应。

{
  "TwBuckets": 262144,
  "KernelMessages": [
    {
      "source": "dmesg command",
      "message": "[336877.139205] TCP: time wait bucket table overflow"
    },
    {
      "source": "/var/log/messages",
      "message": "Nov  1 14:08:32 iZbp13lj7h3lh086kdl7kpZ TCP: time wait bucket table overflow"
    }
  ]
}
  • ${KernelMessages.source}:历史系统日志。
  • ${KernelMessages.message}:错误日志内容。
  • ${TwBuckets}:内核配置参数 net.ipv4.tcp_max_tw_buckets。

该问题通常是由于内核配置参数net.ipv4.tcp_max_tw_buckets配置不当所致,请根据业务需要,调整实例内核配置中该参数对应值的大小,加速连接的关闭,避免该问题。具体操作,请参见Linux实例常用内核网络参数介绍与常见问题处理

GuestOS.SystemUserPwd

系统账号和密码设置检查

GuestOS.SystemUser.MissingInfo

该实例的系统账号不存在,可能会导致实例无法登录。

[
  {
    "MissingUsername": "postfix",
    "Source": "/etc/passwd"
  }
]

返回结果属性说明如下:

  • ${Source}:配置文件路径。
  • ${MissingUsername}:系统账号。

请根据需要将补充该账号的信息,检查系统用户不存在的方法,请参见Linux实例中关键的系统用户不存在

GuestOS.SystemUserFile.NotUnixFormat

该实例系统账号对应文件的文件格式错误,可能会导致实例无法登录。

[
  {
    "File": "/etc/passwd"
  }
]

返回结果属性说明如下:

${File}:非法文件路径。

请根据需要修改该文件的文件格式。修改系统文件格式的方法,请参见Linux实例中修改文件为Unix格式的方法

GuestOS.SystemUserFile.InvalidExtensionAttribute

该实例系统账号对应文件的扩展属性配置不当,可能导致实例的部分功能无法正常工作,比如通过控制台修改root账号的密码不生效等。

[
  {
    "CorrectAttribute": "e",
    "File": "/etc/passwd",
    "CurrentAttribute": "ie"
  }
]

返回结果属性说明如下:

  • ${File}:文件路径。
  • ${CurrentAttribute}:当前配置值。
  • ${CorrectAttribute}:正确配置值。

请根据需要修改该文件的文件格式。修改系统文件格式的方法,请参见Linux实例中修改文件为Unix格式的方法

GuestOS.FileSystems

文件系统状态检查

GuestOS.Filesystems.UUIDConflicts

该实例存在相同UUID的文件系统,可能导致实例启动时自动挂载非预期的文件系统,进而导致实例无法正常启动。

拥有相同UUID的文件系统信息如下:

[
  {
    "CorrectAttribute": "e",
    "File": "/etc/passwd",
    "CurrentAttribute": "ie"
  }
]

返回结果属性说明如下:

  • ${FirstDevice}:冲突设备1。
  • ${SecondDevice}:冲突设备2。
  • ${UUID}:冲突的UUID。

请您根据需要修改文件系统的UUID,避免重复。

修改文件系统UUID的方法,请参见修改云盘的UUID

GuestOS.FstabFile.InvalidFormatExists

该实例/etc/fstab文件中存在格式错误,可能会导致实例无法启动。

详细信息如下:

[
  {
    "Line": 10,
    "File": "/dev/vdb1"
  }
]

返回结果属性说明如下:

  • ${File}:文件路径。
  • ${Line}:格式错误行号。

请根据需要进行修正/etc/fstab文件。

修改/etc/fstab文件格式的方法,请参见Linux实例的“/etc/fstab”配置文件存在格式错误

GuestOS.FstabFile.InvalidDevice

该实例的/etc/fstab文件中配置的某个设备不存在,可能会导致实例无法启动。

[
  {
    "MountPoint": "/mnt",
    "Device": "UUID=48609326-10e3-40c2-93b3-3f0d9798d7a9"
  }
]

返回结果属性说明如下:

  • ${Device}:不存在的设备UUID。
  • ${MountPoint}:设备挂载点。

请根据需要移除/etc/fstab中不存在的设备。

修改/etc/fstab文件格式的方法,请参见Linux实例的“/etc/fstab”配置文件存在格式错误

GuestOS.FstabFile.LossMountDevice

该实例存在未在/etc/fstab中配置自动挂载的磁盘,可能会导致实例无法启动。

[
  {
    "Device": "z",
    "MountAttribute": "-rw"
  }
]

返回结果属性说明如下:

  • ${Device}:未配置自动挂载的设备。
  • ${MountAttribute}:建议挂载属性。

修改磁盘建议的挂载属性,具体操作,请参见Linux实例中存在未正确挂载的磁盘

GuestOS.FileSystems.PartitionUnaligned

该实例的磁盘存在未按照推荐的2048扇区进行分区对齐的情况,当云盘扩容后,可能会因分区未对齐导致Linux内部自动执行分区扩容的操作失败,最终导致文件系统的可用空间未增加。

[
  {
    "DeviceStart": 512,
    "Unit": "kB",
    "DeviceName": "/dev/vdb"
  }
]
  • ${DeviceName}:磁盘设备名称。
  • ${DeviceStart}:该设备的第一个分区的开始位置。
  • ${Unit}:单位。

请根据业务情况,修复磁盘分区未对齐的问题。具体操作,请参见云盘扩容后使用growpart扩展GPT分区失败该如何处理?

GuestOS.FstabFile.IncorrectType

该实例在/etc/fstab文件中配置的设备文件系统与设备实际的文件系统不一致,可能会导致实例无法启动或设备挂载失败。

{
  "ConfigFileSystem": "extext",
  "Device": "UUID=b9a7ad07-b910-4ba6-9582-e88bf440479c",
  "RealFileSystem": "ext4"
}
  • ${Device}:设备。
  • ${RealFileSystem}:实际的文件系统。
  • ${ConfigFileSystem}:配置的文件系统。

请更改/etc/fstab中配置的文件系统,使其与设备实际的文件系统保持一致。具体操作,请参见启动实例时提示Give root password for maintenance或Press xxx to continue该如何处理?

GuestOS.Mountpoint.Multiple

该实例/etc/fstab文件中存在同一个文件系统挂载到多个挂载点的配置记录,可能导致文件系统读写冲突。

[ {
    "Device" : {
      "filesystemFeatures" : [ "has_journal", "ext_attr", "resize_inode", "dir_index", "filetype", "needs_recovery", "extent", "64bit", "flex_bg", "sparse_super", "large_file", "huge_file", "uninit_bg", "dir_nlink", "extra_isize" ],
      "name" : "/dev/vdb1",
      "type" : "ext4",
      "uuid" : "b055d7bb-2801-40d2-9ddb-1b6fd9b208bc"
    },
    "ConfigPath" : "/etc/fstab",
    "Entries" : [ {
      "mountPoint" : "/usr/local/attachment",
      "options" : "defaults",
      "name" : "/dev/vdb1",
      "passNumberOnParallelFsck" : 0,
      "type" : "ext4",
      "dumpFrequency" : 0
    }, {
      "mountPoint" : "/home/sunmooc",
      "options" : "defaults",
      "name" : "/dev/vdb1",
      "passNumberOnParallelFsck" : 0,
      "type" : "ext4",
      "dumpFrequency" : 0
    } ]
  } ]
  • {ConfigPath}:文件路径。
  • {Device.name}:设备名称。
  • {Entries.mountPoint}:挂载点。

请根据业务需求,修改/etc/fstab文件配置,使得文件系统与挂载点一一对应。具体操作,请参见启动实例时提示Give root password for maintenance或Press xxx to continue该如何处理?

GuestOS.NetworkStatus

网络配置和状态检查

GuestOS.Network.InvalidNetmask

该实例的IPv4地址或对应的子网掩码配置不当,导致该IP地址配置无效,影响实例无法正常连接和访问。

[
  {
    "IP": "10.0.0.1"
  }
]

返回结果属性说明如下:

${IP}:未配置子网掩码的IP。

请根据需要进行修改子网掩码,具体操作,请参见如何在Linux实例中设置静态IP地址

GuestOS.Network.InvalidDefaultRoute

该实例系统内未配置默认路由,可能导致实例无法正常连接。

{
  "Status": "unconfigured"
}

返回结果属性说明如下:

${Status}:默认路由配置状态。

请根据业务需要,修改网卡配置或者系统路由配置,补充所需的路由规则。具体操作,请参见Linux实例缺少默认路由配置导致无法访问

GuestOS.DHCPService.Disabled

该实例上网卡的DHCP服务进程处于关闭状态,可能导致实例的IP地址在租约到期之后,出现无法续租导致网络中断的问题。

网卡{InterfaceName}的DHCP配置异常。

[
  {
    "Status": "enable",
    "InterfaceName": "eth0"
  }
]

返回结果属性说明如下:

  • ${Status}:网卡DHCP启用状态。
  • ${InterfaceName}:网卡名称。

请检查DHCP服务相关配置,具体操作,请参见系统网络进程不存在

GuestOS.Udev.MacAddressNotExist

该实例内核使用的设备动态管理udev规则中,残留了MAC地址与网卡实际配置不一致的规则,可能导致实例网络无法正常使用或者网络设备命名不符合预期。

{
  "MacAddress": "00:00:00:01:01:02",
  "DeviceName": "eth${fakeMaxInterfaceNumber}"
}
  • ${MacAddress}:udev中配置的MAC地址。
  • ${DeviceName}:网卡设备名称。

请根据业务需要,修改udev规则,清除与实际配置不一致的MAC地址和网卡设备名称。具体操作,请参见多网卡场景下,Linux实例操作系统的网卡名称发生漂移如何解决?

GuestOS.DHCPService.CustomPort

CentOS、RHEL 7的某些系统的ECS实例上自带的dhclient版本低于4.2.5-60,低于该版本的dhclient存在软件缺陷,会占用除标准端口67/68或546/547以外的其他端口。如果实例内的其他服务或进程也使用了该端口,可能出现端口冲突问题,从而导致您的业务或者服务进程启动失败或不可用。

[
  {
    "OccupiedPort": 31045,
    "DhclientVersion": "isc-dhclient-4.2.5"
  },
  {
    "OccupiedPort": 38964,
    "DhclientVersion": "isc-dhclient-4.2.5"
  }
]
  • ${OccupiedPort: 该实例DHClient服务正在使用非默认端口
  • ${DhclientVersion}:该实例DHClient服务的版本。

请根据业务需要,尽快升级DHClient服务版本以修复此问题。具体操作,请参见在CentOS或RHEL 7实例上,启动某个服务或进程时提示端口冲突错误

GuestOS.NetworkConfig.InvalidInterface

该实例的网络配置文件中指定了不存在的网卡设备,可能导致系统网络服务启动失败或运行异常。

该问题是由于网卡配置文件中指定的网卡设备不存在导致。可能原因如下:

  • 创建或者配置实例时,没有配置指定数量的弹性网卡。
  • 卸载实例的辅助网卡后忘记删除对应配置文件。
  • 制作自定义镜像时未删除对应配置文件。

[
  {
    "ConfigFile": "/etc/sysconfig/network-scripts/ifcfg-eth101",
    "DeviceName": "eth101"
  }
]
  • ${ConfigFile}:网卡配置文件。
  • ${DeviceName}:指定的网卡设备。

请根据业务需要,添加所需要的弹性网卡,或者删除不存在网卡对应的配置文件。具体操作,请参见启动网络服务时提示Job for network.service failed because the control process exited with error code. 该如何处理?

GuestOS.Firewall

系统防火墙状态检查

GuestOS.NetworkFirewall.Enabled

该实例的防火墙(即iptables设置)目前处于开启状态,如果服务器开启了防火墙,并设置了屏蔽外界访问的规则,可能会导致远程访问实例失败。

请您根据业务需要,调整防火墙的配置。具体操作,请参见开启或关闭Linux实例中的系统防火墙

GuestOS.CloudInitService

Cloud-init服务状态检查

GuestOS.CloudinitService.BadDriverStatus

该实例的cloud-init驱动目前处于异常状态,可能导致实例在系统初始化阶段的相关系统配置无法正确执行,进而导致实例无法正常访问。

{
  "CloudinitEnabled": "enabled",
  "CloudInitSupport": "vpc",
  "GrowpartInstall": "installed",
  "CloudinitInstall": "installed"
}

返回结果属性说明如下:

  • ${CloudInitInstall}:CloudInit安装状态。
  • ${CloudInitEnabled}:CloudInit启用状态。
  • ${GrowpartInstall}:Growpart安装状态。
  • ${CloudInitSupport}:CloudInit支持的网络类型。

请根据需要检查并启动实例内的cloud-init服务进程。具体操作,请参见安装cloud-init

GuestOS.CloudinitService.StartFailed

该实例的cloud-init在启动时未能正常结束,可能导致实例系统化相关配置失败,从而无法访问实例。

您可以通过VNC登录实例,查看cloud-init系统日志,并根据需要重启实例

GuestOS.SSHServiceStatus

SSH服务状态检查

GuestOS.SSH.ForbiddenRootLogin

该实例SSH服务当前禁止root账号登录,导致实例root账号无法通过SSH访问。

{
 "File" : "/etc/ssh/sshd_config"
}

返回结果属性说明如下:

${File}:禁止root账号登录的配置文件。

修复root远程登录报错的问题。具体操作,请参见使用root用户通过SSH登录Linux实例时报“Permission denied, please try again”的错误

GuestOS.SSH.MissingCriticalFileOrDirectory

该实例SSH服务对应的关键文件或目录缺失,会导致实例无法通过SSH访问。

{
  "Files": [
    {
      "File": "/var/empty/*"
    }
  ]
}

返回结果属性说明如下:

${File}:缺失的关键文件或目录。

请根据需要重新配置SSH相关目录和文件。具体操作,请参见检查Linux实例是否存在SSH服务所需的必备文件或目录

GuestOS.SSH.IncorrectSSHFilePermission

该实例SSH服务依赖的文件访问权限配置不当,会导致实例无法通过SSH访问。

{
  "Files": [
    {
      "File": "/etc/ssh/ssh_host_ecdsa_key",
      "CurrentPermission": "0777"
    }
  ]
}

返回结果属性说明如下:

  • ${Files}:权限配置错误的文件列表。
  • ${File}:权限配置错误的文件路径。
  • ${CurrentPermission}:当前的文件权限配置。

请根据需要重新配置SSH相关目录和文件。具体操作,请参见检查Linux实例是否存在SSH服务所需的必备文件或目录

GuestOS.SSH.ListeningPortMismatchWithConfig

该实例sshd进程当前正在监听的地址和端口与配置的地址和端口不一致,可能导致SSH连接预期的地址和端口时失败。

sshd进程当前正在监听的地址和端口,不在sshd的配置文件/etc/ssh/sshd_config内。

[
  {
    "Address": "0.0.0.0",
    "Port": 2223
  }
]

返回结果属性说明如下:

  • ${Address}:监听的地址。
  • ${Port}:监听的端口。

请根据实际情况需要,调整sshd配置文件中的监听地址与端口后,重启sshd进程使其生效。

具体操作,请参见SSH的访问权限异常导致无法远程连接Linux实例

GuestOS.TimeSyncService

时间同步服务状态检查

GuestOS.TimeSyncService.Disabled

该实例的时间同步服务目前未正常工作或配置不当,可能导致实例系统内的时间与实际标准时间出现偏差,进而影响实例内部分应用无法正常工作。

[
  {
    "Status": "disabled",
    "ServiceName": "chronyd"
  }
]

返回结果属性说明如下:

  • ${ServiceName}:服务名称。
  • ${Status}:服务状态。

请根据需要调整时间同步服务相关配置。具体操作,请参见同步服务器本地时间

GuestOS.OSOOM

检查系统是否发生过OOM

GuestOS.Memory.OOM

该实例Guest OS内部曾经发生了OOM(Out of Memory)问题。

系统最近一次发生OOM的时间和详情日志如下:

[
  {
    "Message": "Mar 25 15:54:50 iZm5ej4ue05oijaudem8shZuser.err: Out of memory testing"
  }
]

请您检查当前实例内存大小是否足以支撑实例上运行的业务,必要的情况下,请升级配置提升实例内存。

分析OOM的根因并解决的方法,请参见Linux实例存在OOM问题的处理方法

1.11. 实例操作系统内相关配置诊断(Windows)

诊断指标ID(metricId)

诊断指标说明

诊断结果条目ID(issueId)

诊断指标条目说明

建议操作

GuestOS.WinCPUUtil

检查CPU是否使用率过高

GuestOS.CPU.HighUtilization

该实例总CPU的总使用率已超过80%。

CPU使用率排名前5的进程如下,请检查这些进程是否正常。

{
  "ProcessCPUUsageTop5": [
    {
      "Pid": "1234",
      "CommandName": "/usr/bin/cpu_load.py",
      "AverageCPU": 80
    }
  ]
}

返回结果属性说明如下:

  • ${ProcessCPUUsageTop5} :系统内CPU使用率Top5的进程列表。
  • ${Pid}:进程ID。
  • ${CommandName}:进程名称。
  • ${AverageCPU}: CPU平均使用率。

请您检查CPU进程是否存在异常,如果是正常业务导致,建议对ECS配置进行升级。

核查单个CPU使用率过高的方法,请参见Windows实例中CPU使用率较高问题的排查及解决方法

GuestOS.WinCoreCPU.HighUtilization

该实例一个或多个CPU的使用率为已超过85%。

单个CPU使用率超过85%的信息如下,请检查如下进程是否正常。

{
  "CPUCoreUsage": [
    {
      "Processor": 1,
      "AverageCPU": 80
    }
  ]
}

返回结果属性说明如下:

  • ${CPUCoreUsage}:CPU使用率超过85%的核心列表。
  • ${Processor}:CPU核心编号。
  • ${AverageCPU}:CPU核心使用率。

请检查如下进程是否正常,核查单个CPU使用率过高的方法,请参见Windows实例中CPU使用率较高问题的排查及解决方法

GuestOS.WinMemoryUtil

检查内存使用率是否过高

GuestOS.WinMemory.HighUtilization

该实例当前内存的总使用率超过80%。

内存使用率排名前5的进程如下:

{
  "TopUtilizationProcesses": [
    {
      "TotalMemory": 134389760,
      "Pid": "4560",
      "CommandName": "powershell"
    }
  ],
  "AverageMemory": 87.0
}

返回结果属性说明如下:

  • ${CPUCoreUsage}:CPU使用率超过85%的核心列表。
  • ${Processor}:CPU核心编号。
  • ${AverageCPU}: CPU核心使用率。

请根据需要关闭不需要的服务或进程,分析Windows内存使用率过高的方法,请参见Windows系统内存分析工具介绍

GuestOS.WinMemory.LicenseCorrupted

该实例的Windows许可证数据库被破坏或配置错误,导致Windows系统任务管理器上显示的为硬件保留的内存大小远大于可用内存,进而导致监控到的实例内存使用率过高。

{
  "MemoryForHardware": 19723407362
}

返回结果属性说明如下:

${MemoryForHardware}:硬件内存大小(单位B)。

恢复Windows许可证数据库,然后重启实例,即可恢复正常。

修复Windows系统许可证数据库被破坏或配置不当的方法,请参见Windows实例为硬件保留内存过多导致实例卡顿如何处理

GuestOS.WinSysDiskUtil

系统盘容量使用率过高

GuestOS.WinFileSystem.InsufficientSpace

该实例系统盘(C盘)当前的剩余空间过小,可能导致系统运行缓慢甚至实例无法启动。

[
  {
    "FreeSize": 2860625,
    "FilesystemName": "C:"
  }
]

返回结果属性说明如下:

  • ${FilesystemName}:实例系统盘盘符。
  • ${FreeSize}:剩余空间(单位B)。

请您根据需要对系统盘进行扩容,或对实例规格进行升级。

具体操作,请参见在线扩容云盘(Linux&Windows)离线扩容云盘(Linux&Windows)

GuestOS.WinSystemConfig

检查系统关键配置状态检查

GuestOS.WinOSVersion.Low

该实例Guest OS的操作系统版本过低,阿里云和微软已不再维护。

{
  "Version": "10.0.14393"
}

返回结果属性说明如下:

${Version}:操作系统版本。

请您根据需要重装系统,升级到更高版本的Windows系统。实例重装系统的方法,请参见更换操作系统(公共镜像)更换操作系统(非公共镜像)

GuestOS.VirtIOVersion.Low

该实例操作系统的VirtIO驱动版本过低,会导致实例磁盘无法在线扩容。

设备{Device}当前使用的VirtIO版本为{Version},该驱动版本不支持磁盘在线扩容。

[
  {
    "Version": 58010,
    "Device": "Red Hat VirtIO Ethernet Adapter"
  }
]

返回结果属性说明如下:

  • ${Device}:驱动名称
  • ${Version}:版本

请根据需要选择是否升级VirtIO的版本。

升级VirtIO版本的方法,请参见Windows实例更新RedHat VirtIO驱动

GuestOS.WinCrashDump.Disabled

该实例系统crash dump配置为关闭状态,当系统出现异常重启或蓝屏时,系统无法保存相关信息进行故障排查。

{
    "Status" : "disable"
}

返回结果属性说明如下:

${Status}:该实例系统crash dump配置状态。

请根据业务需要选择是否要开启crash dump配置。

Windows开启crash dump方法可,请参见Windows系统异常重启以及蓝屏的处理方法

GuestOS.KMSService.MismatchedKey

该实例采用密钥管理服务KMS进行Windows系统激活,但KMS客户机所使用的激活密钥与Windows版本不一致,导致Windows系统激活失败。

{
    "PartialProductKey" : "4M64B"
}

返回结果属性说明如下:

${PartialProductKey}:KMS Client Setup key的最后5位。

请根据Windows激活教程,选择与Windows系统版本匹配的密钥进行激活。

使用KMS激活Windows系统的方法,请参见

Windows系统ECS实例激活失败

GuestOS.KMSService.Disconnected

该实例当前无法正常连接到密钥管理服务(KMS)的激活服务器,导致实例激活失败。

{
  "KMSServerStatus": "KmsServerStable"
}

返回结果属性说明如下:

${KMSServerStatus}: KMS Server状态。

请检查实例内的防火墙配置或者第三方软件,是否拦截KMS激活服务器的访问,并根据需要修改相关配置。

检查KMS激活服务器的方法,请参见Windows系统ECS实例激活失败

GuestOS.SPPSVCService.Unhealthy

该实例的软件保护平台服务(SPPSVC.exe)未正常启动或运行,会导致Windows系统无法激活和无法进入激活设置项。

{
  "SppsvcStatus": "Disabled"
}

返回结果属性说明如下:

${SppsvcStatus}:sppsvc服务状态。

请根据Windows激活教程,尝试重新启动SPPSVC.exe服务,并将SPPSVC负责状态修改为自动(延迟启动),确保该服务下次自动启动。

GuestOS.SystemPatch.Incorrect

该实例安装了不正确的系统补丁,可能导致系统异常重启或夯机。

实例当前错误的补丁如下:

{
  "IncorrectHotfixName": "KB5009547"
}

返回结果属性说明如下:

${IncorrectHotfixName}:异常补丁名称。

请根据业务需要选择合适的时间卸载对应的错误补丁。

卸载Windows补丁的方法,请参见如何卸载Windows实例中的系统补丁

GuestOS.WinFiles.Missing

该实例系统目录(C:\Windows\)中的部分关键系统文件缺失,可能导致实例登录后出现黑屏或运行异常。

{
    "MissingFile" : "C:\\Windows\\write.exe"
  }

${MissingFile}:缺失的系统文件。

请根据业务需要,尽快恢复该系统文件。具体操作,请参见远程登录Windows实例出现黑屏,无法进入桌面如何解决?

GuestOS.OperatingSystem.Unactivated

该实例使用的Windows系统处于未激活状态,可能导致Windows的部分个性化服务无法正常使用。

请根据Windows激活教程,使用正确的密钥管理服务(KMS)激活该实例的Windows系统。具体操作,请参见Windows系统ECS实例激活失败

GuestOS.WinSystemInit

系统初始化状态检查

GuestOS.SysPrepService.Interrupted

该实例因创建时过早重启实例导致系统准备服务(SysPrep)的初始化过程中断,操作系统的部分关键配置未能正确完成,可能导致实例无法正常启动。

{
  "ImageState": "IMAGE_STATE_COMPLETE1"
}

返回结果属性说明如下:

${ImageState}:镜像状态。

由于实例第一次创建时系统初始化未能正确完成,请您根据需要选择通过更换系统盘重装系统,或重新创建一个新实例来替代本实例。

具体操作,请参见更换操作系统(公共镜像)更换操作系统(非公共镜像)

GuestOS.SysPrepService.InitFailed

该实例在第一次创建时的系统初始化流程未能正常结束,可能导致实例无法正常工作。

报错信息如下:

{
  "Events": "install_virtio_error "
}

返回结果属性说明如下:

${Events}:事件。

请您根据需要选择通过更换系统盘重装系统或重新创建一个新实例来替代本实例。

具体操作,请参见更换操作系统(公共镜像)更换操作系统(非公共镜像)

GuestOS.WinSystemUser

Administrator账号检查

GuestOS.WinAdministrator.NotExist

该实例系统账号Administrator不存在,可能会导致服务无法正常访问的情况。

{
  "Status": "disable"
}

返回结果属性说明如下:

${Status}:Administrator启用状态。

请根据业务需要开启Administrator账号。

Windows系统创建账号的方法可,请参见通过管理控制台增加或删除管理员

GuestOS.WinNetworkStatus

网络配置和状态检查

GuestOS.WinNetworkInterfaceDriver.Disabled

该实例的网卡目前处于不可用状态,可能导致实例无法远程连接。

网卡当前状态为关闭。

[
  {
    "Status": "not OK",
    "Device": "Red Hat VirtIO Ethernet Adapter"
  }
]

返回结果属性说明如下:

  • ${Device}:网卡驱动名称
  • ${Status}:状态

请根据需要修复网卡的状态。

检查并修复网卡状态的方法,请参见Windows实例中系统网卡处于不可用状态

GuestOS.WinRDPPort.Closed

该实例系统内端口目前处于未开放状态,或者防火墙处于开启状态,导致无法使用远程桌面连接RDP服务来访问该实例。

[
  {
    "Status": "disable",
    "Port": 3387
  },
  {
    "Status": "disable",
    "Port": 3388
  }
]

返回结果属性说明如下:

  • ${Port}:端口。
  • ${Status}:状态。

请根据需要调整该端口的开放状态。

开启3389端口允许远程桌面连接的方法,请参见Windows实例如何启动远程桌面连接RDP服务

GuestOS.WinDHCPService.Disabled

该实例网卡上的DHCP配置处于关闭状态,可能会导致服务无法访问的情况。

[
  {
    "Status": "enable",
    "Device": "Red Hat VirtIO Ethernet Adapter"
  }
]

返回结果属性说明如下:

  • ${Device}:设备名称。
  • ${Status}:设备状态。

请根据需要调整该端口的开放状态。

开启Windows配置DHCP服务的方法,请参见安装和配置DHCP服务器

GuestOS.WinNetworkInterface.LackIPV4Address

该实例的某个网卡未获取到IPv4地址,可能会导致服务无法访问的情况。

[
  {
    "Name": "eth0"
  }
]

返回结果属性说明如下:

${Name}:网卡名称。

请根据需要检查该实例的DHCP服务是否启用或检查实例的静态地址是否配置。

开启Windows配置DHCP服务的方法,请参见安装和配置DHCP服务器

GuestOS.NetworkProxy.Enabled

该实例配置了网络代理,可能会导致服务无法正常访问的情况。

[
  {
    "Name": "ie"
  }
]

返回结果属性说明如下:

${Name}:网卡上配置的代理。

请根据需要确定是否关闭这些网络代理。

Windows系统关闭网络代理的具体操作,请参见如何重置代理设置

GuestOS.WinPort.Conflict

该实例的远程桌面协议(RDP)服务所使用的端口被其他进程占用,出现端口冲突,可能导致实例无法通过远程桌面进行访问。

{
  "ConflictPort": "3389",
  "ConflictServer": "svchost node"
}
  • ${ConflictPort}:服务端口。
  • ${ConflictServer}占用端口的服务。

请根据业务需要,通过VNC登录实例,并修改前面两个服务使用的端口,确保远程桌面服务能正常工作。具体操作,请参见远程登录Windows实例发生端口冲突如何解决?

GuestOS.WinDiskStatus

Windows磁盘状态检查

GuestOS.SystemDisk.Corrupted

该实例的系统盘(C盘)目前处于异常状态,可能会导致实例重启后无法启动,或实例驱动无法正常安装等。

{
 "Result": "检测结果或者报错信息"
}

返回结果属性说明如下:

${Result}:系统盘检查的结果。

请您选择合适的时间,选择以下2种方式恢复系统盘。

GuestOS.VirtIODriver.DiskIDConflicts

该实例因virtIO驱动版本过低导致出现重复的磁盘uniqueID,在做磁盘重置操作时可能会导致实例上磁盘数据丢失。

拥有相同uniqueID的磁盘信息如下:

{
 "DiskUniqueIds": "磁盘uniqueid列表"
}

返回结果属性说明如下:

${DiskUniqueIds}:磁盘uniqueid列表。

请根据需要尽快升级virtIO驱动解决此问题。

升级virtIO驱动的方法可的具体操作,请参见Windows实例更新virtio驱动

GuestOS.WinFirewall

Windows防火墙状态检查

GuestOS.WinFirewall.Enabled

该实例的防火墙目前处于开启状态,可能会导致服务无法访问的情况。

[
  {
    "Status": "enabled",
    "Name": "Public"
  }
]

返回结果属性说明如下:

${Name}:防火墙名称。

${Status}:状态。

请根据业务需要调整防火墙的相关策略配置。配置防火墙策略的具体操作,请参见Windows Server实例防火墙策略的配置方法

GuestOS.WinDriverStatus

Windows关键驱动状态检查

GuestOS.DiskFilterDriver.Vestigital

该实例的磁盘过滤驱动存在残留文件,可能导致实例无法识别新挂载的磁盘。

{
 "UpperFilters": "Test"
}

返回结果属性说明如下:

  • ${LowerFilters}:下层过滤驱动的名称。
  • ${UpperFilters}:上层过滤驱动的名称。

请根据业务需要,清除无效的磁盘过滤驱动,并重启实例即可。清除无效的磁盘过滤驱动的具体操作,请参见如何检查Windows实例注册表中的磁盘驱动残留项

GuestOS.VirtIODriver.Low

该实例的Virtio驱动版本为{VirtioVersion},此版本太低可能影响实例出现蓝屏、网络丢包、磁盘数据丢失等风险。

{
 "VirtioVersion": "virtio驱动版本",
 "RecommendedVersion":"推荐版本"
}

请根据业务需要,选择合适的时间需要尽快升级系统的VirtIO驱动版本。

升级Windows系统VirtIO驱动版本的具体操作,请参见Windows实例更新virtio驱动

Instance.Type.Xen

该实例的实例规格过老(基于Xen架构),可能导致实例的操作系统启动失败或设备管理器异常。

{
 "Status" : "disable"
}

返回结果属性说明如下:

${Status}:Xen驱动残留,可能造成系统启动失败或者设备管理器异常。

请根据业务需要对实例进行变配,升级到新一代的实例规格。

具体操作,请参见包年包月实例升配规格按量付费实例变配规格

GuestOS.WinSystemProcess

Windows关键系统进程状态检查

GuestOS.RDPService.Unavailable

该实例的远程桌面连接服务(RDP)被禁用或被破坏,导致实例无法通过远程桌面进行访问。

请根据业务需要重启或重新安装远程桌面连接服务(RDP)。

Windows重新安装远程桌面服务的方法,执行命令:

net stop TermService
net start TermService

GuestOS.RDP.BlockedByFirewall

该实例的远程桌面连接服务(RDP)的访问被防火墙拦截,可能导致实例无法通过RDP进行方案。

[
  {
    "Rule": "v2.29|Action=Block|Active=TRUE|Dir=In|Protocol=6|Profile=Public|LPort=3389|Name=RDPPORTLatest-TCP-In|"
  }
]

返回结果属性说明如下:

${Rule}:防火墙规则。

请根据业务需要,选择关闭防火墙,或者在防火墙规则中添加放行RDP(对应3389端口)的规则。

Windows系统中放行RDP访问的具体操作,请参见 Windows Server实例防火墙策略的配置方法

GuestOS.WSUS.Disconnected

该实例的服务器更新服务(WSUS)目前连接异常,可能导致实例操作系统的产品更新无法正常进行。

请根据业务需要重新配置服务器更新服务(WSUS)。具体操作,请参见微软官方文档规划WSUS部署

GuestOS.Metaserver.Disconnected

该实例的元数据服务(metaserver)目前无法正常连接或连接超时,可能导致实例的元数据无法正常访问。

请检查实例的防火墙配置是否拦截了IP地址100.100.100.200,如果该IP地址被拦截,请在防火墙设置中放行该IP地址后再访问元数据服务。

关于实例元数据的更多信息,请参见ECS实例元数据概述

GuestOS.WinLicence.Expired

该实例的多人远程桌面服务的许可证已到期,导致RDP服务无法正常使用,进而导致实例无法通过远程桌面进行访问。

请通过VNC登录实例,并根据业务需要,购买微软多人远程服务授权或者卸载远程桌面服务。

修复Windows远程桌面许可证的方法,请参见远程桌面服务认证到期导致远程登录Windows实例失败如何解决?

GuestOS.WinThirdPartSoftware

第三方软件安装状态检查

GuestOS.Operation.InfluencedByAntivirusProcess

该实例的安装了第三方杀毒软件,可能导致实例的某些管理操作(比如重置密码、无法远程连接等)无法正常工作,进而造成实例异常。

已安装的杀毒软件名称如下:

{
 "AntivirusName": "QQPCRTP"
}

返回结果属性说明如下:

${AntivirusName}:杀毒软件名称。

请根据业务需要选择是否卸载对应软件。

Windows卸载程序的具体操作,请参见在Windows中卸载或删除应用和程序

1.12. 用户行为回溯

诊断指标ID(metricId)

诊断指标说明

诊断结果条目ID(issueId)

诊断指标条目说明

建议操作

Instance.UnexpectedSgCreationOrDeletion

通过角色扮演查询指定时间范围内创建、删除安全组的相关操作,若未创建过AliyunServiceRoleForECSSelfService角色,则系统会自动创建,更多信息,请参见管理实例问题排查诊断服务的关联角色

Instance.UnexpectedSgCreationOrDeletion.Log

展示创建、删除安全组的相关操作。

[
{
"accountId":"11111174379****",
"requestId":"8EB3E59F-878C-5613-8EB3-FE59FDBA****",
"eventSource":"ecs-unit-share.cn-hangzhou.aliyuncs.com",
"eventTime":"2022-11-29 14:51:00",
"eventName":"CreateSecurityGroup",
"sourceIpAddress":"cloudmonitor.aliyuncs.com",
"eventType":"ApiCall",
"referencedResources":"[[i-bp17557glrxatoi4****]]",
"userName":"AliyunServiceRoleForCloudMonitor:cloudmonitor"
}
]

您可以通过操作审计查看更多详情,具体操作,请参见通过操作审计控制台查询事件

Instance.UnexpectedSgMember

通过角色扮演查询指定时间范围内实例加入、移出安全组的相关操作,若未创建过AliyunServiceRoleForECSSelfService角色,则系统会自动创建,更多信息,请参见管理实例问题排查诊断服务的关联角色

Instance.UnexpectedSgMember.Log

展示实例加入、移出安全组的相关操作。

[
{
"accountId":"11111174379****",
"requestId":"8EB3E59F-878C-5613-8EB3-FE59FDBA****",
"eventSource":"ecs-unit-share.cn-hangzhou.aliyuncs.com",
"eventTime":"2022-11-29 14:51:00",
"eventName":"JoinSecurityGroup",
"sourceIpAddress":"cloudmonitor.aliyuncs.com",
"eventType":"ApiCall",
"referencedResources":"[[i-bp17557glrxatoi4****]]",
"userName":"AliyunServiceRoleForCloudMonitor:cloudmonitor"
}
]

您可以通过操作审计查看更多详情,具体操作,请参见通过操作审计控制台查询事件

Instance.UnexpectedFee

通过角色扮演查询指定时间范围内实例费用类的相关操作,若未创建过AliyunServiceRoleForECSSelfService角色,则系统会自动创建,更多信息,请参见管理实例问题排查诊断服务的关联角色

Instance.UnexpectedFee.Log

展示实例费用类的相关操作。

[
{
"accountId":"11111174379****",
"requestId":"8EB3E59F-878C-5613-8EB3-FE59FDBA****",
"eventSource":"ecs-unit-share.cn-hangzhou.aliyuncs.com",
"eventTime":"2022-11-29 14:51:00",
"eventName":"Runinstances",
"sourceIpAddress":"cloudmonitor.aliyuncs.com",
"eventType":"ApiCall",
"referencedResources":"[[i-bp17557glrxatoi4****]]",
"userName":"AliyunServiceRoleForCloudMonitor:cloudmonitor"
}
]

您可以通过操作审计查看更多详情,具体操作,请参见通过操作审计控制台查询事件

Instance.UnexpectedCreationOrRelease

通过角色扮演查询指定时间范围内创建、删除实例的相关操作,若未创建过AliyunServiceRoleForECSSelfService角色,则系统会自动创建,更多信息,请参见管理实例问题排查诊断服务的关联角色

Instance.UnexpectedCreationOrRelease.Log

展示创建、删除实例的相关操作。

[
{
"accountId":"11111174379****",
"requestId":"8EB3E59F-878C-5613-8EB3-FE59FDBA****",
"eventSource":"ecs-unit-share.cn-hangzhou.aliyuncs.com",
"eventTime":"2022-11-29 14:51:00",
"eventName":"Runinstances",
"sourceIpAddress":"cloudmonitor.aliyuncs.com",
"eventType":"ApiCall",
"referencedResources":"[[i-bp17557glrxatoi4****]]",
"userName":"AliyunServiceRoleForCloudMonitor:cloudmonitor"
}
]

您可以通过操作审计查看更多详情,具体操作,请参见通过操作审计控制台查询事件

Instance.UnexpectedRunningStatus

通过角色扮演查询指定时间范围内影响实例运行状态的相关操作,若未创建过AliyunServiceRoleForECSSelfService角色,则系统会自动创建,更多信息,请参见管理实例问题排查诊断服务的关联角色

Instance.UnexpectedRunningStatus.Log

展示影响实例运行状态的相关操作。

[
{
"accountId":"11111174379****",
"requestId":"8EB3E59F-878C-5613-8EB3-FE59FDBA****",
"eventSource":"ecs-unit-share.cn-hangzhou.aliyuncs.com",
"eventTime":"2022-11-29 14:51:00",
"eventName":"Runinstances",
"sourceIpAddress":"cloudmonitor.aliyuncs.com",
"eventType":"ApiCall",
"referencedResources":"[[i-bp17557glrxatoi4****]]",
"userName":"AliyunServiceRoleForCloudMonitor:cloudmonitor"
}
]

您可以通过操作审计查看更多详情,具体操作,请参见通过操作审计控制台查询事件

2. 健康诊断使用

2.1. ECS控制台

  1. 登录ECS管理控制台
  2. 可以通过`运维与监控`->`自助问题排查` 入口发起实例健康诊断(也可以通过`云服务器ECS`` -> `自助问题排查`入口发起)。点击查看历史可以查看之前的诊断报告。

image.png

  1. 发起并等待一段时间后会获得实例的健康诊断报告

image.png

  1. 诊断报告详解

image.png

健康诊断报告由三个部分构成

a. 诊断异常部分。包含诊断结果条目IssueID、异常的解释、异常的建议修复方案、以及异常的详情。

b. 诊断项详情,包括所做的所有诊断指标MetricID、以及每个MetricID是通过还是异常。

c. 报告详细信息,包括资源ID、诊断报告ID、诊断时间、以及诊断范围。

2.2. RAM权限设置

  1. 登录RAM 访问控制
  2. 创建用户

image.png

image.png

image.png

  1. 授权
  • 主账号直接赋予子账号关于ECS的全部权限AliyunECSFullAccess。

image.png

image.png


  • 自定义一个子权限集(类似AliyunECSFullAccess,但是只有诊断相关API的权限),然后赋予子账户。

a. 创建权限策略

image.png

image.png

其中编辑的权限脚本内容如下

{
  "Version": "1",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "ecs:CreateDiagnosticReport",
        "ecs:DescribeDiagnosticReportAttributes",
        "ecs:DescribeDiagnosticReports",
        "ecs:DeleteDiagnosticReports",
        "ecs:CreateDiagnosticMetricSet",
        "ecs:ModifyDiagnosticMetricSet",
        "ecs:DescribeDiagnosticMetricSets",
        "ecs:DeleteDiagnosticMetricSets",
        "ecs:DescribeDiagnosticMetrics"
      ],
      "Resource": [
        "*"
      ],
      "Condition": {}
    }
  ]
}

b. 将新增的权限赋予子账号

image.png

2.3. OpenApi与SDK使用说明

  1. OpenApi与SDK相关配置(以Java调用为例)
  • pom文件
<dependencies>
  <dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>fastjson</artifactId>
    <version>1.2.83</version>
  </dependency>
  <dependency>
    <groupId>com.aliyun</groupId>
    <artifactId>aliyun-java-sdk-core</artifactId>
    <version>4.6.1</version>
  </dependency>
  <dependency>
    <groupId>com.aliyun</groupId>
    <artifactId>aliyun-java-sdk-ecs</artifactId>
    <version>5.11.7</version>
  </dependency>
</dependencies>
  • OpenClient实现
public class OpenClient {
    private IAcsClient client;
    public void initClient() {
        DefaultProfile profile = DefaultProfile.getProfile(
                "your region",          // The region ID
                "your ak",      // The AccessKey ID of the RAM account
                "your sk"); // The AccessKey Secret of the RAM account
        client = new DefaultAcsClient(profile);
    }
    public <R extends AcsResponse> R getResponse(RpcAcsRequest<R> request) {
        try {
            return this.client.getAcsResponse(request);
        } catch (ServerException e) {
            e.printStackTrace();
            return null;
        } catch (ClientException e) {
            e.printStackTrace();
            return null;
        }
    }
}
  1. DescribeDiagnosticMetrics


  • 描述:查询诊断指标列表
  • 请求参数

名称

类型

必填

描述

示例值

RegionId

string

地域 ID

cn-hangzhou

MetricIds

list<string>

诊断指标列表。

['Instance.DiskLoadFailure']

ResourceType

string

支持的资源类型。

instance

NextToken

string

查询凭证(Token)。取值为上一次调用接口返回的NextToken参数值,初次调用接口时无需设置该参数。

caeba0bbb2be03f84eb48b699f0a4883

MaxResults

integer

单次返回的结果数量,默认值为10,最大值为100。

10

  • 返回参数

名称

类型

描述

示例值

RequestId

string

请求 ID。

473469C7-AA6F-4DC5-B3DB-A3DC0DE*****

NextToken

string

本次调用返回的查询凭证值。

caeba0bbb2be03f84eb48b699f0a4883

Metrics

list<Metric>

诊断指标。

Metric

名称

类型

描述

示例值

MetricId

string

诊断指标 ID。

GuestOS.WinFirewall

MetricName

string

诊断指标名称。

CPU诊断

MetricCategory

string

诊断指标分类。

CPU

Description

string

诊断指标描述。

CPU诊断

ResourceType

string

诊断指标支持的资源。

instance

GuestMetric

boolean

是否需要在 GuestOS 内执行脚本。

true

SupportedOperatingSystem

string

取值范围为:

  • Windows
  • Linux
  • All

All

  • api调用示例
// 查询诊断指标列表
    public void describeDiagnosticMetrics() {
        DescribeDiagnosticMetricsRequest request = new DescribeDiagnosticMetricsRequest();
        request.setMaxResults(100);
        DescribeDiagnosticMetricsResponse response = getResponse(request);
        for (DescribeDiagnosticMetricsResponse.Metric metric : response.getMetrics()) {
            System.out.printf("metricName: %s, MetricId: %s, Description: %s, SupportedOperatingSystem: %s, MetricCategory: %s%n", metric.getMetricName(), metric.getMetricId(), metric.getDescription(), metric.getSupportedOperatingSystem(), metric.getMetricCategory());
        }
    }

image.png

  1. CreateDiagnosticMetricSet
  • 描述:调用此接口可以自定义诊断指标集合
  • 请求参数

名称

类型

必填

描述

示例值

RegionId

string

地域 ID。

cn-hangzhou

ResourceType

string

诊断资源类型。

默认值:instance。

instance

MetricSetName

string

诊断指标集合的名称。

远程连接问题诊断

MetricIds

list<string>

诊断指标列表。

['Instance.DiskLoadFailure']

Description

string

诊断指标集合的描述信息。

远程连接问题诊断

  • 返回参数

名称

类型

描述

示例值

RequestId

string

请求 ID。

473469C7-AA6F-4DC5-B3DB-A3DC0DE*****

MetricSetId

string

诊断指标集合的唯一识别码。

dms-o7ymuutup5l*****

  • api调用示例
public void createDiagnosticMetricSet() {
        CreateDiagnosticMetricSetRequest request = new CreateDiagnosticMetricSetRequest();
        request.setMetricSetName("test");
        request.setDescription("测试");
        request.setResourceType("instance");
        // 添加需要诊断的指标ID
        List<String> metricIds = new ArrayList<String>();
        metricIds.add("GuestOS.CloudInitService");
        request.setMetricIdss(metricIds);
        CreateDiagnosticMetricSetResponse response = getResponse(request);
        System.out.printf("requestId %s, metricSetId: %s", response.getRequestId(), response.getMetricSetId());
    }

image.png

  1. DeleteDiagnosticMetricSets
  • 描述:删除资源诊断指标集合
  • 请求参数

名称

类型

必填

描述

示例值

RegionId

string

地域 ID。

cn-hangzhou

MetricSetIds

list<string>

诊断指标集合 ID 列表。最多支持 10 个。

['dms-uf6i0tv2refv8wz*****']

  1. 返回参数

名称

类型

描述

示例值

RequestId

string

请求 ID。

473469C7-AA6F-4DC5-B3DB-A3DC0DE*****

  • api调用示例
// 删除资源诊断指标集合
    public void deleteDiagnosticMetricSet() {
        DeleteDiagnosticMetricSetsRequest request = new DeleteDiagnosticMetricSetsRequest();
        // 添加需要删除的指标集合ID
        List<String> metricSetIds = new ArrayList<String>();
        metricSetIds.add("dms-bp1bj9ch2qh1jjyn4gcb");
        metricSetIds.add("dms-bp1bs2wotj0kg63tltjv");
        request.setMetricSetIdss(metricSetIds);
        DeleteDiagnosticMetricSetsResponse response = getResponse(request);
        System.out.printf("requestId %s", response.getRequestId());
    }

image.png

  1. ModifyDiagnosticMetricSet
  • 描述:修改资源诊断指标集合
  • 请求参数

名称

类型

必填

描述

示例值

RegionId

string

地域 ID。

cn-hangzhou

MetricSetIds

list<string>

诊断指标集合 ID 列表。最多支持 10 个。

['dms-uf6i0tv2refv8wz*****']

ResourceType

string

诊断资源类型。

instance

MetricSetName

string

诊断指标集合的名称。

远程连接问题诊断

MetricIds

list<string>

诊断指标列表。

['Instance.DiskLoadFailure']

Description

string

诊断指标集合的描述信息。

远程连接问题诊断

  1. 返回参数

名称

类型

描述

示例值

RequestId

string

请求 ID。

473469C7-AA6F-4DC5-B3DB-A3DC0DE*****

  • api调用示例
public void modifyDiagnosticMetricSet() {
        ModifyDiagnosticMetricSetRequest request = new ModifyDiagnosticMetricSetRequest();
        request.setMetricSetId("dms-bp12upcwo81ua7iajvf4");
        request.setMetricSetName("test");
        request.setDescription("测试");
        request.setResourceType("instance");
        List<String> metricIds = new ArrayList<String>();
        metricIds.add("Instance.DiskLoadFailure");
        request.setMetricIdss(metricIds);
        ModifyDiagnosticMetricSetResponse response = getResponse(request);
        System.out.printf("requestId %s", response.getRequestId());
    }

image.png

  1. DescribeDiagnosticMetricSets
  • 描述:查询资源诊断集合列表
  • 请求参数

名称

类型

必填

描述

示例值

RegionId

string

地域 ID。

cn-hangzhou

MetricSetIds

list<string>

诊断项集合列表。

['dms-uf6i0tv2refv8wz*****']

Type

string

取值范围:

  • User
  • Common

默认值为User,type值为User时,需要先调用CreateDiagnosticMetricSet创建诊断指标集合,不然会报错

User

ResourceType

string

资源类型。

instance

NextToken

string

查询凭证(Token)。取值为上一次调用接口返回的NextToken参数值,初次调用接口时无需设置该参数。

caeba0bbb2be03f84eb48b699f0a4883

MaxResults

integer

单次返回的结果数量,默认值为10,最大值为100。

10

  • 返回参数

名称

类型

描述

示例值

RequestId

string

请求 ID。

473469C7-AA6F-4DC5-B3DB-A3DC0DE*****

NextToken

string

本次调用返回的查询凭证值。

caeba0bbb2be03f84eb48b699f0a4883

MetricSets

list<MetricSet>

诊断指标集合。

MetricSet

名称

类型

描述

示例值

MetricSetId

string

诊断指标集合 ID。

dms-bp17p0qwtr72zmu*****

MetricSetName

string

诊断指标集合的名称。

远程连接问题诊断

Description

string

诊断指标集合的描述信息。

远程连接问题诊断

Type

string

诊断指标集合类型。取值范围:

  • User:用户。
  • Common:公共。

User

ResourceType

string

支持的资源类型。

instance

MetricIds

list<MetricId>

诊断指标列表。

['Instance.DiskLoadFailure']

  • api调用示例
// 查询资源诊断集合列表
    public void describeDiagnosticSets() {
        DescribeDiagnosticMetricSetsRequest request = new DescribeDiagnosticMetricSetsRequest();
        // 指定返回的结果数量
        request.setMaxResults(100);
        // 制定诊断项集合类型
        request.setType("Common");
        DescribeDiagnosticMetricSetsResponse response = getResponse(request);
        for (DescribeDiagnosticMetricSetsResponse.MetricSet metricSet : response.getMetricSets()) {
            System.out.printf("metricSetId: %s, metricSetName: %s, description: %s, type: %s, resourceType: %s, metricIds: %s%n", metricSet.getMetricSetId(), metricSet.getMetricSetName(), metricSet.getDescription(), metricSet.getType(), metricSet.getResourceType(), metricSet.getMetricIds());
        }
    }

image.png

  1. CreateDiagnosticReport
  • 描述:创建资源诊断报告
  • 请求参数

名称

必填

类型

描述

示例值

RegionId

string

地域 ID。

cn-hangzhou

ResourceId

string

资源 ID。

i-uf6i0tv2refv8wz*****

MetricSetId

string

诊断指标集合 ID。如果为空,则会使用 ECS 实例的默认诊断指标集合 dms-instancedefault。

dms-uf6i0tv2refv8wz*****

StartTime

string

开始时间。只对无需在 GuestOS 内执行云助手指令的诊断指标生效。

2022-07-11T12:00Z

EndTime

string

结束时间。只对无需在 GuestOS 内执行云助手指令的诊断指标生效。

2022-07-11T14:00Z

  • 返回参数

名称

类型

描述

示例值

RequestId

string

请求 ID。

473469C7-AA6F-4DC5-B3DB-A3DC0DE*****

ReportId

string

诊断报告 ID,资源诊断报告的唯一标志。

dr-uf6i0tv2refv8wz*****

  • api调用示例
// 创建资源诊断报告
    public void createDiagnosticReport() {
        CreateDiagnosticReportRequest request = new CreateDiagnosticReportRequest();
        request.setResourceId("i-bp1d1055fpao3jx4qfqa");
        request.setStartTime("2024-07-01T08:00:00Z");
        request.setEndTime("2022-07-01T08:30:00Z");
        CreateDiagnosticReportResponse response = getResponse(request);
        System.out.printf("requestId %s, reportId: %s", response.getRequestId(), response.getReportId());
    }

image.png

  1. DescribeDiagnosticReports
  • 描述:查询资源诊断报告列表
  • 请求参数

名称

类型

必填

描述

示例值

RegionId

string

地域 ID。

cn-hangzhou

ReportIds

list<string>

诊断报告 ID 列表。最多支持100个ID。

['dr-uf6i0tv2refv8wz*****']

ResourceIds

list<string>

资源ID列表,最多支持100个ID。

['i-uf6i0tv2refv8wz*****']

Status

string

报告状态。取值范围:

  • InProgress:诊断中。
  • Failed:诊断失败。
  • Finished:诊断完成。

Finished

Severity

string

严重等级。取值范围:

  • Unknown:初始状态,表示未开始诊断或者诊断过程程序异常退出,无诊断结论。
  • Normal:诊断正常,没有发现问题。
  • Info:有关联信息,可能与异常相关。
  • Warn:有关联信息,可能导致异常。
  • Critical:有关键异常。

Normal

NextToken

string

查询凭证(Token)。取值为上一次调用接口返回的NextToken参数值,初次调用接口时无需设置该参数。

caeba0bbb2be03f84eb48b699f0a4883

MaxResults

integer

单次返回的结果数量,默认值为10,最大值为100。

10

  • 返回参数

名称

类型

描述

示例值

RequestId

string

请求 ID。

473469C7-AA6F-4DC5-B3DB-A3DC0DE*****

NextToken

string

本次调用返回的查询凭证值。

caeba0bbb2be03f84eb48b699f0a4883

Reports

list<Report>

诊断报告列表。

Report

名称

类型

描述

示例值

ResourceId

string

资源 ID。

i-uf6i0tv2refv8wz*****

ResourceType

string

资源类型。

instance

MetricSetId

string

诊断指标集合 ID。

dms-bp17p0qwtr72zmu*****

StartTime

string

开始时间。

2022-07-11T12:00:00Z

EndTime

string

结束时间。

2022-07-11T14:00:00Z

ReportId

string

诊断报告 ID。

dr-uf6i0tv2refv8wz*****

Status

string

诊断报告状态。

Finished

CreationTime

string

诊断报告创建时间。

2022-07-11T12:00:00Z

FinishedTime

string

诊断报告结束时间。

2022-07-11T14:00:00Z

Severity

string

严重等级。取值范围:

  • Unknown:初始状态,表示未开始诊断或者诊断过程程序异常退出,无诊断结论。
  • Normal:诊断正常,没有发现问题。
  • Info:有关联信息,可能与异常相关。
  • Warn:有关联信息,可能导致异常。
  • Critical:有关键异常。

Normal

Issues

list<Issue>

诊断问题列表

Issue

名称

类型

描述

示例值

MetricId

string

诊断指标 ID。

GuestOS.WinFirewall

MetricCategory

string

诊断指标分类。

ECSService.GuestOS

IssueId

string

诊断问题的唯一识别码。

GuestOS.CPU.HighUtiliz*****

Severity

string

诊断指标严重等级。严重等级由轻到重如下:

  • Info:有关联信息,可能与异常相关。
  • Warn:有关联信息,可能导致异常。
  • Critical:有关键异常。

Info

  • api调用示例
// 查询资源诊断报告列表
    public void describeDiagnosticReports() {
        DescribeDiagnosticReportsRequest request = new DescribeDiagnosticReportsRequest();
        request.setMaxResults(100);
        DescribeDiagnosticReportsResponse response = getResponse(request);
        for (DescribeDiagnosticReportsResponse.Report report : response.getReports()) {
            System.out.printf("resourceId: %s, metricSetId: %s, startTime: %s, endTime: %s, reportId: %s, status: %s, creationTime: %s, finishedTime: %s, severity: %s, Issues: %s%n", report.getResourceId(), report.getMetricSetId(), report.getStartTime(), report.getEndTime(), report.getReportId(), report.getStatus(), report.getCreationTime(), report.getFinishedTime(), report.getSeverity(), JSON.toJSONString(report.getIssues()));
        }
    }

image.png

  1. DescribeDiagnosticReportAttributes
  • 描述:查询资源诊断详情
  • 请求参数

名称

类型

必填

描述

示例值

RegionId

string

地域 ID。

cn-hangzhou

ReportId

string

诊断报告 ID。

dr-i-uf6i0tv2refv8wz*****

  • 返回参数

名称

类型

描述

示例值

RequestId

string

请求 ID。

473469C7-AA6F-4DC5-B3DB-A3DC0DE3****

ResourceId

string

资源 ID。

i-uf6i0tv2refv8wz*****

ResourceType

string

资源类型。支持的类型为 instance。

instance

ReportId

string

诊断报告 ID。资源诊断报告的唯一标志。

dr-uf6i0tv2refv8wz*****

Status

string

诊断报告状态。可能值:

  • InProgress:诊断中。
  • Finished:诊断完成。
  • Failed:诊断失败。

Finished



CreationTime

string

诊断报告创建时间。

2022-07-11T12:00:00Z

FinishedTime

string

诊断报告完成时间。

2022-07-11T14:00:00Z

StartTime

string

开始时间。

2022-07-11T12:00:00Z

EndTime

string

结束时间。

2022-07-11T14:00:00Z

Severity

string

报告严重等级。所有指标中最严重的等级,严重等级由轻到重如下:

  • Unknown:初始状态,表示未开始诊断或者诊断过程程序异常退出,无诊断结论。
  • Normal:诊断正常,没有发现问题。
  • Info:有关联信息,可能与异常相关。
  • Warn:有关联信息,可能导致异常。
  • Critical:有关键异常。

Normal

MetricSetId

string

诊断指标集合 ID。

dms-bp17p0qwtr72zmu*****

MetricResults

list<MetricResult>

诊断集合中所有指标的诊断结果。

MetricResult

名称

类型

描述

示例值

MetricId

string

诊断指标 ID。

GuestOS.WinFirewall

MetricCategory

string

诊断指标分类。

CPU

Severity

string

诊断指标严重等级。可能值:

  • Unknown:初始状态,表示未开始诊断或者诊断过程程序异常退出,无诊断结论。
  • Normal:诊断正常,没有发现问题。
  • Info:有关联信息,可能与异常相关。
  • NotSupport:GuestOS 版本不支持诊断该项目。
  • Warn:有关联信息,可能导致异常。
  • Critical:有关键异常。

Normal

Status

string

指标诊断状态。可能值:

  • InProgress:诊断中。
  • Finished:诊断完成。
  • Failed:诊断失败。

Finished

Issues

list<Issue>

诊断问题列表。

Issue

名称

类型

描述

示例值

IssueId

string

诊断问题的唯一识别码。

GuestOS.CPU.HighUtiliz*****

Severity

string

诊断问题严重程度,严重等级由轻到重如下:

  • Info:有关联信息,可能与异常相关。
  • Warn:有关联信息,可能导致异常。
  • Critical:有关键异常。

Info

Additional

string

诊断问题携带的额外数据,帮助理解问题更多信息,数据格式为 JSON 的字符串。

{
"TotalPercent": 95, "TopUtilizationProcesses": [ { "Pid": "1223", "CommandName": "/usr/bin/mem.py", "PhysicalMemoryPercent": 50 } ] }

OccurrenceTime

string

问题发生的时间。

2022-07-11T14:00:00Z

  • api调用示例
// 查询资源诊断详情
    public void describeDiagnosticReportAttributes() {
        DescribeDiagnosticReportAttributesRequest request = new DescribeDiagnosticReportAttributesRequest();
        request.setReportId("dr-bp1jf95ug2tg8htp****");
        DescribeDiagnosticReportAttributesResponse response = getResponse(request);
        for (DescribeDiagnosticReportAttributesResponse.MetricResult metricResult : response.getMetricResults()) {
            System.out.printf("metricId: %s,  metricCategory: %s, severity: %s, status: %s, issues: %s%n", metricResult.getMetricId(), metricResult.getMetricCategory(), metricResult.getSeverity(), metricResult.getStatus(), JSON.toJSONString(metricResult.getIssues()));
        }
    }

image.png

  1. DeleteDiagnosticReports
  • 描述:删除资源诊断报告
  • 请求参数

名称

类型

必填

描述

示例值

RegionId

string

地域 ID。

cn-hangzhou

ReportIds

list<string>

诊断报告 ID 列表。最多支持 100 个 ID。

['dr-uf6i0tv2refv8wz*****']

  • 返回参数

名称

类型

描述

示例值

RequestId

string

请求 ID。

473469C7-AA6F-4DC5-B3DB-A3DC0DE*****

  • api调用示例
// 删除资源诊断报告
    public void deleteDiagnosticReports() {
        DeleteDiagnosticReportsRequest request = new DeleteDiagnosticReportsRequest();
        // 添加需要删除的资源诊断报告ID
        List<String> reportIds = new ArrayList<String>();
        reportIds.add("dr-bp1jf95ug2tg8htp****");
        request.setReportIdss(reportIds);
        DeleteDiagnosticReportsResponse response = getResponse(request);
        System.out.printf("requestId %s", response.getRequestId());
    }

image.png

2.4. 阿里云CLI

  1. 官网介绍
  2. 命令参数介绍:参数参考对应的OpenApi,cols展示的列名,需要与 JSON 数据中的字段相对应。rows指定过滤字段所在的JMESPath路径。
aliyun <product> <ApiName> [--parameter1 value1 --parameter2 value2 ...] --output cols=col1,col2 rows=rows.row[]
  1. 使用示例
  • 查询诊断指标相关示例
  • 查询诊断指标列表
aliyun ecs DescribeDiagnosticMetrics --RegionId TheRegionId --output cols=MetricId,MetricName,Description rows=Metrics[]
+-------------------------------------------------------------------------------------------+
|  MetricId                  | MetricName                  | Description                    | 
|  --------                  | ----------                  | -----------                    |
|  GuestOS.WinUpdatesCheck   |       |     |
|  GuestOS.WinRegistryStatus |  |   |
|  GuestOS.WinSysprep        |      |         |
+-------------------------------------------------------------------------------------------+
  • 资源诊断指标集合相关示例
  • 创建资源诊断指标集合
aliyun ecs CreateDiagnosticMetricSet --RegionId TheRegionId --ResourceType 'instance' --MetricSetName YourMetricSetName --MetricIds.1 'MetricId1' --MetricIds.2 "MetricId2" --output cols=MetricSetId
+----------------------------+
|  MetricSetId               |
|  -----------               |
|  dms-bp13nfncampz98v43q1j  |
+----------------------------+
  • 删除资源诊断指标集合
aliyun ecs DeleteDiagnosticMetricSets --RegionId TheRegionId --MetricSetIds.1 YourMetricSetId
  • 修改资源诊断指标集合
# 修改诊断指标集合的描述
aliyun ecs ModifyDiagnosticMetricSet --RegionId TheRegionId --MetricSetId YourMetricSetId --Description '测试'
  • 查询资源诊断集合列表
aliyun ecs DescribeDiagnosticMetricSets --RegionId TheRegionId --output cols=MetricSetName,Description,MetricSetId,MetricIds rows=MetricSets[]
+----------------------------------------------------------------------------------------------------------------+
|  MetricSetName | Description | MetricSetId              | MetricIds                                            |
|  ------------- | ----------- | -----------              | ---------                                            |
|  test          | 测试         | dms-bp13sbs6q8kj6v8nhdem | [GuestOS.WinRegistryStatus GuestOS.WinUpdatesCheck]  |
|  test          | 测试         | dms-bp12upcwo81ua7iajvf4 | [Instance.DiskLoadFailure]                           |
+----------------------------------------------------------------------------------------------------------------+
  • 资源诊断报告相关示例
  • 创建资源诊断报告
aliyun ecs CreateDiagnosticReport --RegionId TheRegionId --MetricSetId TheMetricId --ResourceId YourResourceId --StartTime '2024-07-01T00:00Z' --EndTime '2024-07-01T01:00Z' --output cols=ReportId
+---------------------------+
|  ReportId                 |
|  --------                 |
|  dr-bp13sbs6q8kj7d02dw5q  |
+---------------------------+
  • 查询资源诊断报告列表
aliyun ecs DescribeDiagnosticReports --RegionId TheRegionId --ReportIds.1 'dr-bp13sbs6q8kj7d02dw5q' --output cols=MetricSetId,Status,Severity rows=Reports.Report[]
+---------------------------------------------+
|  MetricSetId         | Status   | Severity  |
|  -----------         | ------   | --------  |
|  dms-instancedefault | Finished | Normal    |
+---------------------------------------------+
  • 查询资源诊断详情
aliyun ecs DescribeDiagnosticReportAttributes --RegionId TheRegionId --ReportId 'dr-bp13sbs6q8kj7d02dw5q' --output cols=MetricId,Status,Severity,MetricCategory rows=MetricResults.MetricResult[]
+--------------------------------------------------------------------------------------+
|  MetricId                      | Status   | Severity | MetricCategory                |
|  --------                      | ------   | -------- | --------------                |
|  GuestOS.GPUStatus             | Finished | Normal   | ECSService.GuestOS            |
|  Instance.DiagnoseStatus       | Finished | Normal   | ECSService.ServiceHealth      |
|  Instance.ExpenseException     | Finished | Normal   | ECSService.AccountBalance     |
|  Instance.SecurityPunishStatus | Finished | Normal   | ECSService.SecurityGroup      |
|  Instance.RecentUtilHigh       | Finished | Normal   | ECSService.ServiceHealth      |
|  Instance.DiskFull             | Finished | Normal   | ECSService.InstanceStorage    |
|  Instance.SecurityRisk         | Finished | Normal   | ECSService.SecurityGroup      |
|  Instance.BootScreenshot       | Finished | Normal   | ECSService.InstanceConfigure  |
|  Instance.NetworkPacketDrop    | Finished | Normal   | ECSService.InstanceNetwork    |
|  GuestOS.OSOOM                 | Finished | Normal   | ECSService.GuestOS            |
|  GuestOS.TimeSyncService       | Finished | Normal   | ECSService.GuestOS            |
|  GuestOS.SSHServiceStatus      | Finished | Normal   | ECSService.GuestOS            |
|  GuestOS.CloudInitService      | Finished | Normal   | ECSService.GuestOS            |
+--------------------------------------------------------------------------------------+
  • 删除资源诊断报告
aliyun ecs DeleteDiagnosticReports --RegionId TheRegionId --ReportIds.1 'dr-bp13sbs6q8kj7d02dw5q'
相关实践学习
借助OSS搭建在线教育视频课程分享网站
本教程介绍如何基于云服务器ECS和对象存储OSS,搭建一个在线教育视频课程分享网站。
7天玩转云服务器
云服务器ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,可降低 IT 成本,提升运维效率。本课程手把手带你了解ECS、掌握基本操作、动手实操快照管理、镜像管理等。了解产品详情:&nbsp;https://www.aliyun.com/product/ecs
相关文章
|
1天前
|
存储 弹性计算 数据库
阿里云服务器ECS产品试用、ECS试用攻略、试用宝典及试用产品续用相关活动介绍
阿里云服务器ECS产品免费试用是阿里云为新手用户提供的免费体验的权益,旨在为新手开发者提供 0 成本高质量的上云体验服务,打造开放,敏捷的开发者环境。阿里云为广大用户提供基础版、企业版试用产品服务(二选一),帮您0门槛轻松体验1个月,基础版最高可试用4核 (vCPU) 8 GiB配置,企业版最高可最高可试用8核 (vCPU) 16 GiB。本文为大家介绍云服务器ECS产品试用、试用宝典、ECS试用攻略及试用产品续用相关活动,以供参考。
|
2月前
|
编解码 小程序
无影云电脑产品使用黑神话悟空之:游戏服务器更新/配置问题
该文档主要介绍了使用无影云电脑玩《黑神话:悟空》时可能遇到的问题及解决方法,包括游戏服务器更新、配置问题、画质建议及如何开启帧数显示等内容,并提供了详细的步骤指导与参考链接。
|
2月前
|
消息中间件 弹性计算 运维
阿里云ECS事件通知产品详解
介绍阿里云ECS事件通知产品的详情和使用案例,包括控制台、OpenAPI、调试等。
|
2月前
|
存储 弹性计算 监控
阿里云ECS健康状态产品详解
详细介绍阿里云ECS健康状态的功能和使用案例
|
3月前
|
云安全 弹性计算 安全
阿里云服务器基础安全防护简介,云服务器基础安全防护及常见安全产品简介
在使用云服务器的过程中,云服务器的安全问题是很多用户非常关心的问题,阿里云服务器不仅提供了一些基础防护,我们也可以选择其他的云安全类产品来确保我们云服务器的安全。本文为大家介绍一下阿里云服务器的基础安全防护有哪些,以及阿里云的一些安全防护类云产品。
阿里云服务器基础安全防护简介,云服务器基础安全防护及常见安全产品简介
|
4月前
|
弹性计算 NoSQL Shell
云服务器 ECS产品使用问题之执行sh 56.sh报错,该如何解决
云服务器ECS(Elastic Compute Service)是各大云服务商阿里云提供的一种基础云计算服务,它允许用户租用云端计算资源来部署和运行各种应用程序。以下是一个关于如何使用ECS产品的综合指南。
|
4月前
|
弹性计算 Java 应用服务中间件
云服务器 ECS产品使用问题之变更服务器配置时一直显示400异常报错,该怎么办
云服务器ECS(Elastic Compute Service)是各大云服务商阿里云提供的一种基础云计算服务,它允许用户租用云端计算资源来部署和运行各种应用程序。以下是一个关于如何使用ECS产品的综合指南。
|
4月前
|
弹性计算 前端开发 网络安全
云服务器 ECS产品使用问题之遇到报错“failed to create session manager connector for”,该怎么办
云服务器ECS(Elastic Compute Service)是各大云服务商阿里云提供的一种基础云计算服务,它允许用户租用云端计算资源来部署和运行各种应用程序。以下是一个关于如何使用ECS产品的综合指南。
|
4月前
|
弹性计算 安全 Linux
云服务器 ECS产品使用问题之如何处理Linux软件漏洞
云服务器ECS(Elastic Compute Service)是各大云服务商阿里云提供的一种基础云计算服务,它允许用户租用云端计算资源来部署和运行各种应用程序。以下是一个关于如何使用ECS产品的综合指南。
|
4月前
|
弹性计算 开发工具 云计算
云服务器 ECS产品使用问题之vim 路径提示找不到文件,该如何解决
云服务器ECS(Elastic Compute Service)是各大云服务商阿里云提供的一种基础云计算服务,它允许用户租用云端计算资源来部署和运行各种应用程序。以下是一个关于如何使用ECS产品的综合指南。

相关产品

  • 云服务器 ECS