监控数据采集方式和原理工程化
读取/proc目录
/proc 目录保存了系统的运行时信息。例如: 内存信息 /proc/meminfo 网卡信息 /proc/net/dev 这些数据可以经过二次计算来获取想要的指标
执行命令行工具
执行脚本或命令,解析输出来获取指标。例如获取端口监听情况, ss -tln|grep 9090。 但是这些脚本或者工具存在兼容性问题,并不是所有机器都包含这些工具。
远程黑盒探测
典型的探测手段有 ICMP TCP HTTP。例如prometheus 的 blackbox exporter 就是专门处理此种问题。
拉取特定协议的数据
请求指定接口,返回指标数据,转换为监控平台支持的格式。例如ES的 /_cluster/health接口;目前热门组件大都在支持prometheus格式的接口,如RabbitMQ。
连接到目标对象执行命令
主要流程是连接到指定程序,执行特定命令,将获取的数据解析为指标。例如获取mysql的最大连接数 show global variables like '%onn%'; 也可以通过执行sql来获取一些业务指标数据。
代码埋点
在应用中内嵌一些监控相关的SDK,在指定的代码中执行监控逻辑,调用次数,耗时等。例如javaagent可以无侵入监控程序。
日志解析
将程序的输出日志,进行解析获取指标。例如获取OOM次数等。