监控数据的采集方式及原理

2023-09-21 22:05:05

采集方法使用频率从高到低依次是读取 /proc目录、执行命令行工具、远程黑盒探测、拉取特定协议的数据、连接到目标对象执行命令、代码埋点、日志解析。

读取 /proc目录

/proc是一个位于内存中的伪文件系统,而在该目录下保存的不是真正的文件和目录,而是一些“运行时”信息,Linux 操作系统层面的很多监控数据,比如内存数据、网卡流量、机器负载等,都是从 /proc中获取的信息。
内存总量、剩余量、可用量、Buffer、Cached 等数据都可以轻易拿到。当然,/proc/meminfo 没有使用率、可用率这样的百分比指标,这类指标需要二次计算,可以在客户端采集器中完成,也可以在服务端查询时现算。内存相关的指标都是 Gauge 类型的。要是不明白什么是Gauge类型,可以参考《监控基本概念》

执行命令行工具

这种方法调用一下系统命令,解析输出就可以了。比如我们想获取 9090 端口的监听状态,可以使用 ss命令ss -tln|grep 9090,想要拿到各个分区的使用率可以通过df命令 df -k。但是这个方式通用性不好,性能也不好。
就拿ss来说明,不是所有的操作系统都安装了ss,每个Linux发行版的ss版本可能不一致,这样的话就会不好解析输出结果,另外这还需要开启ss一个进程,影响了性能。

远程黑盒探测

典型的手段有HTTPICMPTCP等三种。
ICMP协议,我们可以通过Ping工具做测试,在Linux执行ping -c 3 www.baidu.com可以得到如下图的结果:
在这里插入图片描述

这里我们使用 Ping 工具向 Baidu 发了 3 个数据包,得到了多个指标数据。

丢包率:0%
min rtt:29.322
avg rtt:29.574
max rtt:29.921
ttl:52

监控采集器和手工 Ping 测试的原理是一样的,也是发几个包做统计。不过有些机器是禁 Ping 的,这时候我们就可以通过 TCP 或 HTTP 来探测。对于 Linux 机器,一般是会开放 sshd 的 22 端口,那我们就可以用类似 telnet 的方式探测机器的 22 端口,如果成功就认为机器存活。

对于 HTTP 协议的探测,除了基本的连通性测试,还可以检查协议内容,比如要求返回的 status code 必须是 200,返回的 response body 必须包含 success 字符串,如果任何一个条件没有满足,从监控的角度就认为是异常的。

黑盒监控是把监控对象当成一个黑盒子,不去了解其内部运行机理,只是通过几种协议做简单探测。

拉取特定协议的数据

这是白盒监控的方法。白盒监控收集能够反映监控对象内部运行健康度的指标。但是监控对象的内部指标,从外部其实是无法拿到的,所以它的指标,需要监控对象自身想办法暴露出来。最典型的暴露方式,就是提供一个 HTTP 接口,在 response body 中返回监控指标的数据,比如 Elasticsearch 的 /_cluster/health接口;比如 RabbitMQ,访问/api/overview 可以拿到 Message 数量、Connection 数量等概要信息;再比如 Kubelet,访问/stats/summary可以拿到 Node 和 Pod 等很多概要信息。
不同的接口返回的内容虽然都是指标数据,但是要推给监控服务端,还是要做一次格式转换,比如统一转换为 Prometheus 的文本格式。要是这些组件都直接暴露 Prometheus 的协议数据就好了,使用统一的解析器,就能大大简化监控采集逻辑。
这种拉取监控数据的方式虽然需要做一些数据格式的转换,但并不复杂。因为目标对象会把需要监控的数据直接通过接口暴露出来,监控采集器把数据拉到本地做格式转换即可。

连接到目标对象执行命令

目前最常用的数据库就是 MySQL 和 Redis 了,拿这两个数据库举个例子。
连接到MySQL命令行之后,可以执行show global status like '%onn%';来看一下相关数据:
在这里插入图片描述
Threads_connected 表示当前有多少连接,Max_used_connections 表示曾经最多有多少连接,Connections 表示总计接收过多少连接。

Redis 也是类似的,比如我们通过 redis-cli 登录到命令行,执行 info memory 命令,就可以看到很多内存相关的指标。

127.0.0.1:6379> info memory
# Memory
used_memory:1345568
used_memory_human:1.28M
used_memory_rss:3653632
used_memory_rss_human:3.48M
used_memory_peak:1504640
used_memory_peak_human:1.43M
used_memory_peak_perc:89.43%
used_memory_overhead:1103288
used_memory_startup:1095648
used_memory_dataset:242280
used_memory_dataset_perc:96.94%

代码埋点

所谓的代码埋点方式,是指应用程序内嵌一些监控相关的 SDK,在请求的关键链路上调用 SDK 的方法,告诉 SDK 当前是个什么请求、耗时多少、是否成功之类的,SDK 汇总这些数据并二次计算,最终推给监控服务端。

日志解析

很多程序可能是外采的,我们没法修改它的源代码,这时候就要使用日志解析的方式了。一般程序都会打印日志,我们可以写日志解析程序,从日志中提取一些关键信息,比如从业务日志中很容易拿到 Exception 关键字出现的次数,从接入层日志中很容易就能拿到某个接口的访问次数。

此文章为9月Day 20学习笔记,内容来源于极客时间《运维监控系统实战笔记》

更多推荐

简单的分析下dart实现grpc客户端的流程,以helloworld为例

第三步:实现实现gRPC方法在HelloWorldClient类中,为每个定义在.proto文件中的rpc方法实现对应的Dart方法。简单的分析下dart实现grpc客户端的流程,以helloworld为例这里给出helloworld的proto文件,grpc协议下客户端和服务端都只需要关注相同的proto文件并以自己

JVM-环境准备&性能指标&基础知识

环境准备&性能指标&基础知识环境准备JDK—工具JDK(JavaDevelopmentKit)是用于开发Java应用程序的软件开发工具集合,包括了Java运行时的环境(JRE)、解释器(Java)、编译器(javac)、Java归档(jar)、文档生成器(Javadoc)等工具。简单的说我们要开发Java程序,就需要安

YOLOv8快速复现 训练 SCB-Dataset3-S 官网版本 ultralytics

目录0相关资料SCB-Dataset3-S数据训练yaml文件YOLOv8训练SCB-Dataset3-S相关参数0相关资料YOLOV8环境安装教程.:https://www.bilibili.com/video/BV1dG4y1c7dH/YOLOV8保姆级教学视频:https://www.bilibili.com/v

【R语言】完美解决devtools安装GitHub包失败的问题(以gwasglue为例)

Rstudio,R4.3.1,命令在Rstudio的命令行即console中运行。文章目录一、问题复述二、分析三、解决四、安装示例:gwasglue一、问题复述使用devtools安装一个github的包。devtools:devtools是R语言中一个非常有用的包,它提供了一套工具和函数,用于开发、测试和维护R包,d

Jenkins自动化部署前后端分离项目 (svn + Springboot + Vue + maven)有图详解

1.准备工作本文的前后端分离项目,技术框架是:Springboot+Vue+Maven+SVN+Redis+Mysql+Nginx+JDK所以首先需要安装以下:在腾讯云服务器OpenCLoudOS系统中安装jdk(有图详解)在腾讯云服务器OpenCLoudOS系统中安装mysql(有图详解)在腾讯云服务器OpenCLo

Fink--3、Flink运行时架构(并行度、算子链、任务槽、作业提交流程)

1、系统架构(以Standalone会话模式为例)1、作业管理器(JobManager)JobManager是一个Flink集群中任务管理和调度的核心,是控制应用执行的主进程。也就是说,每个应用都应该被唯一的JobManager所控制执行。JobManager又包含三个不同的组件(1)JobMasterJobMaste

性能测试、负载测试、压力测试、稳定性测试简单区分

是一个总称,可细分为性能测试、负载测试、压力测试、稳定性测试。性能测试以系统设计初期规划的性能指标为预期目标,对系统不断施加压力,验证系统在资源可接受范围内,是否能达到性能瓶颈。关键词提取理解有性能指标,验证性能测试目标验证系统的性能指标,是否为初期规划的预期目标客户指定相关性能指标,有性能相关要求,测试以这些指标为参

2022年贵州省职业院校技能大赛(高职组)“软件测试”赛项竞赛规程

2022年贵州省职业院校技能大赛(高职组)“软件测试”赛项竞赛规程一、赛项名称赛项名称:软件测试赛项组别:高职组赛项归属产业:电子信息二、竞赛目的(一)检验教学成效本赛项竞赛内容以《国家职业教育改革实施方案》为设计方针,以电子信息产业发展的人才需求为依据,以软件测试岗位真实工作过程为载体,全面检验高等职业院校人才培养方

由电阻电容采购引发的思考

BOM表,五花八门谁的锅,我的看法,设计原理图工程师的锅;成本太高,降成本谁的锅,设计工程师有一定责任,比如说22uf080525V就比同规格06031206等便宜采购物料品种怎么每次都不一样,维护成本高谁的锅,硬件主管的锅,没有维护好硬件库每次打板整理物料,核对物料那个痛苦啊!!!!!!自己做吧,太费时间!!!!!!

python+vue+elementui舞蹈教学视频评分系统_o4o1y

该系统从三个对象:由管理员、裁判员和用户来对系统进行设计构建。主要功能包括首页,个人中心,裁判员管理,用户管理,视频分类管理,健美操管理,评分管理,系统管理等功能进行管理。本系统在一般健美操评分系统的基础上增加了健美操资讯的功能,方便用户快速浏览,是一个高效的、动态的、交互友好的健美操评分系统。管理员端的功能主要是开放

短视频源码php

对于php短视频源码而言,视频质量与用户使用体验息息相关,高质量的视频观感更有利于留下用户。但实际上视频质量很容易受到各种因素的影响,接下来我们分析一下php短视频源码中导致视频出现异常的各种原因吧。所谓短视频源码的原生开发,是指在Android、IOS等移动平台上利用官方提供的开发语言、开发类库、开发工具进行App开

热文推荐