云监控通过安装在阿里云主机(ECS实例)和非阿里云主机上的云监控插件,为您采集丰富的操作系统层面的监控指标,您可以为操作系统监控指标设置报警规则。当某个监控指标达到报警条件时,会给您发送报警通知,以便您及时关注其动态。
前提条件
请确保您已在阿里云主机(ECS实例)和非阿里云主机上安装云监控插件。具体操作,请参见安装云监控插件。
监控指标说明
操作系统监控指标的数据采集频率为15秒/次,分类如下:
- CPU相关监控指标 - Windows - 调用ntdll中的NtQuerySystemInformation函数,获取CPU各个部分所花费时间。间隔两次调用该函数即可获得该时间间隔内CPU各个部分所占比率。 
- Linux - 您可以参考 - top命令理解下表中监控指标的含义。
 - 监控指标名称 - 监控指标含义 - 单位 - MetricName - Dimensions - Statistics - 说明(仅用于Linux) - (Agent)cpu.idle - 当前空闲CPU百分比。 - % - cpu_idle - userId、instanceId - Maximum、Minimum、Average - 当前CPU处于空闲状态的百分比。 - (Agent)cpu.system - 当前内核空间占用CPU百分比。 - % - cpu_system - userId、instanceId - Maximum、Minimum、Average - 系统上下文切换的消耗。如果该监控指标数值比较高,则说明服务器开了太多的进程或线程。 - (Agent)cpu.user - 当前用户空间占用CPU百分比。 - % - cpu_user - userId、instanceId - Maximum、Minimum、Average - 用户进程对CPU的消耗。 - (Agent)cpu.wait - 当前等待IO操作的CPU百分比。 - % - cpu_wait - userId、instanceId - Maximum、Minimum、Average - 如果该监控指标数值比较高,则说明IO操作频繁。 - (Agent)cpu.other - 其他占用CPU百分比。 - % - cpu_other - userId、instanceId - Maximum、Minimum、Average - 其他消耗=Nice+SoftIrq+Irq+Stolen。 - (Agent)cpu.total - 当前消耗的总CPU百分比。 - % - cpu_total - userId、instanceId - Maximum、Minimum、Average - 当前消耗=1-Host.cpu.idle 
- 内存相关监控指标 - Windows - 调用kernel32.dll中的GlobalMemoryStatusEx函数获取Windows 32位操作系统当前物理和虚拟内存的使用情况。 
- Linux - 您可以参考 - free命令理解下表中监控指标的含义,数据源:- /proc/meminfo。
 - 监控指标名称 - 监控指标含义 - 单位 - MetricName - Dimensions - Statistics - 说明(仅用于Linux) - (Agent)memory.total.space - 内存总量。 - Byte - memory_totalspace - userId、instanceId - Maximum、Minimum、Average - 服务器的内存总量。 - /proc/meminfo的MemTotal。 - (Agent)memory.free.space - 剩余内存量。 - Byte - memory_freespace - userId、instanceId - Maximum、Minimum、Average - 系统可用内存。 - /proc/meminfo的MemFree。 - (Agent)memory.used.space - 已用内存量。 - Byte - memory_usedspace - userId、instanceId - Maximum、Minimum、Average - 系统已用内存。 - 计算方法:total–free。 - (Agent)memory.actualused.space - 用户实际使用的内存。 - Byte - memory_actualusedspace - userId、instanceId - Maximum、Minimum、Average - 计算方法: - 当/proc/meminfo中有MemAvailable时:total-MemAvailable 
- 当/proc/meminfo中无MemAvailable时:used–buffers-cached 
 说明- 当CentOS 7.2与Ubuntu 16.04以上(包含)的系统使用新的Linux内核时,内存估算更准确,MemAvailable的具体含义,请参见commit。 - (Agent)memory.free.utilization - 剩余内存百分比。 - % - memory_freeutilization - userId、instanceId - Maximum、Minimum、Average - 计算方法: - 当/proc/meminfo中有MemAvailable时:MemAvailable/total×100%。 
- 当/proc/meminfo中无MemAvailable时:(total–actualused)/total ×100%。 
 - (Agent)memory.used.utilization - 内存使用率。 - % - memory_usedutilization - userId、instanceId - Maximum、Minimum、Average - 计算方法: - 当/proc/meminfo中有MemAvailable时:(total-MemAvailable)/total×100%。 
- 当/proc/meminfo中无MemAvailable时:(total–free-buffers-cached)/total×100%。 
 
- 系统平均负载监控指标 - Windows - 无此监控指标。 
- Linux - 您可以参考 - top命令理解下表中监控指标的含义。监控指标数值越大表示系统越繁忙。
 - 监控指标名称 - 监控指标含义 - 单位 - MetricName - Dimensions - Statistics - (Agent)load.1m - 过去1分钟的系统平均负载。 - 无 - load_1m - userId、instanceId - Maximum、Minimum、Average - (Agent)load.5m - 过去5分钟的系统平均负载。 - 无 - load_5m - userId、instanceId - Maximum、Minimum、Average - (Agent)load.15m - 过去15分钟的系统平均负载。 - 无 - load_15m - userId、instanceId - Maximum、Minimum、Average - (Agent)load.1m.percore - CPU平均每核过去1分钟的系统平均负载。 - 无 - load_per_core_1m - userId、instanceId - Maximum、Minimum、Average - (Agent)load.5m.percore - CPU平均每核过去5分钟的系统平均负载。 - 无 - load_per_core_5m - userId、instanceId - Maximum、Minimum、Average - (Agent)load.15m.percore - CPU平均每核过去15分钟的系统平均负载。 - 无 - load_per_core_15m - userId、instanceId - Maximum、Minimum、Average 
- 磁盘相关监控指标 - Windows - 先调用Kernel32.dll中的GetDiskFreeSpaceExA检索磁盘可用空间,获取磁盘的已用存储空间、磁盘使用率、磁盘的剩余存储空间和磁盘存储总量;再调用RegConnectRegistryA函数建立与HKEY_PERFORMANCE_DATA注册表的连接;最后调用RegQueryValueExA函数查询HKEY_PERFORMANCE_DATA注册表中磁盘相关属性(读取次数、写入次数、写入字节数、读取字节数、读取花费时间、写入花费时间和磁盘使用时间)。 
- Linux - 磁盘使用率与inode使用率可以参考 - df命令,磁盘读写可以参考- iostat命令,便于您理解下表中监控指标的含义。
 - 监控指标名称 - 监控指标含义 - 单位 - MetricName - Dimensions - Statistics - Host.diskusage.used - 磁盘的已用存储空间。 - Byte - diskusage_used - userId、instanceId、device - Maximum、Minimum、Average - Host.diskusage.utilization - 普通用户的磁盘使用率。 - % - diskusage_utilization - userId、instanceId、device - Maximum、Minimum、Average - Host.diskusage.free - 普通用户和超级用户的磁盘剩余存储空间。 - Byte - diskusage_free - userId、instanceId、device - Maximum、Minimum、Average - (Agent)disk.usage.avail_device - 普通用户的磁盘剩余存储空间。 - Byte - diskusage_avail - userId、instanceId、device - Maximum、Minimum、Average - Host.diskusage.total - 磁盘存储总量。 - Byte - diskusage_total - userId、instanceId、device - Maximum、Minimum、Average - (Agent)disk.read.bps_device - 磁盘每秒读取的字节数。 - Byte/s - disk_readbytes - userId、instanceId、device - Maximum、Minimum、Average - (Agent)disk.write.bps_device - 磁盘每秒写入的字节数。 - Byte/s - disk_writebytes - userId、instanceId、device - Maximum、Minimum、Average - (Agent)disk.read.iops_device - 磁盘每秒的读请求数量。 - 次/秒 - disk_readiops - userId、instanceId、device - Maximum、Minimum、Average - (Agent)disk.write.iops_device - 磁盘每秒的写请求数量。 - 次/秒 - disk_writeiops - userId、instanceId、device - Maximum、Minimum、Average 
- 文件系统监控指标 - Windows - 无此监控指标。 
- Linux - 您可以参考 - df命令理解下表中监控指标的含义。
 - 监控指标名称 - 监控指标含义 - 单位 - MetricName - Dimensions - Statistics - 说明(仅用于Linux) - (Agent)fs.inode.utilization_device - inode使用率。 - % - fs_inodeutilization - userId、instanceId、device - Maximum、Minimum、Average - Linux系统内部不使用文件名,而使用inode号码来识别文件。当磁盘未存满,但inode已经分配完时,会出现无法在磁盘新建文件的情况,因此需要监控inode使用率。inode数量代表文件系统的文件数量,大量小文件会导致inode使用率过高。 
- 网络相关监控指标 - Windows - 先调用iphlpapi.dll中的GetAdaptersAddresses来获取本机上的适配器地址;再通过调用GetIfTable来获取各个Interface网络指标,包括每秒接收比特数、每秒发送比特数、每秒接收的数据包数、每秒发送的数据包数、接收错误包数和发送错误包数等。 
- Linux - 您可以参考 - ss命令理解TCP连接数采集。说明- TCP连接数是指ECS主机中所有占用TCP协议的连接。 - TCP连接数默认采集TCP_TOTAL(总连接数)、ESTABLISHED(正常连接状态)和NON_ESTABLISHED(非连接的状态连接数,ESTABLISHED以外的所有状态)。 
- 您可以参考 - iftop命令理解下表中网络相关监控指标的含义。
 
 - 监控指标名称 - 监控指标含义 - 单位 - MetricName - Dimensions - Statistics - (Agent)network.in.rate_device - 网卡每秒接收的比特数,即网卡的下行带宽。 - bit/s - networkin_rate - userId、instanceId、device - Maximum、Minimum、Average - (Agent)network.out.rate_device - 网卡每秒发送的比特数,即网卡的上行带宽。 - bit/s - networkout_rate - userId、instanceId、device - Maximum、Minimum、Average - (Agent)network.in.packages_device - 网卡每秒接收的数据包数。 - 个/秒 - networkin_packages - userId、instanceId、device - Maximum、Minimum、Average - (Agent)network.out.packages_device - 网卡每秒发送的数据包数。 - 个/秒 - networkout_packages - userId、instanceId、device - Maximum、Minimum、Average - (Agent)network.in.errorpackages_device - 设备驱动器检测到的接收错误包的数量。 - 个/秒 - networkin_errorpackages - userId、instanceId、device - Maximum、Minimum、Average - (Agent)network.out.errorpackages_device - 设备驱动器检测到的发送错误包的数量。 - 个/秒 - networkout_errorpackages - userId、instanceId、device - Maximum、Minimum、Average - (Agent)network.tcp.connection_state - 各种状态下的TCP连接数包括:LISTEN、SYN_SENT、ESTABLISHED、SYN_RECV、FIN_WAIT1、CLOSE_WAIT、FIN_WAIT2、LAST_ACK、TIME_WAIT、CLOSING和CLOSED。 - Count - net_tcpconnection - userId、instanceId、state - Maximum、Minimum、Average 
- Top5进程相关监控指标 - Windows - 查询 - 先通过调用Kernel32.dll中的OpenProcess函数进入进程,间隔两次调用GetProcessTimes获取CPU各部分消耗的时间来获得在时间间隔内process中CPU各部分所花费的时间比率;再调用RegConnectRegistryA函数建立与HKEY_PERFORMANCE_DATA注册表的连接,调用RegQueryValueExA函数查询HKEY_PERFORMANCE_DATA注册表中进程相关属性(进程ID、进程的父进程号、优先级、虚拟内存、常驻内存、共享内存、进程名、打开文件数、包含线程数、页错误、读取字节和写入字节)。 
- 计数(Host.process.number) - 先调用OpenProcess打开需要查询的进程,再调用NTDLL中的NtQueryInformationProcess函数获得进程RTL_USER_PROCESS_PARAMETERS的参数信息,最后通过ReadProcessMemory函数获得进程cmdline,从而获得进程args和运行root路径,即进程当前文件夹路径。 
- 先调用OpenProcessToken获取访问Token的句柄,再调用GetTokenInformation获取Token信息,最后通过LookupAccountSid获得进程的用户名和用户组。 
- 对于每条进程的进程args和运行root路径,与进程当前文件夹路径、用户名和用户组进行匹配,与关键字match的计数+1。 
 
 
- Linux - 进程的CPU使用率和内存使用率可参考 - top命令,CPU使用率为多核使用情况。
- Host.process.openfile可参考 - lsof命令。
- Host.process.number可参考 - ps aux | grep '<关键字>'命令。
 
 - 监控指标名称 - 监控指标含义 - 单位 - MetricName - Dimensions - Statistics - 备注 - (Agent)process.cpu_pid - 某个进程消耗的CPU百分比。 - % - process.cpu - userId、instanceId、name、pid - Average - 不支持设置报警。 - (Agent)process.memory_pid - 某个进程消耗的内存百分比。 - % - process.memory - userId、instanceId、name、pid - Average - 不支持设置报警。 - (Agent)process.openfile_pid - 当前进程打开文件数。 - 个 - process.openfile - userId、instanceId、name、pid - Average - 不支持设置报警。 - (Agent)process.count_processname - 指定关键字的进程数。 - 个 - process.number - userId、instanceId、processName - Average - 不支持设置报警。