2024年最全Zabbix 源码解析之监控项数据采集流程_zabbix_agent 源码分析(3),2024年最新1-3年的软件测试开发工程师看过来

img
img

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化的资料的朋友,可以戳这里获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

(1)struct ZBXMETRIC

该结构体用于记录zabbix的监控项配置信息
在这里插入图片描述

(2) struct AGENTREQUEST

该结构体用于记录zabbix Agent的监控项请求信息
在这里插入图片描述
(3) struct AGENTRESULT

该结构体用于记录给zabbix Agent返回的采集数据
在这里插入图片描述

四、监控项vm.memory.size配置

用法: vm.memory.size[]

mode参数:

•total (*) - 总物理内存. mode的默认值

•free (*) - 可用内存.

•active - 内存当前使用或最近使用,它在RAM中是活跃的。

•inactive - 未使用内存.

•wired - 被标记为始终驻留在RAM中的内存,不会移动到磁盘。

•pinned - 同“wired”。

•anon - 与文件无关的内存(不能重新读取)。

•exec - 可执行代码,通常来自于一个(程序)文件。

•file - 缓存最近访问文件的目录。

•buffers (*) - 缓存磁盘读写数据。

•cached (*) - 缓存文件系统读写数据。

•shared - 可以同时被多个进程访问的内存。

•used (*) - 已使用内存。

•pused (*) - 已使用内存占总内存的百分比。

•available (*) - 可用内存

•pavailable (*) - 可用内存占总内存的百分比。

假如我们在某Host下定义了2个item:

Item1:Total memory Key1:vm.memory.size[total]

Item2:Available memory Key2:vm.memory.size[available]

这2个item就会被insert到Server数据库的items表中,这样该Host的Agent就可以获取到相应的采集任务了(获取流程本文不具体阐述),下面我们来重点看下vm.memory.size的采集实现和数据上送。
在这里插入图片描述

五、监控项vm.memory.size 采值实现

vm.memory.size监控项在不同的操作系统下实现各不相同,Linux系统下的实现,在src/libs/zbxsysinfo/linux/linux.c中。其配置项存放于parameters_specific数组中,可以看到对应的实现函数为VM_MEMORY_SIZE,
在这里插入图片描述
1. VM_MEMORYSIZE函数 (位置在:src/libs/zbxsysinfo/linux/memory.c)

用来接受参数,并对应调用对应的取值函数进行数据采集,并返回数据。

具体实现如下:
在这里插入图片描述
从源码中可以看到,Linux系统支持的模式包括如下参数,与官方文档中所列的参数不同。

•total

•free

•buffers

•used

•pused

•available

•pavailable

•shared

•cached

•active

•anon

•inactive

•slab

通过分析各个参数对应的取值逻辑,可分为2种方法:

•第一种:调用sysinfo函数获取指标值。通过这种方式获取的选项参数有:total,free,buffers,used,pused,pavailable,shared。

•第二种:读取/proc/meminfo文件中的指标值。通过这种方式获取的选项参数有:available,cached,active,anon,inactive,slab。

下面我们分别对两种情况进行分析。

(1)调用sysinfo函数

Linux中sysinfo()函数是用来获取系统相关统计信息的函数。它会将结果存储在struct sysinfo结构体中。
在这里插入图片描述
函数声明:

int sysinfo(struct sysinfo *info);

struct sysinfo的定义如下:
在这里插入图片描述
total,free,buffers,used,pused,pavailable,shared等指标,都是以struct sysinfo中的成员的取值来计算的。

• total:info.totalram * info.mem_unit

• free:info.freeram * info.mem_unit

• buffers:info.bufferram * info.mem_unit

• used:(info.totalram - info.freeram) * info.mem_unit

• pused:(info.totalram - info.freeram) / (double)info.totalram * 100

• pavailable:available / (info.totalram info.mem_unit) 100(available在/proc/meminfo文件中读出)

• shared:info.sharedram * info.mem_unit(仅Linux 2.4)

(2) 读取/proc/meminfo文件

该功能在VM_MEMORY_PROC_MEMINFO函数中实现。向meminfo_entry参数传递"Cached:", “Active:”, “AnonPages:”, “Inactive:”, "Slab:"字段。

其中available的获取比较特殊,它先检测/proc/meminfo文件文件中是否有"MemAvailable:"字段,如果没有,则再调用sysinfo函数获取。

具体实现如下:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

六、监控项vm.memory.size 数据上送

前面解析的监控项的采值逻辑,下面我们来分析数据从Agent端上送到Server的过程。

img
img
img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上软件测试知识点,真正体系化!

由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新

需要这份系统化的资料的朋友,可以戳这里获取

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上软件测试知识点,真正体系化!

由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新

需要这份系统化的资料的朋友,可以戳这里获取

  • 23
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值