
IT 监控系统是什么
IT 监控系统是用于监测和管理信息技术基础设施、应用程序和服务的软件系统。它会周期性或实时采集监控数据,再用于分析、可视化和告警,帮助团队发现故障、定位问题和评估服务健康度。
IT 监控系统的功能包括指标监控(比如机器利用率、API 延迟、请求成功率)、日志监控(收集分析日志用于故障排查和性能分析)、链路监控(利用微服务埋点技术监控请求粒度的相关数据)。
核心要点
- 监控数据采集不是一种方式解决所有问题,不同对象需要不同采集模型。
- 机器指标通常依赖 Agent;组件指标通常依赖组件 API、Exporter、JMX 或内置
/metrics端点。 - 自研应用指标通常依赖 SDK、Agent 或显式埋点;业务指标可以来自埋点、日志分析或业务库查询。
- 采集方案要同时考虑数据准确性、接入成本、权限边界、性能开销和后续告警分析需求。
IT 监控系统的架构
IT 监控系统架构上大体可分为数据采集层、数据过滤转换提取(即数据 ETL)、数据存储层、展示分析层。
| 层次 | 主要职责 | 常见工具或形态 |
|---|---|---|
| 数据采集层 | 从主机、组件、应用、日志和链路中获取原始数据 | Categraf、Telegraf、Zabbix Agent、Fluent Bit、Filebeat、OpenTelemetry SDK |
| 数据 ETL | 过滤、转换、字段提取、标签补充和数据增强 | Fluentd、Logstash、Vector、采集器内置 Processor |
| 数据存储层 | 保存指标、日志、链路等监控数据 | Prometheus、VictoriaMetrics、Elasticsearch、ClickHouse |
| 展示分析层 | 查询、可视化、告警、排障分析 | Grafana、Kibana、Jaeger、SkyWalking |
IT 监控系统的数据采集方式
本文主要介绍 IT 监控系统中常见的监控数据采集方式,重点放在指标采集。指标可以理解为一组带时间戳的可度量数据,例如某台机器的 CPU 利用率、某个数据库的连接数、某个 API 的请求 QPS 和延迟、某个业务指标的订单量等。
| 指标类型 | 典型对象 | 常见采集方式 | 适用场景 |
|---|---|---|---|
| 机器类指标 | CPU、内存、磁盘、网络 | Agent 读取系统文件或调用系统 API | 主机、虚拟机、容器节点监控 |
| 组件类指标 | MySQL、Redis、Kafka、Elasticsearch | SQL、命令、HTTP API、JMX、Exporter | 中间件和数据库监控 |
| 自研应用指标 | QPS、延迟、错误率、JVM 指标 | SDK、Agent、显式埋点 | 应用性能和服务质量监控 |
| 业务类指标 | 订单量、支付量、在线用户数 | 业务埋点、日志分析、查询业务库 | 业务健康和北极星指标监控 |
机器类指标
机器类型指标的采集比较特殊,自成一系,通常是通过 Agent 采集,比如 Zabbix Agent、Telegraf、Categraf 等。这些 Agent 要部署到机器上,读取机器的一些特殊文件或者调用系统 API 获取机器信息。
比如内存相关的信息,在 Linux 系统里,就是读取 /proc/meminfo 文件;CPU 相关的信息,就是读取 /proc/stat 文件;网络相关的信息,就是读取 /proc/net/dev 文件;磁盘使用率,则是读取 /proc/diskstats 文件并配合 syscall 获取文件系统的使用量信息。如下就是机器的 CPU 利用率的指标:

为了灵活性考虑,也可以让 Agent 调用用户指定的脚本,只要这个脚本输出符合监控系统的格式即可。常用格式有 JSON、Prometheus 格式、InfluxDB 力推的 Influx 格式等。
有人说,机器监控不是必须安装 Agent,比如把机器开启 SNMP 或者 SSH,通过 SNMP 或者 SSH 协议获取机器信息,这种方式也是可行的。但是,本质上,SNMP 也有一个 Agent,就是 snmpd;SSH 的方式也有一个 Agent,就是 sshd。总得有个机制支持监控系统去机器上运行一些逻辑,差别只是这个逻辑由谁提供、如何部署、权限如何控制。
组件类指标
组件类指标的采集方式,通常是连到组件上,获取相关的信息。
比如 MySQL,就是把监控系统采集器看作一个 client,连到 MySQL 上执行一些特定 SQL 语句,进而采集 Performance 数据,比如 show global status、show global variables 等。
比如 Redis,就是把监控系统采集器看作一个 client,连到 Redis 上执行一些特定 Redis 命令,进而采集 Performance 数据,比如 info 等。
比如 Elasticsearch,会暴露一些 HTTP API,比如 _cat 系列 API、_cluster 系列 API、_nodes 系列 API。通过这些 API,可以获取 Elasticsearch 的一些监控信息。
比如 ETCD,会暴露一些 HTTP API,比如 /metrics 端点,通过这个端点可以获取 ETCD 的一些监控信息。
再比如 Kafka,会暴露一些 JMX 端点,通过 JMX 可以获取 Kafka 的一些监控信息。当然,除了 Kafka,很多 Java 类服务都可以暴露 JMX 信息,通过 JMX 获取 GC、内存、线程、类加载等信息。
自研应用类指标
自研应用类指标的采集方式,通常是通过 SDK 或者 Agent,把监控系统的采集能力嵌入到自研应用里,进而采集自定义指标,也就是通常说的埋点。
比如 Prometheus、StatsD、OpenTelemetry 等,都提供了 SDK,可以在自研应用里引入这些 SDK,采集一些自定义指标。
通常 Java 类应用比较简单,只要在启动的时候引入一个 jar 包,然后配置一下,就可以采集到一些 JVM 信息,比如 GC、内存、线程、类加载等信息。Go、C++ 等语言通常需要显式埋点,也就是手工做一些埋点工作。当然,Java 类应用如果要采集自定义业务指标,也需要显式埋点。
业务类指标
业务类指标主要有 3 个来源:像应用类指标那样采集自定义指标,通过日志采集分析获取业务数据,或者通过查询业务库获取数据。
比如有一个业务指标叫订单量,可以周期性查询订单库,得到当前订单总量,再把订单总量存入 Prometheus 之类的监控系统,就可以很方便地做可视化和分析。
业务指标和技术指标的区别在于,业务指标更接近用户影响和经营结果。例如订单量下降、支付成功率下降、在线用户数异常,通常比单台机器 CPU 升高更能说明业务是否受损。因此,在稳定性建设中,业务指标经常会被用作北极星指标或故障发现入口。
采集方式怎么选
选择采集方式时,可以按下面几个问题判断:
- 数据在哪里产生:在操作系统、组件内部、应用代码、日志文件,还是业务数据库。
- 采集是否影响线上系统:查询业务库、执行脚本、拉取组件 API 都要考虑频率、权限和性能开销。
- 是否需要实时性:用于告警的指标通常需要更短采集周期;用于趋势分析的数据可以适当降低频率。
- 字段和标签是否足够:没有服务名、环境、实例、业务线等标签,后续告警路由和故障定位会很困难。
- 是否便于长期维护:自研脚本灵活,但需要维护;标准 Exporter 和 SDK 成本更低,但可能需要适配业务语义。
总结
本文介绍了 IT 监控系统中常见的监控数据采集方式,包括机器类指标、组件类指标、自研应用类指标和业务类指标。不同指标有不同的采集方式,不能简单套用同一种方案。
机器类指标通常依赖 Agent,组件类指标通常依赖组件 API 或 Exporter,自研应用指标依赖 SDK、Agent 或显式埋点,业务类指标可以来自埋点、日志分析或业务库查询。真正可用的采集体系,不只要“采得到”,还要让数据具备稳定标签、合理频率和可用于告警分析的语义。
FAQ
Q1:IT 监控一定要安装 Agent 吗? A:不一定,但总需要某种采集执行机制。Agent、SNMP、SSH、Exporter、SDK 都是在不同位置承担采集逻辑。
Q2:业务指标应该放进监控系统吗? A:应该。业务指标能直接反映用户和业务是否受影响,适合作为故障发现和稳定性度量的重要入口。
Q3:日志采集和指标采集有什么区别? A:指标适合做趋势、聚合和告警;日志适合保留事件细节、错误上下文和业务字段。二者互补,不能互相完全替代。
