蓝鲸-监控告警

目前覆盖的监控对象包含主机层、组件层、服务拨测,对于无法开箱即用的监控对象可以使用脚本采集、日志采集以及组件二次开发,通过仪表盘实现自定义可视化视图呈现,基于iPaaS的产品设计(关联CMDB、作业执行、数据平台等)天然打破"竖井式"产品设计理念,依托于故障自愈实现告警的无人值守!

主机监控

支持以主机为单元的基础性能指标查看、告警策略配置、告警记录等功能。指标支持CPU、内存、磁盘、网络、进程、系统、事件(corefile、主机重启等)等7类共30~40项指标。

指标定义

指标 类型 单位 含义 采集方法(Linux) 采集方法(Windows)      
5分钟平均负载 CPU % 五分钟内同时处于就绪状态的平均进程数 awk '{print $2}' /proc/loadavg N/A      
cpu总使用率 CPU % 当前消耗的总CPU百分比 delta(busy) / delta(total) * 100 busy = user + sys + nice + iowait + irq + softirq + steal + guest + guestnice + stolen total = busy + idle for /f "tokens=1,2,* delims==" %i in ('wmic path Win32_PerfFormattedData_Counters_ProcessorInformation where "Name='_Total'" get PercentIdleTime/value \ findstr PercentIdleTime') do (set /a 100-%j)    
cpu单核使用率 CPU % 当前单个CPU消耗的百分比 delta(busy) / delta(total) * 100 busy = user + sys + nice + iowait + irq + softirq + steal + guest + guestnice + stolen total = busy + idle for /f "tokens=1,2,* delims==" %i in ('wmic path Win32_PerfFormattedData_Counters_ProcessorInformation where "not name like '%Total%'" get PercentIdleTime/value \ findstr PercentIdleTime') do (set /a 100-%j)    
接收字节流量 网络 KB/s 网卡每秒接收的比特数,即网卡的上行带宽 读取/proc/net/dev文件 第1项SpeedRecv = delta(new.BytesRecv, old.BytesRecv) / interval wmic path Win32_PerfRawData_Tcpip_NetworkInterface get BytesReceivedPersec/value \ findstr BytesReceivedPersec    
发送字节流量 网络 KB/s 网卡每秒发送的比特数,即网卡的下行带宽 读取/proc/net/dev文件第9项SpeedSent = delta(new.BytesSent, old.BytesSent) / interval wmic path Win32_PerfRawData_Tcpip_NetworkInterface get BytesSentPersec/value \ findstr BytesSentPersec    
发送包速率 网络 个/s 网卡每秒接收的数据包数 读取/proc/net/dev文件 第10项 SpeedPacketsSent = (counterDiff(once.Stat[i].PacketsSent, val.PacketsSent, NetCoutnerMaxSize)) / interval wmic path Win32_PerfRawData_Tcpip_NetworkInterface get PacketsSentPersec/value \ findstr PacketsSentPersec    
接收包速率 网络 个/s 网卡每秒发送的数据包数 读取/proc/net/dev文件 第2项 SpeedPacketsRecv = delta(new.PacketsRecv, old.PacketsRecv) / interval wmic path Win32_PerfRawData_Tcpip_NetworkInterface get PacketsReceivedPersec/value | findstr PacketsReceivedPersec      
established连接数 网络 当前服务器下TCP链接处于ESTABLISHED状态的连接数 系统netlink实现 验证方法netstat -pant\ grep ESTABLISHED netstat -ano -p tcp | more +4 | find " ESTABLISHED "    
time_wait连接数 网络 当前服务器下TCP链接处于TIME_WAIT状态的连接数 系统netlink实现 验证方法netstat -pant\ grep TIME_WAIT netstat -ano -p tcp | more +4 | find " TIME_WAIT "    
listen连接数 网络 当前服务器下TCP链接处于LISTEN状态的连接数 系统netlink实现 验证方法netstat -pant\ grep LISTEN netstat -ano -p tcp | more +4 | find " LISTENING "    
last_ack连接数 网络 当前服务器下TCP链接处于LAST_ACK状态的连接数 系统netlink实现 验证方法netstat -pant\ grep LAST_ACK netstat -ano -p tcp | more +4 | find " LAST_ACK "    
syn_recv连接数 网络 当前服务器下TCP链接处于SYN_RECV状态的连接数 系统netlink实现 验证方法netstat -pant\ grep SYNC_RECV netstat -ano -p tcp | more +4 | find " SYN_RECV "    
syn_sent连接数 网络 当前服务器下TCP链接处于SYN_SENT状态的连接数 系统netlink实现 验证方法netstat -pant\ grep SYNC_SENT netstat -ano -p tcp | more +4 | find " SYN_SENT "    
fin_wait1连接数 网络 当前服务器下TCP链接处于FIN_WAIT1状态的连接数 系统netlink实现 验证方法netstat -pant\ grep FIN_WAIT1 netstat -ano -p tcp | more +4 | find " FIN_WAIT_1 "    
fin_wait2连接数 网络 当前服务器下TCP链接处于FIN_WAIT2状态的连接数 系统netlink实现 验证方法netstat -pant\ grep FIN_WAIT2 netstat -ano -p tcp | more +4 | find " FIN_WAIT_2 "    
closing连接数 网络 当前服务器下TCP链接处于CLOSING状态的连接数 系统netlink实现 验证方法netstat -pant\ grep CLOSING netstat -ano -p tcp | more +4 | find " CLOSING "    
closed状态连接数 网络 当前服务器下TCP链接处于CLOSED状态的连接数 系统netlink实现 验证方法netstat -pant\ grep CLOSED netstat -ano -p tcp | more +4 | find " CLOSE "    
UDP接收包量 网络 UDP包接受数 读取 /proc/net/snmp 文件 InDatagrams项 cat /proc/net/snmp\ grep Udp:\ grep -v 'InDatagrams'\ awk '{print $2}' wmic path Win32_PerfFormattedData_Tcpip_UDPv4 get DatagramsReceivedPersec/value
UDP发送包量 网络 UDP包发送数 读取 /proc/net/snmp 文件 OutDatagrams项 cat /proc/net/snmp\ grep Udp:\ grep -v 'InDatagrams'\ awk '{print $5}' 读取/proc/net/dev文件 第2项 SpeedPacketsRecv = delta(new.PacketsRecv, old.PacketsRecv) / interval
可用物理内存 内存 MB 可用内存容量 读取 /proc/meminfo 文件 MemTotal字段*1024 cat /proc/meminfo \ grep 'MemTotal'\ awk -F ':' '{print $2}'\ awk '{print $1}'\ awk '{print $1 * 1024}'
交换分区已用量 内存 MB 交换分区使用容量 读取 /proc/meminfo 文件 golang系统调用syscall.Sysinfo sysinfo.Totalswap - sysinfo.Freeswap 验证方法free -m wmic os get TotalSwapSpaceSize/value      
物理内存使用率 内存 % 内存使用百分比 读取 /proc/meminfo 文件[MemTotal-MemFree]/MemTotal*100.0 wmic os get FreePhysicalMemory,TotalVisibleMemorySize/value findstr "FreePhysicalMemory TotalVisibleMemorySize"    
物理内存使用量 内存 MB 已经使用的内存容量 读取 /proc/meminfo 文件[MemTotal-MemFree]*1024 wmic os get FreePhysicalMemory,TotalVisibleMemorySize/value \ findstr "FreePhysicalMemory TotalVisibleMemorySize"    
应用内存使用量 内存 MB 应用进程使用的内存量 读取 /proc/meminfo 文件 如果有MemAvailable字段(不同系统版本有差异)(MemTotal-MemAvailable)/1024,如果没有该字段,MemAvailable=MemFree+Buffers+Cached N/A      
应用内存使用率 内存 % 应用进程内存量占总内存的百分比 读取 /proc/meminfo 文件 (MemTotal-MemAvailable)/(MemTotal*100.0),如果没有MemAvailable字段,则MemAvailable=MemFree+Buffers+Cached N/A      
磁盘使用率 磁盘 % 磁盘已用空间的百分占比 golang 系统调用syscall.Statfs 相当于df for /f "tokens=1,2,* delims==" %i in ('wmic path Win32_PerfFormattedData_PerfDisk_LogicalDisk where "name like '%:%'" get PercentFreeSpace/value \ findstr PercentFreeSpace') do (set /a 100-%j)    
读速率 磁盘 次/s 磁盘每秒输出次数 读取 /proc/diskstats 每一行的第四项 float64((new_stat.ReadCount - stat.ReadCount)) / 60 只上报逻辑分区 wmic path Win32_PerfFormattedData_PerfDisk_LogicalDisk get DiskReadsPersec/value      
写速率 磁盘 次/s 磁盘每秒写入次数 读取 /proc/diskstats第8项 float64((new_stat.WriteCount - stat.WriteCount)) / 60 只上报逻辑分区 wmic path Win32_PerfFormattedData_PerfDisk_LogicalDisk get DiskWritesPersec/value      
磁盘IO使用率 磁盘 % 磁盘处于活动时间的百分比 读取 /proc/diskstats 文件读取 /proc/diskstats第13项 (new_stat.IoTime - stat.IoTime)/60.0 / 1000.0 for /f "tokens=1,2,* delims==" %i in ('wmic path Win32_PerfFormattedData_PerfDisk_LogicalDisk where "Name='_Total'" get PercentIdleTime/value \ findstr PercentIdleTime') do (set /a 100-%j)    
系统进程数 进程 系统已启动进程数量 抓取/proc 目录下所有子目录数量 wmic path win32_process get ProcessId/value findstr ProcessId    
Agent心跳丢失-GSE 事件   监测GSE的Agent是否正常 N/A N/A      
磁盘只读-GSE 事件   监测磁盘状态 N/A N/A      
磁盘写满-GSE 事件   监测磁盘状态 N/A N/A      
Corefile产生-GSE 事件   监测/proc/sys/kernel/core_pattern中目录内文件的变化 N/A N/A      
PING不可达告警-GSE 事件   监测PING不可达事件告警 N/A N/A      
进程端口 事件   进程对应端口 N/A wmic path win32_process get */value 和 netstat -ano      
自定义字符型 事件   N/A N/A N/A      
系统启动时间异常 事件   监测系统启动异常告警 N/A N/A      
                 

进程资源

采集 应用程序 所占用系统资源,主要用于开发监测单个程序占用的资源。

适用于 LinuxWindows

监控指标

指标 单位 具体含义 备注
Process.CPU % CPU使用率 cpu utilization of the process in "##.#" format. Currently, it is the CPU time used divided by the time the process has been running (cputime/realtime ratio),expressed as a percentage.
Process.Mem % 内存使用率 ratio of the process’s resident set size to the physical memory on the machine, expressed as a percentage.
Process.FileDescriptor 文件句柄数 lsof -p ${pid} 来获取单个进程占用的文件句柄数
Process.RES MB 物理内存 resident set size, the non-swapped physical memory that a task has used . (alias rssize, rsz).
Process.VIRT MB 虚拟内存 virtual memory size of the process. Device mappings are currently excluded.

FAQ

  1. 问:一个二进制程序启动多个进程,仅pid不同,可以监控吗?

    答: 监控先识别进程二进制文件名称,然后匹配出该名称下所有进程

    组件监控

  2. 组件监控

    监控常见开源组件及商业中间件的性能指标,比如Nginx的每分钟客户端请求数(req_per_min)、等待中的连接数(waiting)等,或Oracle的并发等待时间( CONCURRENCY_WAIT_TIME)等。 图1. 组件监控

    图2. Nginx关键性能指标监控

    图3. Oracle关键性能指标监控

    蓝鲸监控除内置组件性能指标的采集能力,同时兼容Prometheus Exporter的导入及开发能力,全面覆盖组件的采集能力。

    采集指标

  3. 指标 单位 具体含义
    jvm_buffer_pool_used_bytes MB 已使用缓冲池的大小
    jvm_buffer_pool_capacity_bytes MB 缓冲池的字节容量
    jvm_buffer_pool_used_buffers 已经使用的缓冲数量
    jmx_config_reload_success_total 已成功重新加载配置的次数
    jvm_threads_current 当前线程数
    jvm_threads_daemon 当前后台线程数
    jvm_threads_peak 当前峰值线程数
    jvm_threads_started_total 已经启动的线程计数
    jvm_threads_deadlocked 等待获取对象监视器或自己的同步器的死锁线程数
    jvm_threads_deadlocked_monitor 等待获取对象监视器的死锁线程数
    jmx_scrape_duration_seconds scrape的时间
    jmx_scrape_error scrape失败次数
    jvm_classes_loaded 当前加载的类数量
    jvm_classes_loaded_total 从JVM开始执行以来已经加载的类的总数
    jvm_classes_unloaded_total 从JVM开始执行以来未加载的类的总数
    jvm_info JVM版本信息
    jvm_memory_bytes_used MB 已经使用的内存
    jvm_memory_bytes_committed MB 已经提交的内存
    jvm_memory_bytes_max MB 最大内存
    jvm_memory_bytes_init MB 初始化内存
    jvm_memory_pool_bytes_used MB 内存池中已经使用的内存
    jvm_memory_pool_bytes_committed MB 内存池中已经提交的内存
    jvm_memory_pool_bytes_max MB 内存池中最大内存
    jvm_memory_pool_bytes_init MB 内存池中初始化内存
    jmx_config_reload_failure_total 配置reload失败的次数
    jvm_gc_collection_seconds_count

    gc时间

自定义监控

当你需要对业务指标或蓝鲸监控未内置的监控对象做监控时,通过自定义监控可实现你的监控需求。

大屏展示

通过仪表盘功能可以对当前业务下的监控对象做可视化分析,实现你的个性化展示和监控需求. 

告警自动化处理

监控的告警自动处理能力依托于PaaS上的故障自愈上,请在访问故障自愈的在线文档了解详情。

图1. 故障自愈执行列表

图2. 单个告警执行故障自愈详情

告警检测和收敛

告警检测和收敛是监控的核心能力之一,监控支持静态阈值、同比、环比等多种检测算法,其中同比、环比更适合周期性时间序列数据的检测。

通过X分钟内满足Y次检测算法实现告警防抖动。

此外检测算法的组合策略,可设置同时满足多种检测算法才触发告警。

操作审计

记录采集、监控策略、视图以及其他设置的新建、修改、删除操作,追溯每一条变更。

权限管理

监控的权限体系分2个层面:业务隔离业务下角色隔离,均是基于配置平台(CMDB)实现.

提供了 谁能访问该业务谁可查看或变更该业务配置 的功能。

业务隔离

配置平台业务间的权限通过业务中的运维人员、产品人员、测试人员、开发人员以实现业务隔离(不同业务,拥有对应业务权限的人员才能访问)

monitor在配置中心拥有 蓝鲸业务3的业务权限  

他在监控中也只有这2个业务的权限,因为监控继承了CMDB权限。

业务下角色隔离

分为 查询变更 权限,基于配置平台(CMDB)针对单个业务可设置运维测试开发产品权限。

默认运维拥有 查询变更 权限,其他人员拥有 查询 权限。

根据实际使用场景,可以针对单个角色做权限调整。

你可能感兴趣的:(运维管理,运维,监控)